nestjs 썸네일nestjs

2025-02-10

목차

  1. PHP와 NestJS 개발자 채용 고민
  2. UUID, PK, 성능 이슈 및 데이터베이스 설계
  3. DDD와 ID 관리 방법론
  4. Cursor Pagination과 UUID 문제
  5. 코드 리팩토링과 조직 문화 고민
  6. 리눅스 숙련도와 업무 환경
  7. 테스트 도구 vitest 성능 이슈
  8. 디자인 패턴과 자료 공유
  9. 무료 개발자 대상 이벤트 안내
  10. Prisma enum과 관련 이슈

1. PHP와 NestJS 개발자 채용 고민

  • 회사에서 PHP와 NestJS 기반 백엔드 개발자를 찾고 있음.
  • PHP 개발자 인력 풀이 좁고, 좋은 PHP 개발자는 대부분 다른 언어로 이직한 상태.
  • NestJS 개발자 플러스 PHP도 어느 정도 다룰 수 있는 복합능력자가 이상적이라는 의견.
  • 채용공고는 상세하게 작성하고, 고연봉 조건을 명시하는 것이 좋은 인재를 끌어들이는 팁.
  • 기술 면접은 개발자가 직접 보는 것이 적합성 판단에 효과적임.
  • PHP에 대한 부정적 시각도 있었으나, 여전히 일부 기업에서 Laravel 같은 프레임워크로 유지 중.

2. UUID, PK, 성능 이슈 및 데이터베이스 설계

  • 외부 노출용 ID로 UUID를 쓰고, 내부 조인용은 정수형 ID를 병행하는 사례 존재.
  • MySQL에서는 UUID를 PK로 쓰면 인덱스 리인덱싱, 캐시 미스 등 성능 이슈가 생김.
  • PostgreSQL은 UUID PK 사용시 리인덱싱 문제 없이 더 나은 성능을 기대할 수 있음.
  • UUIDv7은 시간 기반 시퀀셜 UUID로 MySQL과 PostgreSQL 모두에서 성능 향상 가능성 있음.
  • PK와 UUID를 함께 사용하는 설계는 보안 및 성능 측면에서 최선책이나, 완벽한 해결책은 아님.
    (PK: Primary Key, UUID: Universally Unique Identifier)

UUID 설명

UUID는 전세계적으로 유일한 식별자를 생성하는 표준 방식임. 일반적으로 128비트 숫자이며, 시스템 충돌 없이 데이터베이스나 API에서 객체를 식별할 수 있도록 함.
UUIDv7은 새롭게 제안된 UUID 버전으로, 시간을 기반으로 생성되어 순차적 특성을 가짐. 이는 데이터베이스 인덱스 관리와 성능 최적화에 유리함.

3. DDD와 ID 관리 방법론

  • DDD(Domain-Driven Design)에서는 ID 관리가 중요한 설계 요소임.
  • ID가 nullable이 되는 상황을 피하기 위해, 생성 도메인과 조회 도메인을 분리하기도 함.
  • 객체지향 설계에서는 nullable ID를 객체 책임으로 관리하는 경우도 있음.
  • 실무에서는 ID를 서버에서 생성하여 일관성 유지 권장.
  • 조회용 DTO는 데이터 표현에 집중하고, 로직은 서비스나 매핑 레이어에서 처리.

DDD 설명

DDD는 복잡한 도메인 로직을 소프트웨어에 깔끔하게 녹여내는 설계 방법론. 도메인 개념, 엔티티, 값 객체 등을 명확히 구분하고, 비즈니스 로직을 도메인 모델 중심으로 구현한다.
ID 관리도 중요한 부분으로, 도메인 객체의 유일성 확보와 변하지 않는 식별자 역할이 중요함.

4. Cursor Pagination과 UUID 문제

  • 일반 UUID는 순서가 랜덤이라 Cursor Pagination 구현이 까다로움.
  • UUIDv7, ULID 등 시간 순서 반영 UUID는 Cursor Pagination에 적합.
  • 한계점으로는 같은 밀리초 단위에 여러 UUID가 생성될 경우 정렬 문제 발생 가능.
  • 이런 문제는 부가 컬럼 추가로 보완할 수 있음.

Cursor Pagination 설명

Cursor Pagination은 데이터의 특정 위치(커서)부터 다음 데이터를 불러오는 페이징 방식임. 일반적인 오프셋 기반 페이징보다 성능과 확장성이 뛰어남.
순차적 ID를 사용하는 것이 구현과 성능에 유리함.

5. 코드 리팩토링과 조직 문화 고민

  • 코드 리팩토링은 점진적이고 사소한 변화부터 시작하는 것이 현실적.
  • 대규모 리팩토링 시 컨플릭트나 협업 이슈가 많아 어려움 존재.
  • 조직 문화나 리더십에 따라 리팩토링 시도에 제약이 클 수 있음.
  • 리뷰 프로세스가 엄격하거나 비효율적일 경우 개발자가 의욕을 잃을 수 있음.
  • 좋은 조직은 문제 해결 의지가 강하고, 개선을 장려하는 분위기가 있다.

6. 리눅스 숙련도와 업무 환경

  • 리눅스 숙련도는 상황에 따라 요구 수준 다름.
  • 기본 명령어(df, top, history, vim)에서부터 서버 셋업, 권한 관리, 쉘 스크립트 작성까지 다양함.
  • 최근에는 컨테이너 기반 배포가 많아 직접 리눅스 서버 접근이 줄어드는 추세.
  • CI/CD 및 자동화 도구 활용이 일반적임.
  • 폐쇄망 환경에서는 리눅스 다루는 기술이 더 빠르게 늘 수 있음.

7. 테스트 도구 vitest 성능 이슈

  • 초기의 vitest는 매우 빠르게 평가 받았으나, 최근 버전업 이후 속도가 다소 느려진 느낌.
  • 원인으로는 플러그인 추가 및 테스트 스위트 확장 등이 거론됨.
  • 실제 체감 성능은 환경 및 테스트 규모에 따라 다름.
  • 일부는 수정중인 파일만 테스트하는 방식으로 성능 최적화를 권장.

8. 디자인 패턴과 자료 공유

9. 무료 개발자 대상 이벤트 안내

  • 헬스케어 창업 관련 무료 네트워킹 및 교육 프로그램 소개.
  • 의료 · 바이오 · 헬스케어 분야 예비 창업가 대상.
  • 일정 일부 선택 참여 가능.
  • 신청 링크: https://forms.gle/S3ECuX9fuWbgHrSc8

10. Prisma enum과 관련 이슈

  • Prisma ORM에서 enum 타입 사용 시 수정, 삭제, 추가에 불편함을 느끼는 경험 공유.
  • enum 대신 문자열(String) 타입 사용을 고려하는 의견 다수.
  • Prisma 활용 시 enum 관련 전략과 트레이드오프를 사전에 확인하는 것이 좋음.

면접팁⚡

  • 기술 면접에서는 반드시 해당 기술 스택을 직접 다루는 개발자가 후보자를 평가하는 것이 중요.
  • PHP와 NestJS 같은 혼합 스택을 요구하는 역할은 각각의 기술 배경을 정확히 파악하고 질문 준비할 것.
  • 성능 이슈 관련 질문(특히 UUID vs auto increment PK)도 현업에서 자주 나오는 주제임.
  • DDD 관련 질문 시, ID와 도메인 객체 관리 방식, nullable 처리 전략 등을 구체적으로 답변할 수 있도록 준비.
  • Cursor Pagination 구현 경험 여부와 UUID 사용 경험도 최신 백엔드 면접에서 평가 요소.

링크🔗

#채용#NestJS#PHP#UUID#UUIDv7#DDD#리팩토링#리눅스#테스트자동화#Prisma