블로그 만들기 5. 회원가입 구현 : 가방 DTO 만들기

Feb 05, 2024
블로그 만들기 5. 회원가입 구현 : 가방 DTO 만들기

1. 정보 가져오는 방법 3가지

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

2. 의존성 주입(Dependency Injection, DI)

: 객체 간의 의존 관계를 외부에서 주입하는 것
 
의존성 주입하는 방법
  • 생성자 주입(Constructor Injection):
@Autowired : 스프링에서 해당 타입의 빈(객체)을 찾아 주입
  • @RequiredArgsConstructor 어노테이션 : 파이널 필드를 가진 클래스에 대한 생성자를 자동으로 생성
  • @Qualifier 어노테이션 특정 빈을 주입받도록 지정할 수 있음
 
notion image
notion image
  • 스프링 시작시 session이 들어있는 주소가 담겨있음
톰캣이 리퀘스트로 세션에 접근할 수 잇게 request.get을 제공해줌 ⇒ 매번 적어야 함
HttpSession s = request.getSession();
  • 시작시 ComponentScan 시작
기준점 shop.mtcoding.blog이하
  • 디폴트 생성자를 때려서 @Controller를 메모리에 띄움
→ IoC 컨테이너에 뜸
UserController는 뜸
UserRepository는 띄우려니 생성자가 문제 → 파라미터를 넣어줘야함
디폴트 생성자가 아니라 파라미터가 필요한 생성자
  • 리플렉션으로 찾아봄
EntityManager는 이미 Ioc에 떠있음
→ for문을 돌려서 IoC 컨테이너에서 찾아서 주입해줌 / 의존성 주입
💡
정리…
1. ioc컨테이너에 띄울 때 사용하는 어노테이션 → new 해줌
2. new 해줄 때 생성자가 디폴트가 없으면 new 를 스프링이 함
3. 생성자가 있으면 무조건 생성자를 때려야 함
4. 스프링이 생성자를 때리려고 하니까 파라미터를 가지고 있고 넣어줘야만 new 가 됨
5. 생성자 주입을 통해 이루어짐
6. IoC컨테이너에 있는 것 갖다 쓰는게 의존성 주입
 

3. DTO(Data Transfer Object) : 가방

  • 데이터 전송을 위한 객체
주로 여러 계층 간에 데이터를 전송할 때 사용
  • 데이터를 전송할 때 필요한 필드들을 담고 있는 일종의 가방(DTO = Object)
  • 응답은 다 파일로 할 것이기에 DTO를 만들지 않음
  • requestDTO : 클라이언트가 서버측으로 전송하는 데이터
responseDTO : 화면에 보이는(필요한) 데이터
 

4. UserRequest에서 요청 DTO 만들기

package shop.mtcoding.blog.user; import lombok.Data; /** * 요청 DTO = Data Transfer Object */ public class UserRequest { // 데이터를 담을 가방 만들기 @Data public static class JoinDTO { // 회원가입 정보를 담을 가방 private String username; private String password; private String email; } }
 

5. 회원가입 정보 가방에 담기

  • requestDTO로 데이터 받기
package shop.mtcoding.blog.user; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @Controller public class UserController { @PostMapping("/join") public String join(UserRequest.JoinDTO requestDTO){ // requestDTO로 받기 System.out.println(requestDTO); return "redirect:/loginForm"; } @GetMapping("/joinForm") public String joinForm() { return "user/joinForm"; } @GetMapping("/loginForm") public String loginForm() { return "user/loginForm"; } @GetMapping("/user/updateForm") public String updateForm() { return "user/updateForm"; } @GetMapping("/logout") public String logout() { return "redirect:/"; } }
notion image
 
Share article

vosw1