7. Spring 로그인 만들기를 통한 기능 엿보기
이전에 화면을 담당하는 View와 이동을 담당했던 Controller를 만들었다면, 이번엔 기능을 담당하는 Service를 만들 예정입니다.
1. DTO 객체 생성
회원가입을 할때, Member의 속성을 선언 후, Getter & Setter 로 외부에서 쓸 수 있게 만들어 줍니다.
2-1 . View에서 값을 가져오는 방법 (HttpServletRequest)
스프링에서는 View 페이지에서 Controller로 값을 가져오는 방법은 크게 3가지 방법이 있습니다.
Form의 name 속성을 기준으로 가져옵니다.
2-2 . 스프링 어노테이션을 이용하는 방법 (@RequestParam)
Form의 name 속성을 기준으로 가져옵니다.
2-3 . 커멘드 객체를 이용하는 방법
스프링에서 제공하는 Model 이 아닌 만들어둔 DTO 객체를 호출하여 직접 값을 담아 View 페이지로 데이터를 가져 옵니다. 단 View 페이지에서는 ${객체.속성}으로 표현해주어야 합니다.
3-1 . Controller의 Model 전달과정
회원가입 페이지에서 Form 버튼을 누르게 되면 Form action이 @RequestMapping 을 찾아 실행합니다.
Form의 값들은 HttpServletRequest 를 통해 담겨서 넘어옵니다. Controller에서 받은 Param 값들은 Model에 담아 다시 View 페이지로 전달할 수 있습니다. Model은 데이터만 담습니다.
3-2. Controller의 ModelAndView 전달 과정
화면으로 전달하기 위한 또 다른 방법으로, ModelAndView가 있습니다. 이는 스프링에서 제공하는 객체로 데이터와 View의 이름을 같이 전달 합니다.
4. Service Interface의 생성
기능을 선언하는 인터페이스를 생성합니다. 추후 implements 를 통해서 기능을 정의해주어야 합니다.
5. ServiceImpl 의 생성
인터페이스에 정의된 기능을 사용하기 위하여 implements 선언 후 @Override를 통해 재정의 해주어야 합니다.
이는 비즈니스로직을 분리함으로써, 컨트롤러를 좀 더 깔끔하게 만들게 해줍니다.
6. @Service 선언
기존에 스프링 프로젝트를 진행하실 때, 스프링 설정파일에 Bean 을 만들면 스프링 컨테이너가 객체를 생성하고, 추후 신규 생성이 아닌 호출만을 해서 서버의 부담을 줄일 수 있다고 공부하였습니다. 원래라면 , Bean 설정을 해주어야 하지만 스프링에서는 @Service 어노테이션 하나로 동일한 효과를 지원합니다. ( @Component, @Repository 역시 동일 기능 )
7. @Autowired를 통한 연결
ServiceImpl 안에 기능을 재 정의하였다면, Controller에서 호출해서 사용해야 합니다. 이를 위하여 @Autowired를 통해 연결 할 수 있습니다.
위와 같이 스프링의 기능을 사용하여 개발을 진행하였습니다.
View(JSP 페이지) -> Controller -> Service(ServiceImpl)