Spring Boot(Http1.1, Stateless, MIME)
1. PostMan Download
https://www.postman.com/downloads/
Download Postman | Get Started for Free
Try Postman for free! Join 20 million developers who rely on Postman, the collaboration platform for API development. Create better APIs—faster.
www.postman.com
HTTP 통신 확인을 위해서 PostMan을 각 운영체제에 맞게 다운로드 해준다.
2. HTTP1.1
- get
- post
- delete
- put
클라이언트 A와 서버 B는 Byte Stream(8bit)를 통해서 데이터를 write 해주거나 read 해줄 수 있다.
3. stateless 와 statful
A포트와 B포트가 연결되어 있고, B포트를 원하는 새로운 C,D포트가 생겼을 때, A포트는 그대로 열려 있고 C,B 포트가 새롭게 생성되어 B포트와 연결된다면 B포트에는 과부화와 같은 문제점을 가질 수 있다. 이러한 통신 방법은 Chat 과 같은 통신에 주로 사용되며 Stateful 방식의 대표적 사례이다.
반면에 http 통신에서는 클라이언트의 요청시마다 스트림을 연결해서 Data를 주고 받는 형식인 Stateless의 방식을 채택하여 사용하고 있다.
4. MIME 타입
MIME 타입이란 클라이언트에게 전송된 문서의 다양성을 알려주기 위한 메커니즘이다.
수 많은 종류의 문서가 있으므로 많은 MIME 타입들이 존재합니다.
MIME 타입의 일반적인 구조는
type/subtype
로 굉장히 간단하게 표현되어 있다. ' / ' 로 구분된 두 개의 문자열인 타입과 서브타입으로 구성됩니다.
5. Controller 생성
- HttpControllerTest.java 생성
- Get 메서드
- Post 메서드
- Put 메서드
- Delete 메서드
@RequestParam을 이용해서 하나 하나의 데이터 값을 가져오고 있는 모습.
// 인터넷 브라우저 요청은 무조건 get 요청밖에 할 수 없다.
// http://localhost:8080/http/get(select)
@GetMapping("/http/get")
public String getTest(@RequestParam int id, @RequestParam String username) {
return "get 요청:" + id + ", " + username;
}
@RequestParam을 이용하지 않고 Member m을 이용해서 한방에 다 불러오는 모습
// http://localhost:8080/http/post(insert)
@PostMapping("/http/post")
public String postTest(Member m) {
return "post 요청:" + m.getId() +","+ m.getUsername()+"," + m.getPassword()+"," + m.getEmail();
}
이제는 text 형식의 데이터를 post 방식으로 넘겨주도록 하겠다. (mimetype text/plain)
// http://localhost:8080/http/post(insert)
@PostMapping("/http/post")
public String postTest(String text) {
return "post 요청:" + text;
}
text 데이터가 null값으로 잘못 보여지고 있는 모습
=> @RequestBody 어노테이션을 사용하지 않았기 때문
// http://localhost:8080/http/post(insert)
@PostMapping("/http/post")
public String postTest(@RequestBody String text) {
return "post 요청:" + text;
}
@RequestBody 어노테이션을 사용하고 난 뒤에는 정상적으로 데이터가 출력되는 것을 볼 수 있다!!
마지막으로 (application/json) 데이터를 보내보도록 하겠다!
// http://localhost:8080/http/post(insert)
@PostMapping("/http/post")
public String postTest(@RequestBody Member m) {
return "post 요청:" + m.getId() +" " + m.getUsername()+" " + m.getPassword()+" " + m.getEmail();
}
@RequestBody로 Member 변수 객체를 받으면서 json 데이터를 파싱해서 return이 가능하다!!
application/json 형식으로 데이터를 POST 했지만, 알아서 파싱
이 모든 것은 Springboot 의 messageconverter가 알아서 수행해준다!
신입 백엔드 개발자에겐 HTTP 메소드를 완벽하게 숙지하고 있다는것이 그 사람의 퀄리티를 높힐 수 있다고 한다.
OSI계층이라던지, 디자인패턴(싱글톤, 팩토리), Http(상태 코드), 할 줄 아는 언어의 개수, 프레임 워크의 개수, RDB, 캐싱DB Redis, 테스트도구(Swagger, junit) 등을 숙지하도록 노력하도록 해야겠다!