nestjs 썸네일nestjs

2025-01-21

목차

  1. Python ORM 선택과 Django vs FastAPI
  2. Prisma와 TypeORM 마이그레이션 경험
  3. 자동화된 테스트와 TDD 활용
  4. AI와 개발자의 미래에 대한 대화
  5. JWT 토큰 관리와 Redis 활용법
  6. Kafka 장애 대응 및 Multi Schema 활용
  7. TypeScript ESLint 설정과 타입 체크 중요성
  8. Prisma에서 Date-Time 타입 처리 이슈
  9. 이직과 퇴사에 대한 경험과 조언
  10. Refresh Token 관리 및 다중 로그인 고려사항

1. Python ORM 선택과 Django vs FastAPI 🐍

  • Python에서 ORM(Object-Relational Mapping)으로 Django Model을 사용하는 경우가 많음.
  • Flask를 쓰려던 개발자도 장고 REST 프레임워크에 관심을 보임.
  • FastAPI를 추천하는 목소리도 많음. FastAPI는 빠르고 현대적인 비동기 지원 Python 웹 프레임워크.
  • ORM은 데이터베이스 작업을 객체지향적으로 다루게 해 코드 생산성을 올려주며, 프레임워크 선택에 따라 ORM 구현체도 다름.

2. Prisma와 TypeORM 마이그레이션 경험 🔄

  • TypeORM에서 Prisma로 마이그레이션시 어려움이 클 수 있음.
  • 단순히 entity나 모델 파일 형식 변환뿐 아니라, 프로젝트 전반적으로 손봐야 할 부분 많음.
  • 테스트 코드 유무가 큰 차이. 테스트가 없으면 대응하기 더 힘듬.
  • 만약 repository 패턴을 잘 활용했다면 상대적으로 수월할 수도 있음.
  • Prisma는 타입 안정성과 자동 마이그레이션 지원으로 인기, 그러나 초기 기존 코드 마이그레이션 시 고통스럽다는 의견 존재.

3. 자동화된 테스트와 TDD 활용 🧪

  • 테스트 코드를 손으로 작성하는 것이 시간과 노력이 많이 필요해, AI 에이전트를 활용해 자동으로 테스트를 생성, 실행하는 시도도 활발.
  • TDD(Test-Driven Development)의 본질은 사용자 관점에서 인터페이스와 사용성을 맞추는 데 의의가 있음.
  • 실제 개발에서는 로직 작성 후 나중에 테스트를 작성하는 경우 많아 TDD를 완전하게 지키기 어렵다는 의견 다수.
  • AI를 활용한 자동 테스트가 활발해지고 있으나 완전 대체는 아직 먼 미래라는 토론도 진행됨.

4. AI와 개발자의 미래 🤖

  • AI 기술 발전으로 일부 개발자 역할이 대체될 가능성에 대한 우려가 있음.
  • 하지만 AI는 고도의 사고나 고부가 가치 노동의 완전 대체는 아직 어려움.
  • AI 관련 비용(트레이닝 및 서빙)이 매우 높아서 비용 최적화가 핵심 과제로 남아있음.
  • 앞으로 다양한 수준의 AI 서비스 시장이 공존할 것으로 예상됨.
  • 엔비디아와 브로드컴 등의 하드웨어 업체가 AI 성능과 비용 최적화 경쟁 중.

5. JWT 토큰 관리와 Redis 활용 방법 🔐

  • JWT(Json Web Token)는 보통 서버 상태를 저장하지 않고 인증 정보를 자체적으로 담아 활용.
  • Redis 같은 인메모리 저장소에 JWT 토큰을 저장하는 경우는 액세스 토큰보다는 리프레시 토큰 관리에 집중함.
  • 리프레시 토큰은 탈취 시 만료가 어려워 서버에서 관리하는 경우가 많음.
  • 로그아웃 시 서버에서 토큰 상태를 저장해 강제 만료 처리하는 전략도 있음.
  • 멀티 디바이스나 다중 로그인 환경에서는 리프레시 토큰을 배열로 관리해야 하므로 구현이 복잡.
  • 일부는 하이브리드 방식(서버 저장 + 클라이언트 토큰)을 추천.

JWT 개념 소개

  • JWT는 사용자 인증 후 서버가 토큰을 발급하고, 클라이언트는 이 토큰으로 각 요청을 인증함.
  • 서버 부하를 줄이고 무상태(stateless) 인증을 가능하게 하지만, 토큰 탈취 시 위험.
  • 토큰 만료 시간 조절과 토큰을 검증하는 적절한 서버 전략이 필요함.

6. Kafka 장애 대응과 Multi Schema ✨

  • Kafka 장애 발생 시 DB를 Queue처럼 사용해 장애를 우회하는 fallback 전략을 일부 대형 서비스에서 사용.
  • Multi Schema는 하나의 프로젝트에서 여러 DB 스키마를 관리하는 기능으로, Prisma 공식 문서에 소개됨.
  • 이런 전략은 가용성 확보가 중요한 게임 서버 등에서 특히 중요.
  • 장애 데이터는 별도 DB에 임시 저장 후, 복구 시 원 DB에 재입력하는 방식으로 운영.

7. TypeScript ESLint 설정과 타입 체크 ✅

  • TypeScript 프로젝트에서 린트 설정은 필수.
  • 기본 stricttypecheck 설정만으로도 많은 타입 관련 오류를 잡을 수 있음.
  • 린트 설정은 프로젝트 성격에 맞게 수정하는 것이 중요하며, 타입 안정성을 높이는 데 도움.

8. Prisma Date-Time 타입 처리 이슈 📅

  • Prisma 모델에서 nullable과 날짜-시간 포맷 타입 지정에 주의 필요.
  • 예: startTime: null | (string & tags.Format<"date-time">) 처럼 타입이 혼재될 때 에러 발생 가능.
  • 관련 공식 문서와 마이그레이션 워크플로우(https://www.prisma.io/docs/orm/prisma-migrate/workflows/baselining) 참조 권장.

9. 이직과 퇴사 경험과 조언 💼

  • 이직은 매우 신중해야 하며, 감정적인 충동에 의한 결정은 후회하기 쉽다는 경험 공유.
  • 이직 초기 2주는 즐거울 수 있으나, 그 이후 불안감이나 후회를 겪는 경우 많음.
  • 주변 지인 조언이나 신뢰할 수 있는 정보 수집 후에 결정할 것 권장.

10. Refresh Token 관리 및 다중 로그인 고려사항 🔄

  • 다중 로그인이나 멀티 디바이스 대응 시 리프레시 토큰 관리가 매우 까다로움.
  • 리프레시 토큰을 배열 형태로 저장하고 관리해 다양한 케이스 처리 필요.
  • 일부 앱에서는 액세스 토큰과 리프레시 토큰을 분리하지 않고 단일 토큰만 사용하는 경우도 있음.
  • MSA(마이크로서비스 아키텍처) 환경에서는 서비스별 접근권한용 프레시/액세스 토큰을 분리 관리하는 사례도 있음.

면접팁⚡

  • Prisma와 TypeORM 차이점 및 마이그레이션 난이도: 실제 경험을 바탕으로 이야기하면 신뢰도 상승.
  • JWT 인증 및 Refresh Token 관리 전략: 어떤 방식이 언제 적합한지 이해하고, 단점과 대안을 설명할 수 있으면 유리.
  • TDD와 테스트 자동화에 대한 현실적인 고민: AI 테스트 자동화 트렌드 및 한계점을 함께 논하면 깊이 있는 인상.
  • Kafka 장애 대비 및 Multi Schema 활용 개념: 고가용성 시스템 설계에 관심이 있음을 보여줄 수 있음.
  • TypeScript 린트와 타입 안정성: 린트 설정을 어떻게 진행했는지, 팀 내 규칙 조율 경험도 활용 가능.

링크🔗

#Python#Django#FastAPI#Prisma#TypeORM#TDD#AI개발#JWT#Redis#Kafka#TypeScript#ESLint#퇴사#RefreshToken