on
[SpringBoot] 간단한 게시판 만들기 #1 - 세팅
[SpringBoot] 간단한 게시판 만들기 #1 - 세팅
주의
스프링부트 맛보기 위해 정리한 글이므로 공부하실거면 다른 글을 참고해주세요.
아래 블로거의 글을 보면서 공부하였습니다.
https://victorydntmd.tistory.com/325
Spring Initializr을 통해 Project를 생성하였다.
1. 빌드
'Build -> Build Project'를 통해 프로젝트 빌드를 수행한다.
빌드 툴은 Gradle임.
2. Lombok 사용을 위한 설정
Lombok을 사용하기 위해서는 몇 가지 설정이 필요하다.
Ref : https://goddaehee.tistory.com/208
3. SDK 선택
Java 11을 사용하기 위해 'Project Structure -> Project Settings -> Project에서 Prject SDK'를 기 설치해 둔 11을 선택
4. MySQL 생성
Database는 MySQL을 사용하였다.
Docker는 그나마 익숙하기 때문에 Docker로 MySQL을 생성하였으며, Docker-compose를 사용하였다.
❯ ls docker-compose.yml mysql ❯ cat docker-compose.yml version: "3" services: db: # 서비스 명 image: mysql:8 # 사용할 이미지 container_name: test-mysql # 컨테이너명 설정 ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: "dkagh1." # roor 계정 패스워드 설정 command: # 명령어 - --character-set-server=utf8mb4 - --collation-server=utf8mb4_unicode_ci volumes: # 다렉토리 마운트 설정 - ./mysql/:/var/lib/mysql ❯ docker-compose up -d ❯ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 325f96e2b957 mysql:8 "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp test-mysql
DBeaver 툴을 통해 MySQL에 접속
5. Build.gradle 설정
spring security는 추후 인증 및 인가 부분을 다룰 때 사용할 수 있을 것 같다.
plugins : 프로젝트를 빌드하기 위한 작업을 해주는 플러그인들
repositories : SpringBoot 프로젝트에서 사용하는 라이브러리들을 받아오는 저장소, Default : mavenCentral()
dependencies : 프로젝트에서 필요한 라이브러리 의존성을 설정하는 부분
/* build.gradle */ plugins { id 'org.springframework.boot' version '2.6.1' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } group = 'shop.pingping2' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' developmentOnly 'org.springframework.boot:spring-boot-devtools' runtimeOnly 'mysql:mysql-connector-java' compileOnly 'org.projectlombok:lombok' // implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' // implementation 'org.springframework.boot:spring-boot-starter-security' } test { useJUnitPlatform() }
6. application.yml 설정
application.properties 파일을 삭제하고 application.yml 파일을 생성하여 yml 형식으로 관리하도록 하였다.
jpa : jpa 관련 설정
datasource : 연결할 Database 설정 (url, driver, username, password)
mvc : 히든메서드를 사용할 수 있도록 설정이 필요하다.
>> GET, POST 뿐 만 아니라 PUT, DELETE 메서드를 사용하기 위해서 설정해야 함
spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/spring_board?serverTimezone=Asia/Seoul&characterEncoding;=UTF-8 username: root password: dkagh1. jpa: database-platform: org.hibernate.dialect.MySQL5InnoDBDialect # JPA 데이터베이스 플랫폼 (InnoDB) open-in-view: false show-sql: true hibernate: format_sql: true ddl-auto: update # none, update, create, create-drop, validate mvc: hiddenmethod: filter: enabled: true # GET, POST 뿐 만 아니라 PUT, DELETE 등의 메서드도 사용하기 위한 설정 devtools: livereload: enabled: true logging: level: org: hibernate: SQL: DEBUG type: descriptor: sql: BasicBinder: TRACE
7. Project 최종 구조
└─src
├─main
│ ├─java
│ │ └─shop
│ │ └─pingping2
│ │ └─board
│ │ ├─controller
│ │ ├─domain
│ │ ├─dto
│ │ ├─repository
│ │ └─service
│ └─resources
│ ├─static
│ │ ├─css
│ │ └─js
│ └─templates
│ ├─board
│ └─fragments
└─test
└─java
└─shop
└─pingping2
└─board
대충 흐름을 설명하자면,
SpringBoot는 Java란 Programming Language로 API를 제공해준다.
사용자는 이런 API를 HTML 등의 Front View와 상호작용하며 데이터를 주고 받게 된다.
사용자는 Web Front를 통해 SpringBoot의 API를 사용하게 되며,
모든 사용자의 요청은 Controller를 통해 분기 처리를 하게 된다. (DispatcherServlet이 앞 단에 있긴 하지만 생략)
Controller는 View로부터 받은 사용자의 요청을 Service에게 전달하며, Serivce는 내부 비즈니스 로직을 담당하게 된다.
즉, DB(Entity)와 상호작용을 해서 데이터를 Create, Read, Update, Delete 등을 수행하게 된다.
또한 Front <-> Controller <-> Service 간 데이터를 주고 받을 때는 DTO(Data Transfer Object)라는 객체를 통해 데이터를 주고 받게 된다.
Controller : 요청 처리
Service : 비즈니스 로직 담당
dto : 데이터 전달 목적
repository : Entity 인터페이스
domain
Board
Time
: Entity 객체이며, DB의 테이블이라고 생각해도 된다. 객체 지향적으로 DB와 상호작용할 수 있음
resource
static : css, js, img, ..
templates : html 파일을 모아둘 수 있다. 여기서는 thymeleaf 템플릿으로 html을 사용
from http://nyyang.tistory.com/123 by ccl(A) rewrite - 2021-12-30 02:28:08