티스토리 뷰

728x90

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>

 

728x90
댓글