1. 정보 가져오는 방법 3가지
- HttpServletRequest로 가져오기
String username = request.getParameter("username");
- @PostMapping 요청하기
join(String username){}
- DTO에서 가져오기
join(DTO){}
2. 의존성 주입(Dependency Injection, DI)
: 객체 간의 의존 관계를 외부에서 주입하는 것
의존성 주입하는 방법
- 생성자 주입(Constructor Injection):
@Autowired : 스프링에서 해당 타입의 빈(객체)을 찾아 주입
- @RequiredArgsConstructor 어노테이션 : 파이널 필드를 가진 클래스에 대한 생성자를 자동으로 생성
- @Qualifier 어노테이션 특정 빈을 주입받도록 지정할 수 있음
- 스프링 시작시 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:/"; } }
Share article