#13 (MVC)

Angelo·2020년 7월 28일
0

Codestates  IM Javascript

목록 보기
10/13
post-thumbnail

MVC (Model-View-Controller)

  • 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴.
  1. model : 데이터와 비즈니스로직을 관리. 데이터를 가지고 있던지 아니면 데이터베이스와 연결이되어 데이터를 가져 올 수 있다. 뷰와는 직접 마주칠 일은 없다.
  2. View : 레이아웃과 화면을 처리
  3. 컨트롤러 : 명령을 모델과 뷰 부분으로 라우팅. 일반적으로 뷰에서 일어나는 액션과 이벤트에 대한 인풋 값을 받는다. 받은 값을 가공과정을 거친 후 모델에게 넘겨준다.
  • 주로 사용 하는 프레임워크 :
    Ruby on Rails(Ruby), Express(JS), Django(python), Flask(python), Anular(JS)

장점 :

  • 도메인(비즈니스) 로직과 UI 로직을 분리하여 유지보수를 독립적으로 수행하게끔 한다.
  • 3가지로 분리됨으로써 유지보수, 앱 확장, 유연성, 중복코딩문제점 또한 사라진다

단점 :

  • 하나의 Model이 다수의 view를 가질 수 있고 반대로 controller를 통해서 view 에 연결되는 model도 여러개가 될 수 있다. 복잡한 상황 발생 가능(의존성 때문)

  • pseudo code

http://yourapp.com/users/profile/1

/routes
	users/profile/:id = Users.getProfile(id)

/controllers
	class Users {
      function getProfile(id) {
        profile = this.UserModel.getProfile(id)
        
        renderView('users/profile', profile)
    	}
      
/models
	Class UserModel {
      function getProfile(id) {
        data = this.db.get('SELECT * FROM users WHERE id = id')
        return data;
      }
      
/views
      /users
      	/profile
      	<h1>{{profile.name}}</h1>
	<ul>
          <li>Email: {{profile.email}}</li>
          <li>Phone: {{profile.phoone}}</li>
	</ul>
      

Relational database

  • Relational database management system, RDBMS

  • 관계형 데이터베이스는 서로 상호 관련성을 가진 형태로 표현한 데이터를 칭한다.
    (oracle, microsoft SQL, MySQL 등) 테이블과 SQL로 이루어진다.

  • RDBMS의 특징으로는 ACID 성질, Atomicity(원자성), Consistency(일관성), Isolation(고립성), Durability(지속성) 을 가지고 있다. 이는 transaction 기능을 보장하기 위함이다.

*transaction : 일련의 작업들을 하나로 묶어서 취급, 하나의 작업이라도 실패 시 모두 실패

ORM

ORM, Object - Relational Mapping

  • 객체와 관계형 데이터베이스를 자동으로 mapping 해주는 기능

  • ORM을 이용해 SQL문이 아닌 객체의 형태로 데이터베이스에 삽입, 수정 가능

  • 효율적으로 테스트에 용이한 데이터베이스 작업이 가능해진다

  • 객체 지향 프로그램은 클래스를 사용하고, 관계형 DB는 테이블을 사용한다. 이 때 서로의 구조 간의 불일치가 발생. ORM을 활용하여 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 이러한 불일치를 해결

Sequelize

Sequelize의 모든것 링크

  • 프로미스 기반의 node.js ORM

  • 기본적으로 development, test, production 중 development 환경을 사용하고 있다. 환경 변경을 전환하려면 dotenv 또는 export NODE_ENV 를 통해 환경을 전환해 준다. 이는 각각의 환경에서 목적에 맞는 테스트를 돌리기 위함.

  • MySQL의 varchar 나 int 타입은 Sequlize에서 .STRING, .INTEGER 으로 정의 한다.

  • Migration : 파일 내부에는 데이터 베이스에 테이블을 만들기 위한 마이그레이션 코드가 단계별로 작성되어 있다.
    모든 스키마의 변경 사항을 관리하기 위해서 migration을 사용. 데이터베이스 스키마에 변경이 필요할때마다 마이그레이션 코드를 만들어서 진행하는것이다.

예시코드

profile
나만의 학습 노트

0개의 댓글