본문 바로가기

분류 전체보기

(21)
스프링 인터셉터 스프링 인터셉터는 웹과 관련된 공통 관심사를 처리를 할 때 사용한다. AOP도 공통 관심사에 대한 처리를 하지만 AOP는 주로 메서드를 중심으로 처리하는 반면 인터셉터는 주로 HTTP 헤더 정보나 URL 정보, 세션 정보, 쿠키 정보, 핸들러 정보 등을 이용해서 웹 요청 자체에 초점을 맞춰서 처리한다. HandlerInterceptor public interface HandlerInterceptor { default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return true; } default void postHandle(HttpServletRe..
스프링 빈 생명주기 스프링 프레임워크는 스프링 컨테이너를 이용하여 @Bean 혹은 @Component 를 적용한 객체를 빈으로 등록한다. 스프링은 의존관계 주입 완료 후 시점과 스프링 컨테이너가 종료되기 직전 시점에 어떠한 동작(콜백)을 수행할 수 있도록 지원한다. 스프링 싱글톤 빈의 이벤트 라이프 사이클 스프링 컨테이너 생성 → 스프링 빈 생성 → 의존관계 주입 → 초기화 콜백 → 사용 → 소멸 전 콜백 → 스프링 종료 초기화 콜백: 빈이 생성되고, 빈의 의존관계 주입이 완료된 후 호출 소멸전 콜백: 빈이 소멸되기 직전에 호출 스프링 빈 생성주기 콜백 지원 InitializingBean, DisposableBean 인터페이스 상속 public interface InitializingBean { void afterPrope..
스프링 컨테이너 스프링 컨테이너 스프링 컨테이너는 자바 객체의 생명 주기(객체의 생성, 소멸)를 관리하여 등록된 빈(Bean)을 조회하고 사용할 수 있으며, 부가기능(환경 변수 설정, 어플리케이션 이벤트, 편리한 리소스 조회 등)을 제공한다. 스프링 컨테이너는 IoC, DI랑도 연관이 깊다. 기존 개발자는 new 키워드를 사용해 직접 객체를 생성하기도 하고 코드 수정이 필요할 경우 새로운 객체로 변경하는 등 직접 관리를 해왔다. 여기에서는 OCP, DIP 위반이 일어났고 스프링 프레임워크는 그러한 문제를 해결하기 위해 스프링 컨테이너를 사용하여 개발자를 대신해서 객체를 직접 관리하게 되었다. 스프링 컨테이너는 @Autowired가 적용된 코드에 의존관계 주입을 한다. 스프링 컨테이너는 빈을 싱글톤으로 관리하며 싱글톤 패..
스프링 MVC 예전 스프링 프레임워크를 사용하기 전에는 클라이언트의 요청을 처리하기 위해 각 요청마다 1:1 구조로 서블릿을 구현해야만 했다. 규모가 작은 사이트라면 문제가 적겠지만 규모가 큰 사이트라면 수많은 서블릿을 관리해야 하는 수고로움이 있었다. 그래서 이러한 문제점을 해결하기 위해 스프링 MVC를 구현하게 되었고, 물론 다른 요구사항에 맞춰서도 기능을 확장시켜왔다. 스프링을 사용한다는 것은 스프링 컨테이너(IoC, DI...)를 사용한다는 의미도 있지만 스프링 MVC를 사용한다고 봐도 무방하다. MVC 용어 Model : 도메인 객체 또는 DTO로 화면에 전달할 또는 화면에서 전달 받은 데이터를 담고 있는 객체이다. View : 데이터를 보여주는 화면으로 클라이언트가 서비스를 요청을 하게 되면 결괏값을 확인할..
리플렉션(Reflection) 리플렉션이란? 리플렉션은 클래스의 정보(필드, 메서드, 상속된 클래스와 인터페이스, 적용된 애노테이션 등)를 읽어 객체 생성, 메서드 사용, 필드 값 변경 등 임의대로 조작을 할 수 있도록 자바에서 제공되는 API다. 대표적으로 리플렉션은 스프링, 하이버네이트, JUnit 등에서 사용된다고 하며 예시를 통해 리플렉션을 사용해보도록 하자. 리플렉션 사용법 리플렉션은 jdk 1.1버전부터 적용되어 java.lang.reflect 패키지를 임포트 해주면 바로 사용이 가능하다. import java.lang.reflect.* 리플렉션을 사용하기 위해 접근 지정자를 적절하게 사용해서 필드와 메서드를 선언해주고 생성자도 만들어준다. @MyAnnotation public class Child extends Paren..
JVM 정리 JDK, JRE, JVM이란? JVM JVM(Java Virtual Machine)은 .class로 컴파일된 파일(자바 바이트 코드)을 클래스 로더(Class Loader)를 통해 읽고 분석하여 OS에 특화된 코드(기계어)로 변환 및 실행될 수 있는 런타임 환경을 제공하는 사양이다. 한번쯤 자바 언어는 "한 번의 코드 작성으로 어느 환경에서도 실행 가능하다.(WORA)" 란 말을 들어봤을 것이다. JVM은 WORA을 실현시켜줄 수 있도록 하는 역할을 맡고 있다. JRE JRE(Java runtime environment)는 .class로 컴파일된 파일을 Java 애플리케이션을 실행할 수 있도록 구성된 배포판이다. 따라서 JRE에는 JVM을 비롯해 Java 애플리케이션 실행에 필요한 핵심 라이브러리 및 자..
싱글톤 패턴 싱글톤 패턴 시스템 런타임, 환경 세팅에 대한 정보 등, 인스턴스가 여러개 일 때 문제가 생길 수 있으므로 인스턴스를 오직 한개만 만들어 제공하는 디자인 패턴이다. 예시로 초당 100만번 호출되는 객체가 있다고 가정할 때 100만번의 객체가 생성된다면 부하가 상당할 것이다. 그럴 때 사용하면 메모리를 효율적으로 사용할 수 있다. 대표적인 싱글톤 패턴 구현 싱글톤 패턴을 구현할 때는 이른 초기화(Eager Initialization) 방식과 늦은 초기화(Lazy Initialization) 방식이 있으며 synchronized, volatile 키워드를 사용하여 이중 체크하는 구현 방법, Enum 클래스로 구현하는 방법 등 여러가지 방법이 있지만 대표적인 방법으로는 내부 클래스(nner class)를 구현..