[LIKELION] AWS ec2, Docker 빌드 방법

고관운·2022년 10월 11일

회고

😄 느낀점

  • 오늘은 Docker로 MySQL 띄우는 법을 배웠다. 익숙해질 때까지 AWS에서 EC2 불러오는 법을 반복해야겠다.
  • MySQL을 사용해본 적은 있지만 복습이 필요하다.

😁 목표

  • CodeUp 100제 (1041~1050 풀기)
  • EC2 내리고 처음부터 다시
  • 몫, 나머지 알고리즘 문제 3개 복습
  • DB에 book, publisher 생성
  • SNS 테이블 정의서 작성(twit, user) - 테이블 2개(더 생성해도 됨)
  • 작성한 table을 db에 create까지

[멋쟁이사자처럼] 4주차 - DB, Java와 연동(5, 9~12, 28~47)

알고리즘 기초(자릿수 구하기, 자릿수 더하기)

프로그래머스

👀 코드 확인하러가기 👀

코드업

👀 코드 확인하러가기 👀

AWS EC2에 Docker로 MySQL 띄우기

AWS EC2 인스턴스 생성

사전작업
1. 리전 서울로 선택
2. 결제 대시보드 상시 확인

인스턴스 생성 과정
1. 인스턴스 시작
2. 설정

  • 태그 : t3.small.docker (임의 설정)
  • 이미지 : Ubuntu, 22.04
  • 인스턴스 유형 : t3.small
  • 키페어 : 새 키 페어 설정 (RSA, .pem)
  • 네트워크설정 : 체크 3개 (이미 만든 것이 있다면 기존 보안 그룹 선택)
  • 스토리지 구성 : 디폴트 (8기가 gp2)
  • 🔴 고급 세부 정보 : 스팟 인스턴스 요청 (연습할때만, 실제 운영한다면 요청하면 안됨)
  1. 생성 완료!
    (🔴 인스턴스의 퍼블릭 IPv4 DNS가 중요!)

Docker 설치 및 MySQL 띄우기

git bash에서 실행시 사전 작업
ssh ubuntu@DNS서버 -i ~/Downloads/pem키 (aws치고 탭누르기 - pem키 경로 입력해주는 것임)

Xshell에서 실행시 사전 작업
1. 새로 만들기 (호스트 : DNS 서버 입력)
2. SSH 사용자 이름 : ubuntu
3. Public Key : 찾아보기 ➡ 파일 ➡ pem키 넣기

이후 과정
1. git bash, Xshell에서 사전 작업하기
2. 🔴 sudo su - (권한 변경)
3. oh my bash 설치 (command 테마)
bash -c "$(curl -fsSL https://raw.githubusercontent.com/ohmybash/oh-my-bash/master/tools/install.sh)"
4. docker 다운 (참고 주소 : https://github.com/Kyeongrok/docker_minikube_kubectl_install)

cd ~ (디렉토리 홈으로 변경)
mkdir git
cd git
git clone https://github.com/Kyeongrok/docker_minikube_kubectl_install (깃허브에 있는 파일 클론)
cd docker_minikube_kubect1_install (docker 설치파일이 있는 곳으로 디렉토리 변경)
sh docker_install.sh (docker 설치)
  1. nginx 설치(데몬으로 띄우기 - 다른 명령을 내릴 수 있게 하기 위해)
    docker run -p 80:80 -d nginx
  2. docker ps (떠있는 container 목록 보기 - nginx 확인)
  3. MySQL 띄우기
    docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -d mysql
  4. docker ps (목록에 mysql 있는지 확인)

MySQL Workbench에 연결 과정

  1. MySQL Workbench 설치
  2. MySQL Workbench 실행 후 +버튼 클릭
  3. Connection Name : t3.small.docker (임의 작성)
    Hostname : DNS 주소 입력
    Password : password (mysql에서 띄울 때 작성한 비밀번호)

비밀번호 변경 방법
1. git bash나 Xshell로 이동
2. docker ps (container 목록 확인)
3. docker stop containerID(mysql의)
4. 이후 변경한 비밀번호로 다시 띄우기
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=12345678 -d mysql
5. docker ps로 확인
6. 워크벤치로 이동
7. 원하는 Connection 오른쪽 버튼 ➡ edit Connection -> password 변경

  1. 현재 단계에서는 연결이 안됨(포트가 막혀있음)
    Security Group(보안그룹)
포트 예시
- MySQL : 3306
- Nginx(Web) : 80 (네이버 같은 경우에도 자동으로 :80이 붙음)
- Spring Boot : 8080

여는방법
1. aws의 해당 인스턴스의 보안 클릭
(3306포트가 없음 ➡ mysql이 연결안되는 이유
2. 보안그룹 클릭
3. 인바운드 규칙 편집
4. 규칙 추가
유형 : MYSQL/Aurora
소스 : 0.0.0.0/0
5. 규칙 저장

  1. 다시 MySQL 워크벤치로 돌아가 연결하면 성공!

DB

DB를 사용하는 이유

도서명출판사출판사 주소
Do It! 자바 프로그래밍 입문이지스퍼블리싱서울시 강남구
모두의 깃 & 깃허브길벗서울시 서초구
토비의 스프링3에이콘서울시 은평구
파이썬으로 익히는 말랑말랑 알고리즘비제이퍼블릭경기도 수원시
코딩 개념 잡는 자바 코딩 문제집길벗서울시 서초구

해당 데이터에서 길벗의 주소가 바뀐다면 해당되는 출판사 주소를 모두 바꿔야 하는가?
(만약 대용량 데이터라면 데이터를 바꾸는 것이 비효율적일 것임)

테이블을 나누고 Key로 연결
Publisher Table

ID출판사출판사 주소
0이지스퍼블리싱서울시 강남구
1길벗서울시 서초구
2에이콘서울시 은평구
3비제이퍼블릭경기도 수원시

Book Table

도서명출판사ID
Do It! 자바 프로그래밍 입문0
모두의 깃 & 깃허브1
토비의 스프링32
파이썬으로 익히는 말랑말랑 알고리즘3
코딩 개념 잡는 자바 코딩 문제집1

출판사 테이블의 ID를 도서 테이블의 도서에 해당하는 출판사ID에 넣어주기

DB 용어

  • Primary Key : 한개의 record 또는 row를 테이블 안에서 고유하게 식별할 수 있는 인식표
  • Foreign Key : 외부에서 온 키 (다른 테이블의 PK)

실습.MySQL Workbench에서 DB만들기

DB 및 테이블 만들기
1. MySQL 워크벤치의 왼쪽 메뉴의 Schemas 클릭
2. Schemas 공백에 오른쪽 버튼 ➡ Create Schemas ➡ 제목 쓰고 Apply
3. 생성 후 쿼리에 use `DB이름`; (DB를 사용하겠다고 특정하기)
4. Create table ➡ 이름 입력 후 columnName 입력

  • PK : 프라이머리 키
  • NN : Not Null
  • AI(Auto Increment) : 자동 증가 - 내가 id를 부여하지 않아도 증가하며 부여
  • ZF(Zero Fill)
  1. 이후 생성

테이블 수정
특정 Table 오른쪽 버튼 ➡ alter table

Foreign Key 설정
🔴 설계를 잘하면 외래키를 설정 (아니면 엉킬 수 있음)
1. 특정 Table 오른쪽 버튼 ➡ alter table ➡ foreign keys
2. 왼쪽에는 현재 테이블의 id입력 참조 테이블에서 publisher 테이블 선택(해당 테이블의 pk 열 선택)

🔴 이후 데이터 삽입 시 외래키 제약조건에 걸리면 삽입 불가 (ex. 없는 외래키 값을 넣으면 에러) ➡ 먼저 해당 외래키 값을 먼저 등록해줘야함

Primary Key 에러
이미 PK에 있는 값을 삽입한다면 에러

테이블 값 보기 및 넣기

  • 값 보기 : 테이블 오른쪽 클릭 ➡ select rows 클릭하면 값을 볼 수 있음
  • 값 넣기
  1. 테이블 오른쪽 클릭 ➡ send to SQL editor ➡ Insert Statement 값 입력 후 ➡ 번개 표시
  2. 값 보기를 실행 한 후 테이블에 직접 작성

실습. SNS 테이블 설계 및 생성

SNS 테이블 설계
👀 SNS 테이블 설계 확인하기 👀

SNS DB 생성
twit Table


comment Table


circle Table


user Table

0개의 댓글