아키텍처
- Controller Layer : UI 에서 요청을 받고 응답을 전달
- Service Layer : 비즈니스 로직을 구현
- Repository Layer : 데이터베이스에서 가져올 쿼리를 구현. JPA를 이용하는 경우 정해진 규칙에 따라서 메소드를 사용하거나, 만들어놓으면 적절한 쿼리를 수행할 수 있습니다.
- Domain Layer : 실제로 데이터베이스 물리 테이블과 1:1 매핑이 되어 바인딩 되어 있습니다.
Controller 에서는 Service 를 호출해서 받은 결과를 UI 에 전달합니다.
[Service -> Repository -> Domain] 처럼 각각 관련 있는 클래스를 호출하도록 설계합니다.
Service 가 또 다른 Service 를 호출하지 않도록 주의하고, Service 에서 필요한 Repository 에 접근하여, 데이터를 가져올 수 있도록 합니다.
개발 환경
IDE
Eclipse Oxygen
Framework
Spring Boot 2.0.6
- Tomcat
- JPA (Java Pesistance API)
- lombok
Template Engine
Thymeleaf
Javasript
jQuery
UI
Bootstrap & Bootstrap LTE
Database
MySQL 5.7
프로젝트 구조
blog : 최상위 프로젝트.
src.main.java : java 클래스 파일 모음.
project.blog : 최상위 패키지.
project.blog.common : 공통 클래스 모음. (유틸리티, 상수 등)
project.blog.config : 설정 클래스 모음. (Web Security, Controller Advice 등)
project.blog.controller : 컨트롤러 클래스 모음.
project.blog.domain : 도메인 클래스 모음. 데이터베이스 테이블과 실제로 1:1 매핑되어 정확하게 관리.
project.blog.dto : Input, Output 클래스 모음. domain 클래스와 비슷할 수 있지만, View 와 인터페이스 하기 위한 클래스.
project.blog.repository : 데이터베이스 접근하는 클래스 모음. DAO(Data Access Object) 와 비슷한 개념으로 JPA 를 사용한 클래스.
project.blog.service : 비즈니스 혹은 사용자 로직을 구현한 클래스. 비즈니스와 연관있는 로직을 표현.
project.blog.BlogApplication.java : Spring Boot 실행 클래스.
src.test.java : java 테스트를 위한 클래스 파일 모음.
src.main.resources : 프로젝트에 필요한 리소스 파일 모음. HTML, javascript, image, css, third party library 등을 관리.
template : HTML 파일 모음.
static : 정적 자원들 모음. javascript, image, css, third party library 를 위치.
application.yml : Spring Boot 설정 파일. 실행 포트, Datasource 등을 지정.
build.gradle : 프로젝트 Version, Dependency 등을 설정
init.mysql.sql : MySQL 버전의 초기 로딩 DDL 파일.
'IT 프로젝트 > 블로그 만들기' 카테고리의 다른 글
[Spring Boot] 스프링 부트 프로젝트/블로그 만들기 - Welcome 페이지 만들기 (3) | 2018.11.15 |
---|---|
[Spring Boot] 스프링 부트 프로젝트/블로그 만들기 - Resource 경로 지정 (2) | 2018.11.15 |
[Spring Boot] 스프링 부트 프로젝트/블로그 만들기 - index 페이지 작성 - UI 레이아웃 [Bootstrap + Thymeleaf] (6) | 2018.11.11 |
[Spring Boot] 스프링 부트 프로젝트/블로그 만들기 - 개발 환경 구성 [Eclipse + Spring Boot + Gradle] (0) | 2018.11.11 |
[Spring Boot] 스프링 부트 프로젝트/블로그 만들기 - 프롤로그 (2) | 2018.11.10 |