본문 바로가기
국비학원

[국비지원] KH 정보교육원 108일차

by 도전하는 개발자 2022. 8. 31.

kh day 108

chap 15 검색처리 pass

restful 방식의 request mapping 방법 습득 및 실습 드가자!!!

---

시대와 기술이 발전하고 스마트폰이 보급되면서 
사용자들이 PC기반의 웹브라우저 보다는 모바일 웹브라우저나 앱을 주로 사용하게 됨
더 이상 back end 서버의 역할이 웹 브라우저를 위한 웹 서비스만을 위한게 아니라
순수한 데이터(XML, JSON, 문자열)를 전달하는 역할로 바뀜

단 통신 프로토콜은 여전히 HTTP 프로토콜을 사용
여전히 Requst Message, Response Message 유효함.
대신 요청메시지 바디 안에 데이터(XML, JSON, 문자열)가 존재할 수 있고,
응답메시지 바디 안에도 역시 데이터(XML, JSON, 문자열)가 존재.

다양한 클라이언트가 HTTP protocol에 따라 요청메시지를 만들어 백엔드로 보낼 때
무엇을 요청하는 것인지 확실히 표시해야함! (비지니스로직 - 데이터에 대한 CRUD)

위와 같이 클라이언트가 요청을 백엔드에 보내려면
1) HTTP method (전송방식)가 확장됨 - GET (R) / POST (U) / PUT (C) / DELETE (D)
2) HTTP request URI - 위 1)의 대상이 되는 자원을 표시

ex) http:// ~~~~~/board/new + PUT (C) => 게시판에 새로은 글을 등록해 달라는 요청
    http:// ~~~~~/board/123  + GET (R) =>  123번 게시글을 읽어서 보내달라는 요청
    http:// ~~~~~/board/77   + POST (U) => 77번 게시글을 업데이트 해달라는 요청 
    http:// ~~~~~/board/45   + DELETE (D) => 45번 게시글을 삭제해달라는 요청

RESTful 서비스 개발방식은 결국 HTTP method + HTTP request URI 이 두가지 조합으로
어떤 자원에 대해서 어떤 행위를 요청하는 것인지 표현(Representation)할 수 있어야 한다.

---

chap 16

과거의 웹 서비스 
고정된 브라우저의 주소창 
특정한 확장자를 이용하는 모델 2 방식(ex> *.do) 
특정한 파라미터에 의한 분기 구조 

현재의 웹 서비스 
URI  + 식별데이터 
GET/POST외에 PUT/DELETE 등의 다양한 전송 방식 사용 
서버에서는 순수한 데이터만을 서비스 하는 방식 

---

새로운 개발방식의 등장 필요성 대두 -> RESTful 서비스 개발 등장!!!

REST방식 
REST는 ‘Representational State Transfer’의 약어로 하나의 URI는 하나의 고유한 리소스(Resource)를 대표하도록 설계된다는 개념에 전송방식을 결합해서 원하는 작업을 지정

스프링에서는 다양한 어노테이션과 기능을 통해서 REST방식의 서비스를 간편하게 구축할 수 있음 


---

@RestController

스프링 4에서부터는 @Controller 외에 @RestController라는 어노테이션을 추가해서 해당 Controller의 모든 메서드의 리턴 타입을 기존과 다르게 처리한다는 것을 명시

@RestController는 메서드의 리턴 타입으로 사용자가 정의한 클래스 타입을 사용할 수 있고, 이를 JSON이나 XML로 자동으로 처리

---

@RestController => 핸들러 메소드의 타입이 무엇이 되었든(void아니면), 모두 응답 메시지의 body 에 반환한 자바객체를 넣으라!=> 스프링이 data-binding 라이브러리를 이용해서, produces 에 지정한 media type 에 맞게, XML or JSON으로 자동변환해서 넣습니다.

@RestController = @Controller + @ResponseBody

---

** Data Binding library는 아래의 2개 변환과정을 지원 **
자바객체 ==> XML or JSON 으로 변환하는 과정 : Serialize(직렬화)
XML or JSON ==> 자바객체로 역변환하는 과정 : De-serialize(역직렬화)