1. HTTP 메서드
1.1 HTTP 메서드란?
- HTTP 메서드는 클라이언트가 서버에 요청을 보낼 때 어떤 동작을 수행할지 지정하는 방법이다.
- HTTP 메서드는 크게 5가지 주요 메서드와 기타 보조 메서드로 나뉜다.
- 주요 메서드: GET, POST, PUT, PATCH, DELETE
- 보조 메서드: HEAD, OPTIONS, CONNECT, TRACE
1.2 HTTP 주요 메서드 설명
1.2.1 GET 메서드
- 서버에서 데이터를 조회하는 요청이다.
- 요청 본문(Body)을 포함하지 않는다.
사용 예시
- 웹사이트에서 페이지를 로드할 때
- REST API에서 데이터를 가져올 떄 (예: GET /users)
- 검색 엔진에서 URL을 크롤링할 때
GET 요청 예제
GET /products HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: application/json
GET 응답 예제
HTTP/1.1 200 OK
Content-Type: application/json
[
{"id": 1, "name": "Laptop", "price": 1200},
{"id": 2, "name": "Mouse", "price": 50}
]
특징
- 읽기 전용 (데이터 변경 없음)
- 캐싱 가능
- 멱등성 보장 (여러 번 요청해도 동일한 응답)
1.2.2 POST 메서드
- 서버에 데이터를 생성하는 요청
- 요청 본문(Body)을 포함할 수 있음.
사용 예시
- 회원가입, 로그인
- 파일 업로드
- REST API에서 새로운 데이터 생성 (예: POST /users)
POST 요청 예제
POST /users HTTP/1.1
Host: example.com
Content-Type: application/json
{
"username": "johndoe",
"email": "john@example.com",
"password": "secure123"
}
POST 응답 예제
HTTP/1.1 201 Created
Location: /users/1
Content-Type: application/json
{
"id": 1,
"username": "johndoe",
"email": "john@example.com"
}
특징
- 새로운 리소스 생성
- 캐싱 불가능
- 멱등성이 없음 (같은 요청을 여러 번 보내면 중복 데이터 생성 가능)
1.2.3 PUT 메서드
- 기존 리소스를 "전체" 업데이트하는 요청
- 요청 본문(Body)을 포함.
사용 예시
- REST API에서 리소스를 수정할 때 (예: PUT /user/1)
- 설정을 변경할 때
PUT 요청 예제
PUT /users/1 HTTP/1.1
Host: example.com
Content-Type: application/json
{
"username": "johndoe",
"email": "john@example.com",
"password": "newpassword"
}
PUT 응답 예제
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 1,
"username": "johndoe",
"email": "john@example.com",
"password": "newpassword"
}
특징
- 기존 데이터를 전체 수정 (없는 경우 생성할 수도 있음)
- 멱등성이 있음 (같은 요청을 여러 번 보내도 동일한 결과)
1.2.4 PATCH 메서드
- 기존 리소스를 "부분" 업데이트 하는 요청
- 요청 본문(Body)을 포함.
사용예시
- REST API에서 특정 필드만 수정할 때 (예: PATCH/users/1)
PATCH 요청 예제
PATCH /users/1 HTTP/1.1
Host: example.com
Content-Type: application/json
{
"email": "newemail@example.com"
}
PATCH 응답 예제
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 1,
"username": "johndoe",
"email": "newemail@example.com"
}
특징
- 기존 데이터의 일부만 수정 가능
- 멱등성이 보장되지 않음.
- PUT과 다르게 전체 객체를 전달할 필요 없음.
1.2.5 DELETE 메서드
- 서버에서 리소스를 삭제하는 요청
- 요청 본문(Body)을 포함하지 않는다.
사용 예시
- REST API에서 데이터 삭제 (예: DELETE /users/1)
DELETE 요청 예제
DELETE /users/1 HTTP/1.1
Host: example.com
DELETE 응답 예제
HTTP/1.1 204 No Content
특징
- 리소스 삭제
- 멱등성이 있음(같은 요청을 여러 번 보내도 동일한 결과)
1.3 기타 보조 메서드

1.4 HTTP 메서드 비교표

2. HTTP Status
- HTTP Status Code(상태 코드)는 클라이언트가 서버에 요청을 보냈을 때, 서버가 응답하는 상태를 나타내는 3자리 숫자로 된 코드이다.
- 이 상태 코드는 1xx, 2xx, 3xx, 4xx, 5xx의 5가지 범주로 나뉜다.
2.1 1xx (정보 응답)
- 서버가 요청을 받았고, 처리 중 이라는 의미. 클라이언트가 계속 요청을 보내야 하는 경우에 사용된다.
100 Continue : 요청의 일부가 성공적으로 수신되었으며, 클라이언트가 나머지 요청을 계속 보내도 됨.
101 Switching Protocols: 서버가 클라이언트 요청에 따라 프로토콜을 변경 중 (예: HTTP -> WebSocket)
102 Processing: 서버가 요청을 수락했지만, 아직 응답을 완료하지 못했음 (WebDAV)
103 Early Hints: 최종 응답전에 일부 헤더를 클라이언트에게 먼저 전성
2.2 2xx(성공 응답)
- 클라이언트의 요청이 정상적으로 처리되었음을 나타낸다.
200 OK: 요청이 성공적으로 수행되었음. (일반적인 응답)
201 Created: 요청이 성공적으로 수행되었으며, 새로운 리소스가 생성됨. (예: 파일 업로드, 회원가입)
202 Accepted
203 Non-Authoritative Information: 요청이 접수되었지만, 처리가 완료되지 않았음. (비동기 처리)
204 No Content: 서버가 원본이 아닌 다른 소스로부터 가져온 정보
205 Reset Content: 요청은 성공했으나, 응답할 데이터가 없음. (예: DELETE 요청 후)
206 Partial Content: 클라이언트가 입력을 초기화 해야함 (예: 폼 리셋)
2.3 3xx (리디렉션 응답)
- 요청을 완료하려면 추가적인 조치가 필요함을 나타냄.
300 Multiple Choices: 여러 개의 리소스 중 선택해야 함.
301 Moved Permanently: 요청한 리소스가 영구적으로 이동됨. (SEO 및 캐싱에 영향)
302 Found: 요청한 리소스가 임시로 이동됨. (클라이언트가 새로운 URL로 요청해야함)
303 See Other: 클라이언트가 GET 요청을 통해 새로운 URL로 리디렉션해야함.
304 Not Modified: 캐시된 데이터가 최신 상태이므로 클라이언트가 재사용 가능
307 Temporary Redirect: 요청한 리소스가 임시로 이동되었으며, 요청 방식(GET, POST 등)을 유지 해야함.
308 Permanent Redirect: 301과 유사하지만, 요청 방식을 유지해야 함.
2.4 4xx (클라이언트 오류)
- 클라이언트의 요청에 문제가 있을 때 사용 됨. (잘못된 요청, 권한 부족 등)
상태 코드 | 의미 |
400 Bad Request |
잘못된 요청 (구문 오류, 잘못된 데이터 등)
|
401 Unauthorized |
인증이 필요함 (예: 로그인 필요)
|
403 Forbidden |
요청이 서버에 의해 거부됨 (권한 부족)
|
404 Not Found |
요청한 리소스를 찾을 수 없음
|
405 Method Not Allowed |
해당 리소스에서 지원하지 않는 HTTP 메서드 사용
|
406 Not Acceptable |
클라이언트가 요청한 응답 형식을 서버가 제공할 수 없음
|
407 Proxy Authentication Required |
프록시 서버를 통한 인증이 필요함
|
408 Request Timeout |
요청이 너무 오래 걸려 서버가 종료함
|
409 Conflict |
리소스의 현재 상태와 충돌이 발생함 (예: 중복 파일 업로드)
|
410 Gone |
요청한 리소스가 영구적으로 삭제됨
|
411 Length Required |
요청에 Content-Length 헤더가 필요함
|
412 Precondition Failed |
요청의 사전 조건이 충족되지 않음
|
413 Payload Too Large |
요청 본문이 서버가 처리할 수 있는 크기를 초과함
|
414 URI Too Long |
요청한 URL이 너무 길어 서버가 처리할 수 없음
|
415 Unsupported Media Type |
서버가 요청의 콘텐츠 타입을 지원하지 않음
|
417 Expectation Failed |
Expect 헤더의 조건을 충족하지 못함
|
418 I’m a teapot |
커피머신이 아닌 찻주전자이므로 요청을 처리할 수 없음 (농담 코드, RFC 2324)
|
422 Unprocessable Entity |
요청은 이해되었지만, 데이터가 처리 불가능함 (예: JSON 파싱 실패)
|
429 Too Many Requests |
클라이언트가 너무 많은 요청을 보냄 (Rate Limiting)
|
2.5 5xx (서버 오류)
- 서버가 요청을 처리하는 중에 문제가 발생했을 때 사용됨
상태 코드 | 의미 |
500 Internal Server Error |
서버 내부 오류 (예: 코드 오류, 예외 발생)
|
501 Not Implemented |
요청한 기능이 서버에서 지원되지 않음
|
502 Bad Gateway |
서버가 다른 서버(게이트웨이)로부터 잘못된 응답을 받음
|
503 Service Unavailable |
서버가 과부하 또는 유지보수로 인해 사용 불가능함
|
504 Gateway Timeout |
게이트웨이가 응답을 받지 못함 (서버 과부하 또는 연결 문제)
|
505 HTTP Version Not Supported |
서버가 지원하지 않는 HTTP 버전 사용
|
507 Insufficient Storage |
서버의 저장 공간 부족
|
508 Loop Detected |
무한 루프 발생 (WebDAV)
|
2.6 예제 코드
2.6.1 200 OK 응답 예제
import java.io.*;
import java.net.*;
public class HttpServerExample {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(8080);
System.out.println("서버 시작: http://localhost:8080");
while (true) {
Socket client = server.accept();
BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
OutputStream writer = client.getOutputStream();
// HTTP 응답 전송
String response = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n" +
"<html><body><h1>Success!</h1></body></html>";
writer.write(response.getBytes());
writer.flush();
client.close();
}
}
}
2.6.2 404 Not Found 응답 예제
String response = "HTTP/1.1 404 Not Found\r\nContent-Type: text/html\r\n\r\n" +
"<html><body><h1>404 - 페이지를 찾을 수 없습니다.</h1></body></html>";
writer.write(response.getBytes());
'🚣활동 > NHN Academy' 카테고리의 다른 글
HTTPS (HTTP over SSL/TLS) (0) | 2025.02.17 |
---|---|
쿠키와 세션 (Cookie & Session) (0) | 2025.02.17 |
HTTP 구조 (0) | 2025.02.17 |
Hypertext, www, html, url (0) | 2025.02.17 |
Java Socket Communication (0) | 2025.02.10 |
1. HTTP 메서드
1.1 HTTP 메서드란?
- HTTP 메서드는 클라이언트가 서버에 요청을 보낼 때 어떤 동작을 수행할지 지정하는 방법이다.
- HTTP 메서드는 크게 5가지 주요 메서드와 기타 보조 메서드로 나뉜다.
- 주요 메서드: GET, POST, PUT, PATCH, DELETE
- 보조 메서드: HEAD, OPTIONS, CONNECT, TRACE
1.2 HTTP 주요 메서드 설명
1.2.1 GET 메서드
- 서버에서 데이터를 조회하는 요청이다.
- 요청 본문(Body)을 포함하지 않는다.
사용 예시
- 웹사이트에서 페이지를 로드할 때
- REST API에서 데이터를 가져올 떄 (예: GET /users)
- 검색 엔진에서 URL을 크롤링할 때
GET 요청 예제
GET /products HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: application/json
GET 응답 예제
HTTP/1.1 200 OK
Content-Type: application/json
[
{"id": 1, "name": "Laptop", "price": 1200},
{"id": 2, "name": "Mouse", "price": 50}
]
특징
- 읽기 전용 (데이터 변경 없음)
- 캐싱 가능
- 멱등성 보장 (여러 번 요청해도 동일한 응답)
1.2.2 POST 메서드
- 서버에 데이터를 생성하는 요청
- 요청 본문(Body)을 포함할 수 있음.
사용 예시
- 회원가입, 로그인
- 파일 업로드
- REST API에서 새로운 데이터 생성 (예: POST /users)
POST 요청 예제
POST /users HTTP/1.1
Host: example.com
Content-Type: application/json
{
"username": "johndoe",
"email": "john@example.com",
"password": "secure123"
}
POST 응답 예제
HTTP/1.1 201 Created
Location: /users/1
Content-Type: application/json
{
"id": 1,
"username": "johndoe",
"email": "john@example.com"
}
특징
- 새로운 리소스 생성
- 캐싱 불가능
- 멱등성이 없음 (같은 요청을 여러 번 보내면 중복 데이터 생성 가능)
1.2.3 PUT 메서드
- 기존 리소스를 "전체" 업데이트하는 요청
- 요청 본문(Body)을 포함.
사용 예시
- REST API에서 리소스를 수정할 때 (예: PUT /user/1)
- 설정을 변경할 때
PUT 요청 예제
PUT /users/1 HTTP/1.1
Host: example.com
Content-Type: application/json
{
"username": "johndoe",
"email": "john@example.com",
"password": "newpassword"
}
PUT 응답 예제
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 1,
"username": "johndoe",
"email": "john@example.com",
"password": "newpassword"
}
특징
- 기존 데이터를 전체 수정 (없는 경우 생성할 수도 있음)
- 멱등성이 있음 (같은 요청을 여러 번 보내도 동일한 결과)
1.2.4 PATCH 메서드
- 기존 리소스를 "부분" 업데이트 하는 요청
- 요청 본문(Body)을 포함.
사용예시
- REST API에서 특정 필드만 수정할 때 (예: PATCH/users/1)
PATCH 요청 예제
PATCH /users/1 HTTP/1.1
Host: example.com
Content-Type: application/json
{
"email": "newemail@example.com"
}
PATCH 응답 예제
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 1,
"username": "johndoe",
"email": "newemail@example.com"
}
특징
- 기존 데이터의 일부만 수정 가능
- 멱등성이 보장되지 않음.
- PUT과 다르게 전체 객체를 전달할 필요 없음.
1.2.5 DELETE 메서드
- 서버에서 리소스를 삭제하는 요청
- 요청 본문(Body)을 포함하지 않는다.
사용 예시
- REST API에서 데이터 삭제 (예: DELETE /users/1)
DELETE 요청 예제
DELETE /users/1 HTTP/1.1
Host: example.com
DELETE 응답 예제
HTTP/1.1 204 No Content
특징
- 리소스 삭제
- 멱등성이 있음(같은 요청을 여러 번 보내도 동일한 결과)
1.3 기타 보조 메서드

1.4 HTTP 메서드 비교표

2. HTTP Status
- HTTP Status Code(상태 코드)는 클라이언트가 서버에 요청을 보냈을 때, 서버가 응답하는 상태를 나타내는 3자리 숫자로 된 코드이다.
- 이 상태 코드는 1xx, 2xx, 3xx, 4xx, 5xx의 5가지 범주로 나뉜다.
2.1 1xx (정보 응답)
- 서버가 요청을 받았고, 처리 중 이라는 의미. 클라이언트가 계속 요청을 보내야 하는 경우에 사용된다.
100 Continue : 요청의 일부가 성공적으로 수신되었으며, 클라이언트가 나머지 요청을 계속 보내도 됨.
101 Switching Protocols: 서버가 클라이언트 요청에 따라 프로토콜을 변경 중 (예: HTTP -> WebSocket)
102 Processing: 서버가 요청을 수락했지만, 아직 응답을 완료하지 못했음 (WebDAV)
103 Early Hints: 최종 응답전에 일부 헤더를 클라이언트에게 먼저 전성
2.2 2xx(성공 응답)
- 클라이언트의 요청이 정상적으로 처리되었음을 나타낸다.
200 OK: 요청이 성공적으로 수행되었음. (일반적인 응답)
201 Created: 요청이 성공적으로 수행되었으며, 새로운 리소스가 생성됨. (예: 파일 업로드, 회원가입)
202 Accepted
203 Non-Authoritative Information: 요청이 접수되었지만, 처리가 완료되지 않았음. (비동기 처리)
204 No Content: 서버가 원본이 아닌 다른 소스로부터 가져온 정보
205 Reset Content: 요청은 성공했으나, 응답할 데이터가 없음. (예: DELETE 요청 후)
206 Partial Content: 클라이언트가 입력을 초기화 해야함 (예: 폼 리셋)
2.3 3xx (리디렉션 응답)
- 요청을 완료하려면 추가적인 조치가 필요함을 나타냄.
300 Multiple Choices: 여러 개의 리소스 중 선택해야 함.
301 Moved Permanently: 요청한 리소스가 영구적으로 이동됨. (SEO 및 캐싱에 영향)
302 Found: 요청한 리소스가 임시로 이동됨. (클라이언트가 새로운 URL로 요청해야함)
303 See Other: 클라이언트가 GET 요청을 통해 새로운 URL로 리디렉션해야함.
304 Not Modified: 캐시된 데이터가 최신 상태이므로 클라이언트가 재사용 가능
307 Temporary Redirect: 요청한 리소스가 임시로 이동되었으며, 요청 방식(GET, POST 등)을 유지 해야함.
308 Permanent Redirect: 301과 유사하지만, 요청 방식을 유지해야 함.
2.4 4xx (클라이언트 오류)
- 클라이언트의 요청에 문제가 있을 때 사용 됨. (잘못된 요청, 권한 부족 등)
상태 코드 | 의미 |
400 Bad Request |
잘못된 요청 (구문 오류, 잘못된 데이터 등)
|
401 Unauthorized |
인증이 필요함 (예: 로그인 필요)
|
403 Forbidden |
요청이 서버에 의해 거부됨 (권한 부족)
|
404 Not Found |
요청한 리소스를 찾을 수 없음
|
405 Method Not Allowed |
해당 리소스에서 지원하지 않는 HTTP 메서드 사용
|
406 Not Acceptable |
클라이언트가 요청한 응답 형식을 서버가 제공할 수 없음
|
407 Proxy Authentication Required |
프록시 서버를 통한 인증이 필요함
|
408 Request Timeout |
요청이 너무 오래 걸려 서버가 종료함
|
409 Conflict |
리소스의 현재 상태와 충돌이 발생함 (예: 중복 파일 업로드)
|
410 Gone |
요청한 리소스가 영구적으로 삭제됨
|
411 Length Required |
요청에 Content-Length 헤더가 필요함
|
412 Precondition Failed |
요청의 사전 조건이 충족되지 않음
|
413 Payload Too Large |
요청 본문이 서버가 처리할 수 있는 크기를 초과함
|
414 URI Too Long |
요청한 URL이 너무 길어 서버가 처리할 수 없음
|
415 Unsupported Media Type |
서버가 요청의 콘텐츠 타입을 지원하지 않음
|
417 Expectation Failed |
Expect 헤더의 조건을 충족하지 못함
|
418 I’m a teapot |
커피머신이 아닌 찻주전자이므로 요청을 처리할 수 없음 (농담 코드, RFC 2324)
|
422 Unprocessable Entity |
요청은 이해되었지만, 데이터가 처리 불가능함 (예: JSON 파싱 실패)
|
429 Too Many Requests |
클라이언트가 너무 많은 요청을 보냄 (Rate Limiting)
|
2.5 5xx (서버 오류)
- 서버가 요청을 처리하는 중에 문제가 발생했을 때 사용됨
상태 코드 | 의미 |
500 Internal Server Error |
서버 내부 오류 (예: 코드 오류, 예외 발생)
|
501 Not Implemented |
요청한 기능이 서버에서 지원되지 않음
|
502 Bad Gateway |
서버가 다른 서버(게이트웨이)로부터 잘못된 응답을 받음
|
503 Service Unavailable |
서버가 과부하 또는 유지보수로 인해 사용 불가능함
|
504 Gateway Timeout |
게이트웨이가 응답을 받지 못함 (서버 과부하 또는 연결 문제)
|
505 HTTP Version Not Supported |
서버가 지원하지 않는 HTTP 버전 사용
|
507 Insufficient Storage |
서버의 저장 공간 부족
|
508 Loop Detected |
무한 루프 발생 (WebDAV)
|
2.6 예제 코드
2.6.1 200 OK 응답 예제
import java.io.*;
import java.net.*;
public class HttpServerExample {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(8080);
System.out.println("서버 시작: http://localhost:8080");
while (true) {
Socket client = server.accept();
BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
OutputStream writer = client.getOutputStream();
// HTTP 응답 전송
String response = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n" +
"<html><body><h1>Success!</h1></body></html>";
writer.write(response.getBytes());
writer.flush();
client.close();
}
}
}
2.6.2 404 Not Found 응답 예제
String response = "HTTP/1.1 404 Not Found\r\nContent-Type: text/html\r\n\r\n" +
"<html><body><h1>404 - 페이지를 찾을 수 없습니다.</h1></body></html>";
writer.write(response.getBytes());
'🚣활동 > NHN Academy' 카테고리의 다른 글
HTTPS (HTTP over SSL/TLS) (0) | 2025.02.17 |
---|---|
쿠키와 세션 (Cookie & Session) (0) | 2025.02.17 |
HTTP 구조 (0) | 2025.02.17 |
Hypertext, www, html, url (0) | 2025.02.17 |
Java Socket Communication (0) | 2025.02.10 |