스프링의 문제점을 해결하고,
스프링 프레임워크를 즉시 사용 가능한 상태로 만들어주는 도구
/
도 자동으로jar
파일을 독립적으로 실행 가능war 웹 프로젝트
는 war
파일로 패키징(압축)해서 배포하고,계산기같은 프로젝트
는 jar
파일로 패키징(압축)해서 배포한다.war
가 디렉토리 등 훨씬 복잡한 과정을 거쳐 배포jar
파일로 패키징할 수 있음Spring boot 는 XML 환경설정 파일을 사용하지않고, 환경 설정 클래스를 사용한다.
이클립스에서 환경 설정 실습을 진행한다.
이 실습은 위에서 배운 SpringBoot 를 개념을 이해하기위한 간단한 실습으로,
제대로된 환경 설정 클래스를 만든 후 등록하는 실습은 다음 장에서 진행하겠다.
AnnotationConfigApplicationContext container =
new AnnotationConfigApplicationContext(TVConfiguration.class); // 환경 설정 클래스를 로딩한다
세터 인젝션 사용
package com.rubypapaer.tv;
import org.springframework.context.annotation.Bean;
// 환경 설정 파일 : xml 설정을 무시
public class TVConfiguration {
// @Bean 이 붙은 메서드는 무조건 실행
@Bean
public TV tv() { // 기본적인 id 는 자동으로 tv(메서드 이름)로 할당된다
SamsungTV tv = new SamsungTV();
tv.setSpeaker(speaker());
return tv;
}
// Setter Injection
public Speaker speaker() {
return new SonySpeaker();
}
}
setSpeaker(speaker());
호출 시 , SonySpeaker()
호출Bean
이 붙은 메서드가 무조건 실행된다SonySpeaker
를 의존성 주입타입 인젝션 사용
@Autowired
private Speaker speaker;
AnnotationConfigApplicationContext container =
new AnnotationConfigApplicationContext("com.rubypapaer.tv"); // @Configuration 붙은 클래스를 로딩한다
@Configuration
붙은 클래스가 있다면 설정 파일로 인식한다@Configuration
과 @Bean
을 등록한다 // 환경 설정 파일 : xml 설정을 무시
@Configuration
public class TVConfiguration {
// @Bean 이 붙은 메서드는 무조건 실행
@Bean
public TV tv() { // 기본적인 id 는 자동으로 tv(메서드 이름)로 할당된다
// SamsungTV tv = new SamsungTV();
// tv.setSpeaker(speaker());
return new SamsungTV();
}
@Bean
public Speaker speaker() {
return new AppleSpeaker();
}
}
@Configuration
처럼 메모리에 뜨는 어노테이션들은
@Component
, @Repository
, @Service
, @Controller
등이 있다
@Service
만으로 사용 가능하다@ComponentScan
을 설정하여 동작시킬 수도 있다. @Configuration
@ComponentScan(basePackages = {"com.rubypaper", "com.test"})
public class TVConfiguration {. . .}
Bean
등록을 해주자STS 에서 실습한다.
자바 표준이 Maven 이므로 Maven 사용하기
Spring boot 은 jar
파일로 웹 프로젝트 압축가능하므로, jar
로 설정
Group
[rubypaper.com](http://rubypaper.com)
도메인 → com.rubypaper
그룹명next 버튼 누른 후
Finsh
pom.xml
pom.xml
은 maven 설정 파일이다.
.
.
.
<dependencies>
<!--
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> -->
<!--
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency> -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
<version>1.18.18</version>
</dependency>
<!--
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency> -->
</dependencies>
.
.
.
이렇게 만약 롬북만 남기고, 나머지 dependency 들을 주석처리하면?
위 사진처럼 롬북 jar
파일만 남는다
👉 즉, dependency 하나가 jar
파일(라이브러리) 하나라고 생각하면 된다.
starter 를 이용하면, 라이브러리의 묶음으로 설정이 가능하다
pom.xml
에 ctrl+space
→ Add Staters. . .
next
pom.xml
선택 후 finish
pom.xml
에 dependency
를 추가하면, dependency
하나당 라이브러리 하나씩 다운로드 해준다실행 파일
@SpringBootApplication
public class Chapter01Application {
public static void main(String[] args) {
// web application 으로 실행
// SpringApplication.run(Chapter01Application.class, args);
// java application 으로 실행
SpringApplication application = new SpringApplication(Chapter01Application.class); // 자기자신을 인자로 넘겨준다
application.setWebApplicationType(WebApplicationType.NONE);
application.run(args);
}
}
기본 설정 값은 web application 으로 실행되고
java 어플리케이션 설정에서 SERVLET
으로 해도 web application 으로 동작한다
@SpringBootApplication
public class Chapter01Application {
public static void main(String[] args) {
//SpringApplication.run(Chapter01Application.class, args);
SpringApplication application = new SpringApplication(Chapter01Application.class); // 자기자신을 인자로 넘겨준다
application.setWebApplicationType(WebApplicationType.SERVLET);
application.run(args);
}
}
application properties
properties 설정이 자바 설정보다 우선순위가 높다
WebApplicationType.SERVLET
)에서아래 코드(properties 파일)에서 none
으로 설정했기 때문에
java application 으로 동작한다.
application properties 파일 코드
# WebApplication Setting
spring.main.web-application-type=none
기존 배너
자바 메인 실행코드에서 application.setBannerMode(Banner.Mode.OFF);
application properties
에 아래처럼 배너가 출력되도록 설정하면?# Banner Setting
spring.main.banner-mode=console
application.setBannerMode(Banner.Mode.OFF);
설정# Banner Setting
spring.main.banner-mode=console
spring.banner.location=banner/banner.txt
https://patorjk.com/software/taag/ 에서 원하는 디자인 복사
_____ ____ ____ ____ ____ ____ ____ ___ ___ ______ __ __ ___ ____ ____ ____
/ ___/| \| \ | || \ / | | \ / \ / \ | | | | | / _]| \| \ |
( \_ | o ) D ) | | | _ || __| | o )| || || | | | | / [_ | o ) o ) |
\__ || _/| / | | | | || | | | || O || O ||_| |_| | ~ || _]| _/| _/| |
/ \ || | | \ | | | | || |_ | | O || || | | | |___, || [_ | | | | | |
\ || | | . \ | | | | || | | || || | | | | || || | | | | |
\___||__| |__|\_||____||__|__||___,_| |_____| \___/ \___/ |__| |____/ |_____||__| |__| |____|
${spring-boot.formatted-version}
application propertis
에서 7077 포트로 변경하면? # WebApplication Setting
spring.main.web-application-type=servlet
# Banner Setting
spring.main.banner-mode=console
spring.banner.location=banner/banner.txt
# Servet Settomg
server.port=7077
port=0
으로 설정하면? 랜덤하게 포트를 생성해준다
정리 대박이네요 잘 보고 갑니다.