빈(Bean) 라이프사이클
·
Spring/Core
서론스프링 빈(Bean)은 단순히 객체를 생성하고 사용하는 것뿐만 아니라, 라이프사이클 관리와 범위 지정까지 컨테이너가 담당한다. 컨테이너 초기화와 종료, 빈 생성과 소멸, 그리고 싱글톤과 프로토타입 범위에 대해 이해해야 스프링의 객체 관리 원리를 정확히 파악할 수 있다. 컨테이너 초기화와 종료스프링 컨테이너는 세 가지 주요 단계로 관리된다.초기화: 설정 클래스 정보를 읽어 빈 객체를 생성하고 의존 관계를 연결한다.사용: getBean() 등을 통해 빈 객체를 구하고 사용한다.종료: close() 호출로 컨테이너를 종료한다.// 컨테이너 초기화ApplicationContext ctx = new AnnotationConfigApplicationContext(AppCtx.class);// 빈 객체 구해서 사..
컴포넌트 스캔
·
Spring/Core
컴포넌트 스캔이란스프링에서 빈(Bean)을 등록하는 방법에는 명시적 등록(@Bean)과 자동 등록(컴포넌트 스캔)이 있다.컴포넌트 스캔은 설정 클래스에서 일일이 빈을 등록하지 않아도, 스프링이 클래스 경로를 탐색하여 자동으로 빈으로 등록해주는 기능이다.@Component컴포넌트 스캔을 통해 빈으로 등록되려면, 클래스에 @Component 어노테이션을 붙여야 한다. 값을 지정하면 해당 값이 빈 이름으로 사용된다.@Component("member")public class MemberDao { ...} @ComponentScan컴포넌트를 스캔하려면 설정 클래스에 @ComponentScan을 붙인다.@Configuration@ComponentScan(basePackages = {"spring"})publi..
Spring DI(2)
·
Spring/Core
1편에서 이어집니다. 앞서 다룬 방식은 설정 클래스에서 직접 의존 대상을 주입하는 방법이었다.https://ppparkta.tistory.com/38하지만 스프링은 명시적인 주입 외에도, 개발자가 의존 대상을 지정하지 않아도 알아서 주입해주는 자동 주입 방식을 제공한다. 자동 주입은 주로 두 가지 어노테이션을 활용한다.@Autowired@Resource@Autowired를 이용한 자동 주입자동 주입을 사용하면 설정 클래스에서 일일이 세팅하지 않아도 된다.@Beanpublic ChangePasswordService changePwdSvc() { return new ChangePasswordService();}위와 같이 단순히 객체만 반환하고, 의존 주입은 생략해도 된다. 대신, 주입받을 대상에 @Au..
JdbcTemplate 삽입 직후 Key 가져오기
·
Spring/Core
서론프로젝트 요구사항에 맞추다 보면 조회 성능 등의 이유로 삽입 직후에 별도의 조회 없이 곧바로 primary key를 반환받아야 하는 경우가 있다. 스프링에서 JdbcTemplate을 사용할 때, 이 요구사항을 해결할 수 있는 두 가지 기능이 존재한다. 바로 KeyHolder와 SimpleJdbcInsert이다. 이번 프로젝트를 진행하며 나는 처음에는 KeyHolder 기능만 사용했으나, 코드 리뷰를 통해 SimpleJdbcInsert를 새롭게 알게 되었고 두 가지 방법을 비교하며 정리하게 되었다. KeyHolderKeyHolder는 데이터 삽입 직후 생성된 primary key를 가져올 수 있게 해주는 기능이다.JdbcTemplate의 update() 메서드 두 번째 인자에 KeyHolder를 넣으면..
Spring DI(1)
·
Spring/Core
스프링의 세 가지 철학 중 하나인 IoC/DI에 대해 학습한 내용을 이어서 정리한다. Spring DI (Dependency Injection)스프링 프레임워크의 핵심 개념 중 하나가 바로 의존성 주입(DI, Dependency Injection)이다. 이 글에서는 의존이란 무엇인지, DI가 왜 필요한지, 그리고 스프링에서 DI가 어떻게 동작하는지 정리한다. 빈(Bean)이 싱글톤인 이유스프링 컨테이너가 생성한 빈(Bean) 객체는 기본적으로 싱글톤(singleton) 범위를 가진다. 그 이유는 같은 객체를 여러 번 생성하면 불필요한 메타데이터가 중복되고, 동일한 값을 가진 객체가 여러 개 생기기 때문이다. 즉, 스프링이 관리하는 객체는 별다른 이유가 없는 한 싱글톤으로 유지되어야 한다. 의존이란의존성..
Spring IoC Container
·
Spring/Core
Spring 프레임워크를 주력으로 하는 입장이지만, Spring이 어떤 목적을 갖고 만들어졌는지 모호하게 알고 있었다. 조금 더 자세하게 정리해보고자 Spring의 3대 철학인 IoC/DI, AOP, PSA에 대해 학습했다. 이 글에서는 IoC (Container)를 정리한다. Spring ContextIoC에 대해 이야기 하기 위해서는 Spring에서 제공하는 ApplicationContext에 대한 설명이 선행되어야 한다.Spring Context(= ApplicationContext)는 빈 객체(Bean)의 인스턴스 주기와 의존성을 관리하는 컨테이너이다. 내부를 까보면 BeanFactory를 확장하고 있는데, AppicationContext에서 AOP 및 이벤트 기능 등 여러가지를 추가로 제공한다...
JDBC, JDBC Template 비교
·
Spring/Core
서론애플리케이션의 정보를 영구적으로 저장하기 위해서는 데이터베이스에 연결해야 한다. 내가 주로 사용하는 스프링 프레임워크에서 JDBC Template을 기반으로 데이터베이스 연결을 지원한다. 이에 따라 자바가 제공하는 JDBC, 스프링이 제공하는 JDBC Template에 대해 알아보고자 한다. JDBCJDBC(Java Database Connectivity)는 애플리케이션에서 데이터베이스에 접근하기 위해서 사용하는 자바 API이다. DB Access Logic을 통해 접근한다. DB 종류가 여러가지 존재하기 때문에 DB에 따라 구현하는 DB 접근 로직이 달라져야 한다. 아래 코드는 JDBC를 사용해서 DB에 데이터 추가하는 로직이다. Connection 관리, 파라미터 관리, 예외처리 등 다양한 관리..
스프링이란?
·
Spring/Core
스프링스프링 프레임워크는 자바 기반의 대표적인 애플리케이션 프레임워크이다. 주요 특징은 다음과 같다.DI 지원: 의존성 주입을 통해 객체 간 결합도를 낮출 수 있다.AOP 지원: 횡단 관심사를 분리할 수 있다.MVC 웹 프레임워크 제공: 웹 애플리케이션 개발을 위한 MVC 패턴을 제공한다.DB 연동 지원: JDBC, JPA, 선언적 트랜잭션 처리 등을 지원한다.이외에도 스케줄링, 메시지 연동(JMS), 이메일 발송, 테스트 지원 등 다양한 기능을 제공한다. 스프링은 단독으로 쓰기보다는 여러 프로젝트와 함께 사용하는 경우가 많다. 대표적인 스프링 프로젝트는 다음과 같다.스프링 데이터: 적은 코드로 JPA, MongoDB, Redis 등 데이터 연동을 지원한다.스프링 시큐리티: 인증과 인가를 담당하는 보안 ..