Backend/Servlet

MVC2

AIHYEONJI 2025. 6. 12. 14:11

** MVC2

: 웹 애플리케이션에서 요청 처리와 화면 출력을 명확히 분리한 구조로, 서블릿이 컨트롤러 역할을 하여 클라이언트의 요청을 받아 비즈니스 로직을 처리한 뒤, 데이터를 JSP에 전달하고 JSP는 오직 결과 화면만 출력하는 방식

→ 스프링 이해하는데에, 도움이 됌.

  • 로직과 화면이 분리되어 코드의 재사용성과 유지보수성이 향상되며, 실제 프로젝트와 프레임워크(Spring)에서도 널리 채택되는 구조
더보기

클라이언트  >  컨트롤러 서블릿  >  DAO/DTO  >  결과 저장  >  JSP 포워딩 

 

* MC1 과 MC2 비교

항목 MVC1 MVC2
Controller 없음 (jsp가 처리) 있음 (Servlet이 처리)
View JSP가 로직 + 출력 JSP는 오직 View
코드 재사용 낮음 높음
유지보수성 낮음 높음
사용 기술 JSP 중심 Servlet 중심 + JSP

 

* WEB-INF에 넣으면 페이지를 직접 호출을 못함

* 상대경로가 webapp를 바라봄

 

** JNDI ( Java Naming and Directory Interface ) : 이름으로 객체를 찾기 위한 표준

  • DB 연결
  • 자원(리소스)
  • 환경설정 등

등록해두고, 자바코드에서 그 이름을 가져다 쓰는 방식 

  • 보안성 높음 : 코드에 직접 쓰지 않고, 외부(톰켓)에 저장할 수 있음
  • 유지보수 좋음 : 코드 수정 없이 설정만 바꾸면 DB나 환경을 변경
  • 공통 자원 재사용, 커넥션 풀 설정 가능 : 여러 서블릿이나 클래스에서 공통된 자원을 설정만으로 공유, 톰캣이 커넥션 풀을 관리해주므로 성능도 좋아짐

cf. tomcat9 / conf / context.sml : 환경 설정

<Context>
    <!-- JNDI 이름 정의 -->
    <Resource name="jdbc/mydb"
              auth="Container"
              type="javax.sql.DataSource"
              // 풀 : 20개 미리 만들어놓겠다!
              maxTotal="20"
              // 기기 10개로 제한함
              maxIdle="10"
              // 시간 -1은 설정 안함
              maxWaitMillis="-1"
              username="root"
              password="1234"
              driverClassName="com.mysql.cj.jdbc.Driver"
              url="jdbc:mysql://localhost:3306/java?serverTimezone=Asia/Seoul"/>
</Context>

 

 

** Filter : 웹 애플리케이션에서 요청이나 응답을 가로채서 전처리 또는 후처리 할 수 있는 기능을 제공하는 서블릿 컴포넌트

  • 로그인 여부 확인, 관리자 권한 확인
  • 누가 URL에 접근했는지 로그 출력
  • 응답 내용을 gzip으로 압축
  • URL 접근 제한, 파라미터 필터링
더보기

init() : 필터가 초기화될 때, 1번만 호출됨 (설정 읽기 등 가능)

doFilter() : 핵심 메서드 / 요청이 필터를 통과할 때마다 실행됨

destorty() : 필터가 제거될 때 실행됨(자원을 정리 등)5

* 적용 방식

  • 어노테이션 방식
@WebFilter(urlPatterns = {"/secure/*"})
public class LoginFilter implements Filter {

}
  • web.xml
<filter>
		<filter-name>LoginFilter</filter-name>
        <filter-class>com.koreait.mvc2.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
		<filter-name>LoginFilter</filter-name>
        <url-pattern>/secure/*</url-pattern>
</filter-mapping>

'Backend > Servlet' 카테고리의 다른 글

RESTAPI_frontend  (0) 2025.06.19
MyBatis  (0) 2025.06.18
Tomcat9  (0) 2025.06.10
Servlet  (0) 2025.06.09
Session & Servlet api  (0) 2025.06.05