스프링/스프링부트+JPA - 블로그

스프링부트+JPA 블로그 프로젝트 02 환경 설정

H-V 2021. 8. 27. 17:07

210711 유투버 '데어프로그래밍'님 강의 참조

 

1) 의존성 설정

  • Spring starter project

  1. Spring Boot DevTools -> 파일변경이되면 자동 재실행하여 프로젝트 갱신
  2. Lombok -> getter/setter/생성자 등 어노테이션으로 쉽게 구현 
  3. Spring Data JPA -> DB를 JPA를 통해서 만져 ORM을 기반으로 구현
  4. MySQL Driver -> MySQL과 연동해서 사용 가능
  5. Spring Security -> 보안과 관련된 라이브러리르 제공
  6. 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>
  1. 시큐리티 태그 -> 시큐리티 관련 라이브러리 사용 가능
  2. JSP 탬플릿 엔진 -> src/main 이하에서 .jsp 파일을 인식하도록 함
  3. 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의 축약형