목차
- ULID와 UUID의 활용과 이슈
- NestJS 내부 구조와 데코레이터 구현
- SSE(Server-Sent Events)의 개념과 NestJS 적용
- 타입스크립트에서의 any 타입 문제와 관리법
- 레거시 코드와 기술 부채, 그리고 개선 문화
- 모니터링 시스템과 저비용 솔루션 추천
- 크롤링 시 차단 문제와 해결 방법
- 기타 툴 및 서비스 추천
- 개발자의 심리와 업무 환경에 관한 토론
1. ULID와 UUID의 활용과 이슈 🎯
- ULID란?
ULID(Universally Unique Lexicographically Sortable Identifier)는 시간순으로 정렬 가능한 고유 식별자이다. UUID와 비교해 순차 발행 특성이 있어 데이터베이스에서 성능상 이점이 있음. - UUID 버전 체크 불가
UUID는 버전 정보를 포함하지만, ULID를 UUID로 변환 시 버전 체크가 어려워진다는 이슈가 있음. - Monotomic과 시드타임
Monotomic 방식은 단일 서버 환경에 적합하며, 시드타임은 같은 ULID를 순차적으로 생성하는 방법으로 상황에 따라 선택 가능.
2. NestJS 내부 구조와 데코레이터 구현 🧱
- NestJS 소스코드는 공개되어 있어 깃허브(https://github.com/nestjs/nest)에서 확인 가능
- 데코레이터는 어떻게 작동하는가?
- 런타임에 메타데이터를 주입하고, 이를 통해 의존성 주입(DI)을 구현함.
- @Injectable 같은 데코레이터는 클래스의 메타데이터를 지정해 런타임에 사용할 수 있게 함.
- SSE 데코레이터(@Sse) 구현 방식
- Reflect API를 이용해 HTTP 경로, 메서드, SSE 관련 메타데이터를 메서드에 붙임.
- 리턴 타입은 RxJS의 Observable로 간주되어 이벤트 스트림을 관리함.
- NestJS는 코드 품질 면에서 any 타입과 mutable 코드 사용을 많이 하는 편이며, 타입 추론이 어렵게 만드는 부분이 있음.
3. SSE(Server-Sent Events)의 개념과 NestJS 적용 🔄
- SSE란?
서버가 클라이언트에게 단방향 스트림 데이터를 보내는 기술로, 클라이언트가 서버에 연결을 유지하며 실시간 데이터를 받는 방식. - SSE vs 롱풀링(Polling)
롱풀링은 클라이언트가 주기적으로 서버에 요청하지만 SSE는 서버가 이벤트를 지속적으로 전송함. 차이점 이해가 필수. - NestJS에서 SSE 사용법
@Sse 데코레이터를 붙인 메서드가 Observable을 반환하면 HTTP 헤더와 함께 실시간 이벤트 스트림으로 전달됨.
4. 타입스크립트에서 any 타입 문제와 관리법 ⚠️
- any는 타입스크립트에서 "어떤 타입이든 가능"함을 의미
- 문제점
- 타입 안전성을 포기하게 하고, 협업 시 코드 품질이 떨어질 수 있음.
- any가 전염병처럼 번지는 경우도 있어 관리가 어려움.
- 이유
- 초기 타입스크립트 버전과 호환을 위해서도 많이 쓰였고 마이그레이션 과정에서 임시땜빵용으로 사용됨.
- 타입 추론이 어려운 데코레이터 구현체에서 생기기도 함.
- 관리 팁
- 린트 툴(ESLint)을 활용해 any 사용 제한 가능.
- 신규 프로젝트는 strict 모드를 켜고 타입 체크 엄격하게 하여 방지 권장.
- any 사용을 줄이면서 점진적으로 타입 개선을 시도하는 것이 좋음.
5. 레거시 코드와 기술 부채, 그리고 개선 문화 🏚️➡️🏗️
- 레거시 코드는 오래된 시스템이지만, 문제가 되는 것은 유지보수 어려움과 신뢰 문제
- 기술 부채는 체계적으로 관리하지 않으면 점점 누적되어 대규모 리팩토링을 요구하게 됨.
- 개발 문화
- 지속적 개선과 리팩토링을 습관화해야 하며, 새로운 기능 추가 시 항상 코드 질 개선을 병행하는 것이 중요.
- 잦은 개발자 교체와 지식 전수 미흡이 문제 악화 요인.
- 비유적 표현
- “식도에 똥구멍 붙이기” 같은 비유로, 엉성한 구조가 누적되면 원래 코드 파악도 어려워짐.
- 해결 방법
- 개선 시간 및 인력 확보, 최신 기술 도입, 코드 리뷰 문화 강화 필수.
6. 모니터링 시스템과 저비용 솔루션 추천 🛠️
- 요구사항
- API 응답 모니터링, 전체 레이턴시 체크, 커스텀 스팬 생성 등.
- 추천 오픈소스 툴
- OpenZipkin, OpenTelemetry: 분산 추적 및 모니터링 위한 표준 오픈소스.
- Grafana: 시각화 대시보드. 직접 세팅 필요.
- 상용 솔루션 비교
- New Relic, Datadog, 와탭, 제니퍼소프트 등이 있으나 가격 문제 존재.
- 비용과 개발자 공수 사이에서 트레이드오프 고려 필요.
- 기타 도구
- pm2.io, Sentry: 프로세스 매니징, 에러 모니터링에 유용.
7. 크롤링 시 차단 문제와 해결 방법 🕷️
- 문제점
- 특정 사이트에서 크롤링을 하면 IP 차단되는 경우가 잦음.
- 해결 방법
- VPN 또는 Proxy 서버를 사용해 IP를 주기적으로 바꾸며 우회.
- 네트워크 환경 변경(예: 핫스팟 전환)으로 접근 시도.
- AWS EC2 같은 클라우드 인프라에 VPN 세팅 후 이용 가능.
8. 기타 툴 및 서비스 추천 🧰
- DB 설계 도구
- dbdiagram.io: 직관적이고 쉬운 ERD 도구로 추천.
- 프레임워크 및 대안
- NestJS는 typedstack 라이브러리 조각을 모아 만든 것으로 일부 코드 품질 이슈가 있음.
- Routing-controllers, tsed, Marvel.js 등 대안도 있음.
- 개발자들은 필요 시 포크하거나 새 프레임워크 개발을 제안하기도 함.
- 기타
- Session Replay 도입 시 몫 제공 제한과 on/off 옵션 고민 필수.
- TypeScript 마이그레이션, 코드 품질 향상 위한 다양한 블로그 및 깃허브 리소스 공유됨.
9. 개발자의 심리와 업무 환경에 관한 토론 💬
- 업무 재미와 동기부여
- 아이 키우기, 새로운 챗봇 개발 경험 등이 업무에 활력을 줌.
- 일과 삶 균형
- 야근에 대한 긍정/부정 의견이 교차함.
- 개선과 포기의 딜레마
- 일부는 오래된 시스템 개선을 주저하며 포기하는 분위기도 존재.
- 반면 지속적인 개선을 위한 노력이 필요하다는 목소리도 큼.
- 문화적 변화 필요성
- 개발자마다 개발 철학이 다르고, 이를 맞추기 위한 팀 문화와 환경 조성이 중요함.
면접팁⚡
- NestJS 데코레이터 동작 원리 설명 준비
- 메타데이터 주입과 런타임 처리 과정을 알기 쉽게 설명하길 권장.
- SSE 개념과 롱폴링 차이점 숙지
- 실시간 데이터 전송 기술 이해도를 보여줄 수 있음.
- TypeScript any 타입 문제와 관리 방법 고찰
- 프로젝트 관리 및 협업 능력 평가에 도움이 되는 주제임.
- 레거시 코드 문제 대응 전략 공유
- 유지 보수 및 기술 부채 관리 경험을 말할 수 있으면 플러스.
- 오픈소스 및 비용 효율적인 모니터링 솔루션 활용 경험
- 실제 프로젝트 적용 경험이나 학습 의지를 표현하면 좋음.
링크🔗
- NestJS GitHub: https://github.com/nestjs/nest
- NestJS DI 및 데코레이터 블로그: https://sunrabbit.durumis.com/ko/nodejs-junior-framework-level-di-1tvid89o
- NestJS SSE 데코레이터 코드: https://github.com/nestjs/nest/blob/3c276c9821decdc184ee81852bfc3be4f879bc13/packages/common/decorators/http/sse.decorator.ts#L9
- NestJS 라우터 실행 컨텍스트: https://github.com/nestjs/nest/blob/3c276c9821decdc184ee81852bfc3be4f879bc13/packages/core/router/router-execution-context.ts#L435
- NestJS HTTP 응답 컨트롤러: https://github.com/nestjs/nest/blob/master/packages/core/router/router-response-controller.ts#L102
- Microsoft tsyringe: https://github.com/microsoft/tsyringe/tree/master
- Routing-controllers GitHub: https://github.com/typestack/routing-controllers
- 레거시 코드 문제와 빅볼 오브 머드 패턴 설명: https://medium.com/@woojin8787/big-ball-of-mud-%ED%83%88%EC%B6%9C%EC%9D%84-%EC%9C%84%ED%95%9C-%EB%B0%9C%EB%B2%84%EB%91%A5-e24ed216c3c0
- YouTube Shorts (개발자 대화 예시 영상1): https://www.youtube.com/shorts/UgqHcsvk8iE
- YouTube Shorts (개발자 대화 예시 영상2): https://www.youtube.com/shorts/Q6Bh77p0XhA
#ULID#UUID#NestJS#TypeScript#SSE#any타입#레거시코드#모니터링#크롤링#개발문화