목차
- 개발자 프로젝트 공유 및 소규모 프로젝트 경험
- TypeScript와 Prisma의 복잡한 타입 문제
- Swagger 및 API First Development 경험담
- NestJS 미들웨어 모듈별 적용 방법
- AI와 컴퓨터 기술에 관한 짧은 토론
- Mongoose Schema 확장 관련 질문
- IT업계 근무 환경과 이직 고민
- 레거시 시스템과 기술 스택 전환 이슈
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 활용 경험이 면접에서 플러스 요소
- 레거시 시스템 개선과 조직 내 갈등 해결 경험 관련 질문 대비
링크🔗
- Prisma Type Safety 문서
https://www.prisma.io/docs/orm/prisma-client/type-safety/operating-against-partial-structures-of-model-types - Prisma TypeScript 문제 재현 GitHub
https://github.com/jochongs/prisma-ts-problem - NestJS 미들웨어 공식 문서
https://docs.nestjs.com/middleware#applying-middleware - API First Development 관련 영상
https://www.youtube.com/watch?v=1sTYV1hbzVU
https://www.youtube.com/watch?v=I6zWGCI_BxM
#TypeScript#Prisma#NestJS#Swagger#API#미들웨어#Mongoose#레거시#개발프로젝트#개발자토론