티스토리 뷰
Spring Boot + Maven 환경으로 프로젝트를 만들고 기본적인 구조를 파악해보자.
간단하게 intelliJ IDE로 프로젝트를 생성했다.
사용한 intellJ IDE 버전은 2019.3.3.입니다.
메뉴 File > New > Project 선택하면 아래와 같은 창이 나오는데 Spring Initializr를 선택하고 수정 없이 다음 버튼을 눌렀다.
만약 다른 에디터를 사용한다면 https://start.spring.io/에서 설정한 후 파일을 다운로드하면 된다.
Type을 Maven Project를 선택하고 다음 버튼을 눌렀다.
Web으로 만들 것이라 Spring Web 체크한 후 다음 버튼을 누르면 뭔가 설치가 되면서 프로젝트가 만들어진다.
처음 만든 프로젝트의 폴더 구조는 다음과 같다.
main/java/com.example(패키지명) 아래에 demo와 springboot.demo 폴더가 있고 각각 프로젝트 init 지점인 DemoApplication 파일이 존재한다.
이 중에서 springboot.demo/DemoApplication 파일로 이동한 후 실행 버튼을 클릭하면 아래와 같이 메뉴가 나온다.
그중에서 Run 'DemoApplication' 실행하면 프로젝트가 실행되고 콘솔 창에 로그들이 찍힌다.
(완전 초보자인 나는 어떻게 구동하는지도 몰랐다.)
로그를 보면 port(s)가 나오는데 기본으로 설정된 8080을 볼 수 있다.
localhost:8080 접속하면 Hello World 가 보인다.
📄 src/main/java/com/example/springboot/demo/DemoApplication.java
package com.example.springboot.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@GetMapping
public String HelloWorld() {
return "Hello World";
}
}
기본적으로 작성된 코드를 보면 알 수 없는 어노테이션(@로 시작하는 문자들)을 볼 수 있다. 스프링 부트가 어노테이션들을 분석해서 프로젝트를 알아서 구성해준다. 어노테이션들은 스프링 부트를 공부하면서 익혀야 하는데 Hello World가 브라우저에 찍힌 이유를 설명하기 위해서 @GetMapping의 설명하겠다. 공식문서에 가보면 아래와 같이 설명한다.
Annotation for mapping HTTP GET requests onto specific handler methods.
번역: HTTP GET 요청을 특정 핸들러 메소드에 맵핑하기 위한 주석
인자로 경로를 받는데 아무것도 추가하지 않으면 최상위 루트 경로와 매핑된다. 그렇기 때문에 localhost:8080로 접근했을 때 반환 값이 "Hello World"를 볼 수 있수 있었던 것이다.
resources/application.properties 파일은 스프링 부트의 빌드 환경별 설정을 할 수 있는 파일이다. 프런트엔드에서 webpack 설정을 빌드 환경별로 하는 것과 비슷하다고 생각하면 된다. 한 가지 테스트로 application.properties 파일을 삭제하고 application.yml 추가한 후 아래처럼 변경하자. 8080 포트를 8081로 바꾸는 설정인데 이렇게 설정을 변경하고 다시 시작한 후 8081 포트로 접속해 보면 동일한 결과를 얻을 수 있다. 환경별 설정이 궁금할 때 이 파일을 참고하자.
📃 src/main/resources/application.yml
server:
port: 8081
properties 보다 yml(YAML) 파일을 더 선호 한다고 해서 변경했을 뿐 properties도 사용 가능하다.
메이븐(Maven)을 빌드 도구로 선택하면 생성된 pom.xml 파일을 볼 수 있는데 이것은 빌드할 프로젝트가 사용할 자바 버전, 모듈, 메이븐 생명주기(Lifecycle) 필요한 모듈 및 스크립트를 기술하는 파일이다.
프런트엔드에서 pacakage.json 파일을 떠올려 보면 이해하기 쉽다. 거기에도 사용할 모듈의 의존성과 버전, 빌드 시 수행할 스크립트를 작성할 수 있는데 그것과 같은 역할을 한다고 볼 수 있다.
메이븐 관련 자세한 내용은 이전 글 하단에 있는 영상을 참고하자.
📃pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>