SpringBoot와 JPA 사용해서 블로그 만들기
SpringBoot / JPA / MySQL / Gradle / Spring Security
환경세팅
1. build.gradle
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'mysql:mysql-connector-java'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
Spring Boot Devtools
: 자동재시작 (파일이 클래스패스에서 변경 일어났을 때)Lombok
: annotation을 통해 getter, setter, constructor 자동생성Spring Data JPA
: 데이터베이스를 JPA통해 만듬 (ORM 이용)MySQL Driver
Spring Security
Spring Web
: annotation 사용 + 내장형컨테이너로 톰캣 탑재
// JSTL
implementation 'javax.servlet:jstl'
// JSP 템플릿 엔진
implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
// Security 태그 라이브러리
implementation 'org.springframework.security:spring-security-taglibs'
추가 라이브러리들
(SpringBoot는 기본적으로 JSP를 제공해주지 않음)
2. Encoding
UTF-8
: 전세계 표준, 하나의 문자를3byte
로 표현
3. application.yml
server:
port: 8000
servlet:
context-path: /blog
encoding:
charset: UTF-8
enabled: true
force: true
- port, context-path(진입점), encoding 설정
spring:
mvc:
view:
prefix: /WEB-INF/views/
suffix: .jsp
- jsp파일의 위치설정 :
src/main/resources/webapp/WEB-INF/views
폴더 만들어줌src/main/resources/static
이 html 위치 default/static
아래는 정적인 파일만(브라우저가 인식할 수 있는)
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/blog?serverTimezone=Asia/Seoul
username: cos
password: 1234
- DB 연결
jpa:
open-in-view: true
hibernate:
ddl-auto: create
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
use-new-id-generator-mappings: false
show-sql: true
properties:
hibernate.format_sql: true
- JPA 설정
ddl-auto: create
: table 있으면 drop 하고 만듬, 생성하고서는 update로 바꾸기physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
: 변수명 그대로 DB컬럼에use-new-id-generator-mappings: false
: JPA가 정하는 넘버링 전략을 안따라가겠다는 의미- Entitiy에서
@GeneratedValue(strategy=GenerationType.IDENTITY)
를 통해 연결된 DB의 넘버링 전략을 따라감
- Entitiy에서
show-sql: true
: console에서 쿼리보임 (한줄로)properties: hibernate.format_sql: true
: 여러줄로 쿼리 예쁘게 정렬