인프런 커뮤니티 질문&답변

D SD님의 프로필 이미지
D SD

작성한 질문수

[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발

JPA를 이용한 새 게시물 추가 - HTTP POST Method

직접 생성하지 않은 주소가 생성되어 있습니다.

작성

·

127

0

이 사진처럼

"/jpa/users/{id}/posts"

가 아닌

"/users/{id}/posts"

로도 접속이 됩니다.

또, "localhost:8088/posts/{postId}" 도 생성되어 있던데

이런 것들은 어떤 과정으로 생성된 것인가요?

 

 

답변 2

1

Dowon Lee님의 프로필 이미지
Dowon Lee
지식공유자

안녕하세요, 이도원입니다.

Spring Boot와 Spring HATEOAS를 사용하여 개발된 RESTful API에서 응답 본문의 links 부분은 Spring HATEOAS 프레임워크에 의해 자동으로 생성됩니다. HATEOAS에서는 하이퍼미디어 기반 출력 데이터를 쉽게 생성할 수 있습니다. 또한, Spring HATEOAS에서는 self, next, previous와 같은 링크를 응답 데이터에 자동으로 추가할 수 있기 때문에, 개발자가 직접 URI를 하드코딩하지 않고도 API를 동적으로 탐색하는 방법을 제공할 수 있게 됩니다. 말씀드린, Spring HATEOAS는 응답에 자동으로 링크를 추가할 수 있는 여러 클래스와 메소드를 제공(RepresentationModel, EntityModel, WebMvcLinkBuilder 등)하고 있으며, 해당 API를 통해 개발자가 직접 하이퍼미디어 데이터를 추가하는 것도 가능합니다.

말씀하신 API들은 HATEOAS에 의해 자동생성 된 부분으로 보시면 될 것 같습니다. 추가 질문 사항 있으시면 다시 글 남겨 주세요.

감사합니다.

1

안녕하세요, 인프런 AI 인턴입니다.

”/jpa/users/{id}/posts” 와 같이 특정한 경로로 접속할 때와 “/users/{id}/posts” 로도 접속이 가능한 경우, 그리고 “localhost:8088/posts/{postId}” 같은 주소가 생성되는 것은 Spring Boot와 관련된 기능 때문입니다. Spring Boot는 RESTful API 개발을 쉽게 만들어 주는 여러 기능을 내장하고 있으며, 그 중 하나가 Spring Data REST입니다.

Spring Data REST는 Spring Data repositories를 자동으로 RESTful resources로 변환해 줍니다. 이 과정에서 repository에 저장된 엔티티들은 ‘_embedded’와 같은 HAL(Hypertext Application Language) 형식으로 노출되며, 해당 엔티티에 접근하기 위한 다양한 URL(Uniform Resource Locator)이 자동으로 생성됩니다. 따라서 직접 해당 URL을 설정하지 않아도 Spring Boot가 자동으로 처리해 주는 것입니다.

예를 들어, 사용자 ID별로 게시물을 관리하는 경우, Spring Data REST는 “/users/{id}/posts”와 같은 경로를 자동으로 생성해 줍니다. 또한, 각 게시물에 대한 고유한 경로인 “localhost:8088/posts/{postId}“도 마찬가지로 자동으로 생성됩니다. 이렇게 생성된 URL을 통해 클라이언트는 서버에 저장된 데이터에 접근할 수 있게 됩니다.

이러한 기능은 개발자가 복잡한 RESTful API를 직접 구현하는 데 드는 시간과 노력을 크게 줄여 줍니다. 하지만, 자동으로 생성된 URL과 데이터 구조를 원하는 대로 커스텀하려면 추가적인 설정이나 코드 작성이 필요할 수 있습니다.

D SD님의 프로필 이미지
D SD

작성한 질문수

질문하기