ThreadPoolTaskExecutor 스레드 풀을 사용하는 Executor java.util.concurrent.Executor를 Spring에서 구현한 것 org.springframework.scheduling.concurrent 패키지에서 제공 주로 spring에서 비동기처리를 위해 사용 ...
[개발자 블로그] Spring MVC
Spring MVC란? Spring 프레임워크에서 제공하는 웹 모듈이다. MVC는 Model, View, Controller의 약자로 기본 시스템 모듈을 MVC로 나누어 구현되어있다. Model 애플리케이션 상태(data)를 나타낸다. 일반적으로 POJO로 구성된다. Java Beans View 디스플레이 데이터 또는...
[개발자 블로그] Spring MVC 동작 과정
Spring MVC는 DispatcherServlet, View Resolver, Interceptor, Handler, View 등으로 구성되어있다. 이중에 DispatcherServlet이 가장 앞단의 front controller역할을 하며 가장 핵심적인 역할을 한다. Spring MVC의 구체적인 동작 과정은 다음과 같다. ...
[개발자 블로그] Spring Interceptor 개념 및 흐름
Spring Request Flow Filter 사용자의 어떠한 요청이 있을 경우, 가장 앞단에서 거치는 곳. 예를 들어, UTF-8 인코딩을 처리하는 기본 필터 중에 CharacterEncodingFilter를 호출 할 수 있다. Spring MVC 기준으로 web.xml에서 설정 DispatcherServlet 서블릿과 마...
[개발자 블로그] Spring Annotation 활성화
Annotation 기본 개념 xml 설정이 너무 길어짐에 따라 그 대안으로 생겨났다. 클래스/메서드/필드에 Annotation을 달아 그 자체로 설정이 가능하도록 한다.(단, xml의 우선순위가 더 높음) 기본적으로 활성화되지 않기 때문에 xml에 명시적인 활성화 설정이 필요하다.(IDE에서 체크하면 자동으로 추가되도록 지원) Ann...
[개발자 블로그] ContextLoaderListener와 DispatcherServlet의 차이
ContextLoaderListener와 DispatcherServlet의 차이 ContextLoaderListener와 DispatcherServlet 모두 자체적으로 스프링 컨테이너를 만듬 ContextLoaderListener안에 있는 Bean들은 shared beans(공유하는 bean들 - DAO, DataSource, Serv...
[개발자 블로그] @Bean vs @Component
@Bean 어노테이션 개발자가 컨트롤이 불가능한 외부 라이브러리들을 Bean으로 등록하고 싶은 경우에 사용한다. 예를 들어, RestTemplate 등 @Component 어노테이션 직접 컨트롤이 가능한 Class들을 Bean으로 등록하고 싶은 경우에 사용한다. 개발자가 생성한 Class에 @Bean은 설정이 가능한가? 불가...
[Backend] 카나리 배포
운영중인 서비스에 새로운 버전을 배포할 때 이상적인 방법으로 카나리 배포를 알게 되었다. 수 많은 클라이언트들이 사용중인 상황에서 배포하는 가장 이상적인 방법이라 한다. 카나리 배포는 흔히 단계별 배포 또는 점진적 배포라 불리었다. 기존 서버로 들어오는 트래픽을 10%, 20%, 30% 조금씩 신규 서버로 옮긴다. 조금씩 트래픽을 옮기면서 이슈 사항...
[개발자 블로그] 스프링 의존성 주입과 인터페이스
Spring을 활용하여 개발하면서 꼭 인터페이스 타입으로 의존성을 주입받아야 하는지에 대해 생각해보게 되었다. (CustomerService인터페이스를 만들고 CustomerServiceImpl을 구현한 후 인터페이스 타입으로 주입받는 것 처럼) SOLID원칙 중 OCP에 따르면 변화에 유연하게 대처할 수 있도록 인터페이스 타입으로 주입 받는 것이 ...
[Java] 반복문 작성 시 안 좋은 습관
반복문을 작성할 때 안 좋은 습관 1) 불필요하게 조건문에 함수 호출문을 넣는 습관 public void example(List<Integer> numbers) { for (int i = 0; i < numbers.size(); i++) { ... } } 만약 위처럼 코드를 작성하고 numbers의 사이...