본문 바로가기

개발

HTTP & REST 심화 개념을 더 깊게 파보자

📘 1. HTTP/1.1 vs HTTP/2 차이점

항목 HTTP/1.1 HTTP/2
요청 처리 한 커넥션에 1개 요청 (직렬 처리) 하나의 커넥션에서 여러 요청 동시 처리 (멀티플렉싱)
헤더 텍스트 기반, 중복 많음 바이너리 기반, 헤더 압축됨 (HPACK)
속도 느림, 병목 현상 있음 빠름, 네트워크 효율성↑
서버 푸시 없음 있음 (클라이언트 요청 전에 서버가 자원 미리 보내줌)

🧠 예시:
HTTP/1.1은 JS, CSS, 이미지 등 리소스를 동시에 로딩 못 해서 느림
→ 그래서 스프라이트 이미지, JS 번들링 같은 최적화 기법이 필요했어.


🔒 2. HTTPS 동작 원리 (TLS handshake)

클라이언트-서버 간 암호화된 통신을 가능하게 해줌.

⛓️ 과정 요약:

  1. 클라이언트 → 서버: "너 인증서 보여줘"
  2. 서버 → 클라이언트: "이게 내 공개키(SSL 인증서)"
  3. 클라이언트: "좋아, 대칭키 만들 테니까 너한테 암호화해서 보낼게"
  4. 서버: "대칭키 받았어, 이제 이 키로 서로 암호화해서 통신하자!"

🔐 핵심 개념

  • 비대칭키 (RSA): 대칭키를 안전하게 주고받는 데 사용
  • 대칭키 (AES): 실제 데이터 전송 시 사용 → 빠름
  • 인증서: 서버가 신뢰할 수 있는 곳인지 확인 (CA 발급)

📌 도구 추천:


💡 3. RESTful API 설계 규칙

REST는 자원을 URL로 표현하고, HTTP 메서드로 행위 표현하는 스타일

🎯 기본 규칙

  • 자원(Resource) 는 복수형 명사 사용
    ✅ /users, /posts/1/comments
  • 동사는 URL이 아니라 메서드에 맡긴다
    ❌ /getUser, /createPost
    ✅ GET /users, POST /posts

🔄 메서드별 의미

메서드동작
GET 조회
POST 생성
PUT 전체 수정
PATCH 부분 수정
DELETE 삭제

🔐 인증/인가는 어떻게?

  • Authorization: Bearer {token} 헤더로 처리
  • 유저 권한이 없을 땐 403 Forbidden, 로그인 필요 시 401 Unauthorized

📦 상태 코드 제대로 쓰자

  • 201 Created → 리소스 생성 성공 시
  • 204 No Content → 삭제 성공, 반환 값 없음
  • 422 Unprocessable Entity → 유효성 검증 실패

🧩 4. RESTful API 실전 설계 팁

✅ 1. 계층적 자원 표현

  • /users/1/posts/5/comments/7

✅ 2. 필터링, 정렬, 페이징은 쿼리 파라미터로

GET /posts?sort=likes&limit=10&page=2

✅ 3. 에러 응답 형식 통일

{ 
	"status": 400, 
    "message": "이메일은 필수 입력입니다", 
    "code": "ERR_REQUIRED_EMAIL" 
}

✅ 4. HATEOAS (심화)

  • 응답 안에 다음 요청 URL 포함 → 자동 탐색 가능
{
  "id": 1,
  "name": "BG",
  "links": [
    { "rel": "self", "href": "/users/1" },
    { "rel": "posts", "href": "/users/1/posts" }
  ]
}