티스토리 뷰
REST API 는 URL을 보고 이해하기 쉬운 구조.
각 자원(Resources)을 고유한 URL로 식별한다.
그래서 URL을 보면 어떤 자원(사용자,게시물 등)에 접근하는지, 그리고 어떤 동작(읽기,쓰기,수정,삭제 등)을 수행하는지 쉽게 알 수 있습니다.
예를 들어
GET /users: 모든 사용자를 가져오기
POST /users: 새로운 사용자 생성
GET /users/1: 특정 사용자(아이디 1)를 가져오기
PUT /users/1: 특정 사용자(아이디 1) 정보 404 Not Found 등)를 사용하여 통신한다.
REST API의 특징
리소스(Resources)와 URI(Uniform Resource Identifier)의 개념을 먼저 알아야 합니다.
리소스(Resources)
백엔드 서버의 비지니스 로직이 제공하는 각각의 개별적인 자원이나 엔티티를 표현한다.
리소스는 일반적으로 서버가 관리하고 클라이언트가 조작할 수 있는 데이터 단위다.
URI(Uniform Resource Identifier)
리소스를 식별하고 위치(URL) 또는 이름(URN)을 나타내는 표준화된 방법을 제공한다.
인터넷 상에서 리소스를 유일하게 식별하는 용도이다.
표준 HTTP 메서드 사용 특징
REST API는 표준 HTTP 메서드를 사용하여 리소스에 대해 다양한 작업을 수행한다.
각 메서드는 다음과 같은 기능적 의미를 갖는다.
GET : 리소스를 조회
POST : 리소스를 생성
PUT : 리소스를 수정
DELETE : 리소스를 제거
데이터 송수신 특징
JSON 또는 XML 과 같은 다양한 형태의 리소스를 전송할 수 있다.
단, 웹 페이지를 구성하지 않고 데이터를 전송하기 때문에, 데이터는 클라이언트에서 비동기 방식으로 화면에 출력해야 한다.
JSON(JavaScript Object Notation)
REST API는 주로 JSON을 이용하여 데이터를 송수신한다.
JSON은 자바스크립트 기반 경량 데이터 교환 형식으로, 생성 및 변환이 쉬운 데이터 형식입니다.
- 자바스크립트 기반 경량 데이터 교환 형식
- 생성 및 변환이 쉬운 데이터 형식
- 텍스트 형태로 전송되며 여러 시스템에서 호환 가능
- 많은 프로그래밍 언어에서 JSON을 다루는 라이브러리 제공
특징
- 간결하고 가독성이 좋음. 텍스트 기반으로 구조화되어 있어 사람이 쉽게 읽고 쓸 수 있음.
- 키-값 쌍(key-value pair) : 데이터는 key-value 쌍으로 이루어져 있으며, 키는 문자열이고 값은 다양한 데이터 타입을 지원한다.
- 다양한 데이터 타입을 지원 : 문자열, 숫자, 불리언 , 배열, 객체(다른 JSON 객체), null 등 다양한 데이터 유형을 지원한다.
- 계층 구조 : JSON 객체 안에 또 다른 JSON 객체나 배열을 중첩하여 사용할 수 있다.
JSON 데이터 구조
- 중괄호 안에 키와 값 쌍(Key-Value Pair)으로 구성된다.
- 각 쌍(Pair)은 콤마로 구분되며, 키(Key)는 문자열로 표현합니다.
{
“이름” : “지민”,
“나이” : “30” ,
“성별” : “남성” ,
“주소” : {
“도시” : “서울”,
“우편번호” : “12345”
} ,
“관심사” : {”프로그래밍” , “음악” , “여행”}
}
- “주소” 키에 저장된 값은 도시와 우편번호를 JSON 객체로 묶은 값입니다.
- “관심사” 키에는 배열로 데이터를 저장했습니다.
- JSON은 전송할 때, 데이터를 문자열 타입으로 변경하여 전송해야 합니다.
- 문자열은 모든 시스템에서 호환되며, 경량 데이터라는 특징을 갖지만, 각 시스템에서 사용되는 데이터 형태로 변환하려면 많은 작업을 거쳐야합니다.
- JavaScript에서는 JSON.stringfy() 및 JSON.parse() 사용하여 쉽게 변환이 가능하고,
- Java로 구현된 Spring에서는 jackson-databind를 사용하여 쉽게 변환이 가능합니다.
- 댓글 기능을 구현하기 위해 JavaScript와 Java 사이에서 JSON 데이터를 전송할 예정입니다.
Spring REST API 어노테이션
@RequestBody
- HTTP 요청으로 전송된 JSON 데이터를 Java 객체로 변환해주는 스프링 어노테이션
- Controller 메서드 상단에 지정하면 자동으로 매개변수에 데이터 바인딩(Data-Binding)
- 주로 REST API에서 클라이언트가 서버에 보낸 데이터를 수신하고 처리하는데 사용
@ResponseBody
- Java 객체를 JSON 데이터로 변환해주는 스프링 어노테이션
- Controller 메서드 상단에 지정하면 JSP를 리턴하는 방식에서 JSON 데이터를 리턴하는 방식으로 변경됨
- 주로 REST API에서 서버가 클라이언트에 JSON 데이터를 수신할 때 사용
@RestController
- 해당 클래스가 JSON 데이터로 메서드 값을 리턴하도록 지정하는 스프링 어노테이션
- @ResponseBody를 사용하지 않아도 메소드가 자동으로 JSON 데이터 반환
- 해당 클래스를 RESTful 하게 사용할 때 선언
요약
- REST(Representational State Transfer) API는 웹 서비스 간에 통신하기 위한 소프트웨어 인터페이스
- REST API는 다양한 클라이언트 및 서버 간의 통신을 단순화한다.
- 데이터 통신은 JSON 형식으로 수행한다.
- JSON은 자바스크립트 기반 경량 데이터 교환 형식이다.
- JSON은 전송할 때 데이터를 문자열 타입으로 변경하여 전송해야 한다.
- Spring MVC 는 jackson - databind 를 사용하여 JSON을 바인딩
- 클라이언트에서 서버로 전송되는 JSON 데이터 바인딩은 @RequestBody를 사용
- 서버에서 클라이언트로 전송되는 JSON 데이터 바인딩은 @ResponseBody를 사용
'기술 공부' 카테고리의 다른 글
MVC에 대한 설명 (0) | 2024.07.31 |
---|---|
객체 지향 프로그래밍(Object Oriented Programming) 특징과 클래스(Class),인스턴스(Instance),객체(Object)의 정의 (0) | 2024.07.30 |