{"componentChunkName":"component---src-templates-blog-post-js","path":"/springboot/스프링-부트-구조/","result":{"data":{"site":{"siteMetadata":{"title":"Bottlehs Tech Blog","description":"웹·앱·AI 개발자 전병훈(bottlehs)의 기술 블로그. AI·LLM, JavaScript·Vue, Spring Boot, 알고리즘, 블록체인 실무 가이드를 다룹니다","siteUrl":"https://www.bottlehs.dev","author":{"name":"Jeon Byung Hun","summary":"개발을 즐기는 bottlehs - Engineer, MS, AI, FE, BE, OS, IOT, Blockchain, 설계, 테스트"},"social":{"github":"bottlehs","codepen":"bottlehs"}}},"markdownRemark":{"id":"bb38f4ac-c9b3-53a4-9a64-9ed04e6e499b","excerpt":"스프링 부트 구조 Spring Boot Architecture 스프링 부트 아키텍쳐는 아래와 같다. Spring Boot Architecture Controller Layer : UI 에서 요청을 받고 응답을 전달 한다. Service Layer…","html":"<p><img src=\"/assets/springboot.png\" alt=\"스프링 부트 구조\" title=\"스프링 부트 구조\"></p>\n<h2 id=\"spring-boot-architecture\" style=\"position:relative;\"><a href=\"#spring-boot-architecture\" aria-label=\"spring boot architecture permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Spring Boot Architecture</h2>\n<p>스프링 부트 아키텍쳐는 아래와 같다.</p>\n<p><img src=\"/assets/spring-boot-architecture.png\" alt=\"Spring Boot Architecture\" title=\"Spring Boot Architecture\"></p>\n<ul>\n<li><strong>Controller Layer :</strong> UI 에서 요청을 받고 응답을 전달 한다.</li>\n<li><strong>Service Layer :</strong> 비즈니스 로직을 구현 한다.</li>\n<li><strong>Repository Layer :</strong> 데이터베이스에서 가져올 쿼리를 구현. JPA를 이용하는 경우 정해진 규칙에 따라서 메소드를 사용하거나, 만들어놓으면 적절한 쿼리를 수행할 수 있다.</li>\n<li><strong>Domain Layer :</strong> 실제로 데이터베이스 물리 테이블과 1:1 매핑이 되어 바인딩 되어 있다.</li>\n</ul>\n<p>Controller 에서는 Service 를 호출해서 받은 결과를 UI 에 전달한다. <code class=\"language-text\">[Service -> Repository -> Domain]</code> 처럼 각각 관련 있는 클래스를 호출하도록 설계한다. Service 가 또 다른 Service 를 호출하지 않도록 주의하고, Service 에서 필요한 Repository 에 접근하여, 데이터를 가져올 수 있도록 해야 한다.</p>\n<h2 id=\"spring-boot-project-structure\" style=\"position:relative;\"><a href=\"#spring-boot-project-structure\" aria-label=\"spring boot project structure permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Spring Boot Project Structure</h2>\n<table>\n<thead>\n<tr>\n<th>디렉토리</th>\n<th>설명</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>src/main/java</td>\n<td>어플리케이션, 라이브러리 소스</td>\n</tr>\n<tr>\n<td>src/main/resources</td>\n<td>어플리케이션, 라이브러리 리소스</td>\n</tr>\n<tr>\n<td>src/main/filters</td>\n<td>리소스 필터 파일</td>\n</tr>\n<tr>\n<td>src/main/assembly</td>\n<td>어셈블리 디스크립터</td>\n</tr>\n<tr>\n<td>src/main/config</td>\n<td>설정 파일</td>\n</tr>\n<tr>\n<td>src/main/scripts</td>\n<td>어플리케이션, 라이브러리 스크립트</td>\n</tr>\n<tr>\n<td>src/main/webapp</td>\n<td>웹 어플리케이션 소스</td>\n</tr>\n<tr>\n<td>src/test/java</td>\n<td>테스트 소스</td>\n</tr>\n<tr>\n<td>src/test/resources</td>\n<td>테스트 리소스</td>\n</tr>\n<tr>\n<td>src/test/filters</td>\n<td>테스트 리소스 필터 파일</td>\n</tr>\n<tr>\n<td>src/site</td>\n<td>사이트</td>\n</tr>\n<tr>\n<td>LICENSE.txt</td>\n<td>프로젝트의 라이센스</td>\n</tr>\n<tr>\n<td>NOTICE.txt</td>\n<td>프로젝트 라이브러리에서 필요로 하는 주의사항 특징</td>\n</tr>\n<tr>\n<td>README.txt</td>\n<td>프로젝트의 리드미</td>\n</tr>\n</tbody>\n</table>\n<div class=\"gatsby-highlight\" data-language=\"groovy\"><pre class=\"language-groovy\"><code class=\"language-groovy\">buildscript <span class=\"token punctuation\">{</span>\n    repositories <span class=\"token punctuation\">{</span>\n        maven <span class=\"token punctuation\">{</span> url <span class=\"token interpolation-string\"><span class=\"token string\">\"http://repo.spring.io/libs-snapshot\"</span></span> <span class=\"token punctuation\">}</span>\n        <span class=\"token function\">mavenLocal</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">}</span>\n    dependencies <span class=\"token punctuation\">{</span>\n        <span class=\"token function\">classpath</span><span class=\"token punctuation\">(</span><span class=\"token interpolation-string\"><span class=\"token string\">\"org.springframework.boot:spring-boot-gradle-plugin:1.0.0.RC1\"</span></span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\napply plugin<span class=\"token punctuation\">:</span> <span class=\"token string\">'java'</span>\napply plugin<span class=\"token punctuation\">:</span> <span class=\"token string\">'idea'</span>\napply plugin<span class=\"token punctuation\">:</span> <span class=\"token string\">'spring-boot'</span>\n\nsourceCompatibility <span class=\"token operator\">=</span> <span class=\"token number\">1.7</span>\nversion <span class=\"token operator\">=</span> <span class=\"token string\">'1.0'</span>\n\nrepositories <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">mavenCentral</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    maven <span class=\"token punctuation\">{</span> url <span class=\"token interpolation-string\"><span class=\"token string\">\"http://repo.spring.io/libs-snapshot\"</span></span> <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\ndependencies <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">compile</span><span class=\"token punctuation\">(</span><span class=\"token interpolation-string\"><span class=\"token string\">\"org.springframework.boot:spring-boot-starter-web:1.0.0.RC1\"</span></span><span class=\"token punctuation\">)</span>\n    testCompile group<span class=\"token punctuation\">:</span> <span class=\"token string\">'junit'</span><span class=\"token punctuation\">,</span> name<span class=\"token punctuation\">:</span> <span class=\"token string\">'junit'</span><span class=\"token punctuation\">,</span> version<span class=\"token punctuation\">:</span> <span class=\"token string\">'4.11'</span>\n<span class=\"token punctuation\">}</span></code></pre></div>","tableOfContents":"<ul>\n<li><a href=\"/springboot/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B6%80%ED%8A%B8-%EA%B5%AC%EC%A1%B0/#spring-boot-architecture\">Spring Boot Architecture</a></li>\n<li><a href=\"/springboot/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B6%80%ED%8A%B8-%EA%B5%AC%EC%A1%B0/#spring-boot-project-structure\">Spring Boot Project Structure</a></li>\n</ul>","wordCount":{"words":103},"fields":{"slug":"/springboot/스프링-부트-구조/","image":"/assets/springboot.png","faq":[]},"frontmatter":{"title":"스프링 부트 구조","date":"2021년 3월 23일","dateISO":"2021-03-23T22:29:29.537Z","updatedISO":null,"category":"springboot","description":"스프링부트는 최소한의 설정으로 스프링 플랫폼과 서드파티 라이브러리들을 사용 할 수 있도록 고안된 프레임워크 이다. 즉 스프링 부트는 환경 설정을 최소화하고 개발자가 비즈니스 로직에 집중할 수 있게하여 생산성을 크게 향상시켜준다.","tags":["스프링","스프링부트","Spring","SpringBoot","Java","프레임워크","스프링부트구조","아키텍쳐"]}}},"pageContext":{"slug":"/springboot/스프링-부트-구조/","previous":{"fields":{"slug":"/springboot/gradle-maven-기본-개념/"},"frontmatter":{"title":"Gradle, Maven 기본 개념과 Gradle Multi Project","tags":["XML","Groovy","의존성","Gradle","Maven","Gradle Multi Project","빌드시스템"]}},"next":{"fields":{"slug":"/vue/vue-js-이해-및-환경설정/"},"frontmatter":{"title":"Vue JS 이해 및 환경설정","tags":["vue","javascript","framework","frontend","web"]}}}},"staticQueryHashes":["213619243","3262363727"]}