https://hongjuni.tistory.com/66
[ MVC 패턴 ] Spring으로 표현하기
기존에 배웠던 MVC 패턴을 Spring으로 표현한다면 어떤 장점이 있는가? 기존의 MVC 패턴실행 순서 사용자의 요청 >> *.do >> FrontController 서블릿 에서 C 호출 >> 경로정보 반환 >> 사용자에게 화면제공 Fro
hongjuni.tistory.com
기초부터 시작하여 이해할 수 있도록 공부하고 있습니다
이전 글들을 참조하여 글을 읽으시면 더욱 이해하기 쉽습니다
ex) Mapping xml설정 >> @RequestMapping으로 바뀌는 과정
기존에 있는 스프링컨테이너.xml(디스패처서블릿)의 설정을 어노테이션(@)으로 바꿔보도록 하자
어노테이션으로 바꾸기위해선 .xml 설정 중 네임스페이스를 설정해야한다!
context를 체크하고
어노테이션 패키지 적용범위를 설정해주어야 한다
어노테이션을 이용해 바꿔볼 것
1. Controller 객체 등록
2. HandlerMapping 키값과 객체 설정
+ Command 객체 설명
1. Controller 객체 등록
Controller도 마찬가지로
@Component가 아닌 컨트롤러 전용 어노테이션이 있다
@Controller를 사용한다
DispacherServlet이 인식하는 C 객체로 설정해줌
기존에 있던 implements Controller 가 필요없어진다
>> 오버라이딩을 강제 할 필요가 없음 ( 완전한 POJO 된다 )
>> 메서드 시그니쳐 변경가능 ( 아웃풋, 메소드명, 인자 )
완전한 POJO가 되었기때문에 하나의 클래스로 로직들을 보관할 수 있다
하나의 메소드를 굳이 하나의 클래스에 저장할 필요가없어졌음
Member와 관련된 메소드를 모아두는 MemberController 와
Board와 관련된 메소드를 모아두는 BoardController를 생성하여
관리할 수 있게 된다 ( = Pointcut을 보관하는 방식과 같다 )
( Member 관련 로직을 보관하는 Membercontroller클래스 )
2. HandlerMapping 키값과 객체 설정
HandlerMapping의 전용 어노테이션은
@RequestMapping("요청이름") 어노테이션이다
메소드 위에 작성하여
어떠한 요청에 반응할 메소드인지 @RequestMapping 인자로 넣는다
selectOneMemeber는 로그인 메소드이므로 /login.do의 요청에 반응하도록 설정
같은 요청 /login.do에 반응하지만
요청방식 GET or POST를 통해 사용할 메소드를 분리시킬 수 있다
ex) index.jsp 요청하는 login 페이지 보여줘 (GET 방식)
login.jsp 요청하는 로그인할거야 (POST 방식)
으로 나눠본 상태이다
요청만 인자로 넣게되면 ** value 속성이 자동으로 설정되지만
method 속성을 사용하기위해선 value를 기입해주어야 한다
3. Command 객체 ★ 스프링의 꽃
스프링 컨테이너가 Command 객체를 생성
+ 사용자가 입력한 값들을 setter 주입으로 Command 객체에 세팅함
즉, new Member / vo.set 를 작성하지 않아도 됨
설정 방법
객체를 인자로 넣어주기만해도 아래의 메서드를 줄일 수 있게된다
이러한 인자객체를 Command객체 라고 부른다
Spring에서 Command 객체를 이용해 해주는 것
1. 객체화를 자동으로 해준다
2. setProperty 하여 set을 자동으로 해준다
>> ** 멤버변수명과 Parameter값이 동일해야한다
+ 추가 내용
String값 return하는 값을 경로나 요청에 맞게 수행해 준다
>> redirect: 붙여주면 리다이렉트 / 적지않는다면 forward가 디폴트이다
>> 만약 값을 저장해야할 ModelAndView를 사용해야한다면 아웃을을 mav로 해야한다
줄어드는 코드의 양 비교
위 사진을 아래 사진처럼 줄일 수 있게 된것이다.
insertMember 즉, 회원가입이 실패할 수 있기때문에 ( return boolean 타입 )
if 문으로 성공실패를 만들어 결과에 맞는 return을 설정하면 된다
>> ** 획기적으로 줄일 수 있다는 것을 보여주기위해 넣지 않았다
>> if 문으로 성공 실패여부를 나눠주는 것이 올바르다
리다이렉트 vs 포워드
로그인후에 main을 가는것은 [새로운 요청] 이기때문에 리다이렉트 한것
main에서 게시글을 보여줘야하기때문에 forward 처리인 것
1로직 >> 2로직(저장데이터있음) >> 페이지
1로직은 2로직에 리다이렉트
2로직에서 페이지 라면 forward 처리
간단하게 리다이렉트 vs 포워드를 정리 ( 확실한 정의는 아님 )
>> 다음에 의미를 확인하기위해 메모로 남겼습니다
'Spring' 카테고리의 다른 글
[ 2-Layered 아키텍처 ] MVC2로 교체하기 (0) | 2022.09.27 |
---|---|
[ MVC 패턴 ] Spring으로 표현하기 (3) (0) | 2022.09.23 |
[ MVC 패턴 ] Spring으로 표현하기 (0) | 2022.09.20 |
[ JDBC ] 템플릿 메서드 패턴 (0) | 2022.09.16 |
[ 관점지향 프로그래밍 ] AOP ( Pointcut 어노테이션 설정 ) (0) | 2022.09.16 |