스프링

스프링5 프로그래밍 입문 - 스프링 프로젝트 시작하기

담쏙 2023. 10. 2. 11:12
728x90

메이븐 의존 설정

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context</artifactId>
	<version>5.0.2.RELEASE</version>
</dependency>
  • 메이븐은 한 개의 모듈을 아티팩트라는 단위로 관리
  • spring-context라는 식별자를 가진 5.0.2 RELEASE 버전의 아티팩트에 대한 의존을 추가
    • 의존 추가는 자바 어플리케이션에서 클래스패스에 spirng-context 모듈을 추가한다는 것 (jar 파일 추가)

 

메이븐 리포지토리

  • 메이븐 로컬 리포지토리에서 [그룹 ID]\[아티팩트 ID]\[버전] 폴더에 아티팩트ID-버전.jar 형식의 이름을 갖는 파일이 있는지 검사
  • 로컬 리포지토리에 파일이 없으면 메이븐 원격 중앙 리포지토리로부터 해당 파일을 다운로드하여 로컬 리포지토리에 복사한 후 사용

 

의존 전이(Transitive Dependencies)

  • mvn compile 시, pom.xml에 지정한 maven jar 파일 외에 다양한 아티팩트 파일이 다운로드 됨
    • 의존에서 설정한 아티팩트가 다시 의존하는 파일도 포함
  • 의존하는 대상뿐만 아니라 의존 대상이 다시 의존하는 대상까지도 포함되는데 이를 의존 전의라고 함

 

기본 폴더 구조

src\\main\\java

  • 메이븐에 정의되어 있는 기본 폴더 구조로, 자바 소스 코드가 위치

src\\main\\resources

  • xml이나 properties 같이 자바 소스 이외의 다른 자원이 위치

src\\main\\webapp

  • 웹 어플리케이션폴더로 JSP나 WEB-INF\web.xml 등 위치

 

코드

  • AnnotationConfigApplicationContext 자바 설정에서 정보를 읽어와 빈 객체를 생성하고 관리
    • AppContext에 정의한 @Bean 설정 정보를 읽어와 객체를 생성하고 초기화
  • getBean() 은 자바 설정을 읽어와 생성한 빈(bean) 객체를 검색할 때 사용
    • 첫 번째 파라미터는 메서드 이름인 빈 객체 이름
    • 두 번째 파라미터는 검색할 빈 객체의 타입

 

스프링은 객체 컨테이너

  • 스프링의 핵심 기능은 객체를 생성하고 초기화 하는 것
    • 이와 관련된 기능은 ApplicationContext 라는 인터페이스에 정의
    • AnotationConfigApplicationContext 클래스는 이 인터페이스를 알맞게 구현한 클래스 중 하나
  • AnnotationConfigApplicationContext 클래스는 자바 클래스에서 정보를 읽어와 객체 생성과 초기화 수행
  • 계층도 상에서 가장 상위에 BeanFactory 인터페이스 (객체 생성과 검색에 대한 기능 정의)가 위치
    • 위에서 3번째에 ApplicationContext 인터페이스(메시지, 프로필/환경 변수 처리 기능 추가 정의)
    • 가장 하단에 AnnotatcionConfigApplicationContext 구현 클래스가 위치
✅ 어떤 구현 클래스를 사용하든 각 구현 클래스는 설정 정보로부터 빈(Bean)이라고 불리는 객체를 생성하고 그 객체를 내부에 보관한다. 그리고 getBean() 메서드를 실행하면 해당하는 빈 객체를 제공한다.

 

AnnotationConfigApplicationContext ctx =
			new AnnotationConfigApplicationContext(AppContext.class);

Greeter g = ctx.getBean("greeter", Greeter.class);
  • ApplicationContext(또는 BeanFactory)는 빈 객체의 생성, 초기화, 보관, 제거 등을 관리하고 있어서 컨테이너라고도 부름
    • 스프링 컨테이너는 내부적으로 빈 객체와 빈 이름을 연결하는 정보를 가짐

 

싱글톤(Singleton)

  • getBean() 메서드는 같은 객체를 리턴
  • 별도 설정을 하지 않을 경우 스프링은 한 개의 빈 객체만을 생성하며, 이 때 빈 객체는 ‘싱글톤(singleton)’ 범위를 갖는다고 표현
  • 싱글톤은 단일 객체를 의미하며, 스프링은 한 개의 @Bean 어노테이션에 대해 한 개의 빈 객체를 생성