개발/실습

Spring JPA를 활용한 간단한 게시판 만들기 - 기본설정

람무 2023. 5. 20. 02:42

Spring JPA를 활용하여 간단한 게시판 만들기를 해보겠습니다. 게시판은 백엔드 개발영역에서 가장 기초적이면서도 필요한 CRUD를 모두 구현연습을 해볼 수 있는 좋은 예제라고 봅니다.

Spring boot 파일생성

먼저 start.spring.io 사이트에 접속합니다.

사이트에 접속하면 볼 수 있는 화면입니다. 각 항목들에 대해 차근차근 알아보겠습니다. 우선 제가 활용한 설정 입니다.

1. Project : Gradle-Groovy
2. Language : Java
3. Spring Boot : 2.7.12 (업데이트가 잦은 편 입니다. 저는 개인적으로 가장 오래된 버전을 사용합니다)
4. Project Metadata : 프로그램 파일명 등을 설정하는 부분으로 각자 원하는 이름을 설정하면 됩니다.
5. Packaging : Jar
6. Java : 11버전

1. Project
프로젝트 타입을 설정합니다.Gradle 은 빌드를 자동으로 해주는 시스템이고 뒤의 Groovy, Kotlin 은 문법입니다.
Groovy는 동적 스크립트 언어, Kotlin은 정적 타입의 언어 입니다. 둘다 공통적으로 빌드를 하기 위한 도구인데 문법을 어떤식으로 활용하냐의 차이 입니다.

Maven 은 Gradle 나오기 전의 모델로 보통 Mybatis 환경의 개발에서 많이 사용합니다. Gradle도 나온지 약 10년 이상 된 시스템이지만 생각보다 많은 회사에서 Maven 타입을 여전히 많이 사용하고 있습니다.
Gradle처럼 편하게 빌드를 할 수 없고 .xml 이라는 파일을 만들어서 각종 설정을 직접 해줘야하는 특징이 있습니다.

Gradle의 예시
xml 예시

2. Language
무난하게 자바를 선택해주시면 됩니다. Groovy나 Kotlin이해도가 있는 분이면 해당 문법을 선택하셔도 무방하긴 합니다.

3. Spring Boot
spring boot 버전을 선택하는 영역으로 업데이트가 빈번한 편인 것 같습니다. 저는 항상 가장 오래된 버전을 사용합니다. 최신버전의 경우 어떤 기술들을 활용하느냐에 따라 호환성 문제가 발생할 수 있습니다.

4. Project Metadata
애플리케이션의 이름을 설정하는 부분 입니다. 기본값 그대로 사용해도 되고 이름을 변경해서 사용해도 됩니다.

5. Packaging
패키징을 어떻게 할지 선택하는 영역 입니다. JAR은 자바 애플리케이션, 라이브러리 등이 포함 된 패키지고 WAR은 웹 애플리케이션 자원과 관련된 HTML, CSS, JavaScript등이 포함됩니다. JAR 형식은 독립 실행형 애플리케이션, WAR은 웹 애플리케이션 배포 실행에 적합함으로 용도에 맞게 사용하시면 됩니다.
일반적으로 백앤드 환경에서 개발하는 경우라면 JAR을 많이 사용합니다.

6. JAVA
자바 언어 버전을 설정하는 단계 입니다. 아직까진 보편적으로 11을 많이 사용하는 것 같고 17을 사용하는 유저분들의 의견에 따르면 11과 큰 차이를 느끼기 어려운데 호환성 문제가 좀 있다고 합니다. 20버전은 사용하는 케이스를 못봐서 후기 정보를 알게된다면 공유하겠습니다.

우측의 Dependencies를 통해 필요한 자원들을 미리 추가해두고 파일을 다운받을 수 있습니다. 여기서 따로 추가해두지 않아도 IDE내에서 따로 추가가 가능하므로 필수 공통사항 Lombook, Spring Web, Spring Data Jpa 정도만 추가하고 그 외에는 개발 과정에서 필요에 따라 IDE에서 추가하여 사용하셔도 됩니다. 저랑 설정이 동일하다면 IDE 내 build.gradle 에서 직접 추가할 수 있습니다.

모든 설정이 끝났으면 GENERATE 버튼을 클릭하여 압축파일을 다운받습니다.

 

IDE 실행

사용하는 IDE를 실행합니다. 아마 대부분 인텔리제이 또는 이클립스를 사용하실탠데 저는 인텔리제이를 사용합니다.

인텔리제이 기준으로 파일을 실행시키면 일정시간동안 빌드를 진행한 후 파일을 사용할 수 있게 됩니다. 앞서 start.spring.io사이트에서 미리 Dependencies를 설정했다면 해당 설정이 build.gradle에 추가되어 있습니다. 추후 빌드를 추가할 때 해당영역에 추가해주시면 됩니다.

src → resources → application.properties를 클릭해서 보시면 처음엔 아무것도 적혀있지 않습니다. 여기에 몇가지 속성을 추가해줍니다.

# H2 데이터베이스 설정
spring.datasource.url=jdbc:h2:mem:test
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=

# H2 콘솔 설정
spring.h2.console.enabled=true
spring.h2.console.path=/h2

먼저 H2 데이터베이스 설정 입니다. 보통은 MySQL, MariaDB등의 데이터베이스를 사용합니다만 저는 데이터 연동을 하기 전에 테스트환경에서 먼저 사용해보고 연결을 하는편이라 테스트를 해볼 수 있는 H2 DB를 사용합니다. H2 데이터베이스 설정은 DB로 H2를 사용하는 부분에 대한 내용이고 콘솔설정에서 최하단 path 부분은 접속 경로 입니다.
추후 개발이 완료되면 DB영역을 MySQL로 변경할 예정입니다.

서버를 실행시킨 후 localhost:8080/h2 경로로 H2 DB에 접근할 수 있습니다.

#JPA 설정
spring.jpa.database=h2
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=none
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.use_sql_comments=true

JPA 설정 입니다. JPA에서 제공해주는 테이블과 컬럼 자동생성 기능은 사용하지 않습니다. 이유는 JPA를 사용하면 쿼리문도 거의 사용하지 않고 .sql 파일을 만들 필요가 없어서 편리한 부분이 있지만 현업에서는 쿼리문과 .sql 파일을 아직까지 많이 사용하고 있기 때문입니다. 

스타트업이나 일부 대기업이 아닌 경우 Gradle의 전 버전인 Maven 기반의 Mybatis를 사용하여 각종 설정들을 xml로 지정해주는 기업도 상당히 많습니다.

application.properties 파일명을 application.yml로 바꿔서 설정을 해주는 방법도 있습니다.

spring:
  h2:
    console:
      enabled: true
      path: /h2
  datasource:
    url: jdbc:h2:mem:test
  jpa:
    hibernate:
      ddl-auto: none
    show-sql: true
    properties:
      hibernate:
        format_sql: true

yml 파일은 간격이 아주 중요합니다! 들여쓰기 위치에 따라 결과가 달라집니다.

다음번엔 클래스 구현을 진행하도록 하겠습니다.