[Spring JPA/Rest API/AWS] 1. Spring Boot 프로젝트 생성 및 설정
목차
2. Spring Boot 프로젝트와 RDS MySQL 연동 후 CRUD 메서드 구현
3. Android에서 Retrofit을 사용해서 REST API와 통신
참고사항
1. 졸업 프로젝트(임시 프로젝트명 : LIE)을 진행하였을 때
2. 사용한 소프트웨어는 STS 4.5.1, MySQL Workbench, PuTTY 등이있으며, Java 빌드 도구로는 Maven을 사용하고 있습니다.
3. AWS 이용할 수 있다는 가정하에 진행됩니다. 아래 링크에서 확인할 수 있습니다. https://frogand.tistory.com/26
4. REST API의 이론 개념은 아래 링크에서 확인할 수 있습니다. https://frogand.tistory.com/17
5. 간단한 데이터베이스를 만들어 놓은 상태입니다. project 스키마에 Member 테이블을 생성하였습니다.
CREATE TABLE `Member` (
`id` varchar(45) NOT NULL,
`name` varchar(45) NOT NULL,
`password` varchar(45) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1. Spring Boot 프로젝트 생성
1) 프로젝트 생성
[File - New - Spring Starter Project]
Type : Maven / Packaging : Jar로 설정하고
Name, Group, Package 명을 입력한다.
Spring Web/ MySQL Driver/ Spring Data JPA 를 선택하고 [Finish] 버튼 클릭
2) application.properties
src/main/resources/application.properties
# API 호출시, SQL 문을 콘솔에 출력한다.
spring.jpa.show-sql=true
# DDL 정의시 데이터베이스의 고유 기능을 사용합니다.
# ex) 테이블 생성, 삭제 등
spring.jpa.generate-ddl=true
# MySQL을 사용한다.
spring.jpa.database=mysql
# MySQL 설정
spring.datasource.hikari.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.hikari.jdbc-url=jdbc:mysql://database-1.(생략).ap-northeast-2.rds.amazonaws.com:3306/project?useUnicode=yes&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Seoul
spring.datasource.hikari.username=user1
spring.datasource.hikari.password=test1234
# MySQL 상세 지정
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.database=mysql
spring.jpa.show-sql=true
application.properties는 spring Boot 설정 파일이다.
MySQL 설정에서 hikari를 써준 이유는 hikari Connection Pool를 사용하기 위함이다. hikariCP를 사용하지 않을 경우 그냥 spring.datasource.diver-class-name 등으로 작성하면 된다.
* spring.datasource.hikari.jdbc-url=jdbc:mysql://database-1.(생략).ap-northeast-2.rds.amazonaws.com:3306/project?useUnicode=yes&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Seoul
1. database-1.(생략).ap-northeast-2.rds.amazonaws.com 대신에 본인 AWS의 엔드 포인트를 입력한다.
2. project 대신에 본인 스키마를 입력한다.
3. useUnicode=yes&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Seoul 은 MySQL 설정하는 부분이다. utf-8로 인코딩 설정, 서버 타임존을 아시아로 설정하였다.
* spring.datasource.hikari.username=user1
* spring.datasource.hikari.password=test123
데이터베이스에 연결할 계정을 지정한다. 본인의 데이터베이스를 설정한대로 작성한다.
* spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
엔터티 클래스의 studentNumber 속성에 자동으로 연결될 데이터베이스 필드 명이
studentNumber 형태이면 이 설정이 필요하다. (camel case)
student_number 형태이면 이 설정이 필요없다. (snake case)
3) pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.1.0</version>
</dependency>
</dependencies>
오류 방지를 위해 모든 라이브러리 의존성을 첨부합니다.
4) 테스트용 컨트롤러
TestController.java
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@RequestMapping("/")
public String index() {
return "Hello!";
}
}
[프로젝트 마우스 우클릭 - Run As - Spring Boot App]을 클릭해야 실행이 된다.
localhost:8080 에 접근하면 Hello! 텍스트가 보인다.
2. 엔터티 클래스 구현
Member.java
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Member {
@Id
private String id;
private String name;
private String password;
public Member() {
}
public Member(String id, String name, String password) {
this.id = id;
this.name = name;
this.password = password;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
3. 레포지토리 구현
MemberRepository.java
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import kr.ac.skhu.project.domain.Member;
@Repository
public interface MemberRepository extends JpaRepository<Member, String>
{
}
4. 컨트롤러 구현
APIController.java
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import Member;
import MemberRepository;
@RequestMapping("/member")
@RestController
public class APIController {
@Autowired
private MemberRepository memberRepository;
@RequestMapping(value = "/select", method = { RequestMethod.GET, RequestMethod.POST })
public List<Member> selectAll() {
return memberRepository.findAll();
}
@RequestMapping(value = "/insert", method = { RequestMethod.GET,
RequestMethod.POST }, produces = "application/json; charset=utf-8")
public Member insert(@RequestBody Map<String, String> map) {
return memberRepository.save(new Member(map.get("id"), map.get("name"), map.get("password")));
}
}
웹브라우저에서 http://localhost:8080/member/select
URL을 GET 방식으로 요청하자.
서버가 전송하는 JSON 포멧 데이터를 웹브라우저에서 볼 수 있다.
'web > Spring' 카테고리의 다른 글
[Spring Web MVC] 컨트롤러 클래스, 뷰 구현 (2) | 2021.11.24 |
---|---|
[Spring] 의존성 주입 애노테이션 @Autowired @Resource @Inject (0) | 2021.11.22 |
[Spring JPA] QueryDsl와 Gradle 그리고 AnnotationProcessor (4) | 2021.02.19 |
[Spring JPA] @RestController / @ResponseBody / @RequestBody (0) | 2020.05.04 |
[Spring JPA] Repository 기본 메소드 (0) | 2020.05.02 |
댓글 개