BackEnd/Spring & Springboot Study

[프로젝트 환경설정] 01. Spring Boot로 프로젝트 생성하기

사전 준비물

  • Java 11++ 설치 -> 11
  • IDE : IntelliJ 또는 Eclipse 설치 -> IntelliJ Community

스프링 부트 스타터 사이트로 이동해서 스프링 프로젝트 생성

https://start.spring.io 

 

 

  • 프로젝트 선택
    • Project : Gradle Project
    • Spring Boot : 2.4.4
    • Language : Java
    • Packaging : Jar
    • Java : 11
  •  Project MetaData
    • groupId : hello (기업 도메인 명)
    • artifactID : hello-spring (build 결과물)
  • Dependencies : Spring Web, ThymeLeaf

IntelliJ -> Open -> Open Project

.idea -> Intellij 설정파일

gradle -> wrapper -> gradle 설정 (Library 의존관리) Maven도 있음

src

  • main
    • java -> java파일 관리 폴더
    • resources -> html 및 css등의 리소스 파일 관리 폴더
      • application.properties -> IOC (Inversion of Control) & DI (Dependency Injection)을 위한 설정 파일
  • test (테스트 관련 폴더)

build.gradle

plugins {
	id 'org.springframework.boot' version '2.4.4'
	id 'io.spring.dependency-management' version '1.0.11.RELEASE'
	id 'java'
}

group = 'hello'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
	mavenCentral() // mavenCentral에서 다운로드 받겠다는 의미
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' // template engine
	implementation 'org.springframework.boot:spring-boot-starter-web'	// spring web 라이브러리들
	testImplementation 'org.springframework.boot:spring-boot-starter-test'	// junit5
}

test {
	useJUnitPlatform()
}

 

.gitIgnore -> 버전관리 프로그램인 git에 버전관리하지 않을 파일들의 패턴 혹은 파일들을 특정하여 예외시키는 파일

 

gradlew

gradle.bat

-> Gradle로 빌드 관련

 

setting.gradle -> gradle setting 파일

 

SpringBootApplication 어노테이션?

 

Annotation? -> 주석 -> 어떤 처리를 할 지 적어두고 그것 해줌!

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {

	/**
	 * Exclude specific auto-configuration classes such that they will never be applied.
	 * @return the classes to exclude
	 */
	@AliasFor(annotation = EnableAutoConfiguration.class)
	Class<?>[] exclude() default {};

	/**
	 * Exclude specific auto-configuration class names such that they will never be
	 * applied.
	 * @return the class names to exclude
	 * @since 1.3.0
	 */
@SpringBootConfiguration
@SpringBootConfiguration은 @Configuration을 대체하고 
단위 통합 테스트시 유용하게 사용 할 수 있다.
@ComponentScan -> @Component라는 어노테이션이 붙은 객체들을 스캔 한 뒤 자동으로 bean으로 등록
(@Component, @Congiguration, @Repository, @Service, @Controller, @RestController) 이런거
@EnableAutoConfiguration -> 메타 파일을 등록하고 @ComponentScan에서 등록하지 못한 추가적인 bean 등록

@ComponentScan -> bean훑고

@EnableConfiguration이 gradle로 받아온 autoconfiguration class들을 bean등록

@ConditionalOnMissingBean에서 조건 검사 후 Bean 등록 여부를 결정한다.

-> 그 다음 내장 Tomcat띄우고 뭐 실행??

@SpringBootApplication하나 붙였다고 서버가 돌아간다 이 어찌 놀랍지 아니한가