- controller, service, repository 모델로 게시물 파일 refacotoring
- 아래와 같은 순서로 작동
- Client
- app.js
- routes > index.js
- routes > posts.router.js
- posts.controller.js
- posts.service.js
- posts.repository.js
- DB
- 아래와 같은 순서로 작동


- ORM (Object Relational Mapping) 객체 관계 매핑
- 객체와 데이터베이스의 관계를 매핑해주는 도구
- 프로그래밍 언어의 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 도구
- 프로그래밍 언어의 객체와 관계형 데이터베이스 사이의 중계자 역할을 하는 도구
- Prisma, Sequelize, TypeORM
- Prisma (출처: https://eun-jeong.tistory.com/31)
- Prisma의 특징은 GraphQL스키마를 기반으로 DB를 자동생성 해준다는 것 (*GraphQL? facebook에서 만든 Graph Query Language로 애플리케이션 Query 언어로써 기존의 REST API의 한계점을 극복하고자 나온 통신 규약으로 REST API를 대체할 수 있다.) GraphQL의 장점은 아래와 같다.
- 요청메세지가 값이 없는 JSON과 비슷하며 받는 데이터는 JSON형태 이다.
- 단일요청으로 원하는 데이터를 한번에 가져오는 것 가능
- type system을 지원
- GraphiQL 등의 강력한 도구를 사용 가능
- 확장성이 좋음
- Prisma의 특징은 GraphQL스키마를 기반으로 DB를 자동생성 해준다는 것 (*GraphQL? facebook에서 만든 Graph Query Language로 애플리케이션 Query 언어로써 기존의 REST API의 한계점을 극복하고자 나온 통신 규약으로 REST API를 대체할 수 있다.) GraphQL의 장점은 아래와 같다.
- Prisma (출처: https://eun-jeong.tistory.com/31)
- ORM 이용하는 이유
- 객체 지향 프로그래밍은 클래스를 이용, 관계형 데이터 베이스는 테이블을 이용하는데 객체 모델과 관계형 모델 간의 불일치가 생길 수 있다.
- ORM을 이용해서
- 데이터 베이스 접근을 프로그래밍 언어의 관점에서 맞출 수 있다.
- 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결
- SQL을 직접 작성하지 않고 엔티티를 객체로 표현 가능
- 객체를 통해 간점적으로 데이터베이스를 다룰 수 잇음
- ORM의 장점
- 직관적인 코드 (가독성) + 비즈니스 로직 집중 가능(생산성)
- ORM을 이용하면 SQL Query가 아닌 메서드로 데이터 조작 가능
- 객체 모델로 프로그래밍하는 것에 더 집중할 수 있다
- SQL의 절차적이고 순차적인 접근이 아닌 객체 지향적 접근 가능
- 재사용/유지보수 편리성 증가
- 디자인 패턴을 견고하게 만드는데 도움을 줌 -> 독립적으로 작성되었고 해당 객체들을 재활용할 수 있기 때문
- DBMS에 대한 종속성 저하
- 대부분의 ORM 솔루션은 DB에 종속적이지 않다.
- 직관적인 코드 (가독성) + 비즈니스 로직 집중 가능(생산성)
- ORM 단점
- ORM 만으로는 서비스 구현이 어려움
- 사용은 편하지만 설계는 매우 신중하게 해야하고 복잡성이 커질수록 관리의 난이도가 높아짐
- 잘못 구현된 경우 속도 저하, 일관성이 무너지는 문제점이 생길 수 있다
- 직접 짜여진 SQL쿼리보다 속도가 떨어진다 -> 튜닝이 필요할수도 있다
- 프로그래밍 타입
- 구조적 프로그래밍
- OOP (객체 지향 프로그래밍)
- 함수형 프로그래밍
- 객체지향 프로그래밍의 핵심원칙
- 캡슐화
- 상속
- 추상화
- 다형성
- 객체지향 설계 5원칙
- 단일 책임의 원칙 (Single Responsibility Principle, SRP)
- 개방-폐쇄 원칙 (Open-Closed Principle, OCP)
- 리스코프 치환 원칙 (Liskov substitution principle, LSP)
- 인터페이스 분리 원칙 (Interface segregation principle, ISP)
- 의존성 역전 원칙 (Dependency Inversion Principle, DIP)
- Layered architecture pattern
- Controller
- Service
- Repository
Prisma
Prisma의 특징은 GraphQL스키마를 기반으로 DB를 자동생성 해준다는 것이다. (*GraphQL? facebook에서 만든 Graph Query Language로 애플리케이션 Query 언어로써 기존의 REST API의 한계점을 극복하고자 나온 통신 규약으로 REST API를 대체할 수 있다.) GraphQL의 장점은 아래와 같다.
1) 요청메세지가 값이 없는 JSON과 비슷하며 받는 데이터는 JSON형태 이다.
2) 단일요청으로 원하는 데이터를 한번에 가져올 수 있다.
3) type system을 지원한다.
4) GraphiQL 등의 강력한 도구를 사용 할 수 있다.
5) 확장성이 좋다.
- 인증, 인가
- 단방향 암호화
- bcrypt 암호화, 복호화
- Access token validate API 구현
- 단방향 암호화
- transaction
- ACID: atomicity, consistency, isolation, durability
- lock: read lock, shared lock, locking level, isolation level, uncommited read, phantom read
- express-session
- jwt보다 쉽게 구현 가능
- express-mysql-session 을 이용해서 외부스토리지 세팅이 가능. 서버 리로드했을 때 세션이 날라가는데 이걸 mysql에 저장하는 것을 방지해줌 -> 이 부분을 개선하기 위해 redis를 사용
- refresh token 을 이용한 access token 재발급 API 구현
- Lv3 과제
- Joi - validate하면서 다양하게 error message 출력하는 방법