2021.03.23 - [개발일지] - STS / Swagger2 / lombok / Gradle Project 환경 설정
이전에 올린 환경설정에서 JPA를 연동하여 데이터베이스 연동 서비스를 추가하는 샘플 프로젝트를 연습니다.
우선은 H2 DB를 먼저 설치 합니다. 아래 블로그를 참고 하여 H2 데이터베이스를 설정합니다.
H2 데이터베이스 다운로드
www.h2database.com/html/download.html
H2 데이터 베이스 테이블에 테스트할 샘플 스키마와 데이터를 설정함
// 스키마 생성
drop table member if exists;
drop sequence if exist 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));
// 데이터 등록
INSERT INTO member( id, email, age ) VALUES
('user01', 'user01@gmail.com', '21')
, ('user02', 'user02@gmail.com', '30');
STS 에서 신규 프로젝트를 생성합니다.
build.gradle 파일 수정 후 Refresh Gradle Project 하려 라이브러리 갱신
plugins {
id 'org.springframework.boot' version '2.4.4'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
dependencies {
// lombok 라이브러리
compileOnly 'org.projectlombok:lombok:1.18.18'
annotationProcessor 'org.projectlombok:lombok:1.18.18'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web-services'
implementation 'io.springfox:springfox-swagger2:2.6.0', 'io.springfox:springfox-swagger-ui:2.6.0'
runtimeOnly 'com.h2database:h2'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
test {
useJUnitPlatform()
}
application.properties 아래와 같이 작성합니다.
#H2
spring.h2.console.enabled=true
spring.h2.console.path=/h2
spring.datasource.hikari.jdbc-url=jdbc:h2:tcp://localhost/~/test
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
지금부터 코딩 시작...
SwaggerConfig.java 작성
package com.example.demo;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any()) // 현재 RequestMapping으로 할당된 모든 URL 리스트를 추출
.paths(PathSelectors.ant("/api/**")) // 그중 /api/** 인 URL들만 필터링
.build();
}
}
member 패키지를 추가 합니다.
Member.java 파일 생성
package com.example.demo.member;
import java.io.Serializable;
import javax.persistence.*;
import com.sun.istack.NotNull;
import io.swagger.annotations.ApiParam;
import lombok.Data;
@Data
@Entity
@Table(name = "member")
public class Member implements Serializable {
private static final long serialVersionUID = 1L;
@Id // primary key
@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;
}
memberController.java 파일 생성
package com.example.demo.member;
import java.util.List;
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/member")
public class memberController {
@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) {
e.printStackTrace();
entity = new ResponseEntity<String>("Error", HttpStatus.BAD_REQUEST);
}
return entity;
}
@ApiOperation(value="사용자 조회", notes="사용자 조회")
@RequestMapping("/search")
public List<Member> search() {
return memberService.findAll();
}
}
MemberRepository.java 파일 생성
package com.example.demo.member;
import org.springframework.data.jpa.repository.JpaRepository;
public interface MemberRepository extends JpaRepository<Member, Long>{
}
MemberService.java 파일 생성
package com.example.demo.member;
import java.util.LinkedList;
import java.util.List;
import javax.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import lombok.RequiredArgsConstructor;
@Service
@Transactional
@RequiredArgsConstructor
public class MemberService {
@Autowired
private MemberRepository memberRepository;
public void save(Member member) {
LinkedList<Member> list = new LinkedList<Member>();
list.add(member);
memberRepository.saveAll(list);
}
public List<Member> findAll() {
return memberRepository.findAll();
}
}
STS 실행하기 전에 H2 db 실행하여 먼저 확인 한다.
스프링 부트 실행하면 정상적으로 실행되는지 확인한다. 정상실행 확인
localhost:8080/swagger-ui.html 접속하여 확인합니다.
/api/member/search 하여 사용자 조회를 한번 해봅니다.
결과 데이터를 가져오는 것을 확인함
이제 실제 등록 테스트를 하고 h2 db에서 조회하여 데이터가 등록이 되었는지 확인 테스트
/api/member/register 서비스를 테스트 합니다.
데이터가 정상적으로 등록이 된것을 확인됩니다.
이렇게 JPA 조회 / 등록 테스트를 완료합니다.
'개발일지' 카테고리의 다른 글
[오류해결하기] javax.servlet.jsp.JspException cannot be resolved to a type (0) | 2021.03.24 |
---|---|
도커 설치 하고 도커에 오라클 11g 환경 설정하기 (0) | 2021.03.24 |
STS / Swagger2 / lombok / Gradle Project 환경 설정 (0) | 2021.03.23 |
리액트 일정관리 예제 테스트 (0) | 2021.03.16 |
mysql 접속 속도가 너무 느려서 해결책을 찾아봄... (0) | 2019.08.13 |