📚 2년차 프론트엔드 개발자의 12주 기초 챌린지
Week 2: 배포 환경 이해하기 (Day 6-10)
어제 서버가 "멀리 있는, 24시간 켜져 있는 컴퓨터"라는 걸 배웠다.
그런데 그 컴퓨터가 회사 서버실에 있거나 AWS 데이터센터에 있으면, 어떻게 조작하나?
주방(서버)은 다른 건물에 있다.
직접 가지 않고 관리하려면? 주방에 보안 전화선을 깔아서, 전화로 지시를 내린다.
이게 바로 SSH다!
SSH (Secure Shell) = 멀리 있는 컴퓨터에 안전하게 접속해서 명령어를 입력하는 방법
SSH로 서버에 접속하면 내 컴퓨터의 터미널에서 타이핑하지만, 실제로는 서버 컴퓨터에서 실행된다.
내 손은 여기 있지만, 움직이는 건 저쪽 로봇(서버)인 원격 조종이다.
ssh 사용자이름@서버IP주소
예시:
ssh ubuntu@13.125.200.50
| 부분 | 의미 | 레스토랑 비유 |
|---|---|---|
ssh | SSH 프로그램 실행 | 전화기를 든다 |
ubuntu | 서버에서 사용할 계정 이름 | "주방장 김씨 바꿔주세요" |
@ | ~에 접속한다 | ~에게 전화한다 |
13.125.200.50 | 서버의 IP 주소 | 주방 전화번호 |
접속 성공하면 터미널 프롬프트가 바뀐다:
# 접속 전 (내 컴퓨터)
myname@my-macbook ~ %
# 접속 후 (서버 컴퓨터)
ubuntu@ip-13-125-200-50:~$
이 순간부터 치는 모든 명령어는 서버 컴퓨터에서 실행된다!
ssh ubuntu@13.125.200.50
# → "Password:" 라고 물어봄 → 비밀번호 입력
간단하지만 비밀번호 유출 위험 + 매번 입력해야 하는 번거로움.
비밀번호 대신 열쇠 파일을 사용한다.
ssh -i my-key.pem ubuntu@13.125.200.50
자물쇠와 열쇠 원리:
| 이름 | 위치 | 역할 | |
|---|---|---|---|
| 🔒 | 공개 키 (Public Key) | 서버에 설치 | 자물쇠 |
| 🔑 | 개인 키 (Private Key) | 내 컴퓨터에만 보관 | 열쇠 |
서버에 달린 자물쇠에 맞는 열쇠를 가진 사람만 접속 가능.
⚠️ 개인 키는 절대 Git에 올리면 안 된다!
서버가 해킹당해도 공개 키(자물쇠)만 있으니 안전하지만,
개인 키가 유출되면 그 자물쇠가 달린 모든 서버에 접속할 수 있게 된다.
1. 로컬에서 코드 작성 + yarn build
↓
2. SSH로 서버에 접속
ssh -i my-key.pem ubuntu@회사서버IP
↓
3. 서버에서 코드 가져오기
git pull origin main
↓
4. 서버에서 빌드 + 실행
yarn build
yarn start -p 5008
↓
5. 사용자가 사이트에 접속 가능!
포트 확인도 가능:
# 서버에 접속한 상태에서
lsof -i :5008 # 5008 포트에서 뭐가 돌아가나?
lsof -i :5007 # 5007 포트에서 뭐가 돌아가나?
pwd # 지금 어디 폴더에 있는지 확인
ls -la # 폴더 안에 뭐가 있나 보기
cd /home/ubuntu/my-project # 폴더 이동
cat .env # 파일 내용 보기
ps aux | grep node # 현재 실행 중인 프로세스 확인
exit # 서버 접속 종료
| 명령어 | 레스토랑 비유 |
|---|---|
pwd | "지금 주방 몇 층이야?" |
ls -la | "거기 뭐가 있어?" |
cd | "냉장고 쪽으로 가봐" |
cat .env | "레시피 비밀노트 읽어봐" |
ps aux \| grep node | "지금 가동 중인 화구가 뭐야?" |
exit | "전화 끊을게" |
SSH가 "접속해서 명령하는 것"이라면, SCP는 "파일을 보내거나 가져오는 것"이다.
# 내 컴퓨터 → 서버로 파일 보내기
scp -i my-key.pem ./build.zip ubuntu@13.125.200.50:/home/ubuntu/
# 서버 → 내 컴퓨터로 파일 가져오기
scp -i my-key.pem ubuntu@13.125.200.50:/home/ubuntu/error.log ./
SSH는 전화(음성 명령), SCP는 택배(파일 전송).
같은 보안 통로를 쓰지만, 하나는 명령을, 하나는 물건을 보낸다.
SSH로 접속해서 yarn start를 실행한 뒤, 터미널을 닫으면 사이트가 죽는다!
서버 컴퓨터 자체는 24시간 켜져 있지만, yarn start는 SSH 세션에 묶여 있는 프로세스이기 때문이다.
yarn start = "불 켜고 요리 시작해" 지시SSH로 실행한 프로세스는 그 SSH 세션의 "자식 프로세스"다.
부모(SSH)가 죽으면 자식(yarn start)도 같이 죽는다.
🔮 이 문제를 해결하는 게 바로 pm2 (프로세스 매니저) → Day 8에서!
ssh 사용자@IP주소 또는 ssh -i 키파일 사용자@IP주소🔮 다음 시간 (Day 8): pm2 / 프로세스 매니저 개념
"전화를 끊어도 셰프가 계속 요리하게 만드는 시스템"