Загружаем каталог…
Загружаем каталог…
HTTP 통신을 이해하려면 먼저 요청(Request) 과 응답(Response) 을 나누어 보는 것이 좋다. 전체적인 구조는 다음과 같다. Client Server │ │ │──── HTTP Request ───────────>│ │ │ │<─── HTTP Response ───────────│ 1. HTTP Request — 클라이언트가 서버에 보내는 요청 HTTP Request는 다음과 같은 구조로 볼 수 있다. HTTP Request │ ├── Method ├── URL ├── Header └── Body 1 Method 서버에 어떤 작업을 요청할 것인지 나타낸다. GET /users/1 POST /users PUT /users/1 DELETE /users/1 Method 의미 GET 조회 POST 생성 PUT 수정 DELETE 삭제 2 URL 어떤 리소스에 요청할 것인지 나타낸다. GET /users/1 여기서 GET → Method /users/1 → URL 이다. 3 Header Header는 요청에 대한 부가 정보 또는 메타데이터 를 전달한다. 쉽게 말하면, "이 요청을 어떻게 처리해야 하는지 알려주는 정보" 라고 생각할 수 있다. 예를 들어 JWT 인증 정보를 전달할 때: Authorization: Bearer eyJhbGci... Body의 데이터 형식을 알려줄 때: Content-Type: application/json 처럼 사용한다. 대표적인 요청 Header는 다음과 같다. Header 의미 Authorization 인증 정보 Content-Type 요청 Body의 데이터 형식 Accept 받고 싶은 응답 데이터 형식 Cookie 브라우저가 서버에 전달하는 쿠키 Cookie는 직접 작성하지 않아도 된다 브라우저에 저장된 쿠키는 조건에 맞는 요청을 보낼 때 브라우저가 자동으로 Cookie Header에 포함한다. 서버 ↓ Set-Cookie ↓ 브라우저에 쿠키 저장 ↓ 요청 시 쿠키 조건 확인 ↓ Cookie Header에 자동 포함 ↓ 서버 따라서 프론트엔드에서 매 요청마다 Cookie Header를 직접 작성할 필요는 없다. 4 Body Body는 서버에 실제로 전달하려는 데이터 를 담는다. 예를 들어 회원가입 요청이라면: POST /users Content-Type: application/json { "name": "소영", "age": 30 } 구조를 나누어 보면: POST /users → Method + URL Content-Type: application/json → Header { "name": "소영", "age": 30 } → Body 2. HTTP Response — 서버가 클라이언트에 보내는 응답 서버는 클라이언트의 요청을 처리한 후 Response를 반환한다. HTTP Response는 다음과 같은 구조로 볼 수 있다. HTTP Response │ ├── Status Code ├── Header └── Body 1 Status Code Status Code는 서버가 요청을 어떻게 처리했는지 나타내는 값 이다. 대표적인 상태 코드는 다음과 같다. 코드 HTTP 이름 실제 의미 쉽게 기억 200 OK 요청 성공 정상 처리 201 Created 요청 성공 + 리소스 생성 새로 만들어짐 204 No Content 요청 성공 + Body 없음 성공했지만 줄 데이터 없음 400 Bad Request 잘못된 요청 요청값이 이상함 401 Unauthorized 인증 실패 "너 누구야?" 403 Forbidden 인가 실패 "너인 건 알겠는데 안 돼" 404 Not Found 요청한 리소스 없음 "그거 없어" 500 Internal Server Error 서버 내부 오류 "서버에서 문제가 발생함" 503 Service Unavailable 현재 서비스를 처리할 수 없음 "지금 서비스 이용 불가" 401 vs 403 특히 401 과 403 은 헷갈리기 쉽다. Authentication = 인증 → 너 누구야? Authorization = 인가 → 네가 이걸 해도 돼? 따라서: 인증 실패 → 401 Unauthorized 인가 실패 → 403 Forbidden Unauthorized 라는 이름 때문에 "권한 없음"으로 생각하기 쉽지만, API 인증 흐름에서는 401을 인증 실패로 이해하는 것이 중요하다. 2 Header Response Header 역시 응답에 대한 부가 정보 또는 메타데이터 를 전달한다. 예를 들어: Content-Type: application/json 응답 Body가 JSON이라는 것을 알려줄 수 있다. 또한 쿠키를 브라우저에 저장시키기 위해: Set-Cookie: SESSION_ID=abc123 와 같이 사용할 수도 있다. 즉, Request Header → 클라이언트가 서버에 전달하는 부가 정보 Response Header → 서버가 클라이언트에 전달하는 부가 정보 3 Body Response Body에는 서버가 클라이언트에게 전달할 실제 응답 데이터 가 들어간다. 예를 들어 회원 조회 API라면: HTTP/1.1 200 OK Content-Type: application/json { "id": 1, "name": "소영" } 여기서: 200 OK → Status Code Content-Type: application/json → Header { "id": 1, "name": "소영" } → Body 3. Spring에서 HTTP Response 만들기 Spring에서는 ResponseEntity 를 사용해 HTTP Response를 만들 수 있다. 200 OK + Body @GetMapping("/users/{id}") public ResponseEntity<User> getUser(@PathVariable Long id) { User user = userService.findUser(id); return ResponseEntity.ok(user); } ok(user) 는: 200 OK + User 데이터 를 응답한다. 반면: return ResponseEntity.ok().build(); 는: 200 OK + Body 없음 을 의미한다. 201 Created + Body @PostMapping("/users") public ResponseEntity<User> createUser( @RequestBody UserRequest request) { User user = userService.createUser(request); return ResponseEntity .status(HttpStatus.CREATED) .body(user); } → 201 Created + 생성된 User 데이터 401 Unauthorized @GetMapping("/mypage") public ResponseEntity<Void> myPage( @RequestHeader( value = "Authorization", required = false ) String token) { if (token == null) { return ResponseEntity .status(HttpStatus.UNAUTHORIZED) .build(); } return ResponseEntity.ok().build(); } 여기서: .status(HttpStatus.UNAUTHORIZED) → 401 Unauthorized .build() → Body 없이 응답 실제 프로젝트에서는 JWT 인증을 Spring Security에서 처리하는 경우가 많기 때문에 인증 실패에 대한 401 응답을 Controller에서 직접 작성하지 않는 경우도 많다. 처리되지 않은 예외와 500 500 역시 개발자가 직접 지정할 수 있다. return ResponseEntity .status(HttpStatus.INTERNAL_SERVER_ERROR) .build(); 하지만 처리되지 않은 예외가 발생했을 때 Spring이 기본적으로 500 응답을 반환할 수도 있다. User user = null; user.getName(); // NullPointerException 예외를 별도로 처리하지 않았다면 서버는 500 응답을 반환할 수 있다. 4. Request와 Response 한눈에 비교 ┌────────────── HTTP Request ──────────────┐ │ │ │ Method │ │ URL │ │ Header │ │ Body │ │ │ └──────────────────┬───────────────────────┘ │ ↓ Server │ ↓ ┌────────────── HTTP Response ─────────────┐ │ │ │ Status Code │ │ Header │ │ Body │ │ │ └──────────────────────────────────────────┘ 정리하면: Request Response 목적 서버에 요청 요청 처리 결과 전달 주요 구성 Method, URL, Header, Body Status Code, Header, Body 예시 POST /users 201 Created Header 예시 Authorization , Cookie , Content-Type Content-Type , Set-Cookie Body 서버에 보낼 데이터 서버에서 받은 데이터 5. 전체 HTTP 통신 흐름 전체적인 흐름까지 연결하면 다음과 같다. 브라우저 ↓ DNS ↓ TCP 3-way handshake ↓ TLS handshake ↓ HTTP Request ├── Method ├── URL ├── Header └── Body ↓ 서버 ↓ HTTP Response ├── Status Code ├── Header └── Body ↓ 브라우저 결국 HTTP 통신은 간단하게 보면, Request로 서버에 무엇을 요청하고, Response로 그 결과를 받는 과정이다. 그리고 Request에서는 Method / URL / Header / Body , Response에서는 Status Code / Header / Body 를 확인하면 된다.
То, что RADAR обнаружил и классифицировал для этой возможности. Это опубликованный источником текст, а не подтверждение, что предложение ещё действует.
출퇴근 공부 #2 — HTTP 요청과 응답 구조. HTTP 통신을 이해하려면 먼저 요청(Request) 과 응답(Response) 을 나누어 보는 것이 좋다. 전체적인 구조는 다음과 같다. Client Server │ │ │──── HTTP Request ───────────>│ │ │ │ getUser(@PathVariable Long id) { User user = userService.findUser(id); return ResponseEntity.ok(user); } ok(user) 는: 200 OK + User 데이터 를 응답한다. 반면: return ResponseEntity.ok().build(); 는: 200 OK + Body 없음 을 의미한다. 201 Created + Body…
Открыть источник