백엔드 학습 로드맵
클라이언트의 요청을 처리하고, 데이터를 저장하고, 서비스를 운영하기까지. 백엔드의 기본기를 순서대로 익히고, 그 위에 규모와 도구를 올립니다.
전체 학습 순서
| 단계 | 주제 | 목표 |
|---|---|---|
| 01 | 웹과 HTTP | 클라이언트와 서버 사이의 요청·응답 이해하기 |
| 02 | 언어와 서버 기초 | 선택한 언어로 서버를 실행하고 요청 처리하기 |
| 03 | API 설계와 구현 | 리소스를 조회·생성·수정·삭제하는 API 만들기 |
| 04 | 데이터 모델링과 SQL | 데이터 구조를 설계하고 질의하기 |
| 05 | 쿼리 성능과 트랜잭션 | 느린 질의를 찾고 동시 접근 다루기 |
| 06 | 인증과 인가 | 사용자를 식별하고 접근 권한 제한하기 |
| 07 | 서버 보안 | 입력과 설정에서 생기는 취약점 막기 |
| 08 | 테스트와 예외 처리 | 정상 동작과 실패 상황 검증하기 |
| 09 | 로그와 관측 | 운영 중인 서비스의 상태 파악하기 |
| 10 | 배포와 운영 | 서비스를 배포하고 안정적으로 유지하기 |
01. 웹과 HTTP
- 인터넷 기초: IP, DNS, 포트, 클라이언트와 서버
- 도메인 이름과 호스팅: DNS 레코드와 서버를 두는 형태
- HTTP 요청과 응답: 메서드, 상태 코드, 헤더, 본문
- 연결 재사용과 HTTP/1.1·HTTP/2의 차이
- 외부 API를 부를 때의 타임아웃과 재시도
- 캐시 헤더와 콘텐츠 협상
- HTTPS와 TLS의 역할, JSON 데이터 형식
- 브라우저 개발자 도구와 curl로 요청 확인하기
02. 언어와 서버 기초
- 한 가지 서버 언어 선택과 기초 문법 익히기
- Git으로 변경 이력을 남기고 GitHub·GitLab에서 코드 주고받기
- 패키지 관리, 모듈, 환경 변수
- 프로세스, 스레드와 이벤트 루프 등 동시성 모델의 차이
- 비동기 처리와 오류 처리
- 서버 실행과 라우팅, 요청 데이터 읽기
- 미들웨어로 공통 처리 분리하기
03. API 설계와 구현
- 리소스 중심의 URL과 HTTP 메서드 설계
- 라우터·서비스·리포지토리의 역할 분담
- CRUD: 생성, 조회, 수정, 삭제
- 입력 검증과 일관된 응답 형식
- 상황에 맞는 상태 코드 선택 기준
- 목록 페이지네이션, 필터링, 정렬
- API 버전 관리와 호환성 유지
- REST 외의 선택지: GraphQL과 gRPC가 맞는 자리
- OpenAPI 명세와 요청·응답 예시를 포함한 API 문서 작성
04. 데이터 모델링과 SQL
- 관계형 데이터베이스와 SQL 기초
- 테이블 설계, 기본 키, 외래 키, 제약 조건
- 정규화와 의도적인 비정규화
- 테이블 간 관계와 JOIN
- 집계와 그룹화
- 관계형과 NoSQL의 선택 기준
- 자주 쓰이는 데이터베이스(PostgreSQL, MySQL, SQLite)와 행 지향·열 지향의 차이
- 저장소를 고르는 기준과 관리형 서비스
05. 쿼리 성능과 트랜잭션
- 인덱스의 동작과 복합 인덱스의 컬럼 순서
- 실행 계획 읽기
- N+1 문제가 생기는 지점과 해결 방법
- 트랜잭션의 ACID와 격리 수준, 교착 상태
- 커넥션 풀과 동시 접속 처리
- ORM이 실제로 만들어 보내는 질의 확인하기
- 매개변수 바인딩과 스키마 마이그레이션
06. 인증과 인가
- 인증과 인가의 차이
- 회원가입, 로그인, 로그아웃 흐름
- 비밀번호 해시와 솔트, bcrypt·Argon2를 쓰고 MD5·SHA를 쓰지 않는 이유
- 세션과 토큰(JWT) 방식의 차이, 만료와 갱신
- 역할 기반 접근 제어와 사용자별 데이터 접근 제어
- 소셜 로그인과 OAuth, OpenID Connect의 기본 흐름
07. 서버 보안
- SQL 인젝션과 매개변수 바인딩
- 명령어 인젝션과 경로 조작
- 신뢰할 수 없는 입력의 검증과 정규화
- 쿠키 보안 속성, CORS와 CSRF
- 비밀 정보 관리와 환경 변수 분리
- 속도 제한과 무차별 대입 방어
- 민감 정보와 내부 오류 상세 정보의 노출 방지
- 의존성 취약점 점검과 갱신
- OWASP Top 10으로 빠진 항목 훑어보기
08. 테스트와 예외 처리
- 단위 테스트와 통합 테스트
- 사용자 흐름을 끝에서 끝까지 확인하는 기능 테스트
- 테스트 데이터 준비와 격리
- 정상 요청, 잘못된 입력, 권한 없는 접근 검증
- 외부 의존성을 대체하는 테스트 더블
- 예외 처리 전략과 일관된 오류 응답
09. 로그와 관측
- 구조적 로깅과 로그 수준 구분
- 요청을 추적하는 상관관계 ID
- 지표 수집: 처리량, 응답 시간과 오류율
- 계측과 수집 도구: OpenTelemetry, Prometheus와 Grafana, Datadog
- 알림 기준과 임계치 설정
- 장애 상황에서 원인을 찾아가는 순서
10. 배포와 운영
- 개발·운영 환경 설정 분리
- 빌드와 실행, 환경 변수 주입
- 컨테이너(Docker)로 실행 환경 통일하기
- 앞단에 둔 웹 서버(Nginx, Caddy)에 TLS와 정적 파일 맡기기
- CI/CD(GitHub Actions, GitLab CI)의 기본 흐름과 배포 전 테스트
- 무중단 배포와 배포 롤백
- 헬스 체크와 버전 엔드포인트, HTTPS 설정
- 데이터 백업과 복구
기본기를 익힌 다음
기본기 위에 올리는 단계입니다. 한 번에 다루기보다 필요해지는 시점에 주제를 골라 확장합니다.
성능과 캐시
- 캐시 계층: HTTP 캐시와 CDN, 서버 측 캐시(Redis, Memcached)
- 캐시 만료와 무효화 기준, 동시에 비었을 때의 쏠림
- 읽기 복제본으로 조회 부하 나누기
- 부하 테스트로 한계 지점 찾기
비동기 작업과 메시지
- 메시지 브로커로 처리 분리하기: Kafka, RabbitMQ
- 백그라운드 작업과 예약 작업, 재시도와 지연 큐
- 중복 처리와 멱등성, 순서 보장의 한계
실시간 데이터
- 폴링, Server-Sent Events와 WebSocket의 선택 기준
- 연결 수 관리와 서버가 여러 대일 때의 메시지 전파
데이터베이스 확장
- 데이터 복제와 샤딩, CAP 정리가 말하는 제약
- 분석 질의 분리: 열 지향 저장소(ClickHouse, BigQuery)와 MySQL HeatWave처럼 한 DB에서 둘을 겸하는 제품
- 목적별 저장소: 문서(MongoDB), 키-값(DynamoDB), 그래프(Neo4j), 시계열(InfluxDB, TimescaleDB)
- 전문 검색 엔진: Elasticsearch, OpenSearch, Solr
AI를 활용한 개발
- LLM의 동작 방식과 기존 코딩 방식과의 차이
- AI 보조 코딩 도구: Claude Code, Cursor, Copilot
- 코드 리뷰, 리팩터링, 문서 생성에 활용하기
- 임베딩과 벡터 검색, 가지고 있는 문서를 근거로 답하게 하는 RAG
- LLM API로 기능 붙이기: 스트리밍 응답, 구조적 출력, 함수 호출
- 제공자(Anthropic, OpenAI, Gemini)별 차이와 비용·지연 시간 다루기
- 에이전트, MCP로 외부 도구 연결하기
- 생성된 코드를 그대로 믿지 않고 검증하는 습관
구조와 아키텍처
- 모놀리식에서 떼어 내는 기준, 마이크로서비스와 서버리스
- Twelve-Factor App이 말하는 설정과 상태 다루기
- 도메인 모델링, 의존성 역전, 모듈 경계 나누기
- 연쇄 실패 막기: 서킷 브레이커, 스로틀링과 배압, 점진적 성능 저하
- 컨테이너 오케스트레이션(Kubernetes)과 인프라 운영은 데브옵스 로드맵에서 이어집니다
처음부터 모든 기술을 다루기보다, 앞 단계의 흐름을 이해한 뒤 필요한 주제를 더해 보세요.