진짜 개발자
본문 바로가기

FrameWork/Spring JPA

Spring JPA - JPA를 이용해 Commerce App 만들기 - 1 (프로젝트 설정)

728x90
1. 프로젝트 설정

안녕하세요, SpringBoot와 JPA를 이용해 Commerce WebApp을 개발해 나아가는 과정을 정리해보도록 할것입니다. 서버부터, 클라이언트 및 배포 그리고 aws를 이용해 인프라를 구축하는것 까지 해나아갈 예정입니다.

 

 

프로젝트 설정

이번 포스팅에서는 프로젝트를 설정하는 시간을 가져보도록 할것입니다. 필자는 IntelliJ라는 Ide를 사용하고 있습니다.

 

 

1. 의존성 추가

Intellij에서 프로젝트 생성시 위와 같이 의존성을 선택하여 추가할 수 있습니다. Intellij를 사용하지 않는 분들은 maven repository를 방문하여, 위의 의존성들을 추가해주세요. 이제 하나하나 필요한 의존성에 대해 설명드리겠습니다.

 

Spring Boot DevTools

Spring Boot를 이용해 개발할 때, 불편한 점들을 도와주는 라이브러리입니다. 저의 경우에는 Front를 개발할 때, 약간의 변경으로도 서버를 재실행해야하는 불편함이 있을때, 이 라이브러리를 통해, 간단히 새로고침을 통해서 Front단의 변화를 확인할 수 있도록 하기 위해 사용합니다.

 

Lombok (https://galid1.tistory.com/531)

lombok역시 조금더 편리한 개발을 위해 도와주는 라이브러리인데요, 어노테이션을 통해 반복되는 코드들을 간단히 작성할 수 있습니다. 위의 링크를 참조해주세요.

 

Thymeleaf

server side 템플릿 엔진으로, Spring에서 정식으로 지원하는 엔진입니다. 이때문에, Spring과 Thymeleaf를 같이 사용한다면, 엄청난 시너지를 발휘합니다.

 

Spring Data JPA

Spring Data의 서브 프로젝트로, JPA 프로그래밍을 위한 여러가지 편리한 기능들을 제공합니다.

 

H2 Database

말그대로 Database 라이브러리인데요, In memory DB를 제공합니다. 개발을 진행하며 테스트시 간단히 서버를 실행하는것만으로 Database를 같이 메모리에 올려주기 때문에 매우 편리합니다.

 

 

생성한 프로젝트의 build.gradle입니다.

 

 

 

2. Lombok 설정

https://galid1.tistory.com/531

Lombok 설정 방법은 위의 링크에 자세히 정리해놓았습니다.

 

 

 

 

3. Thymeleaf 설정 및 확인

thymeleaf에 세부사항을 설정하기 위해서는 resources/application.properties 파일을 설정해야 합니다. 원래는 application.properties이지만 저는 .yml형식이 더 편리하여 ymal을 주로 사용합니다.

 

thymelaf.을 입력하면 위 그림과 같이 yml에서 설정가능한 항목들이 보입니다. Spring Boot를 사용하지 않는다면, 위와 같은 설정을 일일이 하여 Bean으로 등록을 해주어야 하겠지만, 이미 초록색으로 칠해진 부분들을, 기본값으로하여, Bean으로 등록이 되어있습니다. 따라서 위와같이 설정된것을 그대로 진행하는 경우 별도의 설정이 필요없습니다.

 

Spring Boot를 사용하기 전에는, prefix, suffix는 설정을 통해서 View Resolver에게 template 파일의 경로를 알려주었는데요. 기본으로 설정되어있는 값을 건드리지 않더라도 Controller에서 template 파일의 이름만을 return해도, template 파일을 찾을 수 있습니다.

 

따라서 아무 설정도 필요하지 않습니다 !!(물론 최적화 및 여러가지 설정이 필요하다면 하셔야지만 지금은 넘어가도록 하겠습니다...)

 

 

thymeleaf 기본 설정의 suffix에 classpath:/templates가 되어있기 때문에, 위의 경로에 template 파일을 생성해야 합니다.

 

위와 같이 파일을 작성하고 저장합니다. thymeleaf를 알아보는 포스팅이 아니기 때문에 넘어가겠습니다!.

 

Controller를 작성하고 방금 생성한 template을 반환하는 handler를 생성합니다.

 

아, 서버를 실행하기전, 매번 Port를 8080으로 입력하기 귀찮으니 위와같이 server의 기본 port를 80으로 지정해줍니다.

 

작성한 template이 잘 렌더링 되는것을 확인할 수 있습니다.

 

 

 

4. Spring DevTools 확인

보통의 경우 front 단의 코드를 수정하면, 서버를 재시작해야하는 불편함이 있었습니다.

 

앞서 작성했던 test.html 파일을 위와같이 수정합니다.

 

새로고침을 해보아도 똑같습니다.

 

서버를 재시작하는 것이 아닌, Recompile을 해줍니다.

 

변경사항이 반영된 것을 볼 수 있습니다.

 

 

 

 

5. H2 Database 확인

h2 database역시 아무런 설정을 하지않아도 기본값으로 설정되어있는 bean이 등록되어있습니다. path는 /h2-console입니다.

 

Saved Seggins에 Generic H2(Embedded)로 설정하고, Driver Class, JDBC URL을 위와 같이 설정합니다. 참고로 Database 실행 모드 별로, JDBC URL이 달라지므로 http://h2database.com/html/cheatSheet.html 를 참고하여 설정하시면 됩니다.

기본적으로 username 은 sa이며 password는 아무런값도 입력하지 않으면 됩니다. connect를 클릭하여 연결을 시도합니다.

 

현재는 아무런 테이블을 생성하지 않았기 때문에 위와같이 나타타면 정상적으로 연결이 된것입니다.

 

 

 

 

6. Spring Data JPA 동작 확인

jpa.hibernate.ddl-auto = create

entity를 읽어 서버 실행시점에 자동으로 ddl query를 생성해주는 옵션입니다. 여러 옵션이 존재하는데, create의 경우 실행시점에 table을 drop한 뒤 ddl을 실행하는 옵션입니다.

 

jpa.show-sql = true

ddl, 또는 jpa를 통해 자동으로 생성되는 여러 query를 console에 출력하도록 하는 설정입니다.

 

jpa.properties.hibernate.format_sql = true

생성되는 sql을 사람이 읽기 편한 format으로 변환하여 출력해줍니다.

 

이번 포스팅에서는 jpa 설명도 일단 생략하겠습니다. 우선, 위와 같이 Entity 클래스를 생성한뒤, 서버를 실행합니다.

 

drop table user if exists

create 옵션에 의해, 우선 table이 삭제되는 것을 볼 수 있습니다.

 

create table user...

생성한 User Entity클래스를 기반으로, ddl query가 format되어 출력됩니다.

 

H2 Database에 접속하여 확인 하면, 생성한 Entity클래스를 기반으로 Table이 생성되어있음을 확인할 수 있습니다.