전체 글

전체 글

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

    ※ 본문은 김영한 선생님의 인프런 '스프링 핵심 원리 - 기본편' 강의를 듣고 정리한 내용임을 알립니다. ▶ 스프링이 지원하는 스코프 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의 등..

    좋은 객체 지향의 5가지 원칙 SOLID

    ※ 본문은 김영한 선생님의 인프런 '스프링 핵심 원리 - 기본편' 강의를 듣고 정리한 내용임을 알립니다. ▶ SRP 단일 책임 원칙 한 클래스에 하나의 책임만 '하나'의 책임이 모호할 수 있음 (클 수도 있고 작을 수도 있고, 문맥과 상황에 따라 다름) 중요한 기준은 변경 → 변경이 있을 때 파급 효과가 적다면 SRP를 잘 따른 것 ▶ OCP 개방-폐쇄 원칙 소프트웨어 요소는 확장에는 열려있지만 변경에는 닫혀 있어야 함 확장을 하려면 기존 코드를 변경해야 한다는 의문이 생길 수 있음 → 다형성을 활용하여 인터페이스를 구현한 새로운 클래스를 만들어서 새로운 기능을 구현하는 방식을 활용해야 함 ▶ LSP 리스코프 치환 원칙 프로그램의 객체는 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바뀔 수 있어야 ..

    Spring이란 무엇인가

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

    김영한 선생님의 스프링 입문 강의를 공부하고서

    ※ 블로그를 운영해본 적이 없고 웹 개발에 대한 능력도 아직 초보적인 수준이라 본문의 내용이 미흡하거나 두서 없을 수 있다는 점 미리 양해 부탁드립니다. ※ 본문은 김영한 선생님의 인프런 '스프링 입문' 강의를 듣고 정리한 내용임을 알립니다. ◈ 공부한 내용 정리 1. 프로젝트 환경설정 https://start.spring.io → 스프링 프로젝트를 간단하게 만들 수 있도록 도와줌 Maven 보다는 Gradle 스프링은 톰캣이라는 웹 서버를 내장하고 있음 어플리케이션 실행 방식은 gradle 실행보다는 intelliJ 실행 (settings에서 gradle 검색 후 변경할 것) 스프링 부트 2.4부터는 application.properties에 'spring.datasource.username=sa'를 ..