몇주전쯤에 나는 내 북마켓 서버를 내 라즈베리파이로 옮겨오는 작업을 진행했었다!
그래서 이제는 속도가 느리지도 않고, 내가 필요한 기능들은 얼추 다 갖고 있었기에 그냥 사용하기만 되는 상태가 되었다 ㅋㅋㅋ
하지만 사실 북마켓의 백엔드 로직은 최적화가 전혀 안되어있는데, 예를 들어
-
홈에서 모든 북마크를 다 가져온다. 페이지네이션이나 무한 스크롤같은 최적화가 전혀 되어있지 않다.
-
북마크에서 유저와 카테고리가 모두 eager loading 처리가 되어있다.
-
Redis같은 인메모리 DB를 활용한 캐싱이 전혀 되어있지 않다.
물론 다 어떻게 최적화를 하면 될지는 생각을 해봤지만, 항상 해야지... 해야지... 하면서 미루고 있었다.
그러다 오늘 그냥 심심해서 repomix 툴을 이용해서 챗지피티와 내 북마켓 백엔드에 대한 심도 깊은 대화를 나눠봤다. 그랬더니 이 자식이
말을 참 심하게 하더라.
속상했지만 사실이니까 받아들이고, 어떻게 개선을 하면 좋을지 같이 이야기를 해봤다.
지피티의 백엔드 멘토링
사실 난 백엔드 개발자가 되고 싶은지는 모르겠다. 프론트 개발자가 계속 하고 싶은지도 모르겠다. 그냥 다 공부하고 싶어서 하고 있는데, 어쨌든 모든게 이도저도 안되는 수준에서 머무르면 안된다고 생각했기에, 지피티에게 내가 백엔드 개발자로 취업하려면 뭘 중점적으로 준비해야할지 물어봤다.
그랬더니 이렇게 멘토링을 해줬다. (예전같으면 시간당 몇만원하는 비싼 유료 멘토링을 받을 생각을 해야 했을텐데, 이젠 지피티만 있으면 된다!)
"취업 레벨"로 끌어올리려면 무엇을 공부할까?
1. 현재 상태 요약 (Backend)
영역 | 현재 상태 | 코멘트 |
---|---|---|
기본 구조 | NestJS + TypeORM(PostgreSQL), 모노레포(pnpm + turbo) | "서비스는 뜰 수 있는" 단계 |
인증 | JWT + 쿠키, Google OAuth, Sentry 연동 | 베이스 OK, 세부 hardening 필요 |
DB 마이그레이션 | migrationsRun: true , 앱 부팅 시 자동 실행 | 프로덕션에선 위험(다운타임·schema drift) |
테스트 | Jest 의존성·npm script만 있고 spec 파일은 빌드 제외 | 사실상 테스트 공백 |
비즈니스 로직 | 단일 RDB·트랜잭션 없음, 단순 Repository 호출 | "개인 프로젝트 레벨" |
인프라 | docker-compose(Postgres + 서버 + Next) | 로컬용은 OK, 실서비스에는 추가 설계 필요 |
2. 로드맵 (실무 1-2년차 백엔드 역량 기준)
2-1 테스팅 & 품질 게이트
해야 할 것 | 왜 필요한가 | 학습 키워드/자료 |
---|---|---|
단위 테스트(service·util) | 커버리지 0% → 안전망 부재 | Jest, Nest TestingModule, ts-mockito |
통합(e2e) 테스트 | 컨트롤러 + DB 통합 검증 | Supertest, Testcontainers |
CI 파이프라인 | PR마다 test/lint/type-check | GitHub Actions, pnpm 캐시 |
2-2 데이터베이스 심화
포인트 | 학습 주제 |
---|---|
트랜잭션 & 동시성 | TypeORM QueryRunner, Postgres Isolation Level |
인덱스·성능 | EXPLAIN , slow query 분석, composite index |
마이그레이션 전략 | migrationsRun:false , zero-downtime 패턴 |
2-3 아키텍처 & 코드 조직
현상/빈틈 | 공부거리 |
---|---|
서비스·도메인 경계 불분명 | DDD Lite → Context Module |
로직이 ORM 레이어에 섞임 | 도메인 Entity 메서드, Domain Event |
중복 유효성 검사 | class-validator Pipe, Interceptor/Filter 재사용 |
2-4 확장 & 성능
스택 | 학습 포인트 |
---|---|
캐싱 | Nest CacheModule + Redis |
큐/비동기 | BullMQ, RabbitMQ/Kafka |
분산 트레이싱 | OpenTelemetry SDK + Jaeger |
2-5 보안 & 안정성
항목 | 제안 |
---|---|
입력 검증 | DTO Pipe, Zod/schema |
Rate Limit / CSRF | @nestjs/throttler , SameSite 쿠키 |
로그·모니터링 | Winston + Sentry APM, health-check |
2-6 DevOps & 배포
현재 | 업그레이드 아이디어 |
---|---|
docker-compose 만 | Docker multi-stage, GitHub Actions → Fly.io/Render |
수동 .env | HashiCorp Vault, AWS Parameter Store |
단일 컨테이너 | IaC(Terraform/CDK), managed Postgres |
3. 7주 스프린트 플랜
주차 | 목표 | 산출물 |
---|---|---|
1주 | Jest 단위 + e2e 커버리지 30% | CI 녹색 ✅ |
2주 | eager → 명시적 JOIN, 인덱스 실험 | before/after ms 그래프 |
3주 | 트랜잭션 유틸, migration 플로우 교체 | migration:run 액션 |
4주 | Redis 캐시 + 무효화 | RPS 60 → 200 실측 |
5주 | BullMQ 워커(OG 이미지) | 큐 대시보드 |
6주 | OTEL + Jaeger | trace 대시보드 |
7주 | Docker multi-stage + CD 스크립트 | 경량 이미지 URL |
사실 이중에는 내가 아는 내용도 있고 모르는 내용도 있다.
예를 들어
-
Jest를 활용한 단위 테스트와, e2e 테스트 작성은 프론트에서는 할줄 알지만, 백엔드에서는 처음이다.
-
Redis도 간단히 공부만 해봤지, 실제로 활용해서 최적화를 하거나 개선을 해본적은 없다.
-
BullMQ나 RabbitMQ, Kafka같은 메시지 큐들은 제대로 사용해본적도, 공부해본적도 없다.
이렇게 내가 이론적으로만 알던 것들, 아예 모르는 것들, 등등을 학습하기 위한 간단한 플랜을 지피티가 짜줬는데, 이걸 매주 학습하면서 북마켓 서버를 개선해나가려고 한다.
저 플랜 그대로 학습을 할지는 모르겠지만, "주니어 백엔드 개발자가 반드시 알아야 할 실무 지식" 이라는 책도 산겸, 같이 읽어보면서 북마켓 서버 개선과 함께 백엔드 지식을 쌓아가보자!