본문 바로가기

전체 글

(21)
스프링 빈 생명주기 스프링 프레임워크는 스프링 컨테이너를 이용하여 @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 애플리케이션 실행에 필요한 핵심 라이브러리 및 자..