전체 게시글376 [Servlet-jsp] DAO(Data Access Object)에서 데이터베이스 접근 로직을 구현할 때 사용하는 JdbcTemplate를 싱글톤 패턴으로 구현하기 매번 JdbcTemplate 인스턴스 생성하 컨트롤러에서 접급하는 DAO 클래스와 같이 데이터베이스 접근 로직을 구현할 때 사용하는 JdbcTemplate는 인스턴스를 여러개 필요가 없다. 인스턴스를 하나만 구현해도 된다. 우선, 개선하기 전 아래 코드를 살펴보자. public class JdbcTemplate { public void update(String sql, PreparedStatementSetter pss) throws DataAccessException { [생략..] } public void update(String sql, Object... parameters) { [생략..] } public void update(PreparedStatementCreator psc, KeyHolder .. 2023. 3. 31. [Servlet-jsp] 스택과 힙 메모리 / 멀티쓰레드 상황에서 문제가 발생할 가능성이 있는 Controller의 코드 인스턴스 생성에 따른 비용 발생 매번 클래스의 인스턴스를 생성할 때는 비용이 발생한다. 인스턴스를 생성하고 더 이상 사용하지 않을 경우 가비지 콜렉션 과정을 통해 메모리에서 해제하는 과정 또한 비용이 발생한다. 따라서 인스턴스를 매번 생성할 필요가 없는 경우 매번 인스턴스를 생성하지 않는 것이 성능 측면에서 더 유리하다. 예를 들어, 모델 데이터를 담고있는 DTO(Data Transfer Object)는 클라이언트마다 서로 다른 상태 값을 가진다. 이 경우에는 매 요청마다 인스턴스를 생성해야 한다. 하지만 JdbcTemplate, DAO(Data Access Object), Controller 인스턴스를 매 요청마다 생성해야 할까? 아니다. 인스턴스 하나를 생성한 후 재사용할 수 있다. 서블릿은 서블릿 .. 2023. 3. 31. [Servlet-jsp] 첫 화면에 접근했을 때 사용자 요청부터 응답까지의 흐름 doFilter() 메서드 실행 클라이언트가 localhost:8080으로 접근하면 요청을 처리할 서블릿에 접근하기 전에 먼저 ResourceFilter와 CharacterEncodingFilter의 doFiltre() 메서드가 실행된다. ResourceFilter의 경우 해당 요청이 정적 자원( CSS, 자바스크립트, 이미지 ) 요청이 아니기 때문에 서블릿으로 요청을 위임한다. service() 메서드 실행 요청 처리는 "/" 으로 매핑되어 있는 DispatcherServlet이므로 이 서블릿의 service() 메서드가 실행된다. URL 분석 후 Controller 객체 찾음 service() 메서드는 요청받은 URL을 분석해 해당 Controller 객체를 Request Mapping에서 가져온다... 2023. 3. 31. [Servlet-jsp] 서블릿 컨테이너와 MVC 프레임워크 초기화 과정 ServletContext 생성 서블릿 컨테이너는 웹 애플리케이션의 상태를 관리하는 ServletContext를 생성한다. ServletContext가 초기화되면 컨텍스트의 초기화 이벤트가 발생한다. 등록된 ServletContextListener의 콜백 메서드인, contextInitialized() 메서드가 호출된다. @WebListener public class ContextLoaderListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { ResourceDatabasePopulator populator = new ResourceDatabasePopulat.. 2023. 3. 31. [Git] Git에서 특정 브랜치만 클론하는 방법 git을 사용하다 브랜치 전체를 clone하지 않고 특정 브랜치 하나만 clone하는 것이 가능하다. 특히 브랜치가 많은 경우 이 방법을 사용할 수 있다. git clone -b {branch_name} --single-branch {저장소 URL} ex) git clone -b hbkuk --single-branch https://github.com/hbkuk/java 위와 같이 실행하면 java의 hbkuk branch만 clone할 수 있다. 2023. 3. 30. [BaekJoon] 백준 알고리즘 1806번 / 부분합 / 투포인터 / Python 문제 주의 최소 길이를 저장하는 변수인 minLength를 충분히 큰 값으로 지정한다. end 포인터? end 포인터는 고정시켜 놓는 것이 아니라, 특정 조건까지 이동시키는 것임. 해당 문제는 연속된 수들의 부분합 중에 그 합이 S 이상이 되는 것 중, 가장 짧은 것의 길이를 구하는 것이 목표임. 이때, start 포인터와 end 포인터를 사용하여 특정 조건까지 end 포인터를 이동시키면서 부분합을 계산하고, 그 합이 S 이상이 되는 순간 start 포인터를 이동시켜 최소 길이를 구하는 것임. 길이가 0이 될수도 있나? for문에서 start를 1씩 증가시키면서 end를 이동시켜 나가다보면 자연스럽게 처리되므로 별도의 처리를 하지 않아도 됨. 코드 """ 1. 아이디어 - for문을 통해서 투 포인터로 .. 2023. 3. 30. 이전 1 ··· 13 14 15 16 17 18 19 ··· 63 다음