nestjs 썸네일nestjs

2025-02-09

목차

  1. 개발자 프로젝트 공유 및 소규모 프로젝트 경험
  2. TypeScript와 Prisma의 복잡한 타입 문제
  3. Swagger 및 API First Development 경험담
  4. NestJS 미들웨어 모듈별 적용 방법
  5. AI와 컴퓨터 기술에 관한 짧은 토론
  6. Mongoose Schema 확장 관련 질문
  7. IT업계 근무 환경과 이직 고민
  8. 레거시 시스템과 기술 스택 전환 이슈

1. 개발자 프로젝트 공유 및 소규모 프로젝트 경험

  • 한 개발자가 세 개의 소규모 웹 프로젝트를 만들고 공유함
  • 첫 프로젝트는 가입자가 약 100명, 두 번째는 40명, 나머지는 거의 이용자가 없었음
  • 취미로 진행했지만 프로젝트 규모가 꽤 있음
  • 인원 제한적 게임성 때문에 활성 사용자 없이 조용한 상태임
  • 타 개발자들이 프로젝트 아이디어와 진행 상황에 관심을 보임

2. TypeScript와 Prisma의 복잡한 타입 문제

  • Prisma에서 select로 특정 필드를 선택해 API 응답 형태를 타입으로 정의할 때 어려움 발생
  • SelectLikedContentFieldPrisma 타입을 직접 사용 시 일부 선택하지 않은 필드가 에러 없이 통과되는 문제가 있음
  • 이 문제는 TypeScript의 **덕 타이핑(구조적 타이핑)**에서 비롯됨
    • 덕 타이핑이란 객체의 실제 타입보다 필요한 속성만 있으면 해당 타입으로 간주하는 특징
    • 그래서 빈 객체 타입({})도 타입 검사에서 예외가 발생하지 않는 경우가 있음
  • Prisma 공식 문서 예시대로 타입을 정의하면 일부 상황에서 타입 안전성이 부족해 에러를 감지하지 못함
  • 해결을 위해 직접 타입을 명확하게 선언하거나, Prisma의 GetPayload 타입 명시를 적극 사용해야 함
  • 관련 문제는 GitHub 레포에서 재현 및 테스트 가능
  • 타입스크립트와 prisma 사용 시, 반환 타입을 명확히 하고 select한 필드와 누락 필드를 꼼꼼히 점검해야 하는 점 강조됨

초보자용 설명:
TypeScript는 객체의 형태에 따라 타입 검사를 합니다. 예를 들어, 필요한 속성만 맞으면 타입이 통과합니다. 덕분에 반환 타입에 덜 엄격해질 수 있습니다. Prisma에서 부분 선택한 데이터 타입이 잘못 정의되면 예상치 못한 오류가 무시될 수도 있기 때문에, 타입 선언을 분명히 해줘야 버그를 막을 수 있습니다.

3. Swagger 및 API First Development 경험담

  • Swagger(또는 OpenAPI)는 API 문서화를 자동화하는 도구임
  • PHP, Java, Python 등 다양한 언어 환경에서 Swagger Codegen 도구를 사용해 컨트롤러, DTO 등을 자동 생성 가능
  • NestJS 환경에서는 nestia를 통해 Swagger 문서로부터 코드 생성 도구 사용 사례 언급됨
  • 다만, 실제 업무에서 Swagger 문서를 엄격히 관리하는 팀은 드물고, 빠른 API 생산에 더 초점을 두는 문화도 있음
  • API First Development는 먼저 API 명세서를 만들고, 이를 기반으로 개발을 진행하는 방법
  • 구글 Flex 같은 곳에서 API First 개발을 적극 도입하는 모습을 소개함
  • API 문서 관리에 어려움이 크고, 개발자가 API를 상상력으로 해석해 쓰는 경우도 있음

초보자용 설명:
Swagger는 API를 설계하고 문서화하는 표준 도구입니다. API First 방식은 코드를 만들기 전에 API 설계를 먼저 완벽하게 만드는 것을 말합니다. 여기서 문서가 곧 코드가 되어 개발 속도와 품질을 높일 수 있지만, 실제 회사마다 적용 강도는 크게 다릅니다.

4. NestJS 미들웨어 모듈별 적용 방법

  • NestJS에서 모듈별로 미들웨어를 다르게 적용하는 질문이 나옴
  • 일반적으로 NestJS 미들웨어는 configure 메소드를 사용해 특정 모듈(또는 라우트)에만 적용 가능
  • 공식 문서 NestJS Middleware를 참조하면 다음과 같은 방법 권장
    • AppModule에 여러 하위 모듈(PublicModule, ProtectModule, AdminModule 등) 존재 시
    • 각각 모듈 또는 경로에 미들웨어를 따로 등록하는 구조 사용 가능
    • 모듈별로 apply()를 선언해 맞춤형 미들웨어 적용 제어 가능

5. AI와 컴퓨터 기술에 관한 짧은 토론

  • AI 기술이 아직 바이오 컴퓨터 수준에 못 미친다는 의견 나옴
  • 바이오 컴퓨터는 물리적 불안정성으로 자주 멈추는 단점 지님
  • 향후 AI 관련 기술 발전 가능성과 현재 한계점 짚음
  • AI가 TypeScript 등 복잡한 타입 문제를 더 잘 해결할 수 있는지 기대하는 분위기

6. Mongoose Schema 확장 관련 질문

  • Mongoose에서 스키마 중복을 줄이고 PickType으로 확장시키는 방법 문의
  • Mongoose는 MongoDB ODM(Object Data Modeling)으로 스키마 설계 시 반복 요소 처리 중요
  • 공식적으로 schema 확장과 타입 조작을 위해 믹스인 패턴이나 Schema 상속 사용하도록 권장
  • PickType은 NestJS GraphQL에서 주로 사용하나, Mongoose와 직접 호환은 다소 제한적임
  • 따라서 스키마 확장은 믹스인이나 composition 방식을 고려해야 함

7. IT업계 근무 환경과 이직 고민

  • FE/BE 직군별 1년 내 퇴사율이 60%에 달하는 것으로 추정됨
  • 대기업에선 오래 다니는 직원 희망하지만, 기술 변화와 레거시 문제 등으로 고민 많음
  • 레거시 개선 제안이 윗선에서 거부되는 상황 공유
  • 신기술(코틀린, 파이썬 등) 도입 후 기존 시스템과의 격차와 낚시줄 비유로 힘든 상황 토로
  • DB 테이블 네이밍에 날짜가 포함된 환경 등 현실적인 문제 사례 공유

8. 레거시 시스템과 기술 스택 전환 이슈

  • 신규 입사자가 코틀린을 기대했으나 파이썬 중심 레거시 환경에 적응하는 상황
  • 대규모 레거시 개선에 대한 조직 차원의 저항 언급
  • 현실적으로 문제가 터져도 계속 굴러가게끔 운영하는 문화 존재
  • 개발자의 기술 스택 변경 시 현실적 난관과 조직 문화 충돌 경험 이야기

면접팁⚡

  • TypeScript 타입 안전성 이슈 사례를 이해하고 답변할 것
    • 예: 덕 타이핑으로 인한 타입 누락 오류 방지법 질문 대비
  • NestJS 미들웨어 적용 경험과 모듈 구조 이해력 강조
    • 모듈별 미들웨어 구분 방법과 적용 흐름 설명 가능해야 함
  • API First Development 및 Swagger 활용 경험이 면접에서 플러스 요소
  • 레거시 시스템 개선과 조직 내 갈등 해결 경험 관련 질문 대비

링크🔗

#TypeScript#Prisma#NestJS#Swagger#API#미들웨어#Mongoose#레거시#개발프로젝트#개발자토론