개발

[React.js, 스프링부트, AWS로 배우는 웹 개발] 2장 - 스프링부트 실행

jih0ssang 2024. 7. 20. 10:06

스프링 부트 실행 프로세스

  1. 스프링 부트 애플리케이션 실행한다.
  2. @ComponentScan 어노테이션이 있는 경우 베이스 패키지와 그 하위 패키지에서 @Component가 달린 클래스를 찾는다.
  3. 필요한 경우 @Component가 달린 클래스의 오브젝트를 생성한다.
    이때 생성하려는 오브젝트가 다른 오브젝트에 의존한다면, 즉 멤버 변수로 다른 클래스를 갖고 있다면 그 멤버 변수 오브젝트를 찾아 넣어줘야 한다. @Autowired를 사용하는 경우 스프링이 그 오브젝트를 찾아 생성해 넣어준다.
    • 1) @Autowired에 연결된 변수의 클래스가 @Component가 달린 클래스인 경우 스프링이 오브젝트를 생성해 넘겨준다.
    • 2) @Autowired에 연결된 변수의 클래스가 @Bean 어노테이션으로 생성하는 오브젝트인 경우 @Bean이 달린 메서드를 불러 생성해 넘겨준다.

 

애플리케이션 실행

$ ./gradlew bootRun
Started DemoApplication in 4.382 seconds (JVM running for 4.767)

 

 

빌드 자동화 툴 : Gradle과 라이브러리

Gradle

빌드 자동화 툴이다. 빌드 자동화 툴을 이용하면 컴파일, 라이브러리 다운, 패키징, 테스팅 등을 자동화 할 수 있다.

 

빌드 자동화를 쓰는 이유?  -> 반복 작업을 줄이기 위해!

웹 애플리케이션을 만들려면 여러 가지 라이브러리가 필요하다. 빌드 자동화 툴이 없다면 라이브러리의 사용을 위해 라이브러리 사이트에서 jar 파일을 다운로드 받아 추가해야 한다.

 

gradle은 JVM에서 실행되는 언어의 빌드 자동화를 위해 사용된다.

그래들은 그루비라는 언어로 작성돼 있다.

 

[build.gradle]

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

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

configurations {
 compileOnly {
  extendsFrom annotationProcessor
 }
}

repositories {
 mavenCentral()
 maven { url 'https://repo.spring.io/milestone' }
 maven { url 'https://repo.spring.io/snapshot' }
}

dependencies {
 implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
 implementation 'org.springframework.boot:spring-boot-starter-web'
 compileOnly 'org.projectlombok:lombok'
 runtimeOnly 'com.h2database:h2'
 annotationProcessor 'org.projectlombok:lombok'
 testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

test {
 useJUnitPlatform()
}
  • plugin을 통해 gradle을 확장해 사용할 수 있음
  • plugin을 사용하려면 버전 정보를 넘겨줘야 함

 

  • group은 아티팩트 배포에 사용
  • version은 이 프로젝트의 버전

 

 

Lombok

configuration {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

dependencies {
       annotationProcessor 'org.projectlombok:lombok'
}
  • 롬복은 어노테이션을 추가하면 컴파일 시 그에 상응하는 코드를 만들어 주는 라이브러리
  • 롬복이 코드를 작성하려면 annotationProcessor가 필요하여 configurations에 명시함
  • annotationProcessor로 org.projectlombok.lombok을 사용하도록 dependencies에 명시함
  • 롬복 라이브러리를 이용하면 getter, setter, builder, constructor를 지원해줌
  • 롬복 설치 : java -jar lombok-1.18.6.jar

 

 

 

Repositories

 

repositories {
 mavenCentral()
 maven { url 'https://repo.spring.io/milestone' }
 maven { url 'https://repo.spring.io/snapshot' }
}
  • repository는 gradle이 라이브러리를 다운받는 곳이다.
  • 여기선 그 중 mavenCentral (https://mvnrepository.com/repos/central)을 주로 사용한다.
  • Lombok annotationProcessor를 설치하기 위해 mavenCentral을 이용한다. 나머지 두 리포지토리는 스프링 관련이다.

 

 

Dependency

 

dependencies {
 implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
 implementation 'org.springframework.boot:spring-boot-starter-web'
 compileOnly 'org.projectlombok:lombok'
 runtimeOnly 'com.h2database:h2'
 annotationProcessor 'org.projectlombok:lombok'
 testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

 

  • 이 프로젝트에서 사용할 라이브러리를 명시하면 gradle이 repositories에서 해당 라이브러리를 다운 및 설치한다.
  • implementation, runtimeOnly 등은 라이브러리의 scope에 대한 내용이다.

 

Test

test {
 useJUnitPlatform()
}
  • gradle을 사용하면 빌드 뿐 아니라 유닛 테스트도 실행시킬 수 있다.
  • test는 테스트에 관련된 설정을 할 수 있다.
  • 위 내용은 JUnitPlatform을 사용하여 유닛 테스트를 하도록 명시했다.

 

 

라이브러리 추가 시,

  1. gradle depedencies에 라이브러리 추가
  2. annotationProcessor 추가

 

 

포스트맨 API 테스트

포스트맨은 이 프로젝트에서 개발할 REST API를 테스트하는 툴이며,

사용이 간편하고 직관적인 GUI를 제공한다.

 

GET www.google.com  입력하면 구글 메인 페이지의 HTML이 출력된다.