jpa를 공부하며 로그인, 카테고리별 게시판 등 간단한 기능들이 있는 서비스를 하나 만들어 보기로 결심하였다.
스프링 시큐리티, querydsl, jpql 등등 직접 사용해 보고 jpa에 대한 감을 잡는 것이 목표!
스프링 프레임워크를 사용한 웹 개발이 아직 능숙하지 않아 좀 더 어려움이 많을 것으로 예상되지만.. 화이팅이다.. 👊🏻👩🏻💻
[GitHub] github.com/ijo0r98/springboot-jpa
spring initializr(start.spring.io/)로 스프링 부트 프로젝트 생성
application.properties
스프링 부트가 애플리케이션을 구동할 때 자동으로 로딩하는 파일
1. DB 설정
# MySQL
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://{host}:{port}/{db_name}?serverTimezone=UTC&characterEncoding=UTF-8
spring.datasource.username={username}
spring.datasource.password={password}
spring.datasource.initialization-mode=always
spring.datasource.initialization-mode=always
- 외장 DB 초기화 가능
spring.datasource.data={sql파일경로}
- 지정된 파일의 sql 실행
- DB종류에 따라 다른 스크립트를 사용할 시 spring.datasource.platform={db_type} 설정 후 사용
2. JPA 설정
# JPA
spring.jpa.show-sql=true
spring.jpa.database=mysql
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.show_sql=false
spring.jpa.properties.hibernate.format_sql=true
# log just the SQL
logging.level.org.hibernate.SQL=DEBUG
spring.jpa.hibernate.ddl-auto (* DDL 자동생성은 운영서버에서는 사용하지 말 것)
- create: 기존 테이블 삭제 후 다시 생성
- create-drop: 종료 시점에서 테이블 삭제
- update: 변경 사항만 반영
- validate: 변경된 매핑 정보가 있다면 애플리케이션 종료
- none: 사용하지 않음
sprng.jpahibernate.sho_sql=false
- true일 때 하이버네이트에서 생성하는 쿼리와 system.out으로 찍히는 쿼리를 둘 다 보여줌
- false로 지정 후 하이버네이트 sql 로깅에 대한 설정을 따로 해주는 것 추천
spring.jpa.properties.hibernate.format_sql=true
- 생성된 쿼리문 가독성 좋게 표시
logging.level.org.hibernate.SQL=DEBUG
- logger로 생성된 쿼리 보여줌
3. VIEW (JSP & Thymeleaf)
[참고] 2021.03.27 - [web] - 템플릿 엔진
# JSP
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
# Thymeleaf
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.cache=false
spring.thymeleaf.view-names=thymeleaf/
* spring-boot-starter에 포함된 tomcat은 JSP엔진을 포함하지 않아 추가 설정 필요
prefix(접두어): 디렉터리 경로
suffix(접미어): 파일 확장자
spring.thymeleaf.cache=false
- 캐시에 저장하지 않음 (실무에서는 true)
spring.thymeleaf.view-names=thymeleaf/
- 뷰 구분을 위해 컨트롤러가 뷰 반환 시 'thymleaf/'로 시작하면 타임리프로 처리하도록 지정
4. 자동 빌드
# Build
spring.devtools.livereload.enabled=true
spring.mvc.hiddenmethod.filter.enabled=true
spring.devtools.livereload.enabled=true
- VIEW가 바뀌었을 때 자동으로 리로드 설정
spring.mvc.hiddenmethod.filter.enabled=true
- 컨트롤러, 모델단(classpath에 있는 모든 파일)이 바뀌었을 때 프로젝트 재시작 설정
build.gralde
빌드와 의존성 관리 (Maven을 사용하는 Spring에서는 Porm.xml에서 주로 의존성과 빌드 관리)
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
// security
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.security:spring-security-taglibs'
compileOnly 'org.projectlombok:lombok'
// devtool 자동빌드
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'mysql:mysql-connector-java'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
// Junit4
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
// jsp
compile('org.apache.tomcat.embed:tomcat-embed-jasper')
compile('javax.servlet:jstl:1.2')
}
[WEB] RESTful API 만들기 (0) | 2021.03.22 |
---|---|
[JPA] 게시판 CRUD (0) | 2021.03.21 |
[SPRING SECURITY] 스프링 부트 환경설정 (0) | 2021.03.14 |
[SPRING SECURITY] 스프링 시큐리티란 (0) | 2021.03.14 |
[SPRING BOOT] 디렉터리 구조 (0) | 2021.03.13 |
댓글 영역