JSON 형식으로 클라이언트에게 응답을 보내고 싶은데,
헤더의 경우 HttpHeader 객체를 생성한 후 add() 해 주면 되었다.
그렇다면 바디의 경우 어떻게 JSON 응답을 보낼 수 있을까?
데이터베이스의 데이터에 직접 접근하기 위한 객체.
왜 사용하는가?
-> DB에 직접 접근하는 로직과 비즈니스 로직을 분리하기 위해서.
이해한 바를 바탕으로 예를 들어보면,
인증을 받아 사용자에게 데이터를 응답하는 서비스층의 비즈니스 로직
을 생각해보자.
1. 사용자로부터 인증 요청이 들어온다.
2. 인증된 정보를 바탕으로 DB에 접근에 데이터를 가져온다. -> DAO로 DB에 접근
3. 클라이언트에게 가져온 데이터 객체를 응답한다.
이렇게 비즈니스 로직과 DB 접근 로직을 분리하기 위해서 사용한다는 것 같다.
계층 간 데이터 교환을 위해 사용하는 객체.
로직을 가지지 않는 순수한 데이터 객체로, Getter & Setter만 가지는 것.
유명한 이 그림🔼 을 같이 보면 좋을 것 같아서 노션에서 꺼내왔다.
스프링 처음 공부할때는 저게 다 무슨 말인가 싶었는데 다시 보니까 한 눈에 들어온다.
신기하다...!
역시 직접 부딪혀보는게 최고인 것 같다.
무튼 웹 요청에 대한 응답을 보내는 방법에 대한 글이니까 웹 요청으로 설명해보면,
서비스-컨트롤러 계층에서 클라이언트 측과 요청, 응답을 주고받는 객체는 DTO
이다.
그리고 서비스 계층에서 DB 레포지토리쪽에 직접 !! 접근하는 객체가 DAO
다. ➡️ 내가 지금까지 써온 도메인이 바로 이 역할을 하는 것.
따라서, 웹 요청에 응답을 보내기 위해서 우리가 필요한 건 DTO
다.
key
가 될 것들이다. @Data
public class Sierrah {
private String github;
private String kakao;
}
@Getter
, @Setter
, @RequiredArgsConstructor
, @ToString
, @EqualsAndHashCode
을 한꺼번에 설정해주는 매우 유용한 어노테이션이라서 잘 쓰고 있다. ㅎㅎㅎ
클래스 레벨에서 @Data
어노테이션을 붙여주면
final
또는 @NonNull
필드 값을 파라미터로 받는 생성자가 만들어지며,toStirng
, equals
, hashCode
메소드가 자동으로 만들어진다.응답으로 보내고 싶은 객체에 @ResponseBody 를 붙여줘도 되지만,
@RestController 어노테이션을 사용하면 하위에 있는 메소드들은 모두 @ResponseBody 를 가지게 된다.
@RestController
public class SierrahController {
@RequestMapping("/endpoint")
public Sierrah sierrah = new Sierrah();
sierra.setGithub("@sierra-h");
sierra.setKakao("saltprezel@gmail.com");
return sierrah;
}
Sierrah
를 생성해주고,setGithub
, setKakao
메서드가 지원될 것이다.key
에 대한 value
가 될 것이다.이 객체를 ResponseEntity 객체에 body로 달아서 요청을 받아오게 되면~?
sierrah
는 다음과 같은 형식을 가진 JSON 객체가 된다. 끝!
{
"github": "@sierra-h",
"kakao": "saltprezel@gmail.com"
}