블로그 프로젝트 v1 - 회원가입 구현하기 DTO

Feb 21, 2024
블로그 프로젝트 v1 - 회원가입 구현하기 DTO

[ 요청 DTO 만들기 ]

DTO (Data Transfer Object) 란?

데이터를 전송하기 위해 사용되는 객체(오브젝트) DTO는 보통 여러 개의 필드로 구성되어 있으며, 데이터를 전송하기 위한 목적으로 사용되기 때문에, 비즈니스 로직은 가지지 않는다. 단순히 데이터를 저장하고 전송하는 역할을 한다. 요청할 때만 쓰는 항아리...인 듯! * DTO는 getter/setter 매서드만 가진 클래스 * DB에서 데이터를 얻어서 Service나 Controller 등으로 보낼 때 사용 * 엔티티를 DTO 형태로 변환해서 사용
notion image
💡
DTO : 클라이언트로부터 전송되는 데이터를 받는 통신 데이터
 

[ 컨트롤러에서 클라이언트 정보 받는 법 3가지 ]

[ HttpServletRequest로 가져오기 ]
String username = request.getParameter("username");
[ @PostMapping 요청하기 ]
join(String username){}
[ DTO에서 가져오기 ]
join(DTO){}
 

[ DTO 만들기 ★ ]

제일 처음할 건 DTO를 만들 것. (DTO를 만드는 것은 컨트롤러의 책임 중 하나) 컨트롤러를 구현하기 전에 DTO를 먼저 만들어서 사용한다. DTO를 사용함으로써 컨트롤러는 클라이언트와 비즈니스 로직 사이에서 데이터를 전달하는 역할을 수행! DTO는 컨트롤러의 입출력 데이터를 담당하는 역할을 하기 때문에, 컨트롤러의 책임을 다 하고 나가는 데에 도움을 줄 것
notion image
board랑 user 패키지를 추가해서 BoardController와 UserController 클래스를 넣는다
notion image
join() 메소드에 HTTPServletRequest를 매개 변수로 받아야 하잖아? (파싱하려고) 매개변수에 String username, String password, String email 이렇게 적을 수도 있지만, DTO를 사용하자! 항아리에 담아버리자!
notion image
UserRequest 클래스 파일을 만든다. 여기에 항아리를 만들 것! 변수를 하나씩 안적고 항아리로 받아서 관리하는게 더 편하니까! * Request(요청)할 때만 받는 데이터 항아리~ * Response(응답) 데이터는 DTO에 포함되지 않는다.
 

[ UserRequest ]

notion image
JoinDTO와 LoginDTO는 UserController 쪽으로 요청되는 데이터(/join과 /login)를 처리할 때 필요한 데이터를 담는다 static을 사용해서 내부 클래스에 작성하면 이름 관리하기가 편하다. (내부 클래스로 작성된 DTO는 UserController 클래스 내에서만 사용되므로, 다른 클래스와의 이름 충돌을 걱정할 필요가 없다...는 뜻.)

+) UserJoinRequestDTO 라고도 쓴다는데…

notion image
파일을 하나씩 다 쪼개가면서 쓰네?ㅜㅜ 불편한데 회사가면 이렇게 쓴다
 

[ 이제 매개변수를 DTO로 받아보자!! ]

notion image
static이라 . 으로 호출 가능 (UserRequest.JoinDTO requestDTO) 클래스명.메소드명 변수명
💡
UserRequest.JoinDTO requestDTO = String username, String password, String email = HTTPServletRequest res
 

[ 데이터 잘 받는지 검증해보기 ]

notion image
notion image
notion image
회원가입을 완료했더니 콘솔창에 내가 입력한 데이터가 들어오고, 로그인폼으로 리다이렉션 됐다 또한 콘솔창에 내가 회원가입 시 입력한 정보도 예쁘게 파싱되어서 들어온 것 확인! DTO가 잘 먹었네(?)
 
Share article

codingb