본문 바로가기
카테고리 없음

TIL-7

by 오우지 2021. 9. 23.

간단순서

1. Http가 무엇일까?

2. Spring에서 ResponseEntity란?

3. HTTP 기초 지식

4. 간단소감

 


1. Http가 무엇일까?

Http는 Client와 Server사이의 요청을 처리하는 규약으로

 

Http 요청은 Start Line, Headers, Body로 구성된다.

1. Start Line - method, Url, version으로 구성

2. Headers 요청에 대한 접속 운영체제, 브라우저, 인증정보로 구성

3. json, html같은 구체적인 내용

 

- Http응답

Status Line과 Header, body로 구성

 


2. Spring에서 ResponseEntity란?

 

Spring에서 Api를 만들 때 Http Response를 만드는 것이 관심사인데 404, 200 등 상태코드 뿐 아니라 Body에 들어갈 내용도 필요하다. 이것을 위한 자동구성이 ResponseBody와 ResponseEntity다.

 

HttpEntity라는 클래스가 존재(Http 요청 또는 응답에 해당하는 HttpHeader와 HttpBody를 포함)

HttpEntity 클래스를 상속해 구현한 RequestEntity와 ResponseEntity 두개가 있다. 따라서 ResponserEntity는 HttpStatus, HttpHeader, HttpBody를 포함한다.

 

@ResponseBody는 HTTP규격에 맞는 응답을 만들어주기 위한 annotation으로 HttpMessageConverter를 사용한다.

이는 RestController가 붙어있다면 이미 포함된 Annotation이기 때문에 명시해주지 않아도 된다.

하지만 단점으로는 Header에 대해 유연하게 설정할 수 없다. 데이터만 전송하는 형식이기 때문에 따라서 ResponseEntity라는 객체가 쓰인다.

 

ResponseEntity도 HTTP응답을 만들어주기 위한 객체다. Annotation이 아닌 객체다.

ex) return new ResponseEntity<>(1, "성공")

return을 객체로 해준다. Status Code를 지정해줄 수 있다.

 

따라서 결론은 ResponseEntity를 사용해라.

Constructor보다는 Builder패턴을 이용해주면 실수를 할 가능성이 줄어들기 때문에 추천한다.

 


3. HTTP 기초 지식

 

IP(인터넷 프로토콜) 

-지정한 IP 주소에 데이터 전달

-IP 패킷 정보(출발지 IP, 목적지IP, data, etc..)

 

한계:

-비연결성 : 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송

-비신뢰성 : 중간에 패킷 실종, 순서대로 안올때

-프로그램 구분 : 여러개의 프로그램 구동 시 가져온 정보를 어떻게 분류할 것이냐

 

TCP(Transmission Control Protocol, 전송 제어 프로토콜)

출발지Port, 목적지Port, 전송제어, 순서, 검증정보 등을 추가해서 IP로 보내준다.

3way handshake

 

-연결지향 : 가상연결을 통한 상대 포트의 생존 확인

-데이터 전달 보증

-순서보장

 

UDP(User Datagram Protocol, 사용자 데이터그램 프로토콜)

기능이 거의 없다. 요즘 점유율이 올라가는 중

 

-데이터 전달 및 순서가 보장되지 않지만 단순하고 빠르다.

-IP와 거의 같지만 PORT(하나의 IP에서 패킷을 구분하기 위해 필요한 것)와 체크섬이 추가됐다.

-애플리케이션에서 추가 작업이 필요하다.

 

PORT

한번에 둘 이상 프로그램에서 연결해야 하면 PORT를 할당해 주면 데이터를 혼동하지 않고 각자 프로그램을 구현 가능하다.

FTP - 20, 21

TELNET - 23

HTTP - 80

HTTPS - 443

 

DNS(Domain Name System)

전화번호부

도메인 명을 IP 주소로 변환


4. 간단소감

마지막은 API통신의 깔끔함을 위해 따로 공부하는 HTTP 기본 개념이다.

많은걸 배우고 싶은데 하루가 부족하다. 적당량의 잠은 자야 생활이 되는 사람이라 잠을 더 줄일 순 없으니까.

다른 부수적인 시간을 더 아끼려고 노력해야겠다. 물론 캠프 평일엔 그게 타의적으로 아껴지겠지만.

이렇게 네달 하고나면 인생의 그 어떤 네달보다 많은 지식을 쌓을 수 있을 것 같다. 행복하다.