Offset-based Pagination Oracle은 ROWNUM을 사용하여 페이지 처리 MySQL은 LIMIT를 사용하여 페이지 처리 ROWNUM, BETWEEN 사용 (1.3초) 정렬은 인라인 뷰에서 먼저 처리 BETWEEN을 사용하면 전체 데이터에 ROWNUM을 처리해서 성능 이슈 select A.*, ROWNUM as RN from ( select * from TABLE order by 1 ) A where ROWNUM BETWEEN 11 AND 20; ROWNUM, 페이지 수를 계산해서 사용 (1.3초) select * from ( select A.*, CEIL(ROWNUM/10) as PAGE from ( select * from TABLE order by 1 ) A ) where PAGE..
EntityManagerFactoryJPA를 동작시키기 위한 기반 객체를 만들고 DB 커넥션 풀 생성META-INF/persistence.xml 에 있는 정보를 바탕으로 생성생성 비용이 크기 때문에 한번만 생성하고 공유해서 사용여러 스레드가 동시에 접근해도 안전. 공유 가능EntityManager엔티티를 저장, 수정, 삭제, 조회 등 모든 일을 처리. 가상의 데이터베이스엔티티 매니저 팩토리에서 엔티티 매니저를 생성. 비용은 거의 들지 않음여러 스레드가 동시에 접근하면 문제 발생. 공유 금지DB 연결이 꼭 필요한 시점까지 커넥션을 얻지 않음. 트랜잭션을 시작할 때 커넥션을 획득영속성 컨텍스트 (Persistence Context)엔티티를 영구 저장하는 환경엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고..
SQL을 직접 다룰 때 발생하는 문제점 진정한 의미의 계층 분할이 어렵다 엔티티르르 신뢰할 수 없다 SQL에 의존적인 개발을 피하기 어렵다 JPA Java ORM(Object-Relation Mapping) 기술 표준 API 객체와 테이블을 매핑해서 패러다임의 불일치 문제를 개발자 대신 해결 정교한 객체 모델링을 할 수 있고 객체지향 개발에 집중할 수 있다 생산성 : SQL을 작성하고, JDBC API를 사용하는 반복적인 일을 JPA가 대신 처리 유지보수 : JPA가 대신 처리해주므로 수정해야할 코드가 줄어듦 패러다임의 불일치 해결 : 상속, 연관관계, 객체 그래프 탐색, 비교하기 해결 성능 : 애플리케이션과 DB 사이에서 다양한 성능 최적화 기회 제공 데이터 접근 추상화와 벤더 독립성 : 특정 DB 기..
Filter (javax.servlet.Filter)🔹 역할웹 애플리케이션에서 요청과 응답을 가로채는 역할을 합니다.주로 보안, 인코딩, 로깅, 인증, 권한 검사 등에 사용됩니다.서블릿 컨테이너 레벨에서 동작하며, DispatcherServlet 앞에서 실행됩니다.🔹 동작 방식클라이언트 요청이 들어오면 Filter가 가장 먼저 실행됩니다.필터에서 요청을 변형하거나, 로깅 등을 수행할 수 있습니다.chain.doFilter(request, response)를 호출하면 다음 필터 또는 서블릿으로 요청이 전달됩니다.응답이 생성되면 다시 Filter에서 응답을 조작할 수 있습니다.import jakarta.servlet.*;import jakarta.servlet.annotation.WebFilter;imp..
HTTP 프로토콜은 비연결지향 : 클라이언트가 request를 서버에 보내면, 서버는 클라이언트에게 response 리턴 후 연결 해제 웹 페이지에서 머무르는 동안 사용자의 정보를 유지하기 위해 세션, 쿠키를 사용 Session 웹 서버에 접속한 후 서버에서 상태를 유지하는 기술 로그인 상태 사용자 정보가 서버에 저장되어 쿠키보다 보안성 높음 웹 브라우저 캐시에 저장되어 브라우저 종료 시 세션 삭제 Controller 메서드에 HttpSession, HttpServletRequest.getSession() 사용 Cookie 클라이언트에 파일로 사용자 정보를 저장하는 기술 로그인 ID 저장, 팝업 제한 사용자 정보가 클라이언트에 저장되어 보안성 낮음 일정 기간 동안 저장 가능 Controller 메서드에 ..
MVC Model-View-Controller 소프트웨어 아키텍처 패턴 사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있다. Spring MVC @EnableWebMvc : 스프링 MVC 사용을 위한 다양한 Bean 설정을 추가 해준다 WebMvcConfigurer 인터페이스 : 스프링 MVC의 개별 설정을 조정할 때 사용 DefaultServlet, ViewResolvers DispatcherServlet은 웹 브라우저의 요청을 받기 위한 창구 역할, 요청 흐름을 제어하는 역할 스프링 컨테이너를 생성 : HandlerMapping, HandlerAdapter, ViewResol..
Connection Pool 일정 개수의 DB 커넥션을 미리 만들어두는 기법 커넥션을 사용하는 시점에서 커넥션을 생성하는 시간을 아낄 수 있다. 동시 접속자가 많더라도 커넥션을 생성하는 부하가 적기 때문에 더 많은 동시 접속자를 처리할 수 있다. DataSource 커넥션 풀 기능을 제공하는 JDBC 모듈의 구현 클래스 Spring에서 DB 연동은 DataSource를 사용해서 DB Connection을 구한다 DataSource를 Bean으로 등록하고 DB 연동 기능을 구현한 Bean 객체는 DataSource를 주입받아 사용 JdbcTemplate Connection, Statement, ResultSet을 직접 사용하지 않고 편리하게 쿼리를 실행할 수 있다 DAO 클래스에서 JdbcTemplate ..
프록시 (Proxy) 핵심 기능의 실행은 다른 객체에 위임하고 부가적인 기능을 제공하는 객체 AOP 여러 객체에 공통으로 적용할 수 있는 기능을 분리해서 재사용성을 높여주는 프로그래밍 기법 공통 기능 : 트랜잭션, 로깅, 보안 Advice : 언제 공통 관심 기능을 핵심 로직에 적용할 지를 정의 Before Advice : 대상 객체의 메서드 호출 전에 실행 After Returning Advice : 대상 객체의 메서드가 익셉션 없이 실행된 이후에 실행 After Throwing Advice : 대상 객체의 메서드를 실행하는 도중 익셉션이 발생한 경우 실행 After Advice : 익셉션 발생 여부 상관없이 대상 객체의 메서드 실행 후 실행 Around Advice : 대상 객체의 메시드 실행 전, ..