Programing_Java
✨ Spring MVC에서의 로그인 처리 흐름 : DispatcherServlet부터 Command 객체까지 정복 본문
✨ Spring MVC에서의 로그인 처리 흐름 : DispatcherServlet부터 Command 객체까지 정복
Joyfullyever 2025. 4. 17. 17:05🧩 로그인 기능 구현 시 가장 중요한 구조는?
로그인 기능을 만들다 보면, 아래처럼 여러 컴포넌트가 관여하게됨
• LoginController
• LoginService
• LoginDAO
• LoginVO (Command 객체)
이때 가장 중요한 건 역할을 분리, 결합도를 낮추는 설계
예를 들어, Controller에서 DAO를 직접 new 하지 않는다. 대신 Service를 통해 간접 호출하고, Service는 DAO와 의존 관계를 맺음
@Controller
public class LoginController {
@Autowired
private LoginService loginService;
@PostMapping("/login")
public String login(LoginVO vo, HttpSession session) {
boolean result = loginService.loginCheck(vo);
if(result) {
session.setAttribute("user", vo);
return "redirect:/main";
}
return "redirect:/login?error";
}
}
🔁 객체 생성은 누가? 스프링 컨테이너가 함
전통 방식에서는 DispatcherServlet을 직접 만들었지만, Spring에서는 스프링이 제공하는 DispatcherServlet을 web.xml에 등록
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
중요한 포인트 :
• 스프링 컨테이너가 new 하는 유일한 서블릿 객체는 DispatcherServlet
• DispatcherServlet은 **/WEB-INF/dispatcherServlet-servlet.xml**을 로딩
• 이 xml이 applicationContext 역할을 대신 수행하며, 나머지 @Component 객체들을 관리
📦 @Component 계열 어노테이션을 활용한 자동 등록
@Controller // 컨트롤러 역할
@Service // 비즈니스 로직 계층
@Repository // DAO 계층
@Component // 기타 일반 빈
이 어노테이션을 쓰면 스프링이 알아서 객체를 생성해서 컨테이너에 등록
특히 @Controller는 Spring MVC 구조에서 컨트롤러임을 명확히 하며, 가독성과 관리 효율성이 높아짐
💡 자유도와 응집도, 그리고 메서드 시그니처
@Controller 사용 시 장점은 많지만, 자유도가 높아질수록 개발자의 책임도 커짐
• 메서드 인자: HttpServletRequest, HttpSession, Model, Command 객체 등 자유롭게 선언 가능
• 메서드명: 원하는 이름으로 설정 가능 → 관련 기능끼리 묶어 높은 응집도
• 반환형: ModelAndView, String, ResponseEntity 등으로 다양하게 사용 가능
🧙♂️ Command 객체란?
POST /login.do 요청 처리 시, 사용자 입력 데이터를 자동으로 VO에 바인딩해주는 객체를 Command 객체라고 부름
public class LoginVO {
private String id;
private String password;
// getter/setter
}
@PostMapping("/login")
public String login(LoginVO vo) {
// id, password 값이 자동으로 들어옴
}
✔️ 조건 : 입력 폼의 name 속성과 VO의 필드명이 일치해야 함
스프링이 자동으로 :
1. new LoginVO()
2. request.getParameter("id") 값을 setId()에 넣어줌
3. 완성된 객체를 메서드 인자로 전달
📌 요약 정리
요소설명
DispatcherServlet | 유일하게 new 되는 서블릿 (Spring이 제공) |
DispatcherServlet-servlet.xml | 해당 서블릿이 참조하는 설정 파일 (컨테이너 역할) |
@Controller, @Service, @Repository | 객체를 자동 생성하여 스프링 컨테이너에 등록 |
Command 객체 | 사용자 입력 값을 자동으로 바인딩하여 전달받는 VO |
'✅ Spring' 카테고리의 다른 글
🔧 [Spring AOP 개념+실무정리] 핵심관심과 횡단관심 제대로 구분하고 Advice 적용까지 (0) | 2025.04.22 |
---|---|
🌱 [Spring MVC 구조] DI, Controller, Service, DAO 그리고 DispatcherServlet까지 정리 (0) | 2025.04.20 |
✨ Spring MVC 패턴 정복: DI부터 Controller, DAO까지 한 번에 정리! (0) | 2025.04.16 |
[Spring] new 없이 객체 주입? Autowired와 Component로 배우는 낮은 결합도 (0) | 2025.04.15 |
[Spring] Spring vs Spring Boot, 그리고 진짜 중요한 스프링 핵심 개념 총정리 (0) | 2025.04.14 |