본문 바로가기

Coding/내일배움캠프

[내일배움캠프] 3-Layered Architecture에 대한 이해 | Node.js 4기 TIL | Day 54 | 24.02.27.(화)

3-Layered Architecture

 

컨트롤러 (Controller)

 

  • 클라이언트의 요청(Request)을 받는다.
  • 요청에 대한 처리는 서비스에게 위임한다.
  • 클라이언트에게 응답(Response)을 반환한다.

 

서비스 (Service)

 

  • 사용자의 요구사항을 처리하는 실세 중에 실세!!!
  • DB 정보가 필요할 때는 Repository에게 요청한다.

 

저장소 (Repository)

 

  • 데이터베이스 관리 (연결, 해제, 자원 관리) 역할을 담당한다.
  • 데이터베이스의 CURD 작업을 처리한다.

 

 

 

 

Client/Router ↔️ Controller ↔️ Service ↔️ Repository ↔️ Database

 

  • user에서 사용한 함수를 controller에서 정의해준다.
  • controller에서 사용한 함수를 service에서 정의해준다.
  • service에서 사용한 함수를 repository에서 정의해준다.

 

  • user에서 필요한 경우 controller의 함수를 사용할 수 있다.
  • controller에서 필요한 경우 service의 함수를 사용할 수 있다.
  • repository에서 필요한 경우 repository의 함수를 사용할 수 있다.

 

[user]

 

  • users.router.js에서는 users.router.js에서 호출한 함수와,
    users.controller.js에서 정의한 함수 중 users.router.js에서 호출한 함수를 사용할 수 있다.
  • users.controller.js에서는 users.controller.js에서 호출한 함수와,
    users.service.js에서 정의한 함수 중 users.controller.js에서 호출한 함수를 사용할 수 있다.
  • users.service.js에서는 users.service.js에서 호출한 함수와,
    users.repository.js에서 정의한 함수 중 users.service.js에서 호출한 함수를 사용할 수 있다.
  • users.repository.js에서는 users.repository.js에서 호출한 함수와,
    prisma에서 정의한 모델이 갖는 함수 중 users.repository.js에서 호출한 함수를 사용할 수 있다.

 

users.router.js users.controller.js user.service.js user.repository.js prisma
usersController.signUp signUp 


usersService.createUser
createUser


usersRepository.createUser
findByEmail


prisma.users.findFirst
prisma.users.findFirst
usersController.signIn signIn


usersService.signInUser
signInUser


usersRepository.findByEmail 
createUser


prisma.$transaction


tx.users.create
$transaction


tx.users.create


tx.points.create
usersController.signOut signOut


usersService.signOutUser
signOutUser


usersRepository.updateToken
updateToken


prisma.users.update
users.update
usersController.myInfo myInfo


usersService.getUserById
getUserByID


usersRepository.findByIdWithPoint
findToken


prisma.users.findFirst
users.findFirst



findById


prisma.users.findFirst
users.findFirst



findByIdWithPoint


prisma.users.findFirst
users.findFirst

 

 

 

[restaurant/review]

 

restaurant.router.js restaurant.controller.js restaurant.service.js restaurant.repository.js prisma
restaurantController.setDeliveryStatusDone updateDeliveryStatus


restaurant.service.updateOrderStatus

updateDeliveryStatus


restaurant.service.updateStatus
updateStatus


~~~

restaurantController.orderMenu orderMenu



orderMenu


보류
보류
restaurantController.createReview createReview


restaurant.service.createReview
createReview


restaurant.service.newReview
newReview


~~~

restaurantController.getReviewList getReviewList



보류 보류
restaurantController.getReviewDetail getReviewDetail


restaurant.service.getReviewDetail
getReviewDetail


restaurant.service.findOneReview
findOneReview


restaurant.repository.함수명




restaurantController.updateReview updateReview


restaurant.service.updateReview
updateReview


restaurant.service.updateReview
updateReview


restaurant.repository.함수명

restaurantController.deleteReview deleteReview


restaurant.service.deleteReview
deleteReview


restaurant.service.deleteReview
deleteReview


restaurant.repository.함수명

 

 

——

 

ORM에 있는 테이블을 사용하는 것 ~

DB 테이블이라고 보는 것 ~

DB 테이블 ~ orderMenu를 꺼내오기 위한 메서드가 있어야 한다

 

Prisma 내장 함수 .. findFirst .. $transaction .. create .. 

 

Low Query

 

// 생성자 작성 필요

    // 테스트 하기 위해 이런 식으로 작성 ~

    // 의존성 주입을 위함 ~

    constructor(restaurantRepository) {

        this.restaurantRepository = restaurantsRepository;

    }

 

——

 

req.params, req.body, req.user

 

  • req.params | URL 경로에 포함된 파라미터
  • req.body | HTTP 요청 본문에 포함된 데이터
  • req.user | 로그인된 사용자 정보