스프링 프레임워크 1

고범규·2025년 8월 8일

Spring Framework

목록 보기
12/14

IOC(Inversion Of Control)

컨테이너

DI 순서


위가 일체형 아래가 결합형(IOC 컨테이너) 역순으로 결합.

어노테이션

장점


B2를 빼고 B3로 대체하려면 아래 코드를 B3로 수정하여야 한다.


B2를 없애고 B3로 대체하면 컴포넌트가 설정된 것이 B3 밖에 없기 때문에 자동으로 연결된다.


어노테이션을 사용하면 이렇게 대체 가능

@Autowired

  • Spring이 SomeService 타입의 빈을 자동으로 찾아서 이 필드에 주입해주는 어노테이션
  • 생성자, 필드, 세터 메서드에 붙일 수 있다

동작방식

  • 타입(Type)을 기준으로 DI(의존성 주입을) 수행
  • @Autowired가 붙은 필드의 타입과 일치하는 빈을 ApplicationContext에서 자동으로 찾아서 넣어준다

@Autowired(required = true)

해당 타입의 Bean이 무조건 있어야 한다.
없으면 Spring은 애플리케이션 실행 도중 오류를 발생시키고 종료

@Autowired(required = false)

해당 타입의 Bean이 없어도 예외가 발생하지 않는다.
그냥 null로 남겨둔다.

@Qualifier

@Autowired에서 주입할 Bean을 명확하게 지정해줄 때 사용

  • @Qualifier("빈 이름")을 통해 어떤 빈을 주입할지 명확히 지정
  • 이름 기준으로 Bean 선택

Bean

Spring 컨테이너가 생성하고 관리하는 객체


->@Component를 붙이면 Spring이 Bean으로 등록해준다.
즉, 직접 new를 통해 만들지 않아도 Spring이 알아서 만들어서 필요할 때 주입해준다.

ApplicationContext

Spring 컨테이너(즉, Bean 저장소)

  • Bean들이 등록되어 있고 필요한 객체(Bean)를 꺼내서 사용할 수 있게 해주는 중앙 관리자

@Component

Spring에게 "이 클래스를 Bean으로 등록해줘"라고 명령하는 어노테이션

Bean으로 등록했을 때의 이점

① 의존성 자동 주입 (DI: Dependency Injection)

필요한 객체를 new 하지 않고, @Autowired나 생성자를 통해 자동으로 주입받을 수 있음

② 싱글톤 관리 (기본 Scope)

기본적으로 Bean은 싱글톤으로 관리됨 (필요할 때마다 하나만 생성해서 공유)

③ 생명주기 관리 가능 (@PostConstruct, @PreDestroy)

Spring이 객체를 생성하고 초기화한 후에 실행할 코드나, 종료 전에 처리할 로직을 지정 가능

④ AOP 적용 가능 (공통 로직 분리)

Bean으로 등록된 객체는 Spring이 프록시로 감싸므로 트랜잭션 처리, 로깅, 보안 검사 같은 기능을 자동 삽입 가능

⑤ 환경 설정 연동 (@Value, @ConfigurationProperties)

Bean으로 등록된 객체는 설정파일(application.properties, .yml)에서 값을 주입받을 수 있음

⑥ 테스트에 최적화 (스프링 컨테이너 테스트 연동)

Bean으로 등록된 클래스는 @SpringBootTest 등과 함께 통합 테스트 환경에서 쉽게 주입 가능


@Entity

해당 클래스가 데이터베이스 테이블과 매핑되는 객체임을 나타내는 어노테이션
이 클래스를 기반으로 Spring이 DB테이블을 생성, 매핑, 조작할 수 있게 해준다.

기본 조건

@Configuration

해당 클래스가 Spring 설정 파일 역할을 한다고 명시하는 어노테이션

  • 이 클래스 안에 있는 메서드들을 통해 Bean을 수동으로 등록할 수 있음
  • Java 기반 설정 방식(Java Config)의 핵심
  • AppConfig 클래스는 설정 클래스
  • userService() 메서드는 Bean을 반환 -> Spring이 이 객체를 Bean으로 등록함
  • 즉, applicationContext.xml 없이도 자바 코드만으로 설정 가능

@ComponentScan

Spring이 특정 패키지를 스캔해서 @component와 하위 어노테이션 3개가 붙은 클래스를 자동으로 Bean으로 등록하게 해주는 어노테이션

@RestController

API 서버처럼 데이터(JSON/XML 등) 반환이 목적

  • @Controller + @ResponseBody가 합쳐진 형태
  • 반환값이 뷰 이름이 아니라, HTTP 응답 본문으로 바로 전송됨

0개의 댓글