πŸ› οΈ ν”„λ‘ νŠΈμ—”λ“œμ™€ λ°±μ—”λ“œ μ‚¬μ΄μ—μ„œ 주둜 ν˜‘μ˜ν•˜λŠ” λ‚΄μš©

ZYE KIMΒ·3일 μ „
0

μ§€μ‹μ‚½μ§ˆ

λͺ©λ‘ 보기
4/4

λ“€μ–΄κ°€λ©°

ν”„λ‘ νŠΈμ—”λ“œ 개발자둜 μ „ν–₯ν•˜λ©΄μ„œ 백단과 ν”„λ‘ νŠΈλ‹¨ μ‚¬μ΄μ—μ„œ μ†Œν†΅μ€ μ–΄λ–€κ²Œ ν•„μš”ν• κΉŒκΆκΈˆν•΄μ„œ μ •λ¦¬ν•΄λ³΄μ•˜λ‹€.


1️⃣ API 섀계 및 데이터 ꡬ쑰 κ΄€λ ¨

βœ… 1-1. API μš”μ²­/응닡 데이터 ꡬ쑰

πŸ“Œ ν”„λ‘ νŠΈ & λ°±μ—”λ“œ ν˜‘μ˜ 포인트

  • ν•„μš”ν•œ 데이터 및 ν˜•μ‹ κ²°μ •
  • ν•„λ“œλͺ… 톡일 (userId vs user_id vs id)
  • λΆˆν•„μš”ν•œ 데이터 제거

πŸ’‘ 예제: μ£Όλ¬Έ 정보 API ν˜‘μ˜

ν•­λͺ©ν”„λ‘ νŠΈ μš”μ²­λ°±μ—”λ“œ 응닡
주문 번호order_idorderId
μ£Όλ¬Έ μƒνƒœstatusstatus
μ‚¬μš©μž 정보user{ userId, name, email }

βœ… 1-2. API 응닡 μƒνƒœ μ½”λ“œ & μ—λŸ¬ 핸듀링

πŸ“Œ ν”„λ‘ νŠΈ & λ°±μ—”λ“œ ν˜‘μ˜ 포인트

  • μƒνƒœ μ½”λ“œ μ •μ˜ (200, 400, 500 λ“±)
  • μ—λŸ¬ λ©”μ‹œμ§€ 톡일 ("USER_NOT_FOUND", "INVALID_INPUT" λ“±)
  • UIμ—μ„œ μ²˜λ¦¬ν•  수 μžˆλ„λ‘ μ—λŸ¬ μ½”λ“œ 섀계

πŸ’‘ 예제: 둜그인 API 응닡 ν˜‘μ˜

HTTP μƒνƒœ μ½”λ“œλ©”μ‹œμ§€ν”„λ‘ νŠΈ 처리 방식
200 OK{ "message": "success", "userId": 123 }둜그인 성곡
400 Bad Request{ "error": "INVALID_CREDENTIALS" }"아이디 λ˜λŠ” λΉ„λ°€λ²ˆν˜Έκ°€ μ˜¬λ°”λ₯΄μ§€ μ•ŠμŠ΅λ‹ˆλ‹€."
500 Internal Server Error{ "error": "SERVER_ERROR" }"μ„œλ²„ 였λ₯˜ λ°œμƒ, λ‹€μ‹œ μ‹œλ„ν•΄μ£Όμ„Έμš”."

βœ… 1-3. νŽ˜μ΄μ§• & 데이터 λ‘œλ”© 방식

πŸ“Œ ν”„λ‘ νŠΈ & λ°±μ—”λ“œ ν˜‘μ˜ 포인트

  • ν•œ λ²ˆμ— 뢈러올 데이터 개수 (page=1&size=20)
  • λ¬΄ν•œ 슀크둀 vs νŽ˜μ΄μ§€λ„€μ΄μ…˜ vs 더보기 λ²„νŠΌ 방식
  • μ •λ ¬ & 필터링 방식 (sort=desc, filter=status:active)

πŸ’‘ 예제: μ£Όλ¬Έ λͺ©λ‘ 쑰회 API ν˜‘μ˜

GET /api/orders?page=1&size=20&sort=createdAt,desc

2️⃣ μ„±λŠ₯ & μ΅œμ ν™” κ΄€λ ¨

βœ… 2-1. 데이터 전솑 μ΅œμ ν™” (ν•„μš”ν•œ λ°μ΄ν„°λ§Œ λ°›κΈ°)

πŸ“Œ ν”„λ‘ νŠΈ & λ°±μ—”λ“œ ν˜‘μ˜ 포인트

  • λΆˆν•„μš”ν•œ ν•„λ“œ 제거
  • λŒ€μš©λŸ‰ 데이터 (이미지 λ“±) URL λ°©μ‹μœΌλ‘œ 전달
  • 캐싱 κ°€λŠ₯ν•œ 데이터 처리 방식 κ²°μ •

πŸ’‘ 예제: ν•„μš” μ—†λŠ” ν•„λ“œ 제거 μš”μ²­

{
  "orderId": 123,
  "user": {
    "name": "홍길동",
    "email": "hong@example.com"
  },
  "items": [
    {
      "name": "λ…ΈνŠΈλΆ",
      "price": 1500000
    }
  ]
}

βœ… 2-2. μš”μ²­ 개수 μ΅œμ†Œν™” (API 호좜 μ΅œμ ν™”)

πŸ“Œ ν”„λ‘ νŠΈ & λ°±μ—”λ“œ ν˜‘μ˜ 포인트

  • μ—¬λŸ¬ 개의 API μš”μ²­μ„ ν•©μ³μ„œ μ΅œμ†Œν™”
  • ν•„μš”ν•œ λ°μ΄ν„°λ§Œ ν¬ν•¨ν•˜λŠ” API 섀계

πŸ’‘ 예제: μ—¬λŸ¬ 개의 APIλ₯Ό ν•˜λ‚˜λ‘œ ν•©μΉ˜κΈ°

{
  "orderId": 123,
  "user": { "name": "홍길동", "email": "hong@example.com" },
  "items": [
    { "name": "λ…ΈνŠΈλΆ", "price": 1500000 },
    { "name": "마우슀", "price": 30000 }
  ]
}

βœ… 2-3. ν”„λ‘ νŠΈ vs λ°±μ—”λ“œμ—μ„œ μ²˜λ¦¬ν•  둜직 λΆ„λ°°

πŸ“Œ ν”„λ‘ νŠΈ & λ°±μ—”λ“œ ν˜‘μ˜ 포인트

  • 데이터 필터링을 ν”„λ‘ νŠΈμ—μ„œ 할지, λ°±μ—”λ“œμ—μ„œ 할지 κ²°μ •
  • 계산 둜직 처리 μœ„μΉ˜ ν˜‘μ˜

πŸ’‘ 예제: μ£Όλ¬Έ μƒνƒœ λ³€ν™˜ (ν”„λ‘ νŠΈ vs λ°±μ—”λ“œ ν˜‘μ˜)

// λ°±μ—”λ“œ 응닡 예제
{ "status": "PENDING_PAYMENT" }
// ν”„λ‘ νŠΈμ—μ„œ λ³€ν™˜ 예제
const statusText = {
  "PENDING_PAYMENT": "결제 λŒ€κΈ°μ€‘",
  "SHIPPED": "배솑 쀑",
  "DELIVERED": "배솑 μ™„λ£Œ"
};
console.log(statusText["PENDING_PAYMENT"]); // "결제 λŒ€κΈ°μ€‘"

3️⃣ 인증 & λ³΄μ•ˆ κ΄€λ ¨

βœ… 3-1. 인증 방식 ν˜‘μ˜ (JWT vs μ„Έμ…˜ vs OAuth λ“±)

πŸ“Œ ν”„λ‘ νŠΈ & λ°±μ—”λ“œ ν˜‘μ˜ 포인트

  • 둜그인 인증 방식 κ²°μ • (JWT, μ„Έμ…˜, OAuth λ“±)
  • API 호좜 μ‹œ 인증 토큰 전달 방식 (Authorization 헀더 μ‚¬μš©)

πŸ’‘ 예제: JWT 인증 방식

GET /api/user
Authorization: Bearer eyJhbGciOiJIUzI1...

βœ… 3-2. API κΆŒν•œ 및 λ³΄μ•ˆ 체크

πŸ“Œ ν”„λ‘ νŠΈ & λ°±μ—”λ“œ ν˜‘μ˜ 포인트

  • 인증이 ν•„μš”ν•œ API vs 곡개 API ꡬ뢄
  • κΆŒν•œμ΄ 없을 λ•Œ 응닡 μ½”λ“œ (403 Forbidden vs 401 Unauthorized)

πŸ’‘ 예제: κ΄€λ¦¬μž κΆŒν•œ 체크 API

GET /api/admin/orders
403 Forbidden // κ΄€λ¦¬μžκ°€ μ•„λ‹ˆλΌλ©΄ 이 응닡을 보내기

πŸ”Ή κ²°λ‘  (μ£Όμš” ν˜‘μ˜ λ‚΄μš© μš”μ•½)

βœ… API 데이터 ꡬ쑰 & ν•„λ“œλͺ… λ§žμΆ”κΈ°
βœ… νŽ˜μ΄μ§•, μ •λ ¬, 필터링 방식 μ •ν•˜κΈ°
βœ… μ—λŸ¬ μ½”λ“œ 및 응닡 λ©”μ‹œμ§€ 톡일
βœ… ν”„λ‘ νŠΈ vs λ°±μ—”λ“œμ—μ„œ μ²˜λ¦¬ν•  둜직 λ‚˜λˆ„κΈ°
βœ… API μš”μ²­ 개수 μ΅œμ†Œν™” & μ΅œμ ν™”
βœ… 인증 및 κΆŒν•œ 체크 방식 ν˜‘μ˜

profile
μ£Όλ‹ˆμ–΄ ν”„λ‘ νŠΈμ—”λ“œκ°œλ°œμž

0개의 λŒ“κΈ€

κ΄€λ ¨ μ±„μš© 정보