실전! 스프링 부트와 JPA 활용 1 - 프로젝트 환경설정까지 듣고 난 뒤 정리

Nerd_Lee·2022년 3월 24일
0

spring study

목록 보기
2/3

1. 프로젝트 생성

  • 스프링 부트는 스프링 프로젝트를 쉽게 만들 수 있게 한다.

  • maven과 gradle을 선택할 수 있는데, 요즘은 gradle로 많이 넘어가는 추세.

  • 언어는 자신이 사용 할 언어를 추가하면 된다. 듣고 있는 강의는 Java를 사용하기 때문에, Java 선택

  • 버전은 안정화 된 버전을 사용하는 것이 좋은데, Snapshot / M1,M2가 붙어있지 않은 버전이 안정화 된 버전이라고 생각하면 된다.

  • Project Metadata는 그룹과 아티팩트를 입력해줘야 하는데, 회사 프로젝트를 진행한다면 회사에서 정해주는 대로 입력을 하면 되지만, 포트폴리오나 개인 연습용 프로젝트라면, 그냥 입력하고 싶은대로 입력해도 상관없다.

  • Dependencies는, 의존성이란 뜻을 가지고 있고 어떠한 라이브러리를 의존해서 사용할 것인가라는 의미를 가지고 있다. 사용을 할 라이브러리를 추가해서 프로젝트를 만들면 된다.

  • 해당 강의에서는 Spring Web, Thymeleaf, Spring Data JPA, H2 Database, Lombok을 사용

    • Spring web : Restful API나 MVC 방식을 쉽게 사용할 수 있게 한다.
    • Thymeleaf : 템플릿 엔진으로써, SSR ( 서버 사이드 렌더링 ) 을 할 수 있게 한다.
    • Spring Data JPA : query를 쉽게 날려줄 수 있는 라이브러리
    • H2 database : 교육용이나 테스트용으로 쉽게 사용할 수 있는 데이터베이스 라이브러리
    • Lombok : 지루하게 반복되는 코드를 자동으로 제너레이션 해주는 라이브러리
  • GENERATE 버튼을 눌러서 다운로드를 받고 압축을 풀어준 다음 intellij로 프로젝트를 열어주면 gradle에 dependencies에 추가되어 있는 라이브러리를 설치하는 작업을 진행하게 된다.

  • Lombok을 사용하기 위해서는, intellij에서, annotation processors에서 Enable annotation processing을 클릭해야 한다. 그리고 해당 강의에서는 Lombok 플러그인을 설치했지만, intellij 2020.3 이후 버전은, lombok이 설치되어 있는 상태이기 때문에 설치하지 않아도 된다.


2. 라이브러리 살펴보기

  • 라이브러리 의존성을 살펴보는 방법은 2가지가 있다.

    • 터미널 사용
      • 터미널에서, 스프링 프로젝트 경로로 이동
      • /.gradlew dependencies 입력하면 의존성을 살펴볼 수 있다.
    • intellij 에서 보기
      • 인텔리 J에 오른쪽을 보면, gradle 메뉴가 있다.
      • 해당 메뉴에 dependencies 폴더를 보면, runtime / test / compile 등의 환경에 따라 실행이 되는 라이브러리들을 볼 수 있다.

3. View 환경 설정

  • thymeleaf 라는 템플릿 엔진을 이용해서, View를 만들어 준다. thymeleaf 홈페이지에 들어가면 thymeleaf에 대한 내용들을 자세히 볼 수 있다.

  • thymeleaf의 장﹒단점

    • 장점
      • 내추럴 템플릿을 사용한다. 다른 템플릿 엔진은, if else문을 사용하는 듯 하다. 하지만, thymeleaf는 html의 마크업을 깨지 않고 사용하기 때문에, 가독성이 좋다.
    • 단점
      • 현재 spring boot에서 프로젝트를 생성하는 경우는 해당이 되지 않지만, 3.0 이하 버전에서는, <br> 태그를 사용 할 경우, 오류가 생긴다. 보통 html 템플릿에서는 <br> 만 사용해도, 알아서 한 칸 띄워주는데, thymeleaf는 <br></br> 이렇게 사용해야 오류가 안생긴다고 한다. 그리고 메뉴얼을 잘 살펴봐야된다는 것도 단점이라고 강의에서는 말을 하셨다.
  • Spring을 잘 모르겠다면, 홈페이지에 들어가서 guides를 살펴보는 것을 권장한다.

  • 기본구조 코드

    • 기본 구조를 알아보는 코드이기에, 강의에는 피해가 가지 않을 것이라고 판단하여 코드를 작성함.
[HelloController.java]

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.addAttribute("data", "hello!!!");
        return "hello";
    }
}
  • Model이란 무엇인가?
    • Model은, spring.ui에서 제공하는 것인데 모델에 데이터를 실어서 뷰에 넘겨줄 수 있게 한다.
  • data라는 키값에, "hello!!!" 라는 값을 추가해서, model이 가지고 있다.
  • return은 뭐야??
    • hello라는 이름을 가진 html에 파일에 해당 값들을 넘기겠다는 뜻과 같다. 템플릿 엔진에서 작동하는 html 파일은 resources / templeates 폴더에 있어야 한다.
      resources / templeates / hello.html 파일에 data 라는 값이 있다면, "hello!!!" 로 대체하겠다 라는 것과 같다.
[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>
  • th:text는 뭐야?
    • 템플릿 엔진으로 서버 사이드 렌더링을 진행하면 값이 안녕하세요. 손님이 아니라, 안녕하세요. hello!!! 가 출력이 되게 된다. ${} 안에 있는 값이 model에서 key값이다.
      thymeleaf에서 key에 맞는 value를 받아와서 변환해준다.
  • 정적인 페이지 또한 만들 수 있다. resources / static 폴더에 html 파일을 만들면 정적인 페이지를 만들 수는 있지만, 정적 페이지는 javascript는 사용하지 못한다는 점이 있다.

  • node.js에서 nodemon 처럼은 아니지만, 저장을 하고 다시 run을 하지 않아도 페이지를 새로 수정할 수 있는 방법이 있다.

    • build.gradle 파일에서 dependencies 부분에, implementation을 추가하자.
      implementation 'org.springframework.boot:spring-boot-devtools'
    • 추가를 했다면, 서버를 다시 실행해주고, html 파일을 변경하고 브라우저를 새로고침 해보자. 바뀌지 않는다. 하지만 build -> recomplie "hello.html 을 클릭하면 바뀐다.
      저장만 해도 바뀌는 건 있는 지 없는 지 한 번 찾아봐야겠다.

4. H2 DATABASE

  • H2 데이터베이스는 개발이나 테스트 용도로 가볍고 편한 DB, 웹 화면을 제공한다.

  • 주의점은 h2 database 라이브러리와 같은 버전을 사용해야 한다는 점이다. 홈페이지 링크

  • 다운로드를 받았다면 Mac OS는 압축을 풀고 폴더를 보면 bin 폴더가 있다. bin 폴더의 경로를 터미널에 맞춰놓고, ls를 입력하면 h2.bat, h2.sh와 같은 파일이 있는데, $ cat h2.sh를 입력한다.

  • 그리고, ./h2.sh 입력을 한다. 하지만 난 오류가 났다. zsh: permission denied: ./h2.sh 라는 오류가 떴는데, chmode 755 h2.sh 를 입력하고, 다시 ./h2.sh 를 입력하면 브라우저에 H2 콘솔이 뜨게 된다.

  • 그리고 JDBC_URL에 jdbc:h2:~/jpashop으로 입력하고 연결을 누르면 db 파일이 생성이 된다. 그리고 연결을 끊고, 터미널 상에 home에 가서 ls -arith를 입력하면, jpashop.mv.db 파일이 있는 것을 볼 수 있다. 이 파일이 있다면, jdbc:h2:tcp://localhost/~/jpashop 이 경로로 접근이 가능하다.

  • 주의할 점은, ./h2.sh를 실행시킨 상태여야만 db 파일을 받을 수 있다는 점 명심하자!


5. JPA와 DB 설정, 동작확인

  • 이 부분은 내가 스프링에 대해서 지식이 없이 실습으로 하는 것이기 때문에 잘 모르겠다...ㅠㅠ

앞으로 강의듣고 난 이후의 블로그는 어려운 내용이나 에러 해결방법들만 적을 예정이다. 코드를 적으면 강의에 피해가 가기 때문이다.

profile
게임프로그래밍 2년 / 웹 개발 신입

0개의 댓글