본문 바로가기

Spring/Spring Boot

[Concept] @Controller vs. @RestController, JSON, Serialize, URL, URI, REST API

URI vs. URL

URI

인터넷에 있는 자원을 나타내는 유일한 식별자

 

URL

주소이다.

흔히 웹 주소라고도 하며, 컴퓨터 네트워크 상에서 리소스가 어디 있는지 알려주기 위한 규약이다.

URI의 부분집합이다.

 

http://www.a.com/users/143

// 전체가 URI
// URL은 /users 까지

 

REST API

웹 서비스에서 클라이언트에 데이터와 기능의 집합을 전송하기 위해 제공되는 Web API가 REST 구조 스타일에 적합하게 설계된 경우 REST API라고 한다.

REST 구조 스타일은 웹 서비스 API 설계에 많이 적용되고 있다.

 

REST

로이 필팅이 웹 확장성의 주요 제약 조건들을 정리한 "웹의 구조적 스타일"에 대해 자신의 박사학위 논문에서 "REST (Representational State Transfer 표현 상태전이)" 라는 명칭으로 설명함

 

웹의 구조적 스타일

1. 클라이언트/서버 (Client/Server)

  • 웹은 클라이언트/서버 기반 시스템으로 역할 구분
  • 각각 언어 및 기술 독립적으로 구현 및 배포 가능

2. 균일한 인터페이스 (Uniform Interface)

  • 인터페이스의 일관성에 기반하여 웹 컴포넌트들은 상호 운영됨
  • 리소스 식별, 표현을 통한 리소스 처리, 자기 서술적 메시지( Self Descriptive Message) - 메타데이터 포함, 애플리케이션 상태 엔진으로서의 하이퍼 미디어 (HATEOAS)
  • 메타데이터 등을 가지고 메시지만으로도 API와 구성요소에 대해 스스로를 설명할 수 있어야 함
  • HTTP가 REST 제약조건을 거의 다 지원해주지만, "자기-서술적 메시지"와 "HATEOAS"가 잘 지켜지지 않음

3. 계층 시스템 (Layered System)

4. 캐시 (Cache)

5. 상태 없음 (Stateless)

6. 주문형 코드 (Code on demand - optional)

 

REST 구성 요소

자원, 행위, 표현으로 구성됨

 

1. 자원 (Resource)

- 모든 자원에 고유한 ID (URI)가 존재하고, 이 자원은 Server에 존재

- 자원을 구별하는 ID는 HTTP URI로 정의

- URI로 식별되는 자원의 정보(상태)를 조작하기 위해 Server에 요청

 

2. 행위 (Verb)

- URI에 대해 자원을 조작하기 위해 HTTP 프로토콜의 Method 사용

- HTTP 프로토콜은 GET, POST, PUT, DELETE와 같은 메서드 제공

 

3. 표현 (Representation of Resource)

- REST에서 하나의 자원은 JSON, XML, TEXT, RSS 등 여러 형태로 표현됨

- 일반적으로 JSON, XML 포멧 활용