JSP 라이프 사이클
- JSP URL 호출
- 페이지 번역
- JSP 페이지 컴파일
- 클래스 로드
- 인스턴스 생성
- jspInit 메서드 호출
- _jspService 메서드 호출
- jspDestroy 메서드 호출
JSP 적절한 include 사용하기
- 정적인 방식: <%@ include file="관련 URL"%>
- JSP의 라이프 사이클 중 JSP 페이지 번역 및 컴파일 단계에서 필요한 JSP를 읽어서 메인 JSP의 자바 소스 및 클래스에 포함 시키는 방식
- 동적인 방식: <jsp:include page="relativeURL"/>
- 페이지가 호출될 때마다 지정된 페이지를 불러들여서 수행
- 느림
- 따라서 막 쓰지 말고 상황에 맞는 include 방식을 사용해야 함
서블릿 라이프 사이클
- Servlet 객체가 자동으로 생성되고 초기화 되거나
- 사용자가 해당 Servlet을 처음으로 호출했을 때 생성되고 초기화 된다.
- 그 다음 계속 '사용 가능' 상태로 대기한다
- 중간에 예외가 발생하면 '사용 불가능' 상태로 빠졌다가 다시 '사용 가능' 상태로 넘어간 후 JVM에서 '제거'된다.
- 서블릿은 JVM에 여러 객체로 생성되지 않음!
- 여러 스레드에서 해당 서블릿의 service()메서드를 호출하여 공유한다.
스프링 프레임 워크
- 스프링 프레임워크를 웹 프레임워크로 오해하는 분들이 많음
- 스프링 프레임워크는 데스크톱과 웹 애플리케이션, 작고 간단한 애플리케이션부터 여러 서버와 연동하여 동작해야 하는 엔터프라이즈 애플리케이션도 범용적인 애플리케이션 프레임워크다.
- Spring의 가장 큰 특징은 복잡한 애플리케이션도 POJO로 개발할 수 있다는 점
- Servlet을 개발하려면 반드시 HttpServlet이라는 클래스를 상속해야 함
- 하지만 스프링을 사용하면 확장하지 않아도 웹 요청을 처리하는 클래스를 작성할 수 있음
- 개발자가 보다 쉽게 자신이 작성한 코드를 테스트 할 수 있다.
- 더 빠르고 쉽게 문제를 확인할 수 있으며 이는 곧 높은 개발 생산성으로 이어진다
의존성 주입 / AOP / PSA
- 의존성 주입 / AOP는 패스
PSA (Portable Service Abstraction)
- 하나의 추상화로 여러 서비스를 묶어둔 것
- @Transactional 어노테이션을 선언하는 것 만으로 별도의 코드 추가 없이 트랜잭션 서비스를 이용 가능
- Service Abstraction
- 추상화 계층을 사용하여 어떤 기술을 내부에 숨기고 개발자에게 편의성을 제공해주는 것
- 잘 만든 인터페이스
스프링 뷰 반환 성능 문제 고려해볼 점
@RequestMapping("member/{id}")
public String hello(@PathVariable int id) {
return "redirect:/member/" + id;
}
- 문자열 자체를 리턴하면 스프링은 해당 문자열에 해당하는 실제 뷰 객체를 찾는 매커니즘을 사용하는데
- 이 때 매번 동일한 문자열에 대한 뷰 객체를 새ㅐ로 찾기 보다는 이미 찾아본 뷰 객체를 캐싱해두면 다음에도 동일한 문자열이 반환됐을 때 훨씬 빠르게 뷰 객체를 찾을 수 있다
@RequestMapping("member/{id}")
public String hello(@PathVariable int id) {
return new RedirectView("/member/" + id);
}
'개발서적 > 자바 성능 튜닝 이야기' 카테고리의 다른 글
[자성튜이] JVM은 도대체 어떻게 구동될까 (0) | 2024.09.16 |
---|---|
[자성튜이] 서버를 어떻게 세팅해야 할까? (1) | 2024.09.16 |
[자성튜이] 로그 작성 (0) | 2024.09.16 |
[자성튜이] IO 이야이야기 (0) | 2024.08.25 |
[자성튜이] static에 관하여 / reflection (0) | 2024.08.22 |