본문 바로가기

웹 개발/Spring Boot

Spring Boot) Spring Boot 프로젝트 예제로 기초 이해하기 / Building an Application with Spring Boot

Spring Boot 프로젝트 예제로 기초 이해하기

spring boot 동작 방식을 이해하기 위해 공식 사이트에서 제공한 가이드를 따라 연습한 내용을 정리한 자료입니다. 
 

Building an Application with Spring Boot

this guide is designed to get you productive as quickly as possible and using the latest Spring project releases and techniques as recommended by the Spring team

spring.io


1. 나의 개발 환경 


  • IntelliJ IDEA CE
  • Mac OS
  • JDK 1.8
  • Gradle 
  • + intelliJ에서 스프링 부트 프로젝트를 시작하는 방법은 생략할 수 있도록 git 에서 예제를 clone해서 시작합니다. 
$ git clone https://github.com/spring-guides/gs-spring-boot.git
$ cd gs-spring-boot/initial

// gs-spring-boot/complete에서 실습 완료 시 코드를 확인할 수 있습니다. 

 

 

2. spring initializer로 시작하기 


  • 스프링 이니셜라이저로 gradle 프로젝트를 만들어 다운 받으면 프로젝트 폴더에 build.gradle이 자동 생성되어 있습니다. 
  • git 에서 코드를 클론했으면 이 파일 역시 이미 생성되어 있는 상태입니다. 
  • intelliJ ultimate 버전을 구매해서 사용하시면 initializer가 IDE에서 제공돼서 거기서 별로도 만드셔도 됩니다! 
plugins {
	id 'org.springframework.boot' version '2.4.4'
	id 'io.spring.dependency-management' version '1.0.11.RELEASE'
	id 'java'
}

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

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

test {
	useJUnitPlatform()
}

 

3. 간단한 웹 애플리케이션 만들기 


애플리케이션으로 컴파일될 자바 파일은 src/main/java 디렉토리에 위치해야 합니다. 

웹 컨트롤러 만들기 

  • src/main/java/com/example/springboot/HelloController.java
  • @Restcontroller streotype annotation으로 이 부분이 웹 컨트롤러 역할을 함을 알립니다. 
  • @RequestMapping annotation은 라우팅 정보를 제공합니다. 파라미터로 전달되는 문자열을 경로로하는 HTTP 요청이 들어오면 해당 annotation이 붙은 메소드로 맵핑을 합니다. 
package com.example.springboot;

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;

@RestController
public class HelloController {

	@RequestMapping("/")
	public String index() {
		return "Greetings from Spring Boot!";
	}

}

 

  • @RestContoller
    웹에 들어오는 요청을 컨트롤하기 위해 이 메소드를 사용할 것임을 알리는 플래그 
    @Controller + @ResponseBody
  • @RequestMapping('/')
    전달받은 문자열 인자 / 를 index() 메소드로 맵핑하는 플래그
  • public String index()
    @RequestMapping('/')로 맵핑된 주소로 문자열을 반환하는 메소드 

웹 애플리케이션 클래스 만들기 

  • src/main/java/com/example/springboot/Application.java
  • 메인 메소드는 애플리케이션 시작 지점으로 자바 컨벤션을 따릅니다. 이 메소드에서 SpringApplication 클래스의 run 메소드를 호출하여 자동으로 설정된 톰캣 등의 웹 서버가 시작되고, 애플리케이션이 실행되게 하는 역할을 위임합니다.
  • Spring boot는 애플리케이션의 메인 클래스가 다른 클래스보다 상위인 루트 패키지에 위치하도록 권고합니다.
  • @SpringBootApplication annotation은 대게 애플리케이션 메인 클래스 앞에 붙는 어노테이션으로 베이스 패키지를 명시적으로 정의하는 것입니다. 
package com.example.springboot;

import java.util.Arrays;

import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class Application {

	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}

	@Bean
	public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
		return args -> {

			System.out.println("Let's inspect the beans provided by Spring Boot:");

			String[] beanNames = ctx.getBeanDefinitionNames();
			Arrays.sort(beanNames);
			for (String beanName : beanNames) {
				System.out.println(beanName);
			}

		};
	}

}

 

  • spring initializer로 프로젝트를 생성하면 처음에 간단한 애플리케이션 클래스를 자동으로 생성해 두는데 이를 다음과 같이 수정해야 합니다. 
  • @SpringBootApplication
    = @Configuration : 애플리케이션에서 bean으로 사용할 클래스임을 명시하는 태그
    + @EnableAutoConfiguration : 각종 프로퍼티 설정, 클래스경로 설정, 다른 bean을 기반으로 새로운 bean을 추가했음을 Spring boot에게 알리기 위한 태그 
    + @ComponentScan : com/example 패키지에 있는 서비스, 컴포넌트, 설정 등을 찾아서 컨트롤러에 알리라고 Spring에게 알려주는 태그 
  • main() 메소드
    Spring boot의 SpringApplication.run() 메소드를 실행시키는 메소드로 애플리케이션을 실행시킴 
  • CommandLineRunner() 메소드 (@Bean) 
    애플리케이션 시작시 실행되는 부분으로, 애플리케이션에 의해 생성된 모든 bean을 찾거나 자동으로 그 bean들을 spring boot에 추가하고 정렬하고 프린트 함

애플리케이션 디렉토리 구조 예시 

  • src/main/java/com/...
  • myapplication 패키지의 루트 - Application.java에 @SpringBootApplication 어노테이션을 단 메인 클래스가 포함되어 있습니다.
  • 그리고 세부 아이템인 customer, order이 존재하고 각 아이템 디렉토리 하위에 기능을 구현한 파일과 컨트롤러 파일이 존재합니다. 
com
 +- example
     +- myapplication
         +- Application.java
         |
         +- customer
         |   +- Customer.java
         |   +- CustomerController.java
         |   +- CustomerService.java
         |   +- CustomerRepository.java
         |
         +- order
             +- Order.java
             +- OrderController.java
             +- OrderService.java
             +- OrderRepository.java

 

4. 애플리케이션 실행하기 


 

  • ../complete 디렉토리에 가서 실행시켜야 합니다. 
  • ./gradlew bootRun 
  • localhost:8080으로 접속하면 다음과 같은 화면을 확인할 수 있습니다. 
  • nginx도 기본적으로 포트 넘버를 8080 으로 설정하기 때문에 기존에 nginx 서버를 켜두셨다면 꺼야 합니다. (mac -$ sudo nginx -s stop)

 

5. 추가 정보


 


References