[DB] ORM, MVC에 대해서
DataBase

[DB] ORM, MVC에 대해서

반응형

처음 배웠을 때 느낌은 SQL에 겨우 적응해서인지 SQL이 편한데 그냥 쓰면안되나? 라는생각이 들었지만, 과제실습을 진행하면서 왜 이것을 써야하는가에 대해 생각하고 구글링해서 이유를 찾으니 배우는 개념에 대한 이해도 좀 더 잘되고 존재의 편리함을 이해 했다. 역시 아는만큼 보이는건가 싶다.

솔직히 코드스테이츠에서 나온 자료에서 이것을 왜 쓰는지에 대한 설명이 많이 부족하다고 느낀다. 그냥 일단 할 수도 있지만 내 성격은 그런게 안되나 보다.. 그래서 검색을 하고 이유를 알고 나니 한결 나아졌고 그 내용도 더 추가해서 글을 쓰게 되었다.

 

MVC design pattern

 

MVC

MVC(Model-View-Controller)로 하나의 애플리케이션, 프로젝트를 구성할 때 그 구성요소를 세가지의 역할로 구분한 패턴입니다.

대표되는 UI와 비즈니스 로직, 그리고 모델을 분리하여 개발하는 소프트웨어 공학의 방법론 입니다.

 

서로 분리되어 각자의 역할에 집중할 수 있게끔하여 개발을 하고 그렇게 애플리케이션을 만든다면, 유지보수성, 애플리케이션의 확장성, 그리고 유연성이 증가하고, 중복코딩이라는 문제점 또한 사라지게 됩니다.

 

MVC 컨셉 사용하는 프레임 워크

 

데이터 베이스   <->   Model   <->   Controller   <->   View, client

 

Model - 데이터의 정보를 가지고 있거나, 데이터베이스와 연결이 되어 정보를 가지고 옴

 

애플리케이션의 정보, 데이타를 나타냅니다. 데이타베이스, 처음의 정의하는 상수, 초기화값, 변수 등을 뜻합니다. 또한 이러한 DATA, 정보들의 가공을 책임지는 컴포넌트를 말합니다. 

모델의 속성 중 텍스트 정보가 변경이 된다면, 이벤트를 발생시켜 누군가에게 전달해야 하며, 누군가 모델을 변경하도록 요청하는 이벤트를 보냈을 때 이를 수신할 수 있는 처리 방법을 구현해야 합니다. 또한 모델은 재사용가능해야 하며 다른 인터페이스에서도 변하지 않아야 합니다.

 

Controller - View와 Model 정보를 Model 또는 View에 주기 전 가공을 하여 전달함

 

데이터와 사용자인터페이스 요소들을 잇는 다리역할을 합니다.

즉, 사용자가 데이터를 클릭하고, 수정하는 것에 대한 "이벤트"들을 처리하는 부분을 뜻합니다.

 

View - 유저가 보는 화면

 

input 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 나타냅니다. 다시 말해 데이터 및 객체의 입력, 그리고 보여주는 출력을 담당합니다. 데이타를 기반으로 사용자들이 볼 수 있는 화면입니다.

 

그림을 코드로 작성 예시

 

 

 

ORM

ORM(Object-Relational Mapping)은 바로 Model을 기술하는 도구입니다. 객체(클래스)와 관계(관계형 데이터 베이스)와의 설정을 의미 합니다.

이를 통해 데이터베이스 세계와 프로그래밍 언어 사이의 개념의 간극을 줄여줍니다.

 

객체 지향 프로그래밍은 클래스를 사용하고 관계형 데이터 베이스는 테이블을 사용합니다. 여기서 객체 모델과 관계형 모델간에 불일치가 존재 하는데 이 객체간의 관계를 바탕으로 SQL을 자동 생성하여 불일치를 해결 하는 것이 ORM입니다.

 

객체와 관계형데이터베이스 관점을 같게 만드는 것

장점

객체 지향적 코드로 인해 더 직관적이고 비즈니스 로직에 집중할 수 있도록 도와준다.

  • CRUD을 위한 긴 SQL 문장을 작성할 필요가 없다. (쿼리작성은 필요)
  • 각 객체(Model)별로 코드를 작성하여 가독성을 높여 준다.
  • SQL의 절차적 접근이 아닌 객체적인 접근으로 생산성을 높여 준다.

 

재사용 및 유지보수의 편리성이 증가한다.

  • 매핑 정보가 명확하여, ERD를 보는 것에 대한 의존도를 낮출 수 있다.
  • ORM은 독립적으로 작성이 되어 있고 해당 객체들은 재사용이 가능 하다.

 

DBMS에 대한 종속성이 줄어든다. (종속성은 프로그램 구조가 데이터 구조에 영향을 받는 것을 의미)

  • 대부분의 ORM은 DB에 종속적이지 않다.
  • 개발자는 Object에 집중함으로 DBMS를 교체하는 극단적인 작업에도 비교적 적은 리스크와 시간이 소요된다.
  • 종속적이지 않다는 것은 구현 방법 뿐만 아니라 많은 솔루션에서 자료형 타입까지 유효하다.

 

단점

완벽한 ORM만으로는 구현하기가 어렵다.

  • 설계에는 매우 신중해야 한다.
  • 프로젝트의 복잡성이 높아질 경우 난이도 또한 올라갈 수 있다.
  • 잘못 구현된 경우 속도 저하 및 심한 경우 일관성이 무너지는 문제점이 생길 수 있다.

프로시저가 많은 시스템에서는 ORM의 객체 지향적인 장점을 활용하기 어렵다.

  • 이미 프로시저가 많은 시스템에서는 다시 객체로 바꿔야 하며, 그 과정에서 생산성 저하 혹은 리스크가 발생할 수 있다.

 

 

 

Sequelize (Node. js ORM)

 

Sequelize는 Node.js에서 가장많이 사용되고 있는 ORM이며 MySQL, PostgreSQL, MariaDB, SQLite, MSSQL을 지원합니다. 그 외에도 트랜잭션이나 relation, read replication등을 지원합니다. Sequelize의 가장 큰 특징은 Promise(비동기작업 제어방식)를 기본으로 지원 해준다는 점입니다.

  1. 복잡한 비동기 코드를 깔끔하고 쉽게 만들 수 있도록 합니다.
  2. Chaining을 통해 값을 전달하거나 연속된 일련의 작업을 처리 할 수 있습니다.
  3. Error handling에 대한 처리를 깔끔하게 할 수 있습니다.

다음과 같은 이유들로 Node.js를 사용하는 사람들은 Sequelize를 가장 많이 사용을 하며  Node.js에 가장 특화된 ORM 입니다.

Sequelize에 대한 내용은 다음 게시물에 작성하겠습니다.

반응형