본문 바로가기
aws

만든 ERD 구축된 RDS에 반영 및 쿼리 실행하기

by 초이사 2023. 4. 25.

ERD를 그려보고 이를 RDS에 반영해서 쿼리를 날려보는 과정을 정리한 글이다.

 

만든 ERD 구축된 RDS 반영

1. erdcloud에 만든 DB를 내보내기한다

mysql로 선택해서 sql 다운로드(테이블 create문) 했다.

ERD 내보내기

2. 데이터그립으로 RDS 연결 (Workbench로도 가능)

2-1. AWS -> RDS -> 데이터베이스 -> 해당 데이터베이스 -> 엔드포인트 확인

rds 엔드포인트

2-2. datagrip rds 접속을 위해 test connection

  • Name: 원하는 이름으로 작성
  • Host: RDS 엔트포인트
  • User: RDS 생성시 만든 유저
  • Password: RDS 생성시 만든 비밀번

하단의  test connection누르니 성공해야하는데 실패했다. 3306 포트로 접속하지 못해서 Connection timed out이 되었다.

test connection 실패

생각해보니 rds에 3306 포트를 열지 않았다. 열지 않았으니 로컬에서 접속이 안되는 게 맞다!

 

rds -> 데이터베이스 ->  해당 데이터베이스 -> 보안그룹 -> 인바운드 규칙 편집

보안그룹 선택

인바운드 규칙에 아래와 같이 3306포트를 작성한다.

인바운드 규칙 추가

다시 Test Connection

Test Connection 성공

 

접속 후

스키마를 rds에서 생성한 것으로 선택하고 변경한 인코딩이 적용되었는지 확인

show variables like 'c%';

두 가지는 utf8이 적용이 안되었다. 이 부분은 RDS 파라미터 그룹으로는 변경이 안되는 부분이라 직접 변경해주어야 한다.

일부 반영 안된 모습

 

DB 설정을 아래 ALTER문으로 변경하고 확실한 변경을 위해 데이터베이스 재부팅도 해준다.

다시 조회하면 잘 적용되어있다.

ALTER DATABASE springboot_webservice
CHARACTER SET = 'utf8mb4'
COLLATE = 'utf8mb4_general_ci';

* utf8mb4 자체는 표준 인코딩이 아니다. 하지만 mysql/mariadb의 utf8방식이 이모지를 표현하지 못해 보완하기 위해 사용한다. postgreSQL이나 MS-SQL을 RDS로 선택하면 utf8 인코딩을 선택해도 이모지를 표현할 수 있다.

 

이미 테이블을 생성한 경우라면 테이블과 컬럼 모두 인코딩을 변경해주어야 한다.

인코딩 적용 완료

 

3. RDS에 만든 ERD 반영

스키마 rds에서 생성한 것으로 선택하고 db를 조회하니 아래와 같이 anneprojectDB가 제대로 나온다.

앞서 만든 erd 생성문을 가져와서 실행한다.

위와 같이 테이블이 생성된다.

 

2023.04.26 추가

생성시간은 insert시에만, 수정시간은 update시에만 수정되도록 설정을 안해놔서 아래 쿼리문을 실행해주었다.

테이블 2개만 수정하면 돼서 테이블을 다시 만들지는 않고 alter문으로 수정해주었다.

alter table user modify created_date timestamp default current_timestamp;
alter table user modify modified_date timestamp on update current_timestamp;

alter table product modify created_date timestamp default current_timestamp;
alter table product modify modified_date timestamp on update current_timestamp;

 

 

 

접속한 RDS에 쿼리 작성

user 생성하는 쿼리 실행 후 user 테이블 조회를 하면 생성한 user가 나온다.

insert into user(uid,nickname,phone) values(1,'anne','010-1111-2222');
insert into user(uid,nickname,phone) values(2,'앤','010-3333-4444');

user 테이블 조회

닉네임을 한글로 해도 인코딩 설정을 해놓았기 때문에 잘 삽입된다.

 

실제로 user가 가입할때 uid를 입력하지는 않는다.

이 경우 자동으로 uid를 등록해서 회원을 구분해주기 위해 아래 alter문을 실행한다.

ALTER TABLE user MODIFY uid bigint NOT NULL AUTO_INCREMENT;

위 쿼리문을 실행하고 나서 회원 등록시 아래처럼 uid를 제외하고 실행할 수 있다.

insert into user(nickname,phone) values('anne','010-1111-2222');

 

더미데이터 반영하는 법

더미데이터 생성 쿼리 참고 (https://chobopark.tistory.com/177)

review 테이블에 더미데이터를 생성해보았다. 더미 데이터는 처음써봤는데, 테스트용 데이터 추가시 아주 유용할 것 같다.

 

아래 쿼리는 리뷰 데이터를 생성할 때, i의 시작값은 1이고 하나씩 증가하면서 5가 될때까지 insert문을 실행한다는 의미다.

DELIMITER $$
DROP PROCEDURE IF EXISTS loopInsert$$

CREATE PROCEDURE loopInsert()
BEGIN
    DECLARE i INT DEFAULT 1;

    WHILE i <= 5 DO
        INSERT INTO review(rid, content, pid , uid)
          VALUES(i, concat('내용',i), i, i);
        SET i = i + 1;
    END WHILE;
END$$
DELIMITER $$

CALL loopInsert;

실행 후 조회하면 잘 생성된 것을 볼 수 있다.

이 테이블도 위에서 user 테이블에서 한 alter문을 실행했다면  rid가 자동 생성되기 때문에 rid 삽입을 제외해도 된다. 

더미데이터 실행 결과 조회

 

 

 

 

참고한 글

 

댓글