Spring 01 : 환경 구성, Helloworld

LeeWonjin·2022년 7월 26일

2022 백엔드스터디

목록 보기
11/20

환경
윈도우즈 10 / 이클립스 2022-06 (4.24.0) / Java SE 18 / 메이븐 3.8.6 / spring-context 5.3.22

교재
책 : 초보 웹 개발자를 위한 스프링5 프로그래밍 입문
영상 : 예제로 배우는 스프링 입문(개정판)

프로젝트 관리 툴

메이븐, 그래들은 프로젝트 관리 툴이다. 패키지 매니징(모듈, 아티펙트)과 빌드 기능을 포함
설정파일로 메이븐은 pom.xml, 그래들은 build.gradle이라는 파일 사용
빌드 관리 도구 Maven과 Gradle 비교하기

설치

  1. 바이너리 파일을 받아 압축풀기
  2. 환경변수에 bin폴더 경로 등록

메이븐 외부링크

메이븐 프로젝트 생성

직접 생성한 뒤 이클립스에서 import

  1. 프로젝트 디렉토리를 아래과 같이 구성
  2. project-root 디렉토리에 pom.xml 파일 생성
(어딘가의 디렉토리)
└─ root-of-root
    └─ helloworld
        └─ pom.xml
        └─ src
            └─ main
                └─ java
  1. pom.xml 에 아래와 같이 입력 ( 각 버전은 2022.7.26 시점 최신버전 )
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
		http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>wonjin.maventest</groupId>
	<artifactId>helloworld</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	
	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>5.3.22</version>
		</dependency>
	</dependencies>
	
	<build>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.7.0</version>
				<configuration>
					<release>18</release>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>
  1. helloworld경로에서 mvn compile로 의존 아티펙트 다운로드-컴파일-빌드 수행
  2. 이클립스에서 아래와 같이 import
    1) [File]-[Import]로 대화창 열기
    2) Existing Maven Projects 선택 - [Next]
    3) root directory로 helloworld선택 - Projects에서 pom.xml선택 - [Finish]

이클립스에서 바로 생성

아키타입을 사용하지 않는 경우
1. [File]-[New]-[Others]로 대화창 열기
2. Maven Project 선택 - [Next]
3. Create a simple project 체크, 루트로 삼을 디렉토리 선택 - [Next]
4. 각 항목 입력. 주의 : Artifact Id는 루트 디렉토리의 이름과 같아야 함
5. 생성 후 pom.xml에 dependencies와 build 내용 기술
6. mvn compile

Hello world

패키지 밑 파일 위치

(어딘가의 디렉토리)
└─ root-of-root
    └─ helloworld
        └─ pom.xml
        └─ src
            └─ main
                └─ java
                    └─ [mypackage 패키지]
                        └─ Main.java
                        └─ HelloWorld.java
                        └─ AppContext.java

코드

  1. ApplicationContext
    스프링 프로젝트에는 설정 파일이 필요
    설정을 기술하는 여러 방식 중 하나로 @Configuration어노테이션을 포함한 자바 파일이 있음
    이 자바파일을 컴파일한 바이너리는 런타임에 AnnotationConfigASpplicationContext 객체에 담김

  2. Bean 객체
    스프링은 설정파일에서 객체를 생성하고 초기화하는 기능 제공
    이 때 생성/초기화 되는 객체를 Bean 객체라 하고 스프링이 관리함
    Bean 객체를 반환하는 메소드에는 @Bean어노테이션을 붙임

Main.java를 이클립스에서 자바 어플리케이션으로 실행하면 wonjin, HelloWorld! 출력

// Main.java : 프로그램 진입점
package mypackage;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Main {

	public static void main(String[] args) {
		AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AppContext.class);
		
		HelloWorld beanObj = ctx.getBean("helloWorld", HelloWorld.class);
		beanObj.print();
		
		ctx.close();
	}
}

// HelloWorld.java : Bean객체로 관리할 클래스
package mypackage;
public class HelloWorld {
	String name;
	public HelloWorld(String name) {
		this.name = name;
	}
	
	public void print() {
		System.out.println(name + ", HelloWorld!");
	}
}

// AppContext.java : 스프링 설정파일
package mypackage;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppContext {
	@Bean
	public HelloWorld helloWorld() {
		HelloWorld obj = new HelloWorld("wonjin");
		return obj;
	}
}

객체 컨테이너

BeanFactory, ApplicationContext 인터페이스를 스프링 컨테이너라 부름
스프링 컨테이너는 내부적으로 bean객체의 이름과 인스턴스에 대한 참조를 저장

BeanFactory

bean객체를 관리하는 가장 윗단의 인터페이스 ( = 최상위 스프링 컨테이너 )

ApplicationContext

ListenableBeanFactory를 거쳐 BeanFactory에 의존하는 인터페이스
BeanFactory의 확장된 인터페이스로 볼 수 있음

ApplicationContext의 구현 클래스

  • AnnotationConfigApplicationContext
    • 위 HelloWorld에서 사용한 방식
    • 자바 어노테이션을 포함하는 클래스로부터 설정 내용 로드
  • GenericXmlApplicationContext : XML로부터 설정 내용 로드
  • GenericGroovyApplicationContext : 그루비 코드로부터 설정 내용 로드

bean객체의 범위

싱글톤타입/프로토타입 Bean객체의 범위

bean객체는 둘 중 하나의 범위를 가짐

  • singleton 범위
  • prototype 범위

기본적으로 설정파일에 등록된 bean객체는 싱글톤패턴으로 동작함
scope값을 prototype으로 주어야 여러 개 객체 생성 가능

profile
노는게 제일 좋습니다.

0개의 댓글