[Spring] 스프링부트(Springboot) 프로젝트 구조 설명

    개발을 한지 얼마 되지도 않았고 뭐가 뭔지 잘 모르겠는 스프링 뉴비(newbie)분들은 프로젝트를 하기 전에 우선 프로젝트의 구조를 익히는 것이 좋을 것입니다. 이 포스팅은 너무 자세히는 설명하지 않고 간단히 프로젝트의 구조에 대해서 설명해보겠습니다.

     


    스프링부트 프로젝트 구조

    STS를 열고 내가 이미 만들어 놓은 프로젝트를 자세히 보면 아래와 같은 구조로 되어 있을 것입니다.

     

    프로젝트 구조

     

    하나하나 위치별로 다시 설명을 드리자면

     

    자바코드

    자바코드

     

    최상단에 위치한 src/main/java에 있는 곳은 자바 코드가 위치해야 하며, com.tistory.needneo같은 것은 패키지 명입니다. 일반적으로 패키지명을 먼저 설계해서 만들어 놓은 후 자바코드들을 넣습니다. 가장 많이 작업할 공간이며, 패키지명을 잘 설계하는 것과 코드를 객체지향 혹은 목적에 맞게 잘 개발하여 정확한 위치에 넣는 것이 핵심이겠습니다.

     

    정적소스와 속성 설정

    정적 소스와 속성 설정

     

    static이라 적혀있는 곳은 정적 소스가 들어가야 될 위치인데 정적 소스는 코드로 인해서 내부적으로 값이 변경되지 않는 것을 의미합니다. 보통 html, image, javascript와 같은 소스를 의미하며 jsp와 같은 소스는 정적 소스라 칭하지 않습니다.

     

    jsp의 경우 프로그래밍을 통해서 안의 값들이 변경될 수 있기 때문에 동적소스라 칭하며, 보통 이 둘을 잘 구분하지 않는 경우도 많습니다만 서버에 따라서 정적과 동적을 완전히 분리해야 되는 경우도 있습니다. Webtob, Jeus, apache 등과 같은 서버들은 동적과 정적으로 목적이 완전히 나뉘어져 있어서 해당 목적에 맞게 static과 dynamic 소스를 서버별로 띄우고 연결하기도 합니다.

     

     

    사실 원래는 분리하는게 맞으나 요즘 사용하는 서버(ex: Tomcat)들 자체가 이 둘을 연결해주는 기능들을 기본적으로 가지고 있어서 그렇게 사용하는 것 뿐입니다.

     

    그리고 아래에 있는 application.properties는 스프링 부트를 설정하는 공간으로 예를 들면 자체적으로 띄우는 tomcat 포트가 충돌이 날 경우 아래와 같이

    server.port=8081

    서버의 포트를 수정하여 톰캣이 충돌되지 않게 방지해주거나 환경에 맞게 세팅하기도 합니다.

     

    라이브러리

    library

     

    스프링부트로 세팅된 라이브러리들이 보관되는 곳입니다. gradle 혹은 maven과 같은 것으로 라이브러리를 세팅하였다면 이 공간에서 확인할 수 있습니다. 

     

    동적소스

    동적소스

     

    static이 html, javascript, css, image와 같은 정적 소스를 저장하는 공간이라면 이 부분은 jsp와 같은 동적 view 페이지를 저장하는 공간입니다. spring java 소스에서 전달받아 처리하는 페이지들이 저장되는 곳입니다.

     

    build.gradle

    그레이들 설정

     

    빌드를 전반적으로 담당하는 gradle 설정이 있는 곳입니다. maven으로 하였다면 pom.xml으로 설정하면 됩니다. build.gradle을 열면

     

    plugins {
    	id 'org.springframework.boot' version '2.5.0'
    	id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    	id 'java'
    	id 'war'
    }
    
    group = 'com.tistory'
    version = '0.0.1-SNAPSHOT'
    sourceCompatibility = '1.8'
    
    repositories {
    	mavenCentral()
    }
    
    dependencies {
    	implementation 'org.springframework.boot:spring-boot-starter-web'
    	providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
    	testImplementation 'org.springframework.boot:spring-boot-starter-test'
    }
    
    test {
    	useJUnitPlatform()
    }
    

    설정이 이와 같이 되어 있습니다. 여기서 봐야 될 것은 별도로 추가한 implementation에 spring-boot-starter-web 정도가 있다는 것이겠네요. maven만 하는 사람이라면 이 gradle 설정이 얼마나 강력한지 알 수 있을 것입니다.

     

    나머지 설명하지 않는 위치들은 알 필요가 없어도 개발하는데 지장이 없거나, 지금 단계에서는 모르는게 더 나을 수 있는 곳입니다. 그러니 일단 위와 같은 내용들만 이해하고 하나하나 개발이 완료되면 나머지 구조에 대해서 이해하는 것이 더 좋겠습니다.

     

     

    반응형

    댓글

    Designed by JB FACTORY