[Spring] 스프링 시작하기

첫걸음 - 2

Posted by owin2828 on 2019-12-26 16:28 · 5 mins read

0. 들어가기 앞서


스프링을 이용한 자바 프로젝트 진행 과정은 아래와 같다.

  • 메이븐 프로젝트 생성
  • 이클립스에서 메이븐 프로젝트 Import
  • 스프링에 맞는 자바 코드와 설정 파일 작성
  • 실행

1. Maven


1-1. 메이븐 기본 디렉토리 구조

  • Maven 기본 설정 파일인 pom.xml 파일이 프로젝트 root에 위치
  • 기본 소스코드 디렉토리
    • src/main/java
  • 테스트코드 디렉토리
    • src/test/java
  • compile 결과 디렉토리
    • target

디렉토리구조

1-2. 메이븐 기초

  • 메이븐의 핵심 pom.xml
  • pom.xml은 메이븐 프로젝트에 대한 설정 정보를 관리하는 파일
  • 의존 모듈이나 플러그인 등에 대한 설정을 담음

1-3. 메이븐 의존 설정

<!-- pom.xml -->
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.0.2.RELEASE</version>
    </dependency>
</dependencies>
  • 메이븐은 한 개의 모듈을 아티팩트 단위로 관리
  • 위 설정은 spring-context 식별자를 가진 5.0.2.RELEASE 버전의 아티팩트에 대한 의존을 추가한 예제

1-4. 메이븐 레포지토리

  • 메이븐의 아티팩트 파일은 기본적으로 원격 레포지토리로컬 레포지토리를 이용
  • 메이븐은 로컬 레포지토리에서 [그룹ID][아티팩트ID][버전] 폴더에 아티팩트ID-버전.jar 형식의 이름을 갖는 파일이 있는지 검사
  • 로컬 레포지토리에 파일이 없으면 메이븐은 원격 중앙 레포지토리로부터 해당 파일을 다운로드하여 로컬 레포지토리에 복사한 뒤 그 파일을 사용
  • 설정한 아티팩트가 다시 의존하는 파일도 포함하여 다운로드
  • 배포 및 테스트할 때는 로컬 레포지토리(.m2등)에 있는 파일을 지우고 원격 레포지토리에서 다운로드하는 것을 권장

1-5. 메이븐 프로젝트 임포트

  • 이클립스에서 [File]->[Import] 메뉴 이용

2. About Spring


2-1. 스프링이 생성하고 관리하는 객체 = Bean

//AppContext.java
@Configuration
public class AppContext {

    @Bean
    public Greeter greeter() {
        ...
    }
    
}
  • @configuration 어노테이션은 해당 클래스를 스프링 설정 클래스로 지정
  • @Bean 어노테이션을 매서드에 붙이면 해당 매서드가 생성한 객체를 스프링이 관리하는 Bean 객체로 등록
  • @Bean 어노테이션을 붙인 매서드의 이름은 Bean 객체를 구분할 때 사용 (위의 예시에서는 greeter를 사용하게 됨)

@Configuration 어노테이션 말고, XML 파일로도 설정파일을 생성 가능
@Configuration 어노테이션은 변경사항이 생길 시, 매번 컴파일 해야하지만 XML로 설정한 파일은 몇 글자를 고치기만 하면 됨
자세한 사항은 링크 참조: https://bit.ly/2MGXG1J

2-2. 스프링은 객체 컨테이너

//Main.java
public class Main {

	public static void main(String[] args) {
                // 1. 설정 정보를 이용해 Bean 객체를 생성
		AnnotationConfigApplicationContext ctx = 
				new AnnotationConfigApplicationContext(AppContext.class);
                // 2. Bean 객체를 제공
		Greeter g = ctx.getBean("greeter", Greeter.class);
		...
		ctx.close();
	}
}
  • AnnotationConfigApplicationContext 클래스는 스프링의 핵심인 객체 생성 및 초기화를 담당, 자바 클래스의 정보를 읽어옴
  • AnnotationConfigApplicationContext의 상위 클래스 ApplicationContext 또는 BeanFactory는 Bean 객체의 생성, 초기화, 보관, 관리 등을 담당하고 있어 컨테이너(Container)라고도 부름
  • getBean() 매서드를 통해 해당 Bean 객체를 제공

    컨테이너는 보통 인스턴스의 생명주기를 관리하며, 생성된 인스턴스들에게 추가적인 기능을 제공하도록하는 것
    스프링 컨테이너의 두 종류: 빈팩토리(BeanFactory), 어플리케이션 컨텍스트(ApplicationContext)

    BeanFactory: DI의 기본사항을 제공하는 가장 단순한 컨테이너, Bean을 생성하고 분배하는 책임을 지는 클래스
    ApplicationContext: 빈팩토리와 유사한 기능을 제공하지만 좀 더 많은 기능을 제공하는 어플리케이션 컨텍스트
    추가기능:

    • 국제화가 지원되는 텍스트 메시지를 관리
    • 이미지같은 파일 자원을 로드 할 수 있는 포괄적인 방법을 제공
    • 리너스로 등록된 빈에게 이벤트 발생을 알려 줌

2-3. Singleton 객체

  • 별도의 설정을 하지 않을 경우 스프링은 한 개의 Bean 객체만을 생성
  • 이때 Bean 객체는 싱글톤(singleton) 범위를 갖는다고 표현
  • 싱글톤은 단일 객체(single object)를 의미
  • 스프링은 기본적으로 한 개의 @Bean 어노테이션에 한 개의 Bean 객체를 생성
  • 이때 singleton은 디자인 패턴의 singleton과는 약간의 차이가 존재
  • 스프링의 싱글톤은 직접 오브젝트를 만들고 관리
  • 자바의 싱글톤 = private static으로 인스턴스 생성 / 스프링의 싱글톤 = 싱글톤 레지스트리
  • 자세한 사항은 링크 참조: https://bit.ly/2MG41KR