4번째, 프로젝트 리펙토링 : 3계층 나누기

이정기·2023년 2월 17일
0

TIL

목록 보기
47/71
post-thumbnail

4번째 프로젝트 리펙토링을 했다.

Language: Node.js,
Framework: Express.js
ORM: sequelize

시간 부족으로 적용 못한 것들

3계층, 소켓, 타입스크립트 적용, 쇼셜 로그인 API, 페이지네이션

이제까지 마무리한 작업들

3계층을 나누기 전 API를 수정

수정 전

수정 후

  • 로그아웃 API 삭제
    로그아웃은 프론트단에서 처리해 서버에서 하는 일을 줄여줬다.
  • URL 수정
    /api/user/admin/edit/:userId 와 같이 메소드를 한번더 정의한다던가, 주체를 줄였다.
    -> /api/user/:userId

레이어드 아키텍쳐 이해 및 controllers, services, repositories 만들기

router 폴더에 담은 api 들을 계층별 폴더를 만들어 코드들을 정리해 나갔다.

user.routers.js 
router.get('/list', userController.getUsers);
//컨트롤러와 연결

class UserController {
//UserService 클래스를 컨트롤러 클래스의 맴버 변수로 할당
  userService = new UserService();
  
// 맴버변수로 정의한 UserService 에서 메소드를 실행

    getUsers = async (req, res, next) => {
    const allUsers = await this.userService.allUsers();
// 컨트롤러에서는 하위 계층이 어떠한 내부 구조를 가지고 있는지 신경쓰지 않고, 외부에 드러나 있는 메소드를 호출하기만 한다. 이것이 가능한 이유는 추상화(Absctraction)의 특성 덕분
    res.status(200).json({ allUsers });
  };
};
  • 라우터와 컨트롤러도 연결 하고, 컨트롤러 안에서 서비스 클래스를 컨트롤러 클랙스의 맴버 변수로 할당해 메소를 실행해준다.

사용했던 HTTP Status

일반적으로 성공했을 때
status 200
수정을 성공했을 때(회원가입 이거나 수정)
status 201
에러 났을 때
status 400

계속 진행중

이미 구현한 라우터를 분리하려니 새로운 함수 이름도 정의해주어야 하고, 왔다 갔다 하며 코드를 수정하다보니 user CRUD 에 대한 로직을 이해하는데 도움도 됐다.

profile
Node.js 로 꿈을 꾸었다..

0개의 댓글