이 책은 신입 개발자부터 실제 서비스 구축 경험이 없는 모든 개발자를 위한 클라우드 서비스 개발 실무 밀착형 입문서! 이 책은 깃허브에 이미 구현된 코드와 예시와 함께 자세히 설명되어 있는 개념들로 훨씬 이해하기 쉽고 재미있게 따라할 수 있도록 구성하였다. 이책의 특징은 다음과 같다.
- AWS EC2 서버 V1 배포-재배포 전과정 동영상 강좌 38강을 무료 제공
- AWS 클라우드 서비스를 이용한 CI/CD 과정을 이해하기 쉽게 그림으로 설명
- CI/CD 환경을 갖춘 클라우스 서비스 배포의 모든 과정을 직접 경험할 수 있도록 AWS EC2 서버 배포/재배포 전과정을 설명
Contents
01 AWS 이해
01 - 1 AWS 배포를 위한 프로젝트 환경설정
1. 1 JDK 설치
JDK(Java Development Kit)
1. 2 환경변수 설정
1.2.1 윈도우 shell 명령어
1.2.2 환경변수 설정
1. 3 Visual Studio Code 설치
1.3.1 Java Extension
1.3.2 Spring Extension
1.3.3 Lombok
1. 4 포스트맨 설치
1. 5 Git 설치
1. 6 프로젝트 저장 경로
01 - 2 이 책의 학습 목표(AWS)
01 - 3 전산실을 구축할 때 고려할 점
01 - 4 AWS 탄생 배경
4. 1 제프 베이조스
01- 5 AWS 회원 가입
01 - 6 EC2 서버 임대
01 - 7 EC2 서버에 접속하기(Windosw & Mac)
7. 1 Windows
7.1.1 mobaXtem 설치
7.1.2 mobaXtem 실행
7. 2 Mac
7.2.1 asw-key 파일이 저장되어 있는 경로로 이동
7.2.2 asw-key 파일에 실행 권한 부여
7.2.3 EC2 접속
7.2.4 한 줄로 EC2 접속하기
01 - 8 네트워크 기본기 - 패킷의 여행
8. 1 패킷
8.1.1 서킷 스위칭
8.1.2 패킷 스위칭
8. 2 IP 주소
8.2.1 IPv4
8.2.2 IPv6
8. 3 포트 번호
01 - 9 EC2 서버 방화벽
9. 1 방화벽
9. 2 Secure가 붙은 이유
01- 10 RSA 인증방식
10. 1 대칭키 암호화 방식
10. 2 공개키 암호화 방식(RSA)
10. 3 프로토콜
10.3.1 데이터 송신 방법
10.3.2 데이터 수신 방법
10. 4 RSA 개념이 필요한 이유
02 리눅스 명령어 학습
02 - 1 리눅스 명령어 step 1
1. 1 clear
1. 2 pwd
1. 3 cd
1. 4 ls
1. 5 절대 경로와 상대 경로
02 - 2 리눅스 명령어 step 2
2. 1 --help
2. 2 -a, --help
2. 3 mkdir
2. 4 touch
2. 5 rm
2. 6 Ctrl + C
02 - 3 리눅스 명령어 step 3
3. 1 cp(copy)
3. 2 mv(move)
3.2.1 파일 이동
3.2.2 파일명 변경
3. 3 In(link)
02 - 4 리눅스 명령어 step 4
4. 1 Windows에서 프로그램(카카오톡)을 설치할 때
4. 2 ubuntu repository
4.2.1 ubuntu repository 등록
4. 3 PPA 저장소
02 - 5 리눅스 명령어 step 5
5. 1 sudo apt update
5. 2 apt
5.2.1 파이프라인(|)
5.2.2 grep
5.2.3 포트 확인
5. 3 인바운드 규칙 설정
02 - 6 리눅스 명령어 step 6
6. 1 PPA(Personal Package Archive) : 개인 저장소
6. 2 프로그램 삭제
6. 3 PPA 찾기
6.3.1 우분투 코드 네임 확인
6. 4 PPA 추가
6. 5 apt 메뉴판 update
6. 6 tomcat8 설치
6. 7 저장소 삭제
02 - 7 리눅스 명령어 step 7
7. 1 프로세스(Process)
7. 2 스레드(Thread)
7. 3 context-switching
7. 4 sleep
02 - 8 리눅스 명령어 step 8
8. 1 프로세스와 서비스
8.1.1 service
8.1.2 syetemctl
8. 2 ps 프로세스 명령어
8.2.1 ps -ef
8.2.2 kill
8. 3 restart
8. 4 tomcat8 pid 찾는 script 작성해보기
02 - 9 리눅스 명령어 step 9
9. 1 vi
9.1.1 일반 모드
9.1.2 입력 모드
9.1.3 명령행 모드
02 - 10 리눅스 명령어 step 10
10. 1 root 접속
10. 2 root로 파일 생성
10. 3 권한
10.3.1 그룹
10.3.2 권한 변경 chmod
10.3.3 모두에게 전체 권한 부여
02 - 11 리눅스 명령어 step 11
11. 1 chown 소유자: 그룹 변경
02 - 12 리눅스 명령어 step 12
12. 1 파일 찾기
12. 2 tomcat 저장 위치 살펴보기
12. 3 index.html 파일 권한 변경
12. 4 index.html 파일 수정
12. 5 포트 변경
02 - 13 리눅스 명령어 step 13
13. 1 tail
13. 2 표준 입출력
13.2.1 표준 입력 스트림 stdin(0)
13.2.2 표준 입력 스트림 stdout(1)
13.2.3 표준 입력 스트림 stderr(2)
13. 3 표준 입출력 변경
02 - 14 EC2 서버 종료하는 법
03 AWS EC2 기본 배포하기
03 - 1 배포 V1 흐름 이해하기
기본이 되는 배포 V1
03 - 2 프로젝트 다운받고 실행해보기
2. 1 프로젝트 설명
2.1.1 프로젝트 다운로드
2.1.2 프로젝트 실행:로그 확인
2.1.3 프로젝트 실행 종료
2.1.4 테스트 파일 확인
2. 2 배포 방법
03 - 3 EC2 서버 생성 및 고정 IP 설정
3. 1 EC2 서버 생성
3. 2 고정 IP 설정
3. 3 탄력적 IP 생성
3. 4 탄력적 IP 주의사항
3. 5 탄력적 IP 연결
03- 4 프로젝트 배포하기 V1
4. 1 git 설치 확인
4. 2 프로젝트 git clone
4. 3 gradlew 실행 권한 부여
4. 4 JDK 설치
4. 5 실행 파일로 변경(gradlew)
4. 6 jar 파일 실행하기
03 - 5 프로젝트 배포하기 V1
5. 1 plain.jar 파일 생성되지 않는 코드 추가
5. 2 nohup
5. 3 로그 확인 nohup.out
5. 4 실시간 로그 모니터링 tail
03 - 6 로그 파일 위치 변경
6. 1 프로세스 종료
6. 2 로그 파일 변경 후 실행
03 - 7 표준 출력, 표준 에러
7. 1 표준 출력(1)과 에러 출력(2)
7.1.1 정상 로그와 에러 로그를 분리하는 이유
03 - 8 타임존 변경 및 종료 스크립트 작성
8. 1 timezone 세팅
8. 2 pgrep
8. 3 종료 스크립트 작성
8.3.1 스크립트 파일 생성
8.3.2 종료 스크립트 작성
8.3.3 실행 권한 부여
8.3.4 스크립트로 프로세스 종료
8. 4 서버 재시작
03 - 13 재배포하기
13. 1 기존 서버 중지
13. 2 aws-v1 폴더 삭제
13. 3 프로젝트 다운로드
13. 4 gradlew 실행 권한 부여하기
13. 5 빌드
13. 6 jar 실행시키기
13. 7 cron으로 자동 재시작
04 AWS EC2 배포 자동화 스크립트로 배포하기
04 - 1 AWS-V2 목표
1. 1 V1 로직
1. 2 V2 로직
04 - 2 EC2 서버 생성 및 고정 IP 설정
2. 1 EC2 인스턴스 생성
2. 2 고정 IP
2. 3 탄력적 IP 설정
04 - 3 환경 변수와 bashrc
3. 1 환경 변수
3. 2 export
3. 3 source
04 - 4 환경 변수를 특정 파일에 적용하기
4. 1 환경 변수 파일 생성
4. 2 환경 변수 등록
4. 3 원하는 파일에서만 환경 변수 사용
4. 4 환경 변수 적용 범위
04 - 5 재배포를 고려한 cron 종료
5. 1 deploy.sh 스크립트에 crontab 종료 설정
5. 2 cron delete
04 - 6 서버 종료 및 프로그램 설치
6. 1 PID 찾아서 프로세스 종료시키기
6. 2 자바 실행파일 이름 구조 파악
6.2.1 프로젝트 이름
6.2.2 프로젝트 버전
6.2.3 plain.jar 파일 생성하지 않는 설정
6. 3 환경 변수 설정
6. 4 환경 변수 적용
6. 5 실제 스크립트 작성
6. 6 스크립트 실행
04 - 7 프로젝트 다운로드 및 빌드
7. 1 sleep을 걸어주는 이유
7. 2 스크립트 실행
7. 3 jar 파일 실행
04 - 8 서버 실행하기
8. 1 스크립트 작성
8. 2 스크립트 실행
8. 3 로그 파일 저장 위치 변경
04 - 9 cron 등록
9. 1 check-and-restart.sh 생성
9. 2 스크립트 실행(배포 스크립트 완성)
9. 3 강제로 서버 종료시키기
9. 4 테스트 없이 jar 빌드 하는 방법
04 - 10 배포 파일 압축하기
10. 1 tar
10.1.1 tar 압축 연습
10. 2 실제 배포 파일 tar 압축
10. 3 파일 전송
04 - 11 배포 파일로 실제 배포하기
05 엘라스틱빈스톡으로 배포하기
05 - 1 엘라스틱빈스톡 샘플 코드 실행
1. 1 엘라스틱빈스톡
05 - 2 엘라스틱빈스톡 내부 구성
2. 1 엘라스틱빈스톡 생성
2. 2 로드밸런서
2. 3 NGinX 서버는 외부 IP 요청을 거부한다
05 - 3 엘라스틱빈스톡 프로젝트 대표
3. 1 jar 파일 만들기
3.1.1 프로젝트 다운로드
3.1.2 프로젝트 빌드
3. 2 프로젝트 업로드 및 배포
3.2.1 프로젝트 업로드
3.2.2 “심각” 상태가 뜨는 이유
05 - 4 엘라스틱빈스톡 오류 없이 배포하기
4. 1 jar 파일 만들기
4.1.1 프로세스 설정
05 - 5 엘라스틱빈스톡 SSH 접속
5. 1 실행 중인 프로세스 확인
5. 2 포트 확인
5. 3 NGinX
05 - 6 엘라스틱빈스톡 종료하기
06 엘라스틱빈스톡 & 데이터베이스
06 - 1 엘라스틱빈스톡 생성
1. 1 엘라스틱빈스톡 Create Application
1. 2 추가 옵션 구성
1.2.1 사전설정 : 단일 인스턴스(프리 티어 사용 가능)
1.2.2 소프트웨어 편집
1.2.3 로드밸런서
1.2.4 보안
1.2.5 데이터베이스
06 - 2 VPC 구성
2. 1 EC2
2.1.1 보안 그룹
2. 2 VPC(Virtual Private Cloud) 가상 사설 클라우드
2. 3 CIDR 표기법
2.3.1 IP 주소
2.3.2 네트워크 클래스
2.3.3 서브넷 마스크
2.3.4 CIDR
2.3.5 서브넷
06 - 3 RDS 생성 및 접속(Windosw, Mac)
3. 1 RDS 생성
3. 2 인바운드 규칙 편집
3. 3 정리
3. 4 RDS 접속
3.4.1 Windows 접속
3.4.2 Mac 접속
06 - 4 RDS 세팅하기
4. 1 데이터베이스 생성
06 - 5 배포 V4 프로젝트 살펴보기
5. 1 프로젝트 다운로드
5. 2 프로젝트 실행해보기
5. 3 프로젝트 내부 구조
5.3.1 yml 설정 파일
5. 4 환경 속성 변경
06 - 6 배포 및 테스트
6. 1 빌드
6. 2 엘라스틱빈스톡
6. 3 배포 완료
6. 4 테스트
07 엘라스틱빈스톡 & 데이터베이스 & CI/CD 배포하기
07 - 1 배포 V5 시작 전 준비사항
1. 1 엘라스틱빈스톡 환경 종료
07 - 2 AWS 요근 정책
2. 1 AWS-V5에서 사용할 서비스
2.1.1 엘라스틱빈스톡
2.1.2 로드밸런스
07 - 3 AWS-V5 전체 구성 이해하기
3. 1 이전 배포 방식
3. 2 V5 배포 구성(CI/CD)
07 - 5 AWS 사용자 / 정책 / 그룹 / 역할 이해하기
5. 1 IAM(Identity Access Manager)
5.1.1 사용자
5.1.2 그룹
5.1.3 정책
5.1.4 역할
07 - 6 Github 프로젝트 fork 하기
07 - 7 RDS 생성하기
7. 1 보안 그룹 설정
7.1.1 보안 그룹 생성
7.1.2 보안 설정
7. 2 RDS 생성
7.2.1 데이터베이스 생성
7.2.2 데이터베이스 접속
07 - 8 엘라스틱빈스톡 생성
8. 1 create application
8.1.1 추가 옵션 구성
07 - 9 롤링 : 배포 전략
9. 1 한 번에 모두
9. 2 추가 배치
9. 3 변경 불가능(블루/그린 배포)
07 - 10 배포 V5 현재 구성 살펴보기
10. 1 Application Load Balancer
10. 2 Auto Scaliling Group
10.2.1 EC2
10. 3 RDS
10. 4 ALB(Application Load BAlancer)
10. 5 NLB(Network Load Balancer)
07 - 11 시큐리티 보안 그룹 설정 이해
11. 1 EC2로 다이렉트 접근이 불가능한 이유
11. 2 RDS 보안 그룹 수정
07 - 12 Github Action(CI/CD 도구)
12. 1 프로젝트 다운로드
12. 2 .github/workflows/deploy.yml
12.2.1 name
12.2.2 jobs
12. 3 Push
12.3.1 Github Action
07 - 13 엘라드틱빈스톡 배포 첫 번째 도전(실패)
13. 1 deploy.yml
13.1.1 steps
13. 2 jar 배포와 zip 배포의 차이점
13.2.1 jar 배포
13.2.2 zip 배포
13. 3 00-makeFiles.config
13. 4 Procfile
13. 5 엘라스틱빈스톡 배포 도전
07 - 14 엘라드틱빈스톡 배포 첫 번째 도전(성공)
14. 1 IAM
14.1.1 IAM 생성
14.1.2 IAM 등록
14. 2 엘라스틱빈스톡에 배포 두 번째 도전
07 - 15 한글 입력 오류 해결
15. 1 RDS 파라이터 그룹 수정
15. 2 오류 로그 확인
15.2.1 Procfile
15.2.2 sbin
15.2.3 로그 저장 위치
07 - 16 네트워크 로드밸런서 고정 IP 설정
16. 1 ALB와 NLB의 차이
16. 2 EC2 탄력적 IP 생성
16. 3 EC2 로드밸런서 생성
16.3.1 Network Load Balancer
Author
최주호,정재원,정동진
현) blog.naver.com/getinthere 운영
현) jspstudy.co.kr 운영
현) 유튜브 데어프로그래밍 채널 운영
현) 프리랜서 강사
현) 온라인 컨텐츠 제작(이지업, 구름에듀, 한국공개SW협회, 한국융합인재교육협회)
현) 노마드랩 개발 팀장
[저서]
모두가 할 수 있는 플러터 UI 실전 (앤써북)
모두가 할 수 있는 플러터 UI 입문 (앤써북)
IoT 사물인터넷을 위한 라즈베리파이 4 정석 (앤써북)
JSPStudy의 JSP & Servlet 웹 프로그래밍 입문 + 활용 (앤써북)
그누위즈의 PHP & MySQL 웹 프로그래밍 입문 + 활용 (PHP 8 기반) (앤써북)
현) blog.naver.com/getinthere 운영
현) jspstudy.co.kr 운영
현) 유튜브 데어프로그래밍 채널 운영
현) 프리랜서 강사
현) 온라인 컨텐츠 제작(이지업, 구름에듀, 한국공개SW협회, 한국융합인재교육협회)
현) 노마드랩 개발 팀장
[저서]
모두가 할 수 있는 플러터 UI 실전 (앤써북)
모두가 할 수 있는 플러터 UI 입문 (앤써북)
IoT 사물인터넷을 위한 라즈베리파이 4 정석 (앤써북)
JSPStudy의 JSP & Servlet 웹 프로그래밍 입문 + 활용 (앤써북)
그누위즈의 PHP & MySQL 웹 프로그래밍 입문 + 활용 (PHP 8 기반) (앤써북)