1주차 과제하는데 생각보다 많은 시간이 들었다 😵 확실히 회사 업무와 병행하면서 부트캠프를 진행하는 건 어려운 일이지만, 다른 시간들 줄이고 부트캠프에 더욱 집중해야겠다.
📖 강의 주제
- Server & Client
Protocol, IP, Port Forwarding, Domain 등의 전반적인 네트워크 인프라 개념 구축
📝 목표
- 로컬 서버 운영
- AWS 서버 운영
- AWS 인스턴스 생성
- 인스턴스 및 OS (Ubuntu) 설정
- LEMP 설치
- MySQL 외부 접속
- Domain 적용
- HTTPS 적용
▶️ 개발 일지
1. 강의 내용 정리
1) 서버의 위치
- 주소 vs 좌표
-> 주소는 인식하기 쉬운 위치값. 좌표는 절대적인 위치값
- 배달 주문을 하려고 내 위치(주소)를 알려줄 때, 보통 도로명 주소와 상세주소(동, 호수), 공동현관 비밀번호 등을 알려준다. 이를 웹 서비스에 대응해 보면 아래와 같다.
- 주소 === 도메인
- 좌표 === IP 주소
- 상세주소 === 포트번호
- 공동현관 비밀번호 === 데몬
- 주문정보 === 데이터 패킷
- 인터넷에는 다양한 통신 규약(프로토콜)이 존재한다.
HTTP, HTTPS, FTP, SFTP, POP3 등
- 관례적으로 부여하는 포트번호
- HTTP === 80
- HTTPS === 443
- FTP === 21
- SFTP === 22
2) HTTPS
- HTTP에 SSL을 적용하여 보안성을 높인 프로토콜
- 사이트 주소창 왼쪽에 자물쇠 모양이 있으면 SSL 인증서가 적용된 것
- SSL 인증서는 기업에게는 유료지만, 일반인 대상으로는 무료로 제공하는 곳도 있다.
3) 포트 포워딩
- 공유기에 연결된 특정 기기에 포트를 할당하는 것
- 공유기에서 내 노트북으로 포트 포워딩시키면 외부에서 해당 공유기로 접속할 시 노트북으로 연결할 수 있다.
2. 로컬 서버 운영
1) Bitnami
- 가상 어플라이언스 및 웹 어플리케이션 개발 스택용 소프트웨어 패키지 및 설치 라이브러리
- 운영체제에 따라서 WAMP(Window), LAMP(Linux), MAMP(macOS)로 나뉜다.
- APM은 Apache, PHP, MariaDB이다. (원래 MySQL을 사용하다가 변경되었다)
2) MAMP 설치
- Bitnami MAMP pack에서 설치 파일을 다운로드 받는다.

- 불필요한 요소들은 모두 체크 해제하고 설치를 진행했다.

- MySQL root 유저 설정도 해준다.

- mampstack 클라우드는 건너뛴다.

- 설치가 완료되면 아래와 같이 MAMP 설정 창이 뜬다.

- 위 설정 창에서 Go to Application을 누르거나 웹 브라우저에서 127.0.0.1을 입력하면 아래와 같이 index 화면이 보인다.

- phpinfo파일을 생성하기 위해 MAMP의 htdocs(기본 디렉토리) 폴더로 들어간다. 보통 공용유저의 Application에 mampstack 폴더가 생성된다.

- index.php를 만들고 다시 웹 브라우저에서 127.0.0.1/index.php로 접속하면 phpinfo 화면이 잘 나오는 것을 볼 수 있다. (현재는 기본 화면을 index.php로 설정해놨다)

3) 포트 포워딩 설정
- 포트 포워딩을 통해 외부에서 내 로컬 서버로 접속이 가능하게 만들어 보려고 한다. KT 공유기를 사용하고 있어 와이파이가 연결된 상태로 웹 브라우저에서 172.30.1.254 로 접속한다. (공유기 종류마다 관리자 페이지 ip가 다르다!)

- 한번도 공유기를 설정한 적이 없다면 보통 아래와 같다.
- ID : ktuser
- PWD : homehub
- 로그인 후 [장치 설정]-[트래픽 관리]-[포트 포워딩] 설정으로 들어간다. 여기서 외부 포트, 내부 IP 주소, 내부 포트를 설정한다. 내부 IP 주소는 내 노트북의 IP 주소인데, macOS에서는 터미널에 다음과 같이 검색해서 알아낼 수 있다.
$ ifconfig | grep inet

- 추가 버튼을 누르면 아래에 포트 포워딩 설정이 된 것을 볼 수 있다.

- 이제 핸드폰에서 와이파이를 끄고 셀룰러 데이터로 (공용 IP):(외부 포트번호) 에 접속하면
phpinfo 화면이 나온다.
$ curl ifconfig.me

3. AWS 서버 운영
1) AWS와 인스턴스
- AWS는 아마존닷컴에서 개발한 클라우드 컴퓨팅 플랫폼으로 가상 컴퓨터와 스토리지, 네트워크 인프라 등의 서비스를 제공한다.
- AWS 인스턴스는 클라우드의 가상 서버로 특정 OS를 설치하여 서버를 운영할 수 있다.
2) AWS 인스턴스 생성
- 가장 먼저 할 건 회원가입이니 AWS 홈페이지부터 들어가보자. 오른쪽 상단에 있는 로그인 메뉴로 들어가서 회원가입을 진행한다.

- 회원가입이 끝나면 바로 아까 로그인 메뉴 바로 옆에 데이터 센터 위치를 설정하는게 보인다. 서울로 데이터 센터를 설정하고 'EC2' 서비스를 클릭한다.

- 가운데 왼쪽에 보면 인스턴스 생성 메뉴가 보인다.

- 설치할 OS 이미지를 고르는게 나오고, 나는 ubuntu 20.04 LTS를 선택했다.

- 인스턴스 유형을 선택해야 하는데, 어짜피 프리 티어는 micro밖에 선택할 수 없다.

- 스토리지는 프리 티어에서 설정할 수 있는 최대값 30GB로 했다.

- 검토 단계로 넘어가면 현재까지 설정한 내용을 확인할 수 있다. 인스턴스 보안을 개선하라는 경고문은 일단 무시한다.

- 마지막으로 키 페어에 대한 팝업이 나오고, 새 키 페어 생성을 선택한다. 유형은 RSA로 선택하고, 키 페어 이름은 임의로 정한 뒤 반드시! 내 컴퓨터에 다운로드 받아놓는다. (지금 안 받으면 나중에 다시 다운 받을 수 없다)

- 인스턴스 시작을 누른 뒤 인스턴스 정보 창을 보면 상태가 실행중인 것이 보인다. (바로 실행중으로 바뀌진 않고 30초 정도 지나야 바뀐다)

- SSH 프로토콜을 이용해서 바로 접속해본다. 정보창 우측 상단에 연결 메뉴를 클릭하면, 아래와 같이 가이드 화면이 나온다. SSH 클라이언트 탭에서 맨 아래 예시 명령어를 복사한다.

- 이전에 다운 받았던 공개키를 ~/.ssh 폴더로 이동시킨 후, 해당 폴더 위치에서 복사한 명령어를 실행시키면 아래와 같이 AWS 인스턴스에 접속한 것을 확인할 수 있다.
$ mv ~/Downloads/key.pem ~/.ssh/key.pem
$ cd ~/.ssh
$ ssh -i "key.pem" ubuntu@ec2-***.ap-northeast-2.compute.amazoneaws.com

3) 인스턴스 설정
인스턴스 생성 후 SSH로 연결하는 것까지는 좋았지만, 보안을 위해 일부 설정들을 좀 바꿔보자.
- 인바운드 규칙 변경
인스턴스 정보창에서 인스턴스를 선택한 뒤 보안탭을 누르면 아래와 같이 현재 SSH 프로토콜이 22번 포트에 할당돼있는 것을 알 수 있다. 보안 그룹에 있는 링크 (~~~ launch-wizard-1)를 클릭하자

- 인바운드 규칙과 아웃바운드 규칙을 편집할 수 있는데, 아웃바운드는 상관 없으니 인바운드 규칙 편집을 클릭한다.

- 보안 그룹을 기본 설정으로 뒀다면 SSH 유형의 22번 포트만 규칙으로 돼있을 것이다. 여기에 HTTPS, HTTP 유형을 추가하고 사용자 지정 TCP를 추가한 뒤 임의의 포트번호를 입력한다. SSH로 사용할 포트번호 이므로 가능한 10000번 이상 대의 포트번호를 추천한다. 소스는 0.0.0.0/0으로 둬도 되지만, 여기서는 내 공유기의 IP를 입력했다.

- [네트워크 및 보안]-[탄력적 IP] 메뉴에 들어가서 탄력적 IP 주소를 할당받는다. 탄력적 IP는 쉽게 말해 AWS 인스턴스의 고정 IP를 의미한다.

- IP를 할당받은 뒤에는 작업 탭에서 탄력적 IP 주소 연결을 클릭한다.

- 인스턴스와 프라이빗 IP 주소를 선택하고 연결해주면 된다.

- 인스턴스 정보 창으로 돌아오면 아래 세부정보에 탄력적 IP 주소가 설정된 것을 볼 수 있다.

SSH 포트 재설정부터 다음 포스트에 이어간다.
& 링크모음
[1] : 라이징캠프