본문 바로가기
카테고리 없음

WIL (2023/9/10) Sunday

by 0to1ton 2023. 9. 10.
  • 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 등의 강력한 도구를 사용 가능
          • 확장성이 좋음
  • 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 출력하는 방법 
  •