[Spring Boot] 스프링 부트에서 응답 보내기

susu·2022년 8월 24일
0

🤔

JSON 형식으로 클라이언트에게 응답을 보내고 싶은데,
헤더의 경우 HttpHeader 객체를 생성한 후 add() 해 주면 되었다.
그렇다면 바디의 경우 어떻게 JSON 응답을 보낼 수 있을까?

DAO, DTO 개념 구분하고 가기

DAO (Data Access Object)

데이터베이스의 데이터에 직접 접근하기 위한 객체.

왜 사용하는가?
-> DB에 직접 접근하는 로직과 비즈니스 로직을 분리하기 위해서.

이해한 바를 바탕으로 예를 들어보면,
인증을 받아 사용자에게 데이터를 응답하는 서비스층의 비즈니스 로직을 생각해보자.
1. 사용자로부터 인증 요청이 들어온다.
2. 인증된 정보를 바탕으로 DB에 접근에 데이터를 가져온다. -> DAO로 DB에 접근
3. 클라이언트에게 가져온 데이터 객체를 응답한다.
이렇게 비즈니스 로직과 DB 접근 로직을 분리하기 위해서 사용한다는 것 같다.

DTO (Data Transfer Object)

계층 간 데이터 교환을 위해 사용하는 객체.
로직을 가지지 않는 순수한 데이터 객체로, Getter & Setter만 가지는 것.

유명한 이 그림🔼 을 같이 보면 좋을 것 같아서 노션에서 꺼내왔다.
스프링 처음 공부할때는 저게 다 무슨 말인가 싶었는데 다시 보니까 한 눈에 들어온다.
신기하다...!
역시 직접 부딪혀보는게 최고인 것 같다.

무튼 웹 요청에 대한 응답을 보내는 방법에 대한 글이니까 웹 요청으로 설명해보면,
서비스-컨트롤러 계층에서 클라이언트 측과 요청, 응답을 주고받는 객체는 DTO이다.
그리고 서비스 계층에서 DB 레포지토리쪽에 직접 !! 접근하는 객체가 DAO다. ➡️ 내가 지금까지 써온 도메인이 바로 이 역할을 하는 것.

따라서, 웹 요청에 응답을 보내기 위해서 우리가 필요한 건 DTO다.

직접 해보자

1. DTO 만들기

  • Getter (getGithub) 와 Setter (setGithub) 어노테이션 사용해주기
  • github와 kakao는, 우리가 JSON 응답을 보낼 key가 될 것들이다.
    @Data
    public class Sierrah {
    
    	private String github;
    	private String kakao;
    }
  • @Getter 와 @Setter 어노테이션만 달아줘도 되지만,
    나는 lombok의 @Data 어노테이션을 사용하는 걸 선호한다.

💡 @Data ?

[자바] 자주 사용되는 Lombok 어노테이션

@Getter@Setter@RequiredArgsConstructor@ToString@EqualsAndHashCode을 한꺼번에 설정해주는 매우 유용한 어노테이션이라서 잘 쓰고 있다. ㅎㅎㅎ

클래스 레벨에서 @Data 어노테이션을 붙여주면

  • 모든 필드를 대상으로 접근자와 설정자가 자동으로 생성되고,
  • final 또는 @NonNull 필드 값을 파라미터로 받는 생성자가 만들어지며,
  • toStirngequalshashCode 메소드가 자동으로 만들어진다.

2. Controller 단에서 @Restroller 어노테이션 붙여주기

응답으로 보내고 싶은 객체에 @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 를 생성해주고,
  • Setter를 사용했으니 setGithub, setKakao 메서드가 지원될 것이다.
    이 메서드의 파라미터로 내용을 적어주면 이게 바로 key에 대한 value가 될 것이다.

이 객체를 ResponseEntity 객체에 body로 달아서 요청을 받아오게 되면~?

3. 응답 확인하기

sierrah는 다음과 같은 형식을 가진 JSON 객체가 된다. 끝!

{
	"github": "@sierra-h",
	"kakao": "saltprezel@gmail.com"
}

참고한 글

https://melonicedlatte.com/2021/07/24/231500.html

profile
블로그 이사했습니다 ✈ https://jennairlines.tistory.com

0개의 댓글