AWS 배포

dawn·2021년 5월 25일
0

인프런

목록 보기
1/11

스프링 부트와 jpa를 이용해 간단한 프로젝트를 만들었다. 이제 배폴르 해볼것이다!

  • Service는 트랜잭션, 도메인 간 순서 보장의 역할만 한다.
  • Domain Model
    • 택시 앱이라고 하면 배차, 탑승, 요금 등이 모두 도메인이 될 수 있다.
    • @Entity가 사용된 영역 역시 도메인 모델이라고 이해하면 된다.
    • 무조건 데이터베이스의 테이블과 관계가 있어야만 하는 것은 아니다. VO처럼 값 객체들도 이 영역에 해당하기 때문이다.
    • 또한 비즈니스 처리를 담당해야 하는 곳이기도 하다.
      • 즉, 도메인에서 cancle() 같은거 다 구현하고 서비스에서는 차례로 호출하는 방법으로 구성하자!

Entity 클래스는 데이터베이스와 맞닿은 핵심 클래스이다. Entity 클래스를 기준으로 테이블이 생성되고 스키마가 변경된다.
수많은 서비스 믈래스나 비즈니스 로직들이 Entity 클래스를 기준으로 동작한다. Entity 클래스가 변경되면 여러 클래스에 영향을 끼치지만, Request와 Response용 Dto는 View를 위한 클래스라 정말 자주 변경이 필요하다. 즉, 꼭 Entity클래스와 Controller에서 쓸 Dto는 분리해서 사용해야 한다!


aws배포까지 연결해 볼 예정

AWS 배포하는 방법

1. EC2 인스턴스 생성하기

  • 스토리지는 30GB까지 무료이다.
  • 보안그룹 = 방화벽
  • SSH 포트번호 22는 내 IP로 설정해두어야 한다. 해당 포트번호는 AWS EC2에 터미널로 접속할 때를 이야기한다.
    pem 키가 없으면 접속이 안되니 전체 오픈 하는 경우가 종종 있지만 실수로 pem키가 노출되는 순간 서버에서 가상화폐가 채굴될 수 있다.
  • 8080포트는 전체 오픈을 해도 문제가 되지 않는다.
  • 인스턴스로 접근하기 위해서는 pem키(비밀키)가 필요하다. 인스턴스는 지정된 pem키와 매칭되는 공개키를 가지고 있어, 해당 pem키 외에는 접근을 혀용하지 않는다.
  • 생성이 다 되었다면 IP와 도메인이 할당된 것을 확인할 수 있다.

2. EIP(탄력적 IP) 할당하기

  • 인스턴스를 중지하고 다시 시작하며도 변경되지 않는 IP를 가지기 위해 고정 IP를 할당해줘야 한다.
  • 생성한 탄력적 ip와 조금 전 생성한 EC2 주소를 연결한다.
  • 페이지 위에 있는 [작업] -> [주소 연결] 메누를 선택한다.
  • 인스턴스 칸에 EC2주소를 넣으면 연결이 된다.
  • [인스턴스 목록] 으로 이동해 잘 연결되었는지 확인하기
  • 탄력적 IP만들고 바로 인스턴스 연결 안하면 돈 나간다...

3. EC2서버에 접속하기

  • wsl로 EC2서버에 접속할 것이다
  • AWS와 같은 외부 서버로 접속할 때는 SSH를 사용한다. SSH(Secure Shell)는 원격지 호스트 컴퓨터에 접속하기 위해 사용되는 인터넷 프로토콜이다.
  • ssh로 접속하기 위해서는 pem키(비밀키)가 필요하다.
  • https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/WSL.html 참고하기
  • ssh 실행 시 pem키 파일을 자동으로 읽어 접속을 진행할 수 있도록 pem키 파일을 옮겨놓는다.
    cp pem /mnt/c/awsProj/hello-spring.pem ~/.ssh/

  • 복사되었다면 pem키의 권한을 변경한다.
    chmod 600 ~/.ssh/hello-spring.pem

  • config 파일을 생성한다. (HOST는 앞으로 접속할 키 값, HostName는 탄력적 IP주소)

  • config파일 권한 변경하기
    chmod 700 ~/.ssh/config

  • ssh 접속
    ssh hello-spring

  • 완료되면 이제는 터미널에서 ssh 서비스명만 입력하면 접속할 수 있다.

4. 아마존 리눅스 1 서버 생성 시 꼭 해야 할 설정들

+/etc와 /usr/etc 디렉토리는 시스템의 부팅, 셧다운 시에 필요한 파일들과 시스템의 전반에 걸친 설정 파일들 및 초기 스크립트 파일들이 있다.
+시스템에 어떠한 문제가 발생한다거나, 시스템 전체 환경에 관한 설정을 바꾸기 위해서는 이들 디렉토리내에 포함되어 있는 파일들에 대하여 잘 알아야 한다.

  • 프로젝트의 자바 버전 설치하기
    sudo amazon-linux-extras install java-openjdk11
  • 타임존 변경하기 : 기본 서버의 시간은 미국 시간대이다. 한국 시간대가 되어야만 우리가 사용하는 시간이 모두 한국 시간으로 등록되고 사용된다.
  • 호스트네임 변경 : 현재 접속한 서버의 별명을 등록한다. IP만으로 어떤 서버가 어떤 역할을 하는지 알 수 없기 때문에 필수로 등록한다.
    • Hostname이 등록되었다면 호스트 주소를 찾을 때 가장 먼저 검색해 보는 /etc/hosts에 변경한 hostname을 등록한다.
    • 음... hostName을 등록하지 않았을 때 발생한 장애에 대한 자세한 내용으로 https://woowabros.github.io/experience/2017/01/20/billing-event.html를 참고하라는데 이해가 잘 안간당..ㅎ

데이터베이스 RDS에 연결

1. RDS 인스턴스 생성하기

+MariaDB를 선택할 것이다.

  • DB 인스턴스 식별자 -> hello-spring
  • 마스터 사용자 이름, 암호 설정 : 여기서 사용된 사용자 정보로 실제 데이터베이스 접근한다.

2. RDS 운영환경에 맞는 파라미터 설정하기

  • 타임존, Character Set, Max Connection
  • character_set_client는 uft8mb4로 설정한다. (uft8과 uft8mb4의 차이는 이모지 저장 가능여부이다.

3. RDS 인스턴스에 생성한 파라미터 그룹을 연결

4. 내 PC에서 RDS에 접속하기

  • RDS의 보안 그룹에 본인 PC의 IP 추가
  • EC2에서 사용된 보안 그룹의 ID 추가
    이렇게 하면 EC2와 RDS 간에 접근이 가능하다. EC2의 경우 이후에 2대 3대가 될 수 있는데, 매번 IP를 등록할 수 없읜 보편적으로 이렇게 보안 그룹 간에 연동을 진행한다.
  • RDS 정보 페이지에서 엔드 포인트 확인
  • use AWS RDS 웹 콘솔에서 지정한 데이터베이스명; 쿼리가 수행될 database를 선택하는 쿼리
  • 데이터베이스가 선택된 상태에서 현재의 character_set, collation 설정을 확인한다.
    show variables like 'c%';
  • character_set_database, collaction_connection 항목이 latin1으로 되어있으니 직접 변경한다.
    ALTER DATADASE 데이터베이스명
    CHARACTER SET = 'uft8mb4'
    COLLATE = 'uft8mb4_gerneral_ci';
  • 타임존이 한국 시간으로 잘 적용되어 있는지 확인하기
    select @@time_zone, now();
    +테이블 생성은 인코딩 설정 변경 전에 생성하지 말기! 만들어질 당시의 설정값을 그대로 유지하고 있어 저동 변경이 되지 않고 강제로 변경해야만 한다.

EC2에서 RDS 접근 확인

  • 실제 EC2의 MYSQL을 설치해서 쓰는게 아닌, 명령어 라인만 쓰기 위한 설치이다.
    sudo yum install mysql

  • 설치가 다 되었으면 로컬에서 접근하듯이 RDS에 접속한다.
    mysql -u 계정 -p -h Host주소

  • show databases;를 통해 자신이 생성한 데이터베이스가 잘 뜨는지 확인

다음장에서는 스프링 부트 프로젝트를 EC2에 배포하고 RDS에 접근하는 방법을 진행하고 개선해보자

profile
안녕하세요

0개의 댓글