며칠 전 수업에서 AWS EC2를 처음 배웠다.
EC2는 아마존 데이터센터에 있는 내 서버다.
집 컴퓨터에 파일 올려봤자 나만 볼 수 있지만, EC2에 올리면 퍼블릭 IP로 전 세계 어디서든 접속할 수 있다. 포트폴리오 올리기에 딱이라는 생각이 들었다.
수업 내용을 전 게시물에 올려두었다.
https://rb-cloud.tistory.com/34
AWS EC2 인스턴스 만드는 방법
EC2란?EC2(Elastic Compute Cloud)는 AWS에서 제공하는 가상 서버 서비스입니다. 쉽게 말하면 AWS 데이터센터에 있는 컴퓨터를 빌려서 사용하는 것입니다. 내 로컬 컴퓨터를 24시간 켜두지 않아도 AWS 서버
rb-cloud.tistory.com

1. 보안 그룹 - 인바운드 규칙 추가
인스턴스를 만들고 나서 보안 그룹 → 인바운드 규칙 편집으로 들어갔다.
기본적으로 SSH(22번 포트)는 열려 있다. EC2에 터미널로 접속할 때 쓰는 포트다.
여기에 HTTP(80번 포트) 를 추가해줬다.
유형: HTTP / 프로토콜: TCP / 포트: 80 / 소스: 0.0.0.0/0
소스를 0.0.0.0/0으로 설정하면 모든 IP에서 접속 가능하다는 뜻이다. AWS에서 "알려진 IP 주소에서만 허용하도록 설정하는 게 좋다"는 경고가 뜨는데, 포트폴리오는 누구나 볼 수 있어야 하니까 전체 허용으로 뒀다.
2. GitHub 프라이빗 레포에 파일 올리기
포트폴리오 HTML 파일을 EC2에 올리는 방법은 여러 가지인데, 나는 GitHub 프라이빗 레포를 경유하는 방식을 선택했다.
흐름은 이렇다.
로컬 → GitHub 프라이빗 레포 → EC2에서 git pull → Nginx 서빙
나중에 파일 수정할 때도 git push 하나로 관리할 수 있어서 편하다.
🎨Nginx란?
웹 서버 프로그램으로, 파일을 브라우저에 전송한다.
EC2에 HTML 파일을 올리고 Nginx가 설치되어 있어야 <http://IP주소>로 접속했을 때 "/var/www/html/" 폴더에 있는 파일을 브라우저에 보내준다.
먼저 파일이 하나뿐이기 때문에, github 브라우저의 Portfolio 레포지토리에 만들어 둔 html 코드를 직접 업로드 했다.
이후 간단히 git bash로 로컬에 클론했다.
git clone https://github.com/dlcodns/Portfolio.git
만약 처음부터 로컬에서 하려면 아래처럼 명령하면 된다.
git init
git add portfolio.html
git commit -m "add portfolio"
git remote add origin https://github.com/dlcodns/Portfolio.git
git push origin main
3. EC2에서 GitHub 인증 설정 (Personal Access Token)
이제 EC2에서 프라이빗 레포를 클론해야 한다.
프라이빗은 그냥 클론할 수 없고, 토큰 인증을 해야한다.
- github 브라우저 오른쪽 위 프로필 사진을 누르고 setting을 들어간다.


2. setting 메뉴에서 제일 끝에 있는 개발자 세팅을 들어간다.
3. Personal access tokens의 Fine-grained tokens를 들어간다.
4. Genarate new token을 누른다.
5. 토큰 이름, 설명, 원하는 토큰 기한, 어떤 레포에 해당하는지, 허용범위를 정한다.
나는 portfolio 레포와 Contents permission의 Read and Write를 설정했다.

6. Generate token을 누른다.
7. 곧바로 나오는 토큰을 꼭 복붙해서 개인적으로 저장해야 한다. 다시는 안 보여준다!
4. EC2를 ssh로 접속+레포지토리 클론
컴퓨터의 cmd 창을 열고, 아래 코드를 치면 ssh로 접속이 가능하다.
ssh -i <.pem 주소> <내가 선택한 AMI>@<퍼블릭 IP 주소>
나는 ubuntu 이미지로 만들었기 때문에 <내가 선택한 AMI>에 ubuntu를 넣었다.
ssh -i <.pem 주소> ubuntu@<퍼블릭 IP 주소>

🎨만약 .pem에 접근이 deny 된다면?
.pem 경로가 잘못되었기 때문이다. pem 자체에는 문제가 없다.
클로드나 gpt한테 물어보면 pem의 권한을 주라며 이상한 명령어를 주는데, 그러면 다시 시작해야 한다.
C:\Users\<사용자 이름>\<.pem>
이 경로로 넣어서 하면 잘 될 것이다!
이유는 Windows 파일 권한 상속 때문이다.
C:\ 루트에 .pem을 두면 Windows가 자동으로 모든 사용자가 읽을 수 있는 권한을 상속시킨다.
SSH는 이 키 파일을 다른 사람도 볼 수 있다고 판단해서 보안상 거부한다.
반면 C:\Users\<사용자이름>\ 하위는 처음부터 나만 접근 가능한 폴더라서 권한 문제가 생기지 않는다.
ssh로 잘 접속하면 cmd에 아래 사진처럼 뜬다.

이제 EC2에 접속했으니 토큰으로 clone한다. 토큰을 URL에 포함시키면 비밀번호 입력 없이 바로 인증이 된다.
git clone https://<토큰>@github.com/<깃헙 닉네임>/<레포이름>.git
#결과
Cloning into 'Portfolio'...
...
Receiving objects: 100% (6/6), 7.59 KiB | 1.90 MiB/s, done.
5. Nginx 다운로드
이제 Nginx를 다운로드 받아야 한다.
sudo apt update && sudo apt install nginx -y
다운로드가 끝나면 clone한 파일을 Nginx 서빙 경로에 복사한다.
"/var/www/html/"이 Nginx가 브라우저에 보여주는 폴더다.
여기에 파일을 넣으면 바로 웹에서 접근할 수 있다.
sudo cp ~/<레포 이름>/portfolio.html /var/www/html/index.html
6. 브라우저에서 접속 확인
이제 http://<퍼블릭 IP> 로 접속하면 브라우저에 내 html이 뜬다.
어디서든 이 링크로 접속이 가능하다.
만약 레포의 코드를 수정하면 EC2 cmd(아니면 ssh 연결)에서 아래 명령어를 쳐야 업데이트가 된다.
git pull
sudo cp <수정한 파일> /var/www/html/index.html