상세 컨텐츠

본문 제목

[스프링2] 2장. 스프링 시작하기

22-23/22-23 Spring 2

by YUZ 유즈 2022. 9. 29. 10:01

본문

728x90

1. 스프링 프로젝트 시작하기

  • 메이븐 프로젝트 생성(또는 그레이들 프로젝트 생성)
  • 이클립스에서 메이븐 프로젝트 임포트
  • 스프링에 맞는 자바 코드와 설정 파일 작성
  • 실행

 

 

 

1.1 메이븐 프로젝트 생성

프로젝트 폴더(C:\spring5fs\sp5-chap02)에 pom.xml 파일을 작성한다.

 

pom.xml 

메이븐 프로젝트에 대한 설정 정보를 관리하는 파일로서 프로젝트에서 필요로 하는 의존 모듈이나 플러그인 등에 대한 설정을 담는다.

 

더보기
<?xml version="1.0" encoding="UTF-8"?>
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
        <modelVersion>4.0.0</modelVersion>
        <groupId>sp5</groupId>
        <artifactId>sp5-chap02</artifactId>
        <version>0.0.1-SNAPSHOT</version>
 
       <!--메이븐 의존 설정-->
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>5.0.2.RELEASE</version>
            </dependency>
        </dependencies>
 
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.7.0</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                        <encoding>utf-8</encoding>
                    </configuration>
                </plugin>
            </plugins>
        </build>
 
</project>

 

<dependency> : 메이븐 의존 설정

  • 의존을 추가한다: 일반적인 자바 어플에서 클래스 패스에 모듈을 추가한다.
  • 클래스 패스: JVM이 프로그램을 실행할 때, 클래스 파일을 찾는 데 기준이 되는 파일 경로

 

의존 설정에 추가한 모듈 파일을 추가하는 방법

  • 메이븐 로컬 리포지토리에 파일이 있는지 검사하고, 존재하면 사용한다.
  • 없을 시 메이븐 원격 중앙 리포지토리로부터 해당 파일을 다운로드하여 로컬 리포지토리에 복사한 후 사용한다.

 

 

▶ cmd에서 프로젝터 폴더로 이동 후 'mvn compile' 명령어를 실행한다.

 

 

의존 전이

메이븐은 의존하는 대상뿐만 아니라 의존대상이 다시 의존하는 대상도 함께 다운로드한다.

의존(<dependency>)에서 설정한 아티팩트가 다시 의존하는 파일도 다운로드된다.

 

 

 

메이븐 기본 폴더 구조

  • src\main\java  :  자바 소스코드 위치
  • src\main\resources  :  XML, 프로퍼티 파일 등 자바 소스 이외의 다른 자원 파일
  • src\main\webapp  :  웹 어플리케이션을 개발할 때 쓰이는 기준 폴더

 

 

 

1.1.2 메이븐 프로젝트 임포트

 

메이븐 프로젝트를 이클립스에 임포트 한다.

1. [File]→[Import...] 에서 Maven/Existing Maven Projects 선택

2. Root Directory를 메이븐 프로젝트 폴더로 설정

3. pom.xml을 선택 후 [Finish]

이클립스에 메이븐 프로젝트를 임포트

 

 

 

 

1.2 그레이들 프로젝트 생성

프로젝트 폴더(C:\spring5fs\sp5-chap02)에 build.gradle 파일을 작성한다.

build.gradle 

그레이들 프로젝트에 대한 설정 정보를 관리하는 파일로서 프로젝트에서 필요로 하는 의존 모듈이나 플러그인 등에 대한 설정을 담는다.

 

더보기
apply plugin: 'java'
 
sourceCompatibility = 1.8
targetCompatibility = 1.8
compileJava.options.encoding = "UTF-8"
 
repositories {
    mavenCentral()
}
 
dependencies {
    compile 'org.springframework:spring-context:5.0.2.RELEASE'
}
 
task wrapper(type: Wrapper) {
    gradleVersion = '4.4'
}

 

▶ cmd에서 프로젝트 폴더로 이동 후 'gradle wrapper' 명령어를 실행해 래퍼 파일을 생성한다.

 

gradle wrapper

gradle을 각 개발자나 CI서버에 깔지 않고, 프로젝트에 함께 포함시켜 배포할 수 있게 해준다. 

즉, 그레이들 설치 없이 그레이들 명령어를 실행할 수 있다.

 

 

▶  'gradlew compileJava' 명령어를 실행한다.

 

 

 

 

1.2.1 그레이들 프로젝트 임포트

1. [File]→[Import...]에서 Gradle/Exisiting Gradle Projects 선택

2. 그레이들 프로젝트 폴더를 root directory로 설정 후 [Finish]

 

 

 

 

 

 

 

 

1.3 예제 코드 작성

  • Greeter.java  :  콘솔에 간단한 메시지를 출력하는 자바 클래스
더보기

package chap02;

public class Greeter {

private String format;

public String greet(String guest) {
return String.format(format, guest);
}

public void setFormat(String format) {
this.format = format;
}


}

 

  • AppContext.java  :  스프링 설정 파일
더보기

package chap02;

import org.springframework.context.annotation.*;

 

// 이 클래스를 스프링 설정 클래스로 지정
@Configuration
public class AppContext {
@Bean
public Greeter greeter() {
Greeter g = new Greeter();
g.setFormat("%s, 안녕하세요!");
return g;
}
}

 

  • Main.java  :  main() 메서드를 통해 스프링과 Greeter를 실행하는 자바 클래스
더보기

package chap02;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Main {

public static void main(String[] args) {
AnnotationConfigApplicationContext ctx = 
new AnnotationConfigApplicationContext(AppContext.class);
Greeter g = ctx.getBean("greeter", Greeter.class);
String msg = g.greet("스프링");
System.out.println(msg);
ctx.close();
}
}

 

 

 

@Bean 애노테이션

스프링은 객체를 생성하고 초기화하는 기능을 제공하며, 이 때 생성한 객체를 빈(Bean) 객체라고 부른다.

@Bean 애노테이션을 메서드에 붙이면 해당 메서드가 생성한 객체스프링이 관리하는 빈 객체로 등록하게 된다.

@Bean 애노테이션을 붙인 메서드는 객체를 생성하고 알맞게 초기화해야 한다. 위 코드에서는 12행에서 Greeter 객체를 초기화하고 있다.

 

@Bean 애노테이션을 붙인 메서드의 이름은 빈 객체를 구분할 때 사용하며, 빈 객체를 참조할 때 사용된다.

 

* 애노테이션 : 코드사이에 주석처럼 쓰여서 특별한 의미, 기능을 수행하도록 하는 기술이다. 즉, 프로그램에 추가적인 정보를 제공하는 메타데이터이다.

 

 

 

AnnotationConfigApplicationContext 클래스

AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AppContext.class);

자바 설정에서 정보를 읽어와 빈 객체를 생성하고 관리하는 클래스이다. AnnotationConfigApplicationContext 객체를 생성할 때 AppContext 클래스를 생성자 파라미터로 전달하여 @Bean 설정 정보를 읽어오게 하여 Greeter 객체를 생성하고 초기화한다.

 

 

getBean() 메서드

Greeter g = ctx.getBean("greeter", Greeter.class);

AnnotationConfigApplicationContext가 자바 설정을 읽어와 생성한 빈(bean) 객체를 검색할 때 사용된다.

첫 번째 파라미터는 @Bean 애노테이션의 메서드 이름(빈 객체의 이름)이며, 두 번째 파라미터는 빈 객체의 타입이다.

최종적으로 greeter() 메소드를 사용해서 만든 Greeter 객체를 리턴한다.

 

 

 

 

 

 

 

 

 

 

 

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

 

 

ApplicationContext

앞서 스프링의 핵심 기능은 객체를 생성하고 초기화 하는 것이라 하였다. 최상위 인터페이스인 BeanFactory는 빈 객체의 생성, 초기화, 보관, 제거 등을 관리하고 있어 컨테이너(Container)라고도 부른다. 하지만 실제로 빈의 생성과 관계설정 외에 추가적인 기능이 필요한데, 그것을 ApplicationContext에서 구현하였기 때문에 주로 ApplicationContext를 사용하며 또한 컨테이너라고 부른다.

 

AnnotationConfigApplicationContext 클래스는 ApplicationContext 인터페이스를 알맞게 구현한 클래스 중 하나이며 자바 애노테이션을 이용한 클래스로부터 객체 설정 정보를 가져온다.

 

더보기

// 1. 설정 정보를 이용해서 빈 객체를 생성한다.

AnnotationConfigApplicationContext ctx = 
new AnnotationConfigApplicationContext(AppContext.class);

 

// 2. 빈 객체를 제공한다.
Greeter g = ctx.getBean("greeter", Greeter.class);

 

 

2.1 싱글톤(Singleton) 객체

별도 설정을 하지 않을 경우 스프링은 한 개의 빈 객체만을 생성하며, 이때 빈 객체는 '싱글톤(singleton) 범위를 갖는다'고 표현한다. 싱글톤은 단일 객체(single object)를 의미하는 단어로서 스프링은 기본적으로 한 개의 @Bean 애노테이션에 대해 한 개의 빈 객체를 생성한다.

 

 

 


Quiz

1. 메이븐과 그레이들의 프로젝트 설정파일의 이름은 각각 무엇인가?

답: pom.xml, build.gradle

 

2.  메이븐은 의존하는 대상뿐만 아니라 의존 대상이 다시 의존하는 대상도 함께 다운로드한다.

     이렇게 의존 대상이 다시 의존하는 대상까지도 의존 대상에 포함하는 것을 (            )라고 한다.

답: 의존 전이

 

3. @Configuration 애노테이션은 해당 클래스를 (             ) 클래스로 지정한다.

답: 스프링 설정

 

4. @Bean이 붙은 메서드는 해당 메서드가 생성한 객체를 (         )이 관리하는 (            )로 등록하겠다는 것을 의미한다.

답: 스프링, 빈 객체/싱글톤 객체

 

5. getBean() 메서드의 첫 번째 파라미터와 두 번째 파라미터는 무엇인가?

답: @Bean애노테이션의 메서드 이름/빈 객체의 이름, 빈 객체의 타입

 

6. ApplicationContext(또는 BeanFactory)는 빈 객체의 생성, 초기화, 보관, 제거 등을 관리하고 있어서 (      )라고도 부른다.

답: 컨테이너(Container)

 

7. 별도 설정을 하지 않을 경우 스프링은 한 개의 빈 객체만을 생성하며, 이때 빈 객체는 '(           )범위를 갖는다'라고 표현한다. 

답: 싱글톤

 

 

 

 

  • Greeter.java  :  콘솔에 간단한 메시지를 출력하는 자바 클래스
더보기

package chap02;

public class Greeter {

private String format;

public String greet(String guest) {
return String.format(format, guest);
}

public void setFormat(String format) {
this.format = format;
}


}

 

  • AppContext.java  :  스프링 설정 파일
더보기

package chap02;

import org.springframework.context.annotation.*;

 

// 이 클래스를 스프링 설정 클래스로 지정
@Configuration
public class AppContext {
@Bean
public Greeter greeter() {
Greeter g = new Greeter();
g.setFormat("%s, 안녕하세요!");
return g;
}
}

 

  • Main.java  :  main() 메서드를 통해 스프링과 Greeter를 실행하는 자바 클래스
더보기

package chap02;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Main {

public static void main(String[] args) {
AnnotationConfigApplicationContext ctx = 
new AnnotationConfigApplicationContext(AppContext.class);
Greeter g = ctx.getBean("greeter", Greeter.class);
String msg = g.greet("스프링");
System.out.println(msg);
ctx.close();
}
}

글톤(singleton)


Corner Spring #2

Editor : 파오리

728x90

관련글 더보기