Spring 어플리케이션 개발
1. Spring FrameWork 프로젝트
- https://spring.io/projects/spring-framework#learn 가서 Reference Doc 와 API Doc 참조.
- 최신 버전인 6은 JDK 17 부터 지원됨.
- STS 3 사용해야됨.
2. Spring Boot 프로젝트
- https://spring.io/projects/spring-boot#learn 가서 Reference Doc 와 API Doc 참조.
- 최신 버전인 3은 JDK 17 부터 지원됨.
- STS 3 및 STS 4 모두 사용가능.
- FrameWork 의 자동화 버전
3. 용어 정리
1> POJO
- Plain Old Java Object
- 플랫폼에 독립적인 형태의 클래스를 의미한다.
ex> CartListServlet 은 의존적인 클래스 (extends HttpServlet 때문에 Tomcat 이 설치된
웹 개발에서만 사용가능)
CartDTO 는 독립적인 클래스.
==> servlet_study -> ShopMiniMall Project 에서 사용한 servlet 임.
2> (Spring) Bean
- Spring 환경에서 사용되는 POJO(Plain Old Java Object: 플랫폼에 독립적인 형태의 클래스)
기반의 클래스 의미. 주로 클래스 대신에 Bean 이라고 한다.
- 개발자가 직접 Bean(클래스)을 생성(new 클래스())하지 않는다.
Bean을 자동으로 관리하는 또 다른 Bean 이 제공된다.
* Java Bean
- Spring 이전에 사용되었던 이름.
- EJB (Enterprise Java Bean) 에서 사용했던 명칭.
3> IoC Container (Inversion of Control Container: 제어의 역행)
- https://docs.spring.io/spring-framework/docs/5.2.25.RELEASE/spring-framework-reference/core.html#beans
- 개념: Ioc(Inversion of Control) 방법으로 Spring Bean을 관리(생성~소멸)하기 때문에 붙여진 이름.
- 비슷한 용어:
Spring Container
Spring Context
- 기능:
Spring Bean 을 관리(생성~소멸) 및 의존성 설정.
(이전 개발방식(Spring 개발 전 개발방식)은 클래스를 직접 생성하고 의존성도 직접 설정했지만
Spring 개발 후에는 명시적으로 설정하지않고 자동으로 해준다.
Spring 개발 이전의 이런 순방향의 개발이 아닌 완전히 역방향의 개발 이기 때문에 제어의 역행이라고도 한다.)
- IoC Container 의 실체는 Spring Bean 이다. 계층 구조로 되어있음.
BeanFactory(인터페이스)
| |
xxxAplication xxxBeanFactory
|
AnnotationConfigApplicationContext
GenericXmlApplicationContext
xxxWebApplicationContext (web이 있는 것은 웹어플리케이션 개발용 IoC Container 이기 떄문)
BeanFactory: 기본 Spring Container 임.
ApplicationContext: 기본기능 + enterprise 환경에서 필요한 전용기능이 추가된 컨테이너임.
(웹 개발가능. I18N(국제화 Internationalization), AOP 기능, ...)
4> DI(Dependency Injection: 의존성 주입)
- 의존성? A 클래스가 B 를 사용하면 A 와 B 간에 의존성이 생김.
- 의존성 주입? A(CartService) 클래스가 B(CartDAO) 를 참조하기 위해서 외부(CartListServlet)에서
A 클래스의 생성자에 B 객체를 생성해서 설정하는 작업을 의미.
Spring 에서는 외부역할을 IoC Container가 담당한다.
- 의존성 주입 방법
가. 생성자 이용한 주입
https://docs.spring.io/spring-framework/docs/5.2.25.RELEASE/spring-framework-reference/core.html#beans-constructor-injection
나. set 메서드를 이용한 주입
https://docs.spring.io/spring-framework/docs/5.2.25.RELEASE/spring-framework-reference/core.html#beans-setter-injection
4. 빌드툴(build tool)
1> 개념
- 개발시 사용되는 자동화 툴.
2> 종류
- Maven(메이븐)
pom.xml (Maven 의 설정파일 - jdk/boot 버전, 필요한 jar 파일들 설정)
- Gradle(그레들)
build.gradle(Gradle 의 설정파일 - jdk/boot 버전, 필요한 jar 파일들 설정)
3> 빌드툴 기능
가. 이전 개발 프로세스
소스코드작성 -----> 컴파일 -----> 테스트파일작성(단위테스트) -----> 컴파일 --------> 패키징(jar/war) -------> 배포
필요한 외부 jar 다운
+
필드패스
<------------------------------------------------------------------------------------------------------->
개발자가 직접 수동으로 해줌.
나. 빌드툴 적용한 개발 프로세스
소스코드작성 -----> 컴파일 -----> 테스트파일작성(단위테스트) -----> 컴파일 --------> 패키징(jar/war) -------> 배포
필요한 외부 jar 다운
+
필드패스
<------------------------------------------------------------------------------------------------------->
빌드툴이 자동화 해줌.
4> Maven 의 기본 디렉터리 구조
src/main/java : 이전 이클립스의 src 경로와 동일. *.java 저장
src/main/resource: *.java 제외한 나머지 파일들 저장.
ex> jdbc.properties, EmpMapper.xml(이전에는 src 에 저장)
src/test/java: 단위 테스트 용도의 *.java 저장
src/test/resource: 단위 테스트 용도의 *.java 제외한 파일 저장.
JRE System Library: jdk 11 용
Maven Dependencies: SpringBoot 에서 사용해야 되는 jar 파일들 저장.
- junit(mockito) 관련 jar: 단위 테스트 용도
- logback(log4j, slf4j) 관련 jar: 로그출력(로깅:logging)
* 로깅: System.out.println 대신에 사용
- spring-beans, spring-core 관련 jar: Spring Framework
- spring boot 관련 jar: Spring Boot
==> 저장경로는 C:\Users\사용자\.m2\repository 이다. (로컬 저장소)
pom.xml(Project Object Model)
- 버전, 필요한 jar 정보등 설정
- 계층구조로 구성됨. (부모에 해당하는 pom.xml 있음)
- 필요로 하는 jar 파일은 <dependency></dependency> 태그로 설정하면 자동으로 다운로드 되고
build path 까지 해줌.
https://mvnrepository.com
5> Maven 의 주요 기능
가. 의존성 설정
- pom.xml 에 필요로 하는 jar 파일은 <dependency></dependency> 태그로 설정하면 자동으로 다운로드 되고
build path 까지 해줌.
- https://mvnrepository.com/ 에서 <dependency></dependency> 정보를 얻을 수 있음.
나. 빌드시 사용되는 단계별 명령어
- compile
- test
- package
- install
- deploy
- clean
5. SpringBoot 프로젝트 생성 방법
=> 명시적으로 빌드툴(build tool) 선택해야됨.
=> JSK: 11버전
SpringBoot: 2.7.18 버전
STS 4버전 -> pom.xml 파일의 <project></project> 태그내의 값은 변경해야 된다.
변경전: https://maven.apache.org/xsd/maven-4.0.0.xsd"
변경후: http://maven.apache.org/xsd/maven-4.0.0.xsd"
1> STS 에서 직접 생성
- STS 에서 New > Spring Starter Project 선택
2> Initializer 이용한 방법
- 웹에서 생성후 다운받아서 사용함.
6. IoC Container 에게 빈정보 같은 데이터를 알려주는 방법 (Configuration 작업)
// spring framework
1> XML 이용
2> 어노테이션 + 약간의 XML
3> 어노테이션 <== Java Configuration 이라고 부름.
// spring boot(xml 기반 가능, 어노테이션 + 약간의 XML 가능, 어노테이션 가능(기본))
4> boot
==> src/main/resource 의 application.properties 이용해서 전반적인 환경설정을 설정함.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1. Spring Boot 등장배경
- 2016 년에 등장.
- 기존의 framework에서는 개발자가 처리해야 되는 많은 설정이 있었기 떄문에
매우 설정(Configuration 작업)자체가 복잡했음.
실제 비즈니스 로직에 집중하지 못함.
이러한 문제를 해결하기 위해서 Spring Boot 라는 서브 프로젝트가 진행됨.
Spring Boot 는 많은 설정들을 자동화해서 개발자가 실제 비즈니스 로직에 집중하도록 도와줌.
2. Spring Boot 장점(특징)
- 설정 자동화
pom.xml 에 의존성 설정하면 자동으로 지정된 의존성에 맞는 환경을 설정해줌.
- 라이브러리 자동 관리
maven + starter
- 웹어플리케이션 프로젝트인 경우에도 jar 실행가능
* 웹어플리케이션 프로젝트인 경우에도 jar 실행가능.
(1) 비웹 어플리케이션
-> 일반적인 Java SE 환경: jar
-> Spring Framework 환경: jar
-> Spring Boot 환경: jar
(2) 웹 어플리케이션
-> 기본 Servlet/JSP 환경: war
-> Spring Framework 환경: war
-> Spring Boot 환경: jar / war
jar 실행: java -jar 파일명.jar
- boot 프로젝트의 설정정보는
src/main/resource 의 application.properties(application.yml(야물파일))
이용해서 전반적인 환경설정을 설정함.
# application.properties - 예시
spring.application.name=demo
server.error.whitelabel.enabled=false
server.port=8090
# application.yml(야물파일) - 예시
server:
error:
whitelabel:
enabled: false
port: 8090
3. Spring Boot Starter
https://docs.spring.io/spring-boot/docs/2.7.18/reference/htmlsingle/#using.build-systems.starters
1> starter 개념
- 필요한 jar 파일들의 묶음.
2> 참조 사이트
http:/mvnrepository.com 에서 starter 사용가능.
4. xxxAplication.java
https://docs.spring.io/spring-boot/docs/2.7.18/reference/htmlsingle/#getting-started.first-application.code.mvc-annotations
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
- 위 코드는 spring boot 에서는 필수코드임.
- 시작점 역할 담당
- @SpringBootApplication 어노테이션 필수로 지정.
다음 3가지 어노테이션을 포함한다.
@SpringBootConfiguration
- 개발자가 필요에 의해서 추가적인 Configuration 설정할 수 있도록 지원.
- 추가적인 설정 방법: 클래스 작성하고 @Configuration 지정
- 대표적으로 Spring Security 임.
ex>
@Configuration
public class MyConfiguration {
// 작업했던 코드 사용가능
}
@EnableAutoConfiguration
- pom.xml 에 starter 같은 의존성을 설정하면 거의 자동으로 필요한 설정을 해줌.
즉, 자동으로 구성 메커니즘 활성화.
- ex> spring-boot-starter-web 지정하면 자동으로 tomcat 설치되고
404 발생시 자동으로 whitelabel ~ 페이지를 제공하는 등...
@ComponentScan
- 자동으로 Bean 생성하는 방법으로 기본적으로 패키지 단위로 설정해서
자동으로 생성하도록 가이드함.
- 패키지를 알려주는 방법 2가지
가. 패키지를 지정하지 않는 경우의 scan
- @SpringBootApplication 가진 Application.java 의 패키지와 같거나
서브 패키지로 작성하면 자동으로 scan 됨. (권장방법)
나. 패키지를 지정한 경우의 scan
- 명시적으로 생성할 빈의 패키지명을 알려줘야 된다.
ex> @SpringBootApplication(scanBasePackages={"com.exam2"})
'[study]이론정리 > Spring Boot' 카테고리의 다른 글
빈의 scope (0) | 2024.07.02 |
---|---|
생성된 빈 접근방법 (0) | 2024.07.02 |
의존성 설정 (0) | 2024.07.02 |
빈(Bean) 생성 (0) | 2024.07.02 |
로깅처리 (0) | 2024.07.02 |