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"
}