일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- API
- AWS
- 멀티쓰레드
- 자바
- DB 설계
- 서버구축
- JPA
- @async
- cmi
- 스트리밍서버
- 미디어서버
- Spring
- Gradle
- db 스키마
- 네이버
- async
- 스프링
- SpringBoot
- 이커머스 api
- 라이브커머스
- REST API
- api설계
- mariaDB
- wooza
- autowired
- 이커머스
- RDB
- 인턴생활
- restful
- 실검
- Today
- Total
Polymor!
[AWS] RDB 와 스프링 연동하기 본문
AWS 제품 중 RDB 인스턴스를 스프링과 연동하는 법에 대해 살펴봅시다.
* Amazon EC2 : Amazon Elastic Computing Cloud - A사 클라우드 컴퓨팅 제품들 중 가장 핫한 제품이라고 볼 수 있다.
우선, AWS에서 프리티어로 RDB 인스턴스를 생성합니다. 프리티어는 12개월간 무료로 한정된 리소스를 사용하는 타입입니다. 제공 범위 초과하여 사용할 시 요금이 부과되는데, 예를들어 SSD 20GB가 최대인데, 21GB 사용시 요금 부과된다. 금수저가 아니라면 주의하자.
인스턴스 생성은 몇가지 옵션만 설정하면 곧 바로 10분내로 생성이된다. 이때 신경써야할 옵션은 다음과 같다.
1. 본인이 필요로하는 데이터베이스의 엔진 선택.
나는 MariaDB(MySQL과흡사) 를 사용할 예정이므로 다음과 같이 택했다.
2. 'Public Access Allow' 옵션 사용하기
인스턴스 생성 시 'Public Access Allow'를 해주어야만 범용적으로 사용이 가능하다.
3. VPC 에서 인바운드 규칙 추가하기
보안을 위해 허용 ip와 포트번호 범위를 추가한다. VPC 보안 그룹에서 인바운드 규칙을 설정하여 allow/deny 할 IP 등을 설정해줄 수 있다. 참고로 VPC는 Virtural Private Cloud의 약자로, EC2의 네트워킹 계층으로서 사용자가 정의하는 가상 네트워크라고 볼 수 있다.
인바운드 규칙을 설정하지않으면 스프링 부트 실행시 TCP CONNECTION TIMEOUT 에러가 발생한다.
*인스턴스 생성이 완료 되었으면, 이제 스프링 Web Application에서 기존에 사용하던 Local DB가 아닌, AWS RDB를 연결해보자. [Gradle 기준]
1. Dependencies 추가
// build.gradle
runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
2. applications.properties (혹은 application.yml)
server.port=스프링 서버의 포트
/* 필수 */
spring.datasource.url=jdbc:mariadb://인스턴스 엔드포인트/생성데이터베이스명
spring.datasource.username= 인스턴스 유저명
spring.datasource.password= 인스턴스 패스워드
driver-class-name= org.mariadb.jdbc.Driver
spring.jpa.database-platform=org.hibernate.dialect.MariaDBDialect
/* 선택 */
spring.jpa.show-sql=true
spring.jackson.property-naming-strategy=SNAKE_CASE
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=validate
createDatabaseIfNotExist=true
* 생성 데이터베이스 명은 아래에서와 같이 미리 만들어야 사용할 수 있다. 'DB 식별자'와는 다른 것이니 에러에 주의하자.
* DDL-AUTO = CREATE를 두고 스키마에 테이블을 생성해도 되지만, 나는 별도로 Command Line으로 셋팅하였다.
또한 Docker 가상 환경 MySQL 에서 작성한 것을 참고하길 바란다.
docker exec -i -t mariadb bash
root@e7e28e122e3d:/# mysql -h <인스턴스엔드포인트> -P <포트번호> -u <유저네임> -p
Enter Password : <유저패스워드>
mysql > CREATE SCHEMA `shop`
CREATE TABLE `shop`.`product`
(
`product_id` BIGINT NOT NULL AUTO_INCREMENT,
`seller_id` BIGINT NOT NULL,
`title` VARCHAR(50) NOT NULL,
`meta_title` VARCHAR(50),
`slug` VARCHAR(50) ,
`sku` VARCHAR(50),
`price` INT NOT NULL DEFAULT 0,
`discount_rate` INT DEFAULT 0,
`quantity` INT NOT NULL DEFAULT 0,
`thumbnail_path` VARCHAR(200) DEFAULT NULL,
`image_path` VARCHAR(200) DEFAULT NULL,
`content` TEXT DEFAULT NULL,
`created_at` DATETIME NOT NULL,
`updated_at` DATETIME DEFAULT NULL,
`published_at` DATETIME DEFAULT NULL,
`starts_at` DATETIME DEFAULT NULL,
`ends_at` DATETIME DEFAULT NULL,
PRIMARY KEY (`product_id`),
UNIQUE INDEX `uq_slug` (`slug` ASC),
CONSTRAINT `fk_product_account`
FOREIGN KEY (`seller_id`) REFERENCES `shop`.`account` (`account_id`)
);
위와 같은 방법으로 스키마와 테이블을 잘 생성하였으면 이제 스프링을 돌려보자.
그럼 다음과 같이 API를 통해 실행하였을 때 Query문이 잘 실행되는 것을 볼 수 있다.
이렇게 하면 스프링과 EC2 DB 연동을 마무리 되었다.
Spring Web 어플리케이션을 EC2 클라우드 서버를 통해 배포하는 것과 스트리밍 서버를 연동 시키는 과정을 해볼 예정이다.
'Web' 카테고리의 다른 글
[네이버 라이브 쇼핑]스트리밍 서버 분석 1편 (0) | 2021.02.19 |
---|---|
비동기에 대한 이해( feat. Spring @Async) (0) | 2021.02.12 |
[e-commerce] JPA 영속성 전이(feat.상품을 장바구니에 담기) (1) | 2021.02.07 |
[e-commerce] Rest API 설계 디자인 (0) | 2021.02.07 |
[e-commerce] ORM & DB 스키마 설계 (1) | 2021.02.06 |