welcome to haddoddo place🤩

IT & Development & Daily Log

#Hi

개발/JAVA

[Spring Boot / STS] 스프링부트 + JPA + H2DB + lombok 연동 및 사용테스트

haddoddo 2021. 1. 5. 00:10
반응형

 

안녕하세요 Haddoddo입니다.

지금까지 이니설라이저를 사용하여 스프링부트 설정과 swagger을 연결하여 API를 관리하는 것까지 작업을 해보았는데요.

오늘은 JPA와 H2DB, lombok를 사용하여 swagger를 이용해 동작 테스트하는 예제를 작성해보도록 하겠습니다.

 

※이전 글을 안 보셨다면 아래 링크를 클릭해주세요.
▶︎[Spring Boot / STS] 스프링 이니셜라이저로 스프링부트 시작하기
▶︎[Spring Boot / STS] 스프링부트에 swagger 연동 및 사용법

 

프로젝트 환경..

Tool : STS
build : Maven

Language : Java
Spring Boot Version : 2.4.1
Packageing : Jar
JAVA Version : 8

프로젝트에 사용하는 기술의 간단한 설명은 아래와 같습니다.

 

∙ JPA란?

자바 응용프로그램에서 관계형 데이터베이스의 관리를 표현하는 자바 API로서 SQL을 생성하지 않고도 JPA에서 지원하는 메서드를 이용해 쿼리를 생성하고 사용할 수 있으며 쿼리를 재활용과 데이터 가공을 쉽고 원활하게 할 수 있다는 장점이 있습니다.


∙ H2DB란?

H2DB는 RDBMS(관계형 데이터베이스)입니다. 하지만 orcal, mysql.. 과 다르게 인메모리 데이터베이스를 지원하며 인메모리 데이터베이스란 메모리에 설치되어 운영되는 데이터베이스를 뜻합니다.

별도의 설치 과정 없이 간단한 설정을 통해 브라우저 기반의 콘솔을 이용할 수 있습니다.

빠르고 저용량이며 JDBC API도 지원하고 있습니다.

기본 데이터를 유지해야 하는 경우 또한 디스크에 기본 데이터를 DB에 넣을 수도 있습니다.

가볍고 빠르지만 애플리케이션을 종료했을 때 데이터가 손실되기 때문에 운영환경에서 사용하기엔 적절하지 않으며 테스트 환경에서 사용하는 것이 이상적입니다


∙ Lombok란?

자바 모델 클래스 작성 시에 Lombok을 사용하면 Getter/Setter, toString 등을 컴파일 시 자동으로 생성을 해주면서 코드를 간결하게 만들어줍니다.


설명은 여기까지 하고 프로젝트에 JPA와 H2DB, lombok를 사용한 예제를 작성해보도록 하겠습니다.

의존성을 추가하지 않았다면 pom.xml에 아래 내용을 추가해주세요.

<dependency>
	<groupId>com.h2database</groupId>
	<artifactId>h2</artifactId>
	<scope>runtime</scope>
</dependency>

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<optional>true</optional>
</dependency>

 

application.properties에 H2와 JPA에 관련된 설정을 추가해주도록 합니다.

# H2
spring.h2.console.enabled=true
spring.h2.console.path=/h2
spring.datasource.hikari.jdbc-url=jdbc:h2:mem://localhost/~/testdb
spring.datasource.username=sa
spring.datasource.password=

#jpa
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.use_sql_comments=true
spring.jpa.properties.hibernate.format_sql=true

 

H2DB에 기본 데이터가 필요하기 때문에 resources폴더 하위에 sql파일 두 개를 생성해주도록 합니다.

#schema.sql
drop table member if exists
drop sequence if exists hibernate_sequence
create sequence hibernate_sequence start with 1 increment by 1
create table member (id varchar(255) not null, email varchar(255), age int, primary key (id))

#data.sql
INSERT INTO member (id, email, age) VALUES
  ('user01', 'user01@gmail.com', '24'),
  ('user02', 'user02@gmail.com', '30');

 

여기까지 완료되었다면 H2로컬 콘솔을 접속해 접속 확인과 기본 데이터가 저장되었는지 확인해주도록 합니다.

http://localhost:8080/h2로 접속 후 application.properties에서 설정한 정보를 입력 후 연결해주도록 합니다.

접속이 완료되었다면 아래와 같이 MEMBER 테이블과 데이터가 조회가 되면 성공! 다음 단계로 넘어가도록 합시다.

 

다음은 Member.java(domain)을 수정해주도록 합니다.

import javax.persistence.Entity;
import javax.persistence.Table;
import com.sun.istack.NotNull;
import io.swagger.annotations.ApiParam;
import java.io.Serializable;
import javax.persistence.*;
import lombok.Data;

@Data
@Entity
@Table(name = "member")
public class Member implements Serializable{
	private static final long serialVersionUID = 810457109758530244L;
	
	@Id // PK 필드
	@NotNull
	@ApiParam(value = "member ID", required = true)
	@Column(columnDefinition="varchar(255)", nullable = false, insertable=true, updatable=false)
	private String id;
	
	@Column(columnDefinition="INT", nullable = false, insertable=true, updatable=true)
	@ApiParam(value = "member age", required = true)
	private int age;
	
	@Column(columnDefinition="varchar(255)", nullable = false, insertable=true, updatable=true)
	@ApiParam(value = "member email", required = true)
	private String email;

}

@Data 어노테이션을 선언하면 get/set, toString을 한 번에 선언해줍니다.

@Entity 어노테이션으로 JPA에서 사용한 Entity Class임을 선언해줍니다.

@Table 어노테이션으로 JPA에서 DB를 매칭 할 테이블명을 지정해줍니다.

@ApiParam 어노테이션은 swagger에서 표기할 파라미터의 설명과 설정을 지정합니다.

다음으로 Controller에 사용자 등록 API를 수정해주도록 합니다.

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import io.swagger.annotations.ApiOperation;

@RestController
@RequestMapping("/api")
public class mainController {
	
	@Autowired
	MemberService memberService;
	
	ResponseEntity<?> entity = null;
	@ApiOperation(value="사용자 등록", notes="사용자 등록")
	@PostMapping(value="/register")
	public ResponseEntity<?> registerMember(@RequestBody Member member) {
		try {
			if(member != null) {
				memberService.save(member);
				entity = new ResponseEntity<String>("SUCCESS", HttpStatus.OK);
			}else {
				entity = new ResponseEntity<String>("NO DATA", HttpStatus.BAD_REQUEST);
			}
		}catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			entity = new ResponseEntity<String>(e.getMessage(), HttpStatus.BAD_REQUEST);
		}
		return entity;
	}
	
}

 

다음으로 Repository 인터페이스를 작성해주도록 합니다.

import org.springframework.data.jpa.repository.JpaRepository;

public interface MemberRepository extends JpaRepository<Member, Long> {
	
}

JpaRepository에 Entity Class클래스인 Member를 선언해주면서 JpaRepository를 상속하는 것만으로도 JPA에서 기본적으로 제공하는 메서드를 사용할 수 있습니다.

 

마지막으로 Service 파일을 생성해주도록 합니다.

import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@Transactional
@RequiredArgsConstructor
public class MemberService {
	
	@Autowired
	private MemberRepository memberRepository;
	
	public void save(Member member) {
		memberRepository.save(member);
	}
	
}

여기까지 완료되었다면 이제 소스를 실행시켜보도록 합니다.

먼저 브라우저에서 localhost:8080/swagger-ui.html 로 접속해줍니다.

"Try it out"을 누르면 아래처럼 data를 변경하여 전송할 수 있습니다.

사진과 같이 데이터를 수정하여 "Execute"를 클릭해주도록 합니다.

 

정상적으로 등록이 완료된 것 같습니다. 정말 정상적으로 데이터가 등록이 되었는지 H2 로컬 콘솔을 통해 확인해 보도록 합니다.

다시 localhost:8080/h2 로 이동후 연결 후 MEMBER 테이블을 조회해 보도록 합니다.

 

저장성공입니다!

이렇게 swagger에 API를 등록하여 API Spec문서를 자동화로 관리하며 JPA를 사용하여 H2DB에 데이터를 넣고 확인하는것까지 진행을 해보았습니다. 

 

◀︎이전글

 

😁관련된 포스팅도 함께 읽어보세요.😁

▶︎[Spring Boot / STS] 스프링부트에 swagger 연동 및 사용법
▶︎[Spring Boot / STS] 스프링 이니셜라이저로 스프링부트 시작하기
▶︎[Spring for MAC] STS에 GitHub 연동하는 방법
▶︎[MySQL] MySQL Workbench 사용법 - 스키마 생성, 테이블 생성, CRUD(select, insert, delete, update)
▶︎[MAC] MAC에서 MySQLWorkbench(MySQL워크벤치) 설치, 사용법
▶︎[Homebrew] Mac에서 Tomcat & MySQL 설치, 설정하기
▶︎[Spring for MAC] STS 설치 & Hello world 찍어보자!

 

구독하기👍 눌러주시고 자주 놀러와 주세요.

공감 ,댓글⌨은 저에게 큰 힘이 됩니다.

감사합니다.🤗

.

.

.

🙏잘못된 정보의 피드백은 댓글 남겨주세요.🙏

 

반응형