HTTP(Hypertext Transfer Protocol)란?
인터넷에서 정보를 주고받는데 사용되는 통신 규약 (protocol)이다.
간단히 말해, 웹 브라우저와 웹 서버 사이에 데이터를 주고받는 방법을 정의 하는 규칙이다.
클라이언트(Client)
클라이언트는 정보를 요청하는 사용자입니다. 보통은 웹 브라우저가 클라 이언트 역할을 합니다. 사용자가 웹 브라우저를 통해 웹 페이지를 요청하면, 이 요청이 HTTP 메시지로 웹 서버로 전송됩니다.
서버(Server)
서버는 클라이언트 요청에 응답하여 정보를 제공하는 컴퓨터이다.
웹 서버는 클라이언트의 요청을 받아 해당하는 웹 페이지나 데이터를 전송한다.
쉽게 생각하면 클라이언프는 프런트이고, 서버는 백이다.
HTTP 메시지(HTTP Message)
HTTP 통신에서 클라이언트와 서버 사이에 교환되는 데이터이다.
HTTP 메시지는 요청(request)과 응답(response) 두 가지 유형이 있다.
요청 은 클라이언트가 서버에 보내는 것이며, 응답은 서버가 클라이언트에게 다시 보내는 것입니다.
요청(Request)
클라이언트가 서버에게 정보를 요청할 때 보내는 메시지이다.
요청은 HTTP 메서드(method), 요청 대상의 URL, 그리고 추가적인 정보들을 포함할 수 있다.
예를 들어, 웹 브라우저에서 웹 페이지를 열면, 웹 브라우저는 해당 웹 페이지의 URL을 서버에 요청하게 됩니다.
응답(Response)
서버가 클라이언트에게 정보를 제공할 때 보내는 메시지다.
응답은 상태 코드(status code), 응답의 내용(body) 등으로 구성된다.
상태 코드는 요청의 성공 여부 나 실패 이유를 나타낸다.
예를 들어, 웹 서버가 요청된 웹 페이지를 찾았다면, 상태 코드 200(OK)를 응답으로 보낼 것이다.
응답헤더
method의 종류
GET(읽기), POST(쓰기), PUT(수정), DELETE(삭제)
지금까지는 헤더에 대해 알아 봤다면, body에 들어가는 JSON데이터에 대해 알아보자.
JSON(JavaScript Object Notion)은 데이터 교환 형식의 일종이다.
JSON에서는 [] 을 사용해서 배열을 표현하고, {} 로 객체 단위를 나눌 수 있다.
JSON은 key, value의 형태로 Map형태로 구성되어있습니다.
이름: 양동현
나이: 24
주소지: 대전
듣는 수업: 데이터통신, 운영체제
이 데이터를 JSON화 하면
{
"name": "양동현",
"age": 24,
"address": "대전",
"classes": [
"운영체제",
"데이터통신",
]
}
이를 스프링에 적용하면
회원가입을 하려면 내용에 대한 추가가 필요하다. 그러나 이러한 로그인 정보를 받아오려면 내용을 작성하는 POST라는
annotation이 필요하다. 그래서 spring에서 제공하는 @PostMapping을 사용하여 URI와 함께 적용한다.
코드에서 사용한 @RequestBody 어노테이션은 요청 메세지의 body 부분에서 가져오는 것이다.
해당키 값에 대한 값을 가져올 수도 있고, body의 내용들을 class 객체형태로 가져올 수도 있다.
HTTP 메세지에 해당하는 코드 부분을 간단하게 연결해본다면
조회
사용자의 정보를 읽어오는 것이기 때문에 GET을 사용하는 것이 바람직하다.
여기서 @PathVariable은 Host의 URI에서 {memberId}부분을 가져오는 어노테이션이다.
이를 HTTP 메시지에 해당하는 코드 부분을 연결해보면
수정
PutMapping을 사용하여 member의 정보를 수정하는 api를 작성한다.
이를 HTTP 메시지에 해당하는 코드부분을 연결하면
삭제
@RequestBody : Body에 담겨져오는 JSON데이터 가져오기
@PathVariable : URI에서 값을 가져오기
@RequestParam : URI 뒤에 파라미터 값으로 전달되는 데이터 가져오기 (ex) /information?memberId=멋쟁이 사자 )
@ModelAttribute : 여러개의 파라미터를 클래스로 만들어 가져오기
Context-type : 전송되는 데이터 타입을 나타내는 header정보 중 하나
text/plain : 일반 텍스트를 보낼 경우
key=value&key=value : html의 form을 보낼 경우
{key:value} : JSON데이터를 보낼 경우
multipart/form-data : 업로드한 파일을 보낼 경우
REST란?
HTTP URI를 통해 자원을 명시하는 것
HTTP Method : 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것
CRUD란?
C : Create 생성
R : Read 읽기
U : Update 수정
D : delete 삭제
stateful 과 stateless
stateless :
서버에서 이전 요청에 대한 상태를 기억한다.
서버가 바뀌어도 문제없이 서비스를 수행할 수 있다.
-> 클라이언트가 하고자하는 최종목적을 위해 지나가는 과정마다 전달해야하는 내용이 많아진다
stateful :
서버에서 이전 요청에 대한 상태를 기억하지 않고 주어진 요청에 대해서만 응답한다.
API의 URI를 정하는 방법
URI는 리소스만 식별한다. 리소스는 명사이고 행위는 동사이다. 이때 행위는 HTTP Method로 사용한다.
회원 목록 조회 : /members
회원 조회 : /members/{id}
회원 등록 : /members
회원 수정 : /members/{id}
회원 삭제 : /members/{id}
여기에 메소드를 붙이면
회원 목록 조회 : GET/ HTTP/1.1 /members
회원 조회 : GET/ HTTP/1.1 /members/{id}
회원 등록 : POST/ HTTP/1.1 /members
회원 수정 : PUT/ HTTP/1.1 /members/{id}
회원 삭제 : DELETE/ HTTP/1.1 /members/{id}
'🚣활동 > 멋쟁이사자처럼' 카테고리의 다른 글
[멋사 12기 중앙해커톤 참여] (0) | 2024.08.09 |
---|---|
[멋쟁이사자처럼] 4주차 정기세션 (0) | 2024.03.31 |
[멋쟁이사자처럼] 3주차 정기세션 (0) | 2024.03.24 |
[멋쟁이사자처럼] 2주차 정기세션 (0) | 2024.03.14 |
[멋쟁이사자처럼] 1주차 정기세션 - 1 (0) | 2024.03.13 |