nestjs 썸네일nestjs

2025-02-08

목차

  1. 객체지향 설계와 수정 용이성
  2. 임피던스 미스매치와 DB-도메인 매핑 이슈
  3. 서비스 간 순환참조 문제와 도메인 격리 방법
  4. JPA Entity와 Domain Entity 분리 논쟁
  5. NestJS 파일 업로드: Express vs Fastify
  6. 베란다 누수 및 하자 보수 비용 질문
  7. 기술 면접 팁⚡
  8. 공유된 링크🔗

1. 객체지향 설계와 수정 용이성

  • 설계의 핵심은 수정을 쉽게 하는 것임.
  • 코드를 짜는 것은 쉽지만 수정이 어렵다는 점이 설계 난관.
  • 비즈니스 로직에서 중복이 발생하기 쉬워 service 레이어를 분리해 함께 사용하는 경우가 많음.
  • 이로 인한 순환 참조 문제가 발생 가능.
  • 절차적 프로그래밍은 빠르게 개발 가능하나 장애 발생률이 높음.
  • 객체지향은 복잡하지만 장애 확률이 상대적으로 낮음.
  • 도메인 모델 구조
    • 서비스 레이어와 도메인 레이어를 나눔 → 서비스 레이어는 얇음.
    • 반면 트랜잭션 스크립트 방식은 두 레이어가 합쳐져 도메인 레이어가 두꺼워짐.

2. 임피던스 미스매치와 DB-도메인 매핑 이슈

  • 객체지향 프로그래밍의 큰 어려움 중 하나는 데이터베이스(DB)와 도메인 객체를 매핑하는 일임.
  • DB는 데이터를 중심으로 한 구조, 객체는 행위(behavior)를 중심으로 한 모델이라 차이가 큼.
  • 임피던스 미스매치란 이런 구조적 차이 때문에 매핑과 설계가 복잡해지는 현상을 뜻함.
  • 종종 한 테이블에 여러 객체가 매핑되거나, 하나의 객체가 여러 테이블과 대응되는 사례가 생김.
  • 다형성 구현이 어렵기도 함.
  • 설계 시 불가피하게 DB 관점에서 좋은 설계객체지향 관점에서 좋은 설계 중 하나를 선택해야 함.
    • DB 관점 설계: 객체와 테이블 1:1 매핑 쉽게 가능하지만, 객체지향 설계 유연성은 떨어짐.
    • 객체지향 설계: 비즈니스 로직에서 객체 중심으로 확장성 높지만 매핑 로직이 복잡해지고, 매퍼 클래스들이 많아짐.

3. 서비스 간 순환참조 문제와 도메인 격리 방법

  • User 서비스와 Post 서비스가 서로 호출하면 순환참조 문제 발생 우려.
  • 이를 완화하기 위한 방법으로는 다음과 같은 설계 기법들이 논의됨:
    • 파사드(Facade) 패턴: 여러 서비스를 감싸는 인터페이스를 두어 내부 구조를 숨김.
    • 이벤트 기반 아키텍처: 서비스 간 직접 호출 대신 이벤트를 통해 비동기적인 결합도를 낮춤.
    • Aggregator: 여러 서비스를 조합하거나 중간에서 조율하는 역할.
  • 도메인 간 격리를 위해 이벤트 사용을 권장하는 의견이 많음.

4. JPA Entity와 Domain Entity 분리 논쟁

  • JPA를 사용할 때 DB Entity와 도메인 Entity를 분리할지 여부가 논쟁거리임.
  • 조영호 강사님은 JPA Entity와 도메인 Entity를 분리하지 않고 Embeddable 기능을 활용한다고 함.
  • 장점과 단점
    • 분리하지 않으면 객체 수가 적어지고 관리가 편리함.
    • 하지만 DDD(Domain-Driven Design) 권장사항은 분리해서 비즈니스 도메인에 더 집중하는 것을 권함.
  • 회사 업무에서는 팀 간 조율로 달라지며, 개인 프로젝트에서는 주로 분리하는 편.
  • JPA 사용 시, 분리가 오히려 의미가 떨어지는 경우도 있음.
  • 초보 개발자는 우선 분리 개념 이해 후 팀 상황에 맞춰 적용하는 것을 추천.

5. NestJS 파일 업로드: Express vs Fastify

  • NestJS에서 파일 업로드 시 Express와 Fastify 중 선택 문제 발생.
  • 요점 정리
    • Express: 안정성이 오랫동안 증명되어 커뮤니티와 문서, 미들웨어가 풍부함.
    • Fastify: 더 가볍고 빠르며, 성능 지표가 뛰어남.
  • 단, Fastify는 대용량 파일 업로드 시 스트리밍 지원에 제한적이라는 지적이 있음.
    • Fastify는 메모리에 올려서 처리하는 방식이 기본이라 큰 파일 처리에는 주의 필요.
  • 실무에서는 presigned URL 방식으로 파일을 직접 스토리지에 업로드하는 방법 권장.
  • 성능 차이는 대체로 운영 비용으로 해결 가능하므로, 안정성 및 생태계 지원을 고려해 선택하는 것이 좋음.
  • 팀 사수와 협의 후 구축 환경과 요구사항에 맞춰 결정하는 것을 추천.

6. 베란다 누수 및 하자 보수 비용 질문

  • 자취방 베란다에서 물이 새어 얼음물 웅덩이가 생성된 상황 발생.
  • 비용 처리는 일반적으로 집주인이 부담하는 경우가 많음.
  • 하자 여부가 확인되면 집주인과 협의 후 수리 진행.
  • 누수 원인에 따라 보수 주체가 달라질 수 있으니 원인 확인이 중요.
  • 입주자는 보통 집주인에게 연락해 문제 해결을 요청해야 함.

7. 기술 면접 팁⚡

  • 객체지향과 절차지향 차이점 이해

    • 객체지향은 유지보수와 확장성에 유리하지만 설계와 구현이 복잡함.
    • 절차지향은 빠른 개발에 적합하나 장애 발생률과 중복 코드가 높음.
  • 임피던스 미스매치 설명

    • 왜 객체와 DB 설계가 다르고, 어떻게 접근해야 하는지.
    • ORM이 해결하는 문제와 어려움.
  • 서비스 간 결합도 낮추기

    • 순환참조가 왜 문제인지 설명.
    • 파사드, 이벤트, Aggregator 패턴 소개.
  • JPA Entity 분리 vs 비분리

    • 업무 환경과 개인 프로젝트에서의 차이점 이해.
    • Embeddable 활용 이유.
  • Express와 Fastify 비교

    • 안정성과 성능 중 선택 기준 설명.
    • 파일 업로드 구현시 고려사항.

8. 공유된 링크🔗

#객체지향#임피던스미스매치#JPA#NestJS#Fastify#Express#파일업로드#도메인모델#서비스격리#하자보수