재밌고 어려운 IT를 이해해보자~!

Spring 프레임워크 구조 Update (버전별 정리) 본문

코리아IT핀테크과정

Spring 프레임워크 구조 Update (버전별 정리)

언제나즐거운IT 2024. 3. 5. 11:30

Spring 에서 MVC 패턴 구조
보통 Spring Boot 만 쓰는 회사는 잘 없다.

항상 처음보는 프레임워크를 만나게된다!
day065~day067 에서 설명한 내용을 잘 정리해보자

패키지 관리 (팀내협의)
클래스의 타입(자료형) 중심 90%
dto,dao,controller,action...
VS
기능 중심 10%


DispatcherServlet(FrontController)

버전 01
개발자가 직접만든 DispatcherServlet 사용
com.spring.controller.common.DispatcherServlet


버전 02
Spring 프레임워크에서 제공하는 DispatcherServlet 사용 (init이없음)
org.springframework.web.servlet.DispatcherServlet
DI(의존주입,init())을 위한 .xml(설정파일) 이 필요함
dispatcher-servlet.xml (xml이생겼네? 컨테이너가 더생긴것)
presentation layer(표현 계층)가 생성
Spring 프레임워크에서 제공하는 인코딩 필터 사용


※ not POJO(Sevlet,Filter,Listener) 객체등록은 서블릿 컨테이너가 담당
서블릿 컨테이너의 설정파일인 web.xml 에 등록해야함 (일반자바객체는 스프링으로 객체등록이 가능하지만 not POJO는 아니다)
※ 중프때했던 비동기Action(Servlet) -> 최프때 일반 Controller(POJO)로 변경예정!

※ filter는 servlet을 상속받은 클래스

어플리케이션 컨텍스트.xml을 대체하는 녀석 -> 스키마가 갖다. 기본 스키마만 넣어서 생성

우리가 만든 dispatcherServlet은 
1. 멤버변수초기화
2. 생성자
3. 세터
4. @autowired
5. 의존주입
6. init() 메서드
을 하는 애가있다. (1~6)번까지는 같은역할을하며 정말정말 중요하다!

init을 web.xml에 할만한곳이 없기 때문에 init을 위한 xml을 추가한다.

Controller(Action)

버전 01
개발자가 직접만든 Controller 인터페이스 사용
output 이 ActionForward 이었는데
VR 가 등장하면서, String 으로 변경됨
※ 어디로(경로), 어떻게(방식:리다이렉트,포워드)

버전 02
Spring 프레임워크에서 제공하는 Controller 를 구현하여 impl(구현,상속)하여 사용 (개발시엔 extend, impl 둘다 상속이라고 부르기도한다)
org.springframework.web.servlet.mvc.Controller
기존에는 request(not POJO) 객체를 통해 데이터를 전달 -> 무거움

현재는 ModelAndView(mav,POJO) 객체를 통해 데이터를 전달 -> 가벼움 


버전 03
@Component + implements Controller ▶@Controller

@Component
@Repository @Service @Component
@Aspect (AOS 위빙처리)

어노테이션을쓰면 Override가 사라져서 메서드 시그니쳐 강제가 안된다.
이럴경우 한 클래스에 2가지 기능을 담아서 관리가 가능하다 더 좋은건 아니고 다른것 (장단점이있다) -> 
이럴경우 bean new 했던것을 @ new 하기때문에 
bean new 가 사라지고 
@에 이름이 붙는다.
@Component("main")
@Component("login")

메서드 강제가 풀려서 생기는 Mapping 이슈가있다. -> 이따가 해결


[web]
dispatcher-servlet
imple,

annotation
이거 3개로 controller.common에 있는java파일들이 필요가 없어진다.

redirect:alert.do ->리다이렉트
alert.do -> forward

HandlerMapping

버전 01
개발자가 직접만든 HM 사용
DI 로 생성자 주입을 사용


버전 02
Spring 프레임 워크에서 제공하는 HM 를 사용
org.springframework.web.servlet.handler.Simple
DI 로 setter 주입을 사용

☆주입하는 객체는 Map!!!!!!!
 <prop key="/main.do>">new MainController()<</prop> new 대신 빈을 써보자!
<bean id="main" class="cohttp://m.spring.controller.board.MainController" />
bean 하고 
<prop key="/main.do>">main<</prop>
이렇게 변경한다.
이제 xml에 붙는거라 컴파일이없다. 성능향상!


버전 03
@RequestMapping으로 요청매핑
output 으로 String 을 권장
요청메서드가 GET,POST,... 등을 작성하는 것을 권장 (ex method=RequestMethod.POST)
member.do  GET--->SELECTONE
SELECT (GET 대부분 검색기능)
member.do  POST--->UPDATE
CUD (POST 대부분 업데이트)

String 프레임워크에서 제공하는 VR 사용
org.springframework.web.servlet.view.InteralResourceViewResolver
DI로 setter 주입을 사용
특정 페이지의 URL을 알면, 별도의 권한이 없어도 접근이가능한 경우가 있다.
이 경우를 막기위해 C 파트에서 별도의 접근 권한 유효성검사를 구현해야한다!
Spring 에서는, 애초에 페이지를 WEB-INF 폴더에 은닉(하이딩)하여 저장함!!
WEB-INF 폴더의 하위는 오직 VR을 통해서만 접근가능함을 이용한것

<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />

mav.setViewName("test");

VR만을 통해서 /WEB-INF/views/test.jsp
은닉된 페이지에 접근 가능해짐!!!

@Repository -> 모델
@Service -> 모델을 사용하는애
@Controller // "Implements Controller"를 포함하는 @ 

 

 


개인메모 및 정리
index == 첫 요청 (톰캣도 그렇게 되어있다 따라서 항상 index.jsp)~
같은 요청을 보내면 안된다
요청과 응답을 보내는 방식은 다르다..?
#모델은 반환을 String으로 받는것을 추천



'코리아IT핀테크과정' 카테고리의 다른 글

Command 객체  (2) 2024.03.07
Spring 궁금증 정리  (0) 2024.03.06
Data Base Connection Pool  (0) 2024.03.04
AOP(Aspect-Oriented Programming)  (2) 2024.02.29
xml, annotation(@)  (4) 2024.02.28
Comments