2022. 5. 17. 14:10ㆍJava/JPA
프로젝트 생성
IDE : IntelliJ
JAVA 8
JPA
자바 ORM 기술에 대한 표준 명세로, JAVA에서 제공하는 API
자바 애플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스
Framework : SpringBoot
Test library : JUnit4
Database : RDBMS(MySQL)
프로젝트 생성 에러
***************************
APPLICATION FAILED TO START
***************************
Description:
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
Reason: Failed to determine a suitable driver class
Action:
Consider the following:
If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).
→ DB 연결 해야 한다는 에러 내용입니다.
+ (필요할 수도 있으니) MySQL 버전 확인
application.properties 추가
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/[DB스키마명]?serverTimezone=Asia/Seoul&characterEncoding=UTF-8
spring.datasource.username=[username]
spring.datasource.password=[password]
Application구동 - 화면 잘 나옴
개발 환경 세팅
프로젝트 인식 불가, 빌드 오류 관련 Inteli J 설정
체크해야할 부분
현재 자바 버전 확인 : cmd → java -version → 1.8
File → Project Structure → Project Settings > Project, Modules → Platform Settings > SDKs
여기까지 해도 안된다면,
File → Settings → Gradle
후 수동 빌드 해보기
인텔리제이에서 깃 commit, push
commit
Ctrl + K → 올릴 파일 선택 → 커밋 메세지 작성 후 [Commit] 버튼 클릭
push
Ctrl + Shift + K → Push클릭
단위 테스트
단위테스트 이점
1. 개발 단계 초기에 문제를 발견하게 도와줍니다.
2. 나중에 리팩토링을 하거나 라이브러리 업그레이드를 할 때 기존 기능이 올바르게 작동하는지 확인 할 수 있습니다.
3. 만든 기능에 대한 불확실성을 감소시킬 수 있습니다.
4. 사람이 눈으로 검증하지 않게 자동검증이 가능합니다.
(하나하나 System.out.println( )을 찍어 확인하지 않아도 됩니다.)
테스트 코드 작성을 도와주는 프레임워크
Java의 경우는 JUnit이 있습니다. 많은 회사에서 5보다 4를 많이 사용하기에
게시판 실습에서도 JUnit4를 사용해서 테스트 코드를 작성해보겠습니다.
Application클래스
main > java > BulletinBoardApplication
package com.example.bulletinBoard;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class BulletinBoardApplication {
public static void main(String[] args) {
SpringApplication.run(BulletinBoardApplication.class, args);
}
}
이 클래스는 앞으로 만들 메인 클래스입니다.
@SpringBootApplication으로 인해 스프링 부트의 자동 설정, 스프링 Bean 읽기와 생성을 모두 자동으로 설정
@SpringBootApplication이 있는 위치부터 설정을 읽어가기 때문에 항상 프로젝트 최상단에 위치해야만 합니다.
main메서드에서 실행하는 SpringApplication.run으로 인해서 내장 WAS를 실행합니다.
* WAS(Web Application Server)
* 내장 WAS란,
별도로 외부에 WAS를 두지 않고 애플리케이션을 실행 할 때 내부에서 WAS를 실행하는 것을 의미합니다.
내장 WAS 장점
1. 항상 서버에 톰캣을 설치할 필요가 없고 스프링 부트로 만들어진 Jar파일로 실행하면 됩니다.
2.언제 어디서나 같은 환경에서 스프링 부트를 배포할 수 있습니다.
3. 만약 외장 WAS를 쓴다고 하면 모든 서버는 WAS의 종류와 버전, 설정을 일치시켜야 하는데요,
이는 서버의 개수가 많아지면 시간도 많이 걸리고 실수도 잦게 됩니다. 내장 WAS는 이 모든것을 해결해줍니다.
View 환경 설정
Thymeleaf공식 사이트 : https://www.thymeleaf.org/
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") // hello url로 오면 HelloController 호출
public String hello(Model model) { // model에 data를 실어서 controller를 통해 view로 넘김
model.addAttribute("data", "hello!!"); // 키 값
return "hello"; // return은 화면 이름, resources > templates > hello.html로 이동 - ${data}
}
}
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>
</body>
</html>
서버사이드 렌더링
정적 콘텐츠는 static에
랜더링 해서 보여줘야 할 것은 templates에 넣습니다.
static > index.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>
Hello, It's home!
<a href="/hello">hello</a>
</body>
</html>
템플릿 엔진을 쓰면 수정할 일이 잦은 데 페이지 하나 수정할 때마다 서버 리스타트를 계속하는 것 방지하기 위해
devtools 라이브러리 추가
build.gradle > dependencies
implementation 'org.springframework.boot:spring-boot-devtools'
html 수정 후 컴파일만 해주면 서버 재시작 없이 View 파일 변경이 가능합니다.
인텔리 J 컴파일 방법: 메뉴 build > Recompile 파일명
화면에서 새로고침
참고
'Java > JPA' 카테고리의 다른 글
[API 개발 고급] 조회용 샘플 데이터 입력 (0) | 2022.05.24 |
---|---|
[API 개발] 회원 등록, 수정, 조회 API (0) | 2022.05.24 |
❗주문 도메인 개발❗, 웹 계층 개발 (0) | 2022.05.23 |
애플리케이션 구현 준비 및 회원/상품 도메인 개발 (0) | 2022.05.23 |
도메인 분석 설계 - 간단 쇼핑몰 예제 (0) | 2022.05.23 |