** 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 |