요청하신 내용(들여쓰기, 불렛/번호 규칙, 인용/보충 표기 방식)을 일관된 스타일로 맞춰 전체 문서를 정리해드릴게요. 아래 버전은 “큰 단원=H1/H2, 하위는 번호 목록(1., 1-1.), 나열은 - 불렛, 보충은 > 보충: 인용” 규칙으로 통일했습니다.
HTTP(하이퍼텍스트 전송 프로토콜, Hypertext Transfer Protocol)는 웹에서 데이터를 주고받기 위해 사용되는 통신 프로토콜(규약) 중 하나임.
“웹에서 요청(Request)과 응답(Response)을 주고받는 기본 규칙”이 HTTP이다.
HTTP는 크게 Request(요청)와 Response(응답)로 이루어져 있음.
둘 다 공통적으로 아래 형태를 가짐.
(이미지 위치)
HTTP 메서드란 “이 요청으로 무엇을 하고 싶은지”를 나타내는 규칙임.
GET(데이터주세요)POST(데이터줄게요)PUTPATCH(데이터수정)DELETE(데이터삭제)POST, PUT, PATCH임.HTTP 메서드 상세 의미는 아래와 같음.
GET: 조회POST: 주로 등록에 사용PUT: 기존 자원 대체PATCH: 기존 자원 부분 변경DELETE: 자원 삭제PUT과 PATCH의 차이
<회원정보를 수정하는 시나리오 상상>
이름, email, 나이 등 기존 데이터를 불러와서 수정을 할 것임. 제출하면 서버에 도착함. 서버에서는 이를PUT으로 약속할지,PATCH로 약속할지를 정해야 함.
- 기존 데이터를 전체로 불러와서 수정하는데 일부 데이터를 수정하지 않고 넘기는 경우
- 수정이 된 필드인지 아닌지 서버에서는 알 수 없음 → DB를 뒤져서 비교해야 함(비효율적임) → 이런 성격에는
PUT이 더 어울림.- 이름만 수정하는 UI의 경우
- 단일 필드를 각각 수정하는 경우는
PATCH가 더 적절함.보충: 즉, FE(axios)와 서버(Spring 어노테이션) 개발자 사이에서 시나리오에 맞게 협의하면 되는 부분임. (
PUT이 조금 더 일반적이긴 함)
같은 호출을 여러 번 하였을 때, 응답받는 결과가 동일하고 데이터상에 변경이 없을 때 멱등하다고 표현함.
GET, PUT, DELETE는 멱등함.POST만 멱등이 아님.POST는 멱등하지 않으므로 재시도 시 위험할 수 있음.보충: 멱등성은 특히 네트워크 재시도/중복 클릭/타임아웃 재요청 같은 상황에서 사고를 막는 중요한 개념임.
/) 위치요청 Start line에는 “어디로 갈지”를 나타내는 URL이 들어감. URL 패턴 종류는 대표적으로 두 가지임.
member/info/1member/info?id=1? 뒤에 검색조건/정렬 등의 정보를 주입함.일반적인 사용 예시는 아래와 같음.
| 상황 | 예시 URL |
|---|---|
| 회원정보 조회(id로 조회) | member/1 |
| 회원정보 조회(검색조건으로 조회) → name=”홍길동”, age=30 | member?name=hongildong&age=30 |
보충: 실무에서 “단건 식별(리소스 ID)”는 path variable을 더 자주 쓰고, “검색/필터/정렬”은 query parameter를 더 자주 쓰는 편임.
HTTP/1.1Host 헤더에는 도메인 정보가 포함됨. 사용자가 요청하는 URL에 대한 형식임.
http://host:port/pathhttps://host:port/pathhttp 관련
http://localhost/member/createhttps 관련
https://naver.com/member/createcf) http://localhost:8080/의 의미
보충: 같은 host라도 포트가 다르면 실제로는 다른 서비스(서버 프로세스)로 연결되는 경우가 많음.
Content-Type은 “요청 body에 담긴 데이터가 어떤 형식인지”를 서버에 알려주는 헤더임.
application/jsonapplication/x-www-form-urlencodedmultipart/form-datatext/plain헤더와 바디를 구분하는 빈 줄(Empty line)이 존재함.
GET, DELETE 요청은 body가 없음.GET은 데이터를 “요청”하는 성격이므로 body를 잘 쓰지 않음.application/jsonapplication/x-www-form-urlencodedmultipart/form-data보충:
GET/DELETE에도 스펙상 body를 “완전히 금지”한다고 보기보단, 실무/표준/프레임워크 호환성 관점에서 “일반적으로 쓰지 않음”으로 이해하면 안전함.
Body 데이터 Content-Type 상세 설명(요청 기준)
1) application/json
{
"username": "hongildong",
"email": "hong@naver.com",
"age": 32
}
POST/PATCH/PUT 등 클라이언트가 서버로 데이터를 전송하는 상황에 사용함.2) application/x-www-form-urlencoded
username=hongildong&email=hong@naver.com&age=32
&로 구분함.POST 등에서 사용 가능하나, 현대적인 HTTP 통신에서는 JSON 방식을 더 선호함.3) multipart/form-data
email=hong@naver.com&age=32&profileImage:(binary file)
key=value 형태이며 파일은 바이너리 데이터로 변환됨.application/json은 순수 텍스트 기반이므로 파일 전송 시 multipart/form-data는 대체 불가임.4) text/plain
Hello World!!
HTTP 버전 명시: HTTP/1.1
HTTP 상태 코드
200번대: 성공400번대: 요청 오류500번대: 서버 내부 오류상태 메시지: OK 등 편의대로 작성
예: 만약 500을 받으면, FE에서는 사용자에게 그에 맞는 메시지를 출력해줘야 함.
HTTP 상태 코드 상세 설명은 아래 글에서 정리함.
응답에서도 Content-Type은 다양하게 쓰임.
application/jsontext/plaintext/htmlimage/png, video/mp4 등일반적인 경향은 아래와 같음.
GET 요청 응답: JSON이 가장 보편적임.POST 요청 응답: text/plain 같은 간단 문자열을 주는 경우도 있음.헤더와 바디 구분을 위한 Empty line이 존재함.
POST 요청을 보내온다면, “OK”와 같은 정상 처리 여부를 문자열로 응답하는 경우가 있음.즉, 요청은 보통 JSON을 보내고(
POST/PUT/PATCH), 응답은 상황에 따라 JSON/텍스트/HTML/파일 등으로 다양하게 내려갈 수 있음
Body 데이터 Content-Type 상세 설명(응답 기준)
1) application/json
2) text/plain
ok
POST 요청에서 응답되는 형태로 종종 사용됨.3) text/html
<!DOCTYPE html>
<html>
<head>
<title>welcome</title>
</head>
<body>
<p>Hello, world!</p>
</body>
</html>
4) image/png, video/mp4 등
Content-Type을 설정함.