GENERATE를 눌러 다운로드(→ 적당한 위치에 저장 후 압축 풀기)
IntelliJ IDEA에서 buld.gradle를 import
Settings - Plugins에서 Lombok 설치(IntelliJ 2020.03 이후 버전에서는 기본 Plugin으로 설치되기 때문에 별도의 설치 필요 없음)
잘 설치되었나 확인하기 위해 JpashopApplication 파일 있는 폴더 안에 class 하나 생성
package jpabook.jpashop;
import lombok.Getter;
import lombok.Setter;
@Getter @Setter
public class Hello {
private String date;
}
main()에 아래 코드 추가
Hello hello = new Hello();
hello.setData("hello");
String data = hello.getDate();
System.out.println("data = " + data);
근데 아까부터 자꾸.. 에러가 났는데 무시하다가 아래 두 링크 보고 해결!
프로젝트 JDK & Geadle JDK 설정
java: cannot find symbol(클래스 import가 안될 때)
출력이 잘 되는 것을 확인했기 때문에 main()에 추가했던 코드 삭제
01-2 라이브러리 살펴보기
01-3 View 환경설정
Thymeleaf
장점: 웹브라우저에서 열린다.
단점: 메뉴얼이 어렵다.
Spring 공식 튜토리얼
Spring Boot 메뉴얼
java / jpabook.jpashop / HelloController
package jpabook.jpashop;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HelloController {
@GetMapping("hello")
public String hello(Model model) { // Model은 model에 데이터를 실어 View에 넘길 수 있음
model.addAttribute("data", "hello!!!"); // data라는 이름의 key에 hello!!!라는 value를 넘김
return "hello"; // hello 뒤에 .html이 자동으로 붙음 → 결과 화면 rendering할 때 hello.html로 이동
}
}
스프링 부트 thymeleaf viewName 매핑
resources:templates/ +{ViewName}+ .html
자꾸.. HelloController.java에서 Cannot resolve symbol 'Controller' 라는 에러가 7개나 떠서 아래 링크의 3번째 방법을 따라했더니 해결되었다.^^
Cannot resolve symbol 'Controller' 에러 해결방법
resources / templates / hello.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Hello</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'안녕하세요. ' + ${data}" >안녕하세요. 손님</p>
<!--html상의 렌더링 - '안녕하세요. 손님' 출력, 서버상의 렌더링 - '안녕하세요. hello!!!' 출력-->
</body>
</html>
html로 open
static / index.html 생성
<!DOCTYPE HTML>
<html>
<head>
<title>Hello</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
Hello
<a href="/hello">hello</a>
</body>
</html>
코드 수정하고 서버를 다시 띄우기 번거롭다.
해결방법
build.gradle의 라이브러리에 devtools 라이브러리 추가
implementation 'org.springframework.boot:spring-boot-devtools'
IntelliJ 컴파일 방법: 메뉴 build - Recompile 후 브라우저 새로고침
devtools 적용이 안돼서 아래 글 보고 해결
링크텍스트
신기하다~ 서버 새로 안열어도 돼서 편함
01-4 H2 데이터베이스 설치
개발이나 테스트 용도로 가볍고 편리한 DB, 웹 화면 제공
데이터베이스 파일 생성 방법
jdbc:h2:~/jpashop (최소 한번)
~/jpashop.mv.db 파일 생성 확인
이후 부터는 jdbc:h2:tcp://localhost/~/jpashop 이렇게 접속
01-5 JPA와 DB 설정, 동작 확인
application.properties 삭제, application.yml 생성
main / resources / application.yml
spring:
datasource:
url: jdbc:h2:tcp://localhost/~/jpashop
username: sa
password:
driver-class-name: org.h2.Driver
jpa:
hibernate:
ddl-auto: create
# spring.jpa.hibernate.ddl-auto: create → 애플리케이션 실행 시점에 테이블을 drop 하고, 다시 생성
properties:
hibernate:
show_sql: true
# show_sql: System.out 에 하이버네이트 실행 SQL을 남긴다.
format_sql: true
logging:
level:
org.hibernate.SQL: debug
# org.hibernate.SQL: logger를 통해 하이버네이트 실행 SQL을 남긴다.
참고: 모든 로그 출력은 가급적 로거를 통해 남겨야 한다.
주의! application.yml 같은 yml 파일은 띄어쓰기(스페이스) 2칸으로 계층을 만듭니다. 따라서
띄어쓰기 2칸을 필수로 적어주어야 합니다.
예를 들어서 아래의 datasource 는 spring: 하위에 있고 앞에 띄어쓰기 2칸이 있으므로
spring.datasource 가 됩니다. 다음 코드에 주석으로 띄어쓰기를 적어두었습니다.
java / jpabook.jpashop / Member 생성
package jpabook.jpashop;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
@Getter @Setter
public class Member {
@Id @GeneratedValue
private Long id;
private String username;
}
java / jpabook.jpashop / MemberRepository 생성
package jpabook.jpashop;
import org.springframework.stereotype.Repository;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@Repository
public class MemberRepository {
@PersistenceContext
private EntityManager em;
public Long save(Member member) {
em.persist(member);
return member.getId();
}
public Member find(Long id) {
return em.find(Member.class, id);
}
}
Create Test: Shift+Ctrl+T
이렇게 하면 test / java / jpabook.jpashop에 MemberRepositoryTest 생성됨