스프링부트+JPA 블로그 프로젝트 02 환경 설정
210711 유투버 '데어프로그래밍'님 강의 참조
1) 의존성 설정
- Spring starter project
- Spring Boot DevTools -> 파일변경이되면 자동 재실행하여 프로젝트 갱신
- Lombok -> getter/setter/생성자 등 어노테이션으로 쉽게 구현
- Spring Data JPA -> DB를 JPA를 통해서 만져 ORM을 기반으로 구현
- MySQL Driver -> MySQL과 연동해서 사용 가능
- Spring Security -> 보안과 관련된 라이브러리르 제공
- Spring Web -> WEB MVC 패턴의 기본적인 요소를 가지고 있고 내장형 톰켓을 컨테이너로 기본 탑재
- pom.xml에 추가 라이브러리 세팅
<!-- 시큐리티 태그 라이브러리 --> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-taglibs</artifactId> </dependency> <!-- JSP 템플릿 엔진 --> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> </dependency> <!-- JSTL --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency>
- 시큐리티 태그 -> 시큐리티 관련 라이브러리 사용 가능
- JSP 탬플릿 엔진 -> src/main 이하에서 .jsp 파일을 인식하도록 함
- JSTL -> JSTL 사용 가능
2) 세팅이 끝나면 꼭 테스트 실행을 하자
*처음 설정시에 시큐리티를 선택하면 시큐리티가 자동적으로 서버를 킬 때 블락을 한다. pom.xml에 시큐리티 관련 태그들을 전부 주석 처리 후 테스트 진행하자!
//Controller -> 스프링이 com.cos.blog 패키지 이하로 스캔 -> 특정 어노테이션이 붙어있는 파일만 IOC해서 컨테이너로 관리
@RestController
public class BlogControllerTest {
//http://localhost:8080/test/hello
@GetMapping("/test/hello")
public String hello() {
return "<h1>Hello!</h1>";
}
}
테스트 완료!
※ UTF-8 세팅
- 나와있는 항목 모두 들어가서 UTF-8로 세팅
3) MySQL 세팅
-- 유저이름@아이피주소
create user 'cos'@'%' identified by 'cos1234';
-- ON DB이름.테이블명
-- TO 유저이름@아이피주소
GRANT ALL PRIVILEGES ON *.* TO 'cos'@'%';
CREATE DATABASE blog CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
use blog;
* DB 한글 테스트
* 스프링 DB연동 세팅
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/blog?serverTimezone=Asia/Seoul
username: cos
password: cos1234
* 중요포인트! properties vs yml
둘다 스프링의 외부 구성 및 속성을 application. 을 통해 세팅을 한다. properties은 스프링이 일반적으로 들고있는 형식이며 키와 접두사를 이용해서 표현한다.
yml을 쓰는 이유는 가독성, 리스트표현, 주석의 범위 등 properties보다 이점이 많기 때문이다.
DB세팅 완료!
환경에 대한 개념 잡기- Maven이란?
자바로 개발을 하게되면 필요한 라이브러리를 'lib'이라는 폴더에 세팅 및 경로를 잡고 그 뒤에 빌드패스를 통해서 프로그램상에 적용을 시켜야 라이브러리를 쓸 수 가 있다. 'Maven'또한 자바용 프로젝트 관리도구이나 강점은 필요한 라이브러리를 특정 문서(pom.xml)에 정의만 해 놓으면 앞서 말한 'lib'에 대한 세팅도 필요없을 뿐더러 정의만 한다면 자동적으로 다운로드 및 라이프 사이클까지 관리를 알아서 해주는 도구이다. 즉, 'Maven'을 통해 중앙저장소가 생기고 거기에서 의존성 관리 및 라이브러리를 공유하는 파일 서버가 생긴다고 생각하면 된다.
- yml이란?
개발시에 타 시스템들과의 연동을 하려면 문서들의 규칙 또는 포맷형태들이 같아야 연동이 된다. 기본적으로 이 시스템간 데이터를 주고 받을 때 그 데이터에 대한 포맷 약속은 xml, json, yml이 있다. 그중 가장 쉽게 발전한것이 yml. 더 자세한 사항은 아래링크를 참조하자.
https://www.inflearn.com/questions/16184
yaml파일 이란 무엇인가요 - 인프런 | 질문 & 답변
안녕하세요 강사님 너무 질문이 많아서 죄송합니다. yaml파일 이라는 단어를 요 근래 많이 듣고 있는데 정확인 무슨 파일인가요 검색해 보지도 않고 무조건 질문을 드리는것 같아서 죄송하지만
www.inflearn.com
4) yml 세팅
server:
port: 8000
servlet:
context-path: /blog
encoding:
charset: UTF-8
enabled: true
force: true
spring:
mvc:
view:
prefix: /WEB-INF/views/
suffix: .jsp
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/blog?serverTimezone=Asia/Seoul
username: cos
password: cos1234
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
jackson:
serialization:
fail-on-empty-beans: false
- 지금까지 세팅된것을 기반으로 간단한 스프링부트 프로세스를 알아보자.
* 중요포인트
- 'yml'의 context-path 및 prefix/suffix 의 중요성
- 메소드는 위에 설정된 경로에 따른 파일을 리턴 -> src/main/WEB-INF/views/.....
- prefix/suffix가 앞에 경로 및 파일 타입을 기본으로 체킹을 해주기때문에 return에는 항상 찾을 파일의 이름만
@GetMapping("/")
public String tempJsp() {
//풀경로 /WEB-INF/views/test
return "test";
}
- @RestController를 달아놓고 return에 백날천날 JSP명을 써놔도 VIEW의 콜은 일어나지 않는다 명심!!!
* 중요포인트 @RequestMapping vs return URL
- RequestMapping은 @RequestMapping("test/*")로 설정이 되어있으면 'test/'으로 시작하는 모든 url을 이 어노테이션이 붙은 컨트롤러가 처리한다는 뜻
- @Get/@Post/@Delete/@Put 등등은 RequestMapping의 축약형