카테고리 없음

패스트캠퍼스 환급챌린지 14일차 : 코드팩토리의 백엔드 아카데미 : 한 번에 끝내는 NestJS 패키지 - 기초부터 MSA까지 강의 후기

Laftel 2025. 3. 18. 12:20
반응형

***본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
코드의 Responsibility 분리
컨트롤러에서는 들어오는 요청에 대한 프로세싱만 한다.
예를 들어, 쿼리,바디,파라미터가  잘 들어왔는지, 타입은 잘 됐는지
실제 받은 요청으로 로직을 실행을 하는 것은 서비스 코드에서 한다." 라고 정의되어 있는게 Nest.js의 아키텍쳐다
왜 이렇게 해야할까?
한 곳에 코드를 전부 다 몰아 넣으면 나중에는 유지보수가 정말 어려워진다.
만약, 요청에 대한 에러가 있을때 "이 요청이 지금 생기는 문제가 실제 요청을 프로세싱하는 도중에 생기는 건가?
아니면 로직, 우리가 서버에서 작성한 요청으로  무언가 작업하는  도중에 생긴건가? 바로 알아차리고 정확한 문제점에서
버그를 해결할수 가 있으려면 정리가 잘 돼 있어야 한다.
그래서, 기본적으로 컨트롤러에서는 요청 자체를 프로세싱하고  서비스한테 로직 권한을 넘긴다.

@Get()
getMovies(
  @Query('title') title?: string,
) {
  if (!title) {
    return this.movies;
  }
  return this.movies.filter(m => m.title.startsWith(title));
}

기존 코드의 문제점

  1. 컨트롤러가 비즈니스 로직을 직접 처리하고 있음
    • this.movies.filter()를 사용하여 데이터를 직접 필터링.
    • 컨트롤러는 원래 요청을 처리하고 서비스 계층에 위임해야 하는데, 현재 비즈니스 로직이 컨트롤러 내부에 포함되어 있음.
  2. 확장성이 떨어짐
    • 만약 movies 데이터가 데이터베이스(DB)에서 관리된다면, 컨트롤러 내부에서 this.movies 배열을 직접 다루는 것은 적절하지 않음.
    • 이후 movies 데이터를 DB에서 가져오거나 API를 확장할 경우 유지보수가 어려워짐.
@Get()
  getMovies(
    @Query('title') title?:string,
  ){
    return this.appService.getManyMovies(title);
  }

app.service.ts 파일

export interface Movie{
  id:number;
  title :string;
}
@Injectable()
export class AppService {
  private movies: Movie [] = [
    {id: 1,
    title:'해리포터',
   
    },
    {id: 2,
    title:'반지의제왕',
    }
  ];
  private idConunter =3;

  getManyMovies(title?: string){
    if(!title){
          return this.movies;
        }
    return this.movies.filter(m=>m.title.startsWith(title));
  }
}

변경 이유 및 개선된 점

  1. 컨트롤러의 역할을 단순화
    • 컨트롤러는 요청을 받고 서비스 계층(appService)에 위임하는 역할을 수행하도록 변경.
    • 이제 컨트롤러는 appService.getManyMovies(title)를 호출하고 그 결과를 반환함.
  2. 비즈니스 로직을 서비스 계층으로 분리
    • getManyMovies(title)를 AppService에서 정의하면, 데이터 조회 및 필터링 로직이 서비스 계층에 위치하게 됨.
    • 이 방식은 Separation of Concerns(관심사의 분리) 원칙을 따르는 것으로, 유지보수성이 향상됨.
  3. DB 연동 및 확장성 증가
    • 이후 movies 데이터를 데이터베이스(DB)에서 가져오는 방식으로 변경하더라도, 컨트롤러 코드를 수정할 필요 없이 서비스 계층만 수정하면 됨.
       
    •  


#패스트캠퍼스 #직장인자기계발 #직장인공부 #환급챌린지 #패스트캠퍼스후기 #오공완

https://bit.ly/4hTSJNB

반응형