티스토리로 이관 중이며 해당글을 좀더 다듬어진 글로 https://mjkim1201.tistory.com/ 로 이관 하였습니다.
💌 개발을 하며 자원을 주고 받는 일이 많다. 외부 서버의 API를 받아서 사용하기도 하고 API를 개발하기도 하는데 REST API 라는 개념에 대해서 자세히 찾아보고 정리해보고자 한다. 정리한 내용을 적어보고 사소한 내용이지만 혹시라도 이 글을 보셔서 최소한 의 지식을 공유 했으면 좋겠다는 바람입니다.
먼저 API 가 무엇이고 REST는 무엇인지 의미에 대해서 접근해 볼려고 합니다.
'애플리케이션 프로그래밍 인터페이스' 로서 소프트웨어 프로그램이 다른 소프트웨어 프로그램으로 데이터를 전송할 수 있도록 하는 규칙 집합 의 의미를 가집니다.
'Representational State Transfer' 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미합니다.
HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE, PATCH 등)를 통해 해당 자원(URI)에 대한 로직을 적용하는 것을 의미합니다.
REST는 다음과 같은 3가지로 구성이 되어있습니다.
❓ 그렇다면 API의 종류는 REST API만 있을까 ?
REST 외에도 gRPC (google Remote Procedure Call) 등 다양한 API가 있으니 찾아보길 바랍니다.
참고로 , REST 원칙을 잘 지키며 설계된 API를 RESTful API라고 합니다.
위 개념에서 살펴 봤듯이 소프트웨어 에서 다른 소프트웨어 간의 데이터 전송의 개념이다.
우선, 현재 개발하고 있는 곳에서 다른 소프트웨어에서 사용할 수 있도록 구현하는 방법에 대해
살펴보겠습니다.
[1] API 개발
Spring에서 API 를 개발 한다는 것은 Controller를 개발하는 것을 의미한다. 정확히는
@RestController를 적용한 Controller를 구현하는 것이다.
더 정확히 말하자면 해당 컨트롤러에서 JSON 데이터를 반환하도록 구현 한다면, 그것은 REST API 구현이 되는 것이다. Spring에서는 Controller 어노테이션으로 @Controller @RestController 가 있다.
우선 @Controller에 대해서 살펴 보자.
@Controller : Spring MVC의 개념으로 주로 주로 View를 반환하기 위해 사용@RequestBody : 스프링에서 클라이언트가 json 형태로 보낸 데이터를 객체로 변환@Controller
public class Controllerprac {
@GetMapping("/home")
public String homepage(){
return "home.html";
}
@PostMapping("/items")
@ResponseBody // json Response 일경우 @Controller 사용시 필수.
public Item createItem(@RequestBody Item item) {
return itemService.createItem(item);
}
}
@Controller에서 물론 위와 같이 @ResponseBody 를 이용하여 Response를 Json 형태로 보낼 수 있다. Spring에서는 @RequestBody, @ResponseBody 어노테이션을 명시함으로써 MessageConverter를 통한 데이터 변환 과정을 거치며 적용 됩니다.
@RequestBody / @ResponseBody@RequestBody
: HttpRequest의 본문 requestBody의 내용을 자바 객체로 매핑하는 역할을 합니다.
@ResponseBody
: 자바 객체를 HTTP요청의 바디 내용으로 매핑하여 클라이언트로 전송

➡️ 참고 사항
@RequestBody vs @ReqeustParam vs @PathVariable@PathVariable 의 경우에는 URL의 값을 받는다
@Controller를 살펴 보았다면 이제 @RestController 에 대해서 알아보자
@RestController : @Controller + @ResponseBody
@RestController 는 Json 형태로 객체 데이터를 반환하는 것입니다. 최근에 데이터를 응답으로 제공하는 REST API를 개발할 때 주로 사용하며 객체를 ResponseEntity로 감싸서 반환합니다. 이러한 이유로 동작 과정 역시 @Controller에 @ReponseBody를 붙인 것과 완벽히 동일합니다.
@RestController
@RequestMapping("/api/v1/todos")
@Log4j2
public class TodoController {
@PostMapping("")
public ResponseEntity<TodoDTO> register(@RequestBody TodoDTO todoDTO) {
log.info("register-------------------------");
log.info(todoDTO);
todoDTO.setMno(null);
return ResponseEntity.ok(todoService.register(todoDTO));
}
@GetMapping("/{mno}")
public ResponseEntity<TodoDTO> read(@PathVariable("mno") Long mno) {
log.info("read...........");
log.info(mno);
return ResponseEntity.ok(todoService.read(mno));
}
}
ResponseEntity란?
ResponseEntity는 HttpEntity 를 상속받아 , 응답 데이터와 HTTP 상태 코드를 직접 제어할 수 있는 클래스입니다 HttpBody ,HttpHeaders ,HttpStatus 를 포함하고 있습니다.

또한 상태값을 가지고 body를 넘기는 함수가 구현되어 있습니다.
위에 예시 코드는 해당 ok를 이용하여 상태 값과 body를 response 하였습니다.

