개요
안녕하세요. J4J입니다.
이번 포스팅은 Rest API와 @RestController에 대해 적어보는 시간을 가져보려고 합니다.
Rest API란?
Rest는 Representational State Transfer의 약자로 HTTP URI를 통해 리소스를 명시하고 HTTP Method(GET, POST, DELETE, PUT)를 사용하여 리소스에 대한 행위를 표현하는 것입니다.
API는 Application Programming Interface의 약자로 응용 프로그램에서 사용할 수 있도록 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있도록 만들어 둔 인터페이스를 의미합니다.
그럼 Rest API는 무엇일까요?
위에서 설명한 Rest와 API의 개념을 합쳐서 간단하게 정리해보면 URI와 HTTP Method를 이용하여 외부에서 만들어 둔 기능들을 제어하는 것이라고 말할 수 있습니다.
그리고 HTTP Method마다 CRUD처리를 위한 역할들이 정해져 있습니다.
GET은 데이터 조회(SELECT), POST는 데이터 생성(INSERT), DELETE는 데이터 삭제(DELETE), PUT은 데이터 수정(UPDATE)입니다.
알아두셔야 될 점은 이런 역할들이 정해져 있다고 GET 요청을 할 때 데이터 생성이나 데이터 삭제를 못하는 것은 아닙니다.
횡단보도에서 초록불의 역할은 차를 멈추게 하고 사람들이 길을 건너도록 해주는 것과 같이 단순히 각자의 역할이 정해져 있다는 뜻입니다.
신호등이 초록불이라고 차가 안 지나가는 것은 아니니까요.
통신 과정
일반적으로 요청을 보내는 클라이언트(사용자 화면)와 요청에 대한 응답을 해주는 서버가 존재하게 됩니다.
클라이언트에서는 서버에서 만들어 둔 기능이 요구하는 HTTP Method와 URI를 전달하게 될 것이고 해당 요청을 받은 서버는 서버 내에 존재하는 비즈니스 로직을 처리한 후 클라이언트에서 원하는 데이터와 요청에 대한 결과를 코드로 표현한 상태 코드 값을 반환합니다.
클라이언트에 값이 전달되면 클라이언트와 서버 간의 통신은 종료되고 클라이언트에서는 받은 데이터 값을 알맞게 가공하여 사용자가 정보를 확인할 수 있도록 화면에 뿌려줍니다.
스프링에서 Rest API
스프링은 클라이언트와 서버 중 서버에 해당합니다.
그렇기 때문에 스프링이 해야 될 역할은 클라이언트에서 사용할 기능들을 만들어두는 것입니다.
앞서 포스팅한 스프링 MVC 관련 글에서 스프링 MVC구조에 대해 언급한 적이 있습니다.
스프링 MVC구조에서는 비즈니스 로직이 처리된 후 처리된 데이터를 뷰에 담아 사용자에게 응답을 해줬지만 Rest API구조에서는 뷰와 관련된 처리가 없어지고 사용자에게 데이터만 응답하면 됩니다.
기존의 스프링 MVC구조를 이용하여 REST API구조를 표현하면 다음과 같이 표현될 수 있습니다.
위와 같이 구조가 바뀌면서 영향을 받는 녀석은 Controller이고 Controller에서 변경이 일어나야 되는 부분은 리턴 타입과 어노테이션입니다.
리턴 타입은 MVC구조와 같이 항상 String일 필요는 없고 문자열을 리턴 하고 싶으면 String, 객체를 리턴 하고 싶으면 객체 타입을 리턴 타입으로 정의하면 됩니다.
어노테이션에서는 MVC구조를 위해 컨트롤러가 구현된 클래스에서 사용되는 어노테이션은 @Controller인데 Rest API를 위한 어노테이션은 @RestController입니다.
참고적으로 @RestController는 @Controller + @ResponseBody이기 때문에 @RestController대신에 @Controller와 @ResponseBody를 같이 명시해도 상관이 없습니다.
또한 클래스에는 @Controller로 명시하고 메서드에 @ResponseBody를 명시하여 Rest API를 목적으로 하는 메서드와 MVC를 목적으로 하는 메서드를 동일 클래스에 작성할 수도 있습니다.
비동기 / Jquery / Ajax
클라이언트에서 서버에 요청을 보낼 때 MVC구조에서는 form태그를 이용했지만 Rest API구조에서는 Ajax를 이용한 비동기 처리를 합니다.
비동기 방식은 요청한 데이터 작업이 처리가 완료될 때까지 기다리는 동기 방식과 달리 데이터 작업이 처리되는 것을 기다리지 않습니다.
다른 말로는 클라이언트에서 서버에 데이터를 요청하고 클라이언트는 자신의 할 일을 하고 있다가 서버에서 작업이 끝난 뒤 응답하면 그때서야 데이터를 받아 이후의 작업을 처리한다는 것입니다.
그리고 이런 비동기 처리를 위해 사용되는 대표적인 라이브러리가 Jquery이고 Jquery에 정의된 Ajax라는 메서드를 이용하여 비동기 처리를 수행합니다.
다음 포스팅에서 스프링과 JSP를 이용하여 Rest API구조를 만들기 위한 프로젝트 설정을 진행해보도록 하겠습니다.
참조
[Network] REST란? REST API란? RESTful이란?
정리
이상으로 Rest API와 @RestController에 대해 간단하게 알아보는 시간이었습니다.
읽어주셔서 감사합니다.
'Spring > Spring' 카테고리의 다른 글
[Spring] Filter / Interceptor (0) | 2021.03.01 |
---|---|
[Spring] Rest API / @RestController(2) (0) | 2021.02.27 |
[Spring] 스프링을 이용한 MVC패턴 구현(6) - JSP를 이용한 화면 구성 (0) | 2021.02.22 |
[Spring] 스프링을 이용한 MVC패턴 구현(5) - @Controller 구성 (0) | 2021.02.18 |
[Spring] 스프링을 이용한 MVC패턴 구현(4) - @Service 구성 (0) | 2021.02.16 |
댓글