우리는 프런트엔드, 백엔드를 통합개발 환경(IDE)에서 코드를 작성하고 디버깅, 컴파일 등의 작업을 수행한다. 작업이 끝난 코드는 최종적으로 웹사이트로써 소비자가 접근할 수 있도록 만들어야 합니다.
즉, 우리가 작업하던 localhost는 다른 컴퓨터에서 접근이 불가능하므로 다른 사용자들이 접근하기 위해서는 고유의 주소를 부여받아야 하는데 이 과정을 배포라고 한다!

개발 서버 배포
주로 기능 테스트 및 디버깅을 위해 사용.
개발 서버에서 충분한 테스트가 끝난 후 운영 서버에 배포!
운영 서버 배포
실사용자가 접근하는 곳으로 안정성과 보안이 중요.
배포 전 철저한 테스트를 거치는 것이 핵심!
배포를 하기 위해서는 가상 서버(vps)가 있어야 한다.
서버는 구매할 수도있고, 임대로 빌릴 수도 있다.
서버 임대에는 서버 호스팅 서비스나 클라우드 서비스가 있다.
ex) 대표적으로 Aws EC2, Gcp, Azure가 있는데 제공되는게 많아서 서버 제어를 직접 느끼기가 어렵습니다!
그래서 저는 배포의 흐름을 자세히 알기 위해서 Vultr을 사용해 볼 예정입니다!
수동 배포는 자동화된 CI/CD(Continuous Integration/Continuous Deployment) 도구 없이,
개발자가 직접 배포 과정을 수행하는 방식이다.
📌 수동 배포 방식
자동 배포는 CI/CD(Continuous Integration / Continuous Deployment) 도구를 활용하여 코드 변경 사항을 자동으로 빌드, 테스트, 배포하는 방식이다.
수동 배포와 달리 사람이 직접 배포 과정에 개입할 필요 없이 일정한 프로세스로 자동화할 수 있다.
📌 자동 배포 방식
1️⃣ 코드를 푸시하면 자동으로 빌드 및 테스트 실행
개발자가 git push하면 CI/CD 파이프라인이 실행됨.
코드가 자동으로 빌드되고 유닛 테스트 수행.
2️⃣ 애플리케이션 패키징 및 컨테이너 이미지 생성
Java의 경우: .jar 파일 빌드 (mvn package)
Node.js의 경우: npm run build
Docker 사용 시: docker build로 컨테이너 이미지 생성
3️⃣ 배포 서버로 자동 전송
SCP, Rsync 또는 Docker Registry를 사용하여 서버로 업로드.
Kubernetes, AWS ECS, Docker Swarm 등의 환경에서 배포 가능
4️⃣ 애플리케이션 실행 및 서비스 재시작
기존 실행 중인 애플리케이션을 중지하고 새로운 버전으로 실행.
📌 자동 배포 툴
Jenkins, Github Actions ...
https://bellard.org/jslinux/
위의 사이트에서 리눅스를 사용해 볼 수 있습니다!
pwd(print working directory): 현재 경로 확인
cd(change directory): 디렉토리 변경

mkdir 디렉토리명: 디렉토리 만들기
ls: 현재 디렉터리 안에 있는 파일과 폴더 목록을 출력
touch 파일명: 파일 만들기
cat 파일명: 파일 내용 읽기
vi 파일명: 파일 수정
vi에는 명령모드, 수정모드가 있다.
명령모드: 파일 저장, 내용 검색 (esc)
수정: 메모장처럼 내용 입력해서 수정 (i)
파일에 들어와서 i를 눌러서 수정한 후 esc를 눌러 파일을 저장한다.
:wq -> 파일 저장 후 나가기
:q! -> 저장안하고 나가기
ls -al
파일의 모든 정보가 다 나온다.
.은 숨김 파일
d와 -의 차이 : 디렉토리(d)와 파일(-)을 의미.

rmdir: 폴더 삭제
아래 사진처럼 폴더가 비어있지 않은 폴더는 rmdir시 삭제되지 않는다.
rm -r 폴더명: 폴더에 파일이 남아있어도 삭제 됨.

rm -rf: 하위 파일 모두 삭제 + 실제로 지울 건지 확인하는 창도 안 뜬다.
(가끔 폴더나 파일 삭제 시 지울 건지 재차 확인하는 것도 있다. 창을 안 뜨게 하기 위해서 사용하는 명령어이다.)
다음 장에서는 실제 배포 방법을 다뤄보겠습니다! :)