반응형
서버 배포 방법
- 로컬 PC를 24시간 구동
- 호스팅 서비스(Cafe 24, 코리아 호스팅 등)
- 클라우드 서비스 (AWS, ZURE, GCP 등)
- 비용 측면에선 로컬PC나 호스팅 서비스가 유리
- 특정 시간에 트래픽이 몰리고, 유동적으로 사양을 늘려야 하는 상황이면 클라우드 서비스가 유리
클라우드란?
- 클라우드를 통해 서버, 스토리지, DB, 네트워크, 소프트웨어, 모니터링 등 컴퓨팅 서비스를 제공하는 것
- AWS의 EC2는 서버 장비를 대여하는 것이지만, 실제로는 그 안의 로그, 모니터링, 네트워크 관리 등 자동 지원
- IaaS (Infrastructure as a Service) - 아이아스
- 기존 물리 장비를 미들웨어와 함께 묶어둔 추상화 서비스
- 가상머신, 스토리지, 네트워크, 운영체제 등의 IT 인프라를 대여해주는 서비스
- AWS의 EC2, S3 등
- PaaS (Platform as a Service) - 파스
- IaaS를 한번 더 추상화한 서비스 - 많은 기능 자동화
- AWS의 Beanstalk, Heroku 등
- SaaS (Software as as Service) - 사스
- 소프트웨어 서비스
- 구글 드라이브, 드랍박스, 와탭 등
- AWS는 첫 가입시 1년간 서비스 무료 - 서비스마다 제한은 있다. (프리티어)
AWS - EC2 인스턴스 생성
- EC2 : Elastic Compute Cloud - 탄력적으로 사용할 수 있는 클라우드
- 프리티어 기준 : t2.micro만 가능 (vCPU 1Core, 메모리 1GB), 월 750시간 제한 ( 1대 초과 사용 시 비용 발생)
- 회원가입 후 오른쪽 상단에 지역을 서울로 변경 - ec2 검색
- 인스턴스 시작 - AMI (Amazon Machine Image, 필요한 정보를 이미지로 만들어둔 것) 선택
- 인스턴스는 가상머신에 운영체제 등을 설치할 수 있게 구워 넣은 이미지로 생각
- t2.micro 선택
- 기본 크기는 8GiB 인데 프리티어는 30GiB까지 가능하다. 최대치인 30으로 변경
- 태그는 EC2의 이름을 붙여주는 것이다. 이름을 붙여주자.
- 보안 그룹은 방화벽을 의미한다. SSH의 경우 EC2 터미널 접속이며, pem 노출 시 가상화폐 채굴을 당할 수 있으므로 반드시 설정
- 마스터키인 pem키를 다운로드 받고 관리할 수 있는 디렉토리에 저장하자.
- 인스턴스 생성이 완료되었고, IP와 도메인이 할당된 상태이다.
EC2 - EIP 할당
- 인스턴스도 결국 하나의 서버이기 때문에 IP가 존재한다.
- 재시작시 새 IP가 할당되므로, 매번 변경되지 않고 고정 IP를 갖게 해주는 EIP(탄력적 IP)를 설정해주자. (네트워크 및 보안 - 탄력적 IP)
- 별도의 설정 없이 바로 할당을 선택 - 할당된 IP를 EC2 주소에 연결
- 탄력적 IP 주소 연결 선택 - 인스턴스 선택 후 연결 - 생성한 인스턴스에 탄력적 IP가 저장됬는지 확인
- *EIP는 생성하고 연결하지 않으면 비용이 발생한다. 바로 EC2에 연결하자 *
EC2 서버 접속
- window 기준 : putty.exe, puttygen.exe 사용
- putty는 pem키로 사용이 안되며, ppk 파일로 변환 후 사용해야 한다. 이 과정을 puttygen 사용
- Conversions - import key 선택 - pem 키 열기 - Save private Key - 예 - ppk 저장 위치 선택
- username은 ec2-user로 생성 Browse.. 를 통해 ppk 선택
- ppk를 불러온 후 다시 Session으로 넘어와서 Saved Sessions에 이름을 등록 후 저장 - 예
- ec2 접속 성공 화면
EC2 - 기본 설정
- 자바 설치
- sudo yum install -y java-1.8.0-openjdk-devel.x86_64
- 인스턴스 Java 버전 변경 - sudo /usr/sbin/alternatives --config java
- java -version 으로 Java 버전 확인
- 타임존 변경 - 기본 서버 시간은 미국 시간
- sudo rm /etc/localtime
- sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime
- date 명령어로 타임존 변경 확인
- 호스트네임 변경
- sudo -s 명령어로 root 권한을 반영구적으로 빌린다.
- hostname : 현재 hostname 출력
- cat /etc/hostname : /etc/hostname 파일 안의 내용 출력 (현재 가상머신의 hostname 입력되어있음)
- hostnamectl set-hostname {호스트네임명}
- hostname 으로 변경 확인 및 reboot
- 재부팅후 curl {호스트네임} 입력 후 다음과 같이 80포트 에러가 발생하면 정상 작동 (80포트로 실행된 서비스가 없음을 의미)
AWS - RDS 인스턴스 생성
- 데이터베이스 작업을 모두 지원하는 관리형 서비스 (Relational Database Service)
- 프리티어로 무료지만, 1년 뒤 비용적인 측면, 교체용이성 등을 고려했을 때 Maria DB가 합리적
- DB 생성 - MariaDB - 템플릿 : 프리 티어 선택
- 마스터 사용자 정보 등록 (실제 DB에 접근하는 정보니 사용하는 정보로 기입)
- 퍼블릭 액세스 - 예 선택 (추후 보안그룹에서 지정된 IP만 접근하도록 설정)
- 데이터베이스 옵션 설정 및 생성
RDS - 파라미터 설정
- 파라미터 그룹 생성 - 파라미터 수정
- 타임존 설정 - Asia/Seoul
- Character Set 설정 - utf8mb4(이모티콘 사용가능) / utf-8
- Max Connection - 150으로 설정 (사양을 높이게될 때 기본값인 60개 정도로 다시 돌려놓는다.)
RDS - DB 연결
- 데이터베이스 - 수정 - 추가 구성에서 DB 파라미터 그룹을 생성한 파라미터 그룹으로 변경
- 즉시 적용 선택 - 재부팅으로 적용 재확인
RDS - 로컬 접속
- EC2에 사용된 보안 그룹 ID 복사 (sg-07~)
- 로컬 PC IP와 복사한 EC2 보안그룹 ID 규칙 추가 (MYSQL/Aurora 사용)
- IntelliJ 에서 Database Navigator install - +버튼 My SQL 선택 - Host에 엔드포인트정보, user/password 에 저장했던 로그인 정보 기입
- 정상적으로 DB Browser에 RDS 스키마가 노출된다.
- 새로 생성될 콘솔창의 이름 지정
- 쿼리 실행 - RDS에서 생성한 DB명
- latin1로 된 필드들을 utf8로 변경
- ALTER DATABASE 데이터베이스명 CHARACTER SET = 'utf8mb4' COLLATE = 'utf8mb4_general_ci';
- show variables like 'c%';
- select @@time_zone, now(); 를 통해 RDS 파라미터 그룹에 적용한 한국시간 확인
create table test(
id bigint(20) NOT NULL AUTO_INCREMENT,
content varchar(255) DEFAULT NULL,
PRIMARY KEY(id)
) ENGINE=InnoDB;
insert into test(content) values ('테스트');
select * from test;
- 테스트 테이블 생성을 통해 한글 데이터 등록 정상 확인
EC2 에서 RDS 접근 확인
- putty를 통해 EC2 접속
- sudo yum install mysql
- mysql -u 계정 -p -h 엔드포인트 주소
- 정상 작동 확인
본 포스팅은 프리렉-이동욱님의 '스프링 부트와 AWS로 혼자 구현하는 웹 서비스' 책을 참고하였습니다.
반응형