본문 바로가기

개념정리

10/26[TIL]MVC Patterns & ORM

MVC(Model View Controller)

 

MVC(Model View Controller)는 소프트웨어가 돌아가는 방식에 대한 하나의 패턴이라고 보면 된다. 쉽게 말해 개발자가 개발할 때 개발하는 패턴이 여러 가지가 있는데 그중 하나인 것이다.

개발할 때, 3가지 형태(Model View Controller)로 역할을 나누어 개발하는 방법론으로 비즈니스 처리 로직과 사용자 인터페이스 요소들을 분리시켜 서로 영향 없이 개발 하기 수월하다는 장점을 가지며 이를 통해 코드 가독성 및 관리성 향상 또한 이루어진다고 볼 수 있다.

 

Model(무엇)

데이터의 정보를 가지고 있으며 DB 연결을 통해 데이터를 가져 올 수 있다. 그리고 controller와의 주로 커뮤니케이션을 하며 view와는 커뮤니케이션은 잘 없다. ORM과 직접적인 소통을 하는 경우이다.

 

View(“무엇” 인가를 “보여주기 위한 역할”)

유저가 보는 화면을 보여주게 하는 역할 html, css 같은 느낌이라고 보면 될 것 같다. controller와의 주로 커뮤니케이션을 하며 model과 DB와는 교류가 없다. data를 받으면 화면을 구성한다.

 

Controller(어떻게)

view에 이루어지는 여러 액션의 input을 받으며 받은 값들을 model에 주기 전에 일련의 가공 과정을 거친다 그리고 그 가공된 data들을 model에 전달해 주는 역할을 한다. 그럼 model은 controller에게 요청했던 data를 다시 반환해준다. 그럼 controller는 그 data를 view가 이 data를 알아들을 수 있게 다시 가공 과정을 거친 후 view에게 다시 반환해 준다. 그리고 ORM의 메소드를 사용할 수는 있지만 필드와 객체 간의 관계를 설정하지는 않는다.

 

Router

url과 controller를 연결한다.

(다른 url 인데, 동일한 controller를 참조할 수 있기에)

 

 

출처 : https://upload.wikimedia.org/wikipedia/commons/thumb/5/53/Router-MVC-DB.svg/1280px-Router-MVC-DB.svg.png

 

ORM(Object Relational Mapping)

RDB에 있는 엔티티, 레코드 등에 접근할 때 js에 있는 개체, 클래스들을 취급하는 것처럼 다룰 수 있게 해주는 기능이며 즉, 객체와 모델 사이의 관계라고 보면 될 것 같다. join 테이블 관계에선 객체지향에서는 배열로 표기해주며 접근 방법 자체를 프로그래밍 언어 관점에서 맞출 수 있도록 도와 주는것이다. sql문이 없이도 DB에 접근 가능하게 해준다.

 

시퀄 라이즈(promise 기반의 node.js ORM)

시퀄 라이즈는 자바스크립트 객체와 데이터베이스의 릴레이션을 매핑해주는 도구이다. 시퀄라이즈는 자바스크립트 구문을 알아서 SQL로 변환해주어서 좀 더 의존성이 낮은 프로그래밍을 할 수 있도록 도와준다. 또한 어느 정도 문법이 호환되므로 MySQL 뿐만 아니라, MariaDB, PostgreSQL, SQLite 등 다른 데이터베이스로 전환이 비교적 자유롭다.

 id 값은 자동으로 생성해주며 updatedAt, createdAt 필드(새 레코드가 언제 생성/ 수정되었는지 때문에 생성하는 필드들) 들도 자동 생성된다. 물론 불필요한 부분 같은 경우 우리가 막아 놓고 사용하는 것도 가능하다

 

출처 : https://miro.medium.com/max/700/0*CzE1_rn0FyFjRJW4.jpg

 

association

ORM을 통해서 조인 테이블 구현

1:1 1:M M:N을 표현하는 다른 접근방법

 

transaction

하나하나 쿼리의 조합을 하나의 작업 단위로 보고 중간에 문제가 생겼을 시에 롤백 혹은 성공했을 시 커밋해주는 것



처음에 SQL 문을 배웠을 때는 이 문법 들을 보면서 언제 다 이걸 외워가며 써야 하는건 아닌가 조바심도 들고 했긴 했지만 오늘 배웠던 부분을 되새기면서 이렇게 편한 방법도 있구나 하는 생각도 들었다... 하지만 이 것도 적응하기 위해선 많은 시간과 노력이 필요할 것 같다. 개발자의 직군이 왜 계속 끊임없이 공부하여야 하는지 점점 와 닿는 것 같다.

'개념정리' 카테고리의 다른 글

10/30 [TIL] OAuth 2.0  (0) 2020.10.30
10/28[TIL]Authentication  (0) 2020.10.28
10/21[TIL]Database  (0) 2020.10.21
10/19[TIL]Routing  (0) 2020.10.21
10/7[TIL]React (2) & 모듈  (0) 2020.10.07