이번 글에 들어가기 앞서, 해당 글을 이해하기 위해서는 REST API를 알아보자 가 선행되어야 합니다. 따라서 REST API에 대한 이해가 부족하다면 참고 부탁드립니다.🥸
- signUp 컨트롤러
- Auth.SignUp 클래스
- MemberEntity 클래스
첫번째 이미지는 제가 현재 진행하고 있는 배당금 프로젝트 에서 회원 가입 부분 signUp 메소드 입니다.
매개변수로 Auth.SignUp 타입의 객체를 받아 회원가입 기능을 수행하는 컨트롤러 입니다.
두번째 이미지는 Auth.SignUp 클래스 형태를 보여주는 이미지입니다. 사용자로부터 username,password,roles 정보를 받아 회원가입 기능을 구현하는 것으로 이해 할 수 있습니다.
세번째 이미지는 해당 컨트롤러의 반환 타입인 CompanyEntity 클래스를 설명하는 이미지입니다. 😎
저희가 이번 글에서 주의깊게 봐야할 부분은 첫번째 이미지에 보여지는 signUp 메소드의 반환 타입입니다. 컨트롤러의 반환 타입이 ResponseEntity<?> 라고 되어 있죠?
ResponseEntity<?> 부분에 command + 오른쪽 클릭 (맥 기준) 하여 해당 구현 부분을 분석 해봅시다.
이미지가 잘 보이시나요?
가장 먼저 ResponseEntity 클래스는 HttpEntity<?> 를 상속하고 있으며, 다양한 생성자를 오버로딩한 하나의 클래스 형태라는 것을 알 수 있습니다.
또한 멤버 변수로 Object 타입의 status 변수도 가지고 있군요!🥸
Spring Framework에서 제공하는 클래스 중 HttpEntity라는 클래스가 존재한다. 이것은 HTTP 요청(Request) 또는 응답(Response)에 해당하는 HttpHeader,HttpBody 그리고 HttpStatus를 포함하는 클래스이다.
그렇습니다.
태생적으로 Spring 프레임워크는 동적인 웹 애플리케이션을 개발하기 위한 프레임워크로 사용되고 있습니다. 따라서 백엔드 웹 개발자라면 Http 요청(Request) 또는 응답(Response) 을 능숙하게 다루는 것은 기본입니다.
Anyway! 요약하자면 HttpEntity 클래스를 통해 요청과 응답에 대한 처리를 관리할 수 있으며, 이 클래스는 HttpHeader,HttpBody 그리고 HttpStatus를 포함하는 클래스입니다.
정리
ResponseEntity 는 HttpEntity 를 상속하는 응답과 관련된 부분을 책임지는 클래스이며, Service 단에서 Controller 단으로 보낸 응답 결과를 에쁘게 포장해주는 응답 클래스라고 이해하시면 됩니다!🔥
참고로 ResponseEntity 클래스는 재네릭 클래스임으로, 반환 타입이 명확하지 않은 경우 <?> 라고 명시해 주면 됩니다. 자 그럼 해당 컨트롤러를 실행한 결과를 Postman 프로그램을 통해서 확인해봅시다.
accountNonExpired,accountNonLocked 그리고 credentialsNonExpired 부분은 Spring Security 의 결과임으로 상관쓰지 않아도 됩니다. 중요한 것은 클래스 객체를 Json 형태로 반환한 것을 볼 수 있습니다. 이처럼 ResponseEntity 클래스는 결과인 CompanyEntity 객체를 REST API 에서 가장 많이 사용되는 Json 형태로 감싸서 반환한다는 것을 알 수 있습니다.🚀