JVM/Spring

    AOP의 간단한 개념들

    AOP는 흩어진 Aspect를 모듈화할 수 있는 프로그래밍 기법이다. 클래스들이 비슷한 메소드, 필드, 코드 등을 사용하고 있다면, 개발자가 한 클래스를 수정하려고 할 때 연관된 모든 클래스를 찾아가서 또다시 수정을 진행해야 할 것이다. 이렇듯, 클래스마다 겹치고 반복되는 코드를 Crosscutting Concerns(흩어진 관심사) 라고 부른다. 이는 AOP를 활용해서 해결해야 한다. 위 이미지를 보면 흩어져 있는 부분들을 Aspect를 활용해서 모듈화한 모습을 볼 수 있다. 이처럼 모듈화한 Aspect를 클래스의 어떤 곳에서 사용해야 하는지 정의해주면 된다. 결론적으로, Aspect를 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것이 AOP이다. 주요 개념 Aspect : 모듈화한 클..

    Spring Boot 핵심 개념들

    Spring Boot 주요 어노테이션 @SpringBootApplication : @Configuration, @EnableAutoConfiguration, @ComponentScan 등의 어노테이션을 합친 것으로, 주로 메인 클래스 위에서 사용 @EnableAutoConfiguration : 미리 설정해놓은 Java 설정 파일들을 빈으로 등록 @ComponentScan : @Component 어노테이션이 붙어있는 클래스들을 찾아서 빈으로 등록 @Component : 선언된 클래스를 빈으로 등록 @Controller : Spring MVC의 Controller로 사용되는 클래스 선언 @GetMapping, @PostMapping, @PutMapping, @DeleteMapping, @PatchMappin..

    싱글톤 빈과 프로토타입 스코프

    ※ 본문은 김영한 선생님의 인프런 '스프링 핵심 원리 - 기본편' 강의를 듣고 정리한 내용임을 알립니다. ▶ 스프링이 지원하는 스코프 1. 싱글톤 : 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프 2. 프로토타입 : 스프링 컨테이너가 프로토타입의 빈 생성과 의존관계 주입까지 관여 3. 웹 관련 스코프 : 웹 환경에서만 동작 / 프로토타입과 다르게 스프링이 해당 스코프의 종료시점까지 관리 - request : HTTP 요청이 들어오고 나갈 때까지 유지되는 스코프, 각 HTTP 요청마다 별도의 빈 인스턴스 생성 및 관리 - session : HTTP Session이 생성되고 종료될 때까지 유지되는 스코프 - application : 웹의 서블릿 컨텍스트와 같은 범위로 유지..

    빈 생명주기 콜백

    ※ 본문은 김영한 선생님의 인프런 '스프링 핵심 원리 - 기본편' 강의를 듣고 정리한 내용임을 알립니다. ▶ 빈 생명주기 콜백이 필요한 이유 : 애플리케이션 시작 시점에 필요한 연결을 미리 해두고 애플리케이션 종료 시점에 연결을 모두 종료하는 작업에 객체의 초기화와 종료 작업이 필요 : '스프링 빈의 라이프 사이클 = 객체 생성 → 의존관계 주입' → 스프링 빈은 객체 생성 및 의존관계 주입이 다 끝난 다음에야 필요한 데이터를 사용할 수 있는 준비가 완료되므로, 초기화 작업은 의존관계 주입이 모두 완료된 다음에 호출해야 됨 But, 개발자가 의존관계 주입이 모두 완료된 시점을 어떻게 알 수 있을까? → 스프링은 의존관계 주입이 완료되면 스프링 빈에 콜백 메소드를 통해 초기화 시점을 알려주는 다양한 기능을..

    ComponentScan과 의존관계 주입 방법에 대해서

    ※ 본문은 김영한 선생님의 인프런 '스프링 핵심 원리 - 기본편' 강의를 듣고 정리한 내용임을 알립니다. ▶ @ComponentScan 사용 방법 @ComponentScan은 @Component가 붙은 모든 클래스를 스프링 빈으로 등록 @Autowired를 이용해서 의존관계를 자동 주입할 수 있음 (기본 조회 전략은 타입이 같은 빈을 찾아서 등록 / 생성자에 파라미터가 많아도 다 찾아서 주입) basePackages : 지정한 패키지를 탐색 시작 위치로 지정 basePackageClasses : 지정한 클래스의 패키지를 탐색 시작 위치로 지정 → 탐색의 default값은 @ComponentScan이 붙은 클래스의 패키지를 탐색 시작 위치로 지정 → 권장하는 방법 : 설정 정보의 클래스의 위치를 프로젝트 ..

    싱글톤 컨테이너

    ※ 본문은 김영한 선생님의 인프런 '스프링 핵심 원리 - 기본편' 강의를 듣고 정리한 내용임을 알립니다. ▶ 싱글톤이란 무엇이고, 왜 쓰게 되었는가? 스프링은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 만들어졌음 대부분의 스프링 애플리케이션은 웹 애플리케이션 (다른 애플리케이션도 충분히 개발할 수는 있음) 웹 애플리케이션은 보통 여러 고객이 동시에 요청을 함 만약, 고객 트래픽이 초당 100이 나오면 초당 100개의 객체가 생성되고 소멸됨 (메모리 낭비가 심함!) 해결방안 : 해당 객체가 1개만 생성되고, 공유하도록 설계해야 함 → 싱글톤 패턴의 등장 ▶ 스프링 활용 이전의 싱글톤 방식 public class SingletonService { private static final Singleton..

    스프링 컨테이너와 스프링 빈

    ※ 본문은 김영한 선생님의 인프런 '스프링 핵심 원리 - 기본편' 강의를 듣고 정리한 내용임을 알립니다. ▶ 스프링 컨테이너 ApplicationContext : 스프링 컨테이너이자 인터페이스 @Configuration이 붙은 AppConfig와 같은 클래스를 설정(구성) 정보로 사용 @Configuration이 붙은 클래스 내에 @Bean이 적힌 메소드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록 → 이렇게 등록된 객체를 스프링 빈이라 부름 (※ 스프링 빈의 이름은 @Bean이 붙은 메소드의 이름) 이후 applicationContext.getBean()과 같은 메소드를 사용해서 스프링 빈을 찾을 수 있음 ▶ 스프링 빈 조회 조회하는 코드 : ac.getBean(빈 이름, 타입) / ac.ge..

    AppConfig와 IoC, DI에 관하여

    ※ 본문은 김영한 선생님의 인프런 '스프링 핵심 원리 - 기본편' 강의를 듣고 정리한 내용임을 알립니다. ▶ AppConfig의 등장 Q. 애플리케이션을 공연이라고 가정하고 각각의 인터페이스를 배역이라고 했을 때, 배역을 맡는 배우는 누가 선택하는가? → 배우는 배역을 수행하는 '하나의 책임'에만 집중해야 하며, 공연을 구성하고 배우를 섭외해서 배역에 지정하는 책임을 담당하는 별도의 '공연기획자'가 필요! → AppConfig 클래스를 만들어서 구현 객체의 생성과 연결을 담당 → 공연기획자인 AppConfig는 구체 클래스를 선택하고 배역에 맞는 배우를 선택 애플리케이션이 어떻게 동작해야 할지 전체 구성을 책임진다. ▶ IoC (Inversion of Control, 제어의 역전) AppConfig의 등..

    Spring이란 무엇인가

    ※ 본문은 김영한 선생님의 인프런 '스프링 핵심 원리 - 기본편' 강의를 듣고 정리한 내용임을 알립니다. ▶ Spring의 간략한 탄생 배경 옛날에는 EJB(Enterprise Java Beans)를 활용하여 개발을 진행하였으나 무척 까다로운 방법이었음 2002년, Rod Johnson이 EJB의 문제점을 지적하며 약 30,000 라인의 기반 기술을 예제 코드로 선보임 책 출간 직후 Juergen Hoeller, Yann Caroff가 Rod Johnson에게 오픈소스 프로젝트 제안 EJB라는 겨울을 넘어 새로운 시작이라는 뜻으로 'Spring'이라는 이름을 지었음 스프링의 핵심 코드의 상당수는 유겐 휠러가 지금도 개발 중 지금 시대에 자바 기술을 사용할 때 스프링과 JPA가 가장 큰 메인 기술로 자리잡..