inblog logo
|
vosw1
    Spring

    블로그 만들기 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

    RSS·Powered by Inblog