▸Spring MVC/기본 문법

스프링 Restful 서비스(API)_기본 개념 [1/3]

코데방 2020. 3. 20.
728x90
- Develop OS : Windows10 Ent, 64bit
- WEB/WAS Server : Tomcat v9.0
- DBMS : MySQL 5.7.29 for Linux (Docker)
- Language : JAVA 1.8 (JDK 1.8)
- Framwork : Spring 3.1.1 Release
- Build Tool : Maven 3.6.3
- ORM : Mybatis 3.2.8

 

[ REST (Representational Safe Transfer) ]

  • HTTP URI를 통한 자원의 명시
  • HTTP Method를 통해 해당 자원을 제어하는 행위를 표현
  • 데이터를 주고 받는 방식의 아키텍쳐 (디자인 패턴)

Restful 서비스(API)란 REST 아키텍쳐를 준수하는 서비스라고 할 수 있습니다. 간단하게 말하면 데이터를 요청하는 방식이 고정되어 있고, 요청에 따라 데이터를 처리하고 전달하는 작업만 수행합니다.

 

일반적인 서비스의 경우 요청받은 내용을 처리하고 데이터를 가공해서 처리 결과를 특정 플랫폼에 적합한 형태의 View로 만들어 되돌려주는 반면, Restful 서비스에서는 그냥 데이터만 처리하고 끝내거나 되돌려줄 데이터가 있다면 JSON이나 XML 형식으로 전달해줍니다. View에 대해서는 전혀 신경쓰지 않습니다.

 

따라서 요청하는 클라이언트는 규칙에 맞게 작업을 요청하고, 서버는 어떤 플랫폼에서 어떻게 사용할 것인지 신경쓰지 않고 요청받은 데이터만 처리하고 만들어서 되돌려주면 됩니다. 클라이언트는 받은 데이터를 알아서 가공해서 사용합니다. 즉, 멀티 플랫폼에서 사용이 가능하다는 의미입니다.

 

이러한 특성으로 인해, 사용자 플랫폼과 View에 상관하지 않고 요청한 데이터만 응답해주는 오픈 API에서 Restful 서비스 방식을 많이 사용하고 있습니다. 

 

 

 

 

가장 큰 단점으로는 딱 정해진 표준이 없어서 그냥 '다들 대충 이렇게 쓰더라' 정도의 암묵적인 표준만 정해져 있다는 것입니다. 아래 글들은 그 '다들 대충'의 룰들입니다.

 

 


 

 

[ '클라이언트 → 서버' 요청 규칙 ]

 

먼저 URI를 통해 자원을 명시한다는 말은 "URL?name="coco" 방식의 쿼리스트링 또는 @PathVriable 어노테이션을 통해 "URL/coco" 방식으로 URI에 필요한 데이터를 넣어 전송하는 것을 의미합니다. REST 방식에서는 두 번째 방식을 사용합니다.

 

* URI 규칙

1. 하이픈(-)은 사용가능하지만 언더바(_)는 사용하지 않는다.

2. 특별한 경우를 제외하고 대문자 사용은 하지 않는다.(대소문자 구분을 하기 때문)

3. URI 마지막에 슬레시(/)를 사용하지 않는다.

4. 확장자가 포함된 파일 이름을 직접 포함시키지 않는다.

 

그리고 이전까지는 HTTP Method의 GET과 POST 타입만 사용했었습니다. 어떤 작업을 처리하는 요청인지는 URL 매핑을 통해 판단해 들어온 데이터를 적절히 처리하는 방식이었죠. 하지만 Restful에서는 HTTP Method의 타입으로 어떤 작업을 해야하는지 판별합니다. PUT과 DELETE의 두 타입을 추가해 아래와 같은 작업으로 인식해 처리하게 됩니다. 

게시판 예시 기존 서비스에서 요청 Restful 서비스에서 요청
글읽기  [GET] URL/read?no=123  [GET] URL/123
글쓰기  [POST] URL/write  [POST] URL
글삭제  [GET] URL/delete?no=123  [DELETE] URL/123
글수정  [POST] /update  [PUT] URL/123

 

HTTP Method 타입 CRUD 작업
POST Create (Insert)
GET Read (Select)
DELETE Delete
 PUT Update

 

 


 

 

[ '서버 → 클라이언트' 응답 코드 ]

 

데이터 자체는 JSON이나 XML 형태로 보내주면 됩니다. 처리 결과는 상태코드로 보내주면 되는데, 역시 HTTP의 상태코드를 그대로 사용합니다. 아래 코드 외에도 엄청 많으니 잘 확인하고 사용하면 됩니다.

 

상태코드 설명
200  요청에 대한 작업을 정상적으로 완료함
201  POST 요청을 정상적으로 작업 완료함 (Create, Insert 완료)
301  요청한 리소스에 대한 URI가 변경되었을 때, 새로운 URI와 함께 회신
400  부적절한 요청
404  요청한 리소스를 찾을 수 없음
405  요청 리소스를 처리하는데 부적합한 Method
501  요청한 기능이 서버에서 지원되지 않음

 

 


 

 

[ '서버 → 클라이언트' 응답 데이터 ]

 

데이터는 보통 JSON(JavaScript Object Notation)과 XML의 두 가지 형식을 사용해서 주고 받습니다. 

 

 

* JSON과 XML

 

JSON은 XML보다 훨씬 나중에 나온 경량의 데이터 교환 형식입니다. 자바스크립트 문법을 확장해서 나온터라 XML에 비해 훨씬 경량화되고 사용하기도 쉽고 문법이 간결합니다. 더 빠르기도 합니다. 예를 들어 XML은 반복되는 구문도 모두 기입해줘야 하는데 JSON에서는 배열을 사용할 수 있습니다. HTML과 JSP의 차이와 비슷한 느낌입니다(물론 전혀 다른 개념입니다).

 

자바스크립트가 대세가 된 덕도 있고, 더 사용하기도 간편하니 점점 XML보다 JSON의 사용률이 높아지고 있는 추세라고 합니다. 하지만 JSON의 경우 타입도 없고 자유도가 높다보니 데이터의 무결성을 사용자가 직접해야하기도 하고, 그만큼 안정성이 떨어질 수 있습니다. 또 복잡한 구조를 가진 데이터를 JSON으로 표현하다보면 오히려 XML보다 가독성이 떨어지고 작성하기도 어려워진다는 단점도 존재합니다. 

 

결론은 최근엔 JSON을 많이 사용하는 추세이긴 하지만, 엄격한 데이터 타입과 검증이 필요하고 복잡한 구조를 가진 데이터의 경우 XML이 유리할 수 있다 정도로 이해하면 될 것 같습니다.

 

<!-- XML 예시 -->
<friend>
    <name>코데방</name>
    <gender>남</gender>
    <age>100</age>
</friend>
<!-- JSON 예시 -->
{
    "name": "코데방",
    "gender": "남",
    "age": 100
}

 

 

 


 

 

 

Restful 서비스 작성 방법은 다음글을 참조하시면 됩니다.

 

2020/03/20 - [Spring MVC/- 기본 문법] - 스프링 Restful 서비스(API)_API 구현(JSON) [2/3]

2020/03/21 - [Spring MVC/- 기본 문법] - 스프링 Restful 서비스(API)_API 구현(XML) [3/3]

728x90

댓글

💲 추천 글