이 전에 이어서 작성을 하겠다 .
https://ohs020105.tistory.com/146
ec2 서버 배포 (nest.js)
이번에 인턴 과제 때문에 오랜만에 ec2를 사용하게 되었는데 다 까먹은 상태라;;; 다시 공부에 들어갔다. 그래도 좋은게 전에 프로젝트를 할때는 다른 팀원이 하셔서 서버를 건들때가 없었지만
ohs020105.tistory.com
macOS에는 기본적으로 ssh가 기본 설치되어 있어서 명령어로 바로 접근이 가능하다.
여기서 ssh란?
- SSH(Secure Shell)는 일반적으로 다른 컴퓨터에 연결할 때 사용되는 프로그램이다.
다른 접속 방법 보다 보안이 뛰어나 서버 연결을 위해 일반적으로 사용된다.
로컬 저장소에서 Github의 원격 저장소를 사용하기 위해 SSH key를 발급했던 것과 동일하다.
(AWS EC2 Instance의 경우, 접속할 방화벽에서 기본적으로 22번 포트가 열려있어야 접속이 가능하다.
이어서 설명하면
윈도우에는 ssh가 없으므로, git bash라는 프로그램을 이용하면 좋다.
* https://velog.io/@selenium/Git-Git-Bash-%EC%84%A4%EC%B9%98-Windows-OS
[Git] Git Bash 설치 (Windows OS)
Git Bash는? > Git 을 이용할 수 있는 Bash(유닉스 쉘) 왜쓸까? 리눅스 커맨드 입력이 가능하다! Git bash 설치하기 1. 다운로드 사이트 접속 > https://git-scm.com/ 2. Download for Windows 클릭 3
velog.io
설치는 이분의 블로그를 참고하면 좋다.(감사합니다)
실행하고 명령어를 입력하면 된다.
ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
예)
ssh -i sparta_keypair.pem ubuntu@13.125.253.21
- Key fingerprint 관련 메시지가 나올 경우 Yes를 입력!
- git bash를 종료할 때는 exit 명령어를 입력하여 ssh 접속을 먼저 끊어준다.
일반적으로 리눅스 서버에서는 마우스(gui) 대신 쉘 명령어(cui)를 통해 운영체제의 기능을 이용한다.
그 중에서 가장 많이 쓰이는 몇 가지 명령어로는
ls: 내 위치의 모든 파일을 보여준다.
pwd: 내 위치(폴더의 경로)를 알려준다.
mkdir [폴더 이름]: 내 위치 아래에 새 폴더를 만든다.
cd [폴더 이름]: 나를 해당 폴더로 이동시킨다.
cd .. : 나를 현재 위치의 상위 폴더로 이동시킨다.
cp -r [복사할 파일/폴더] [붙여넣기 할 위치]: 복사 붙여넣기
rm -rf [지울 파일/폴더]: 지우기 (이 명령은 매우 위험합니다. 신중히 사용해주세요!)
# 명령어 사용 당시에만 관리자 권한이 부여됩니다.
sudo [실행 할 명령어]: 명령어를 관리자 권한으로 실행한다.
# 명령어 사용 이후 모든 명령이 관리자 권한으로 실행됩니다.
sudo su: 관리자 권한이 있는 계정으로 접속한다. (exit 입력하면 관리자 계정에서 로그아웃)
기억해두자!!
03. AWS EC2 Node.js 설치
우리가 node를 사용하기 위해 설치하듯 EC2 에서도 설치를 받아야 사용이 가능하다.
명령어로
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
이렇게 입력해주면 된다.
여기서 (본인포함) 몇몇은 sudo 명령어가 안된다는 오류가 날 것 이다. 그럴때는

위도우의 설정에 들어가
-> 시스템으로 들어간 다음
-> 개발자용으로 들어가 준다.
좀 내리다 보면

이렇게 sudo 사용 있는걸 확인 할 수 있다. 이걸 켜준다.
그러면 sudo 명령어를 사용 가능하게 될 것 이다.
이어서 설치를 마치면
# 설치된 Node.js 버전 확인하기
node -v
# 설치된 npm 버전 확인하기
npm -v
를 입력해서 현재의 버전을 확인할 수 있다.
04. 서버 프로그램 실행 및 웹사이트 접속
EC2 Instance에서 서버 실행하기 위해선 GitHub에 있는 Repository Clone을 해준다.

그 다음으로는 git bash에 들어가 (mac은 ssh에 들어가서)
아래는 예시이므로 복사해서 사용하면 안된다.!!!
# 원격 저장소로 부터 코드 가져오기
git clone <Github Repository URL>
# 예시
git clone https://github.com/archepro84/nodejs-todo-list.git
이렇게 입력해준다.
👉 **프로젝트 실행 순서**
1. `cd (원격으로 가져온 프로젝트 이름)` : 원격 저장소로부터 가져온 프로젝트로 이동합니다.
2. npm i 를 사용해 원격 저장소로부터 가져온 프로젝트의 의존성 및 패키지를 설치한다.
3. `npm run start` : 프로젝트를 실행합니다.
여기서 주의!
이렇게 잘 실행이 되면 참말로 좋겠지만 항상 문제는 일어나기 마련...
[Nest] 15352 - 2025. 04. 17. 오후 5:57:28 ERROR [TypeOrmModule] Unable to connect to the database. Retrying (3)...
AggregateError [ECONNREFUSED]:
at internalConnectMultiple (node:net:1139:18)
at afterConnectMultiple (node:net:1712:7)
이런식으로 typeOrmModule 에러가 뜨는걸 확인할 수 있다. 이건 파일에서 .env 파일이 없기 때문이다.
여기선 본인의 데이터베이스를 이용하기 위해 소중한 db정보가 담겨있는 파일이다.
이게 없으면 서버를 실행이 안되는건 당연하다.
이걸 해결하기 위해서는 우선
1.Git Bash 에서 명령어를 입력해준다. ( .env 파일을 생성하기 )
touch .env
2. nano 에디터를 사용해서 파일을 열고 내용을 입력할 수 있다.
nano .env
3. 이제 열리면 여기서 자신의 소중한 db정보를 복사하여 붙여넣기 해준다(Ctrl+Shift+V)
4. 파일을 저장할려면 :
- Ctrl+O를 누르고 Enter를 눌러 저장
- Ctrl+X를 눌러 nano 에디터를 종료 해준다.
이렇게 진행하면 .env 파일이 생성되고 필요한 환경 변수가 설정 될것이다. 그 후 서버를 다시 시작하면 데이터베이스 연결 오류가 해결될 것 이다.!!!
'TIL' 카테고리의 다른 글
| [Spring Boot/React] AI 맞춤형 오답노트 기능 구현 및 트러블슈팅 🚀 (0) | 2026.03.19 |
|---|---|
| 유지보수성을 높이는 백엔드 리팩토링 (FastAPI & Spring Boot) (0) | 2026.03.10 |
| ec2 서버 배포 (nest.js) (0) | 2025.04.17 |
| 위치 기반 흐름 정리 (0) | 2025.04.13 |
| 80일차 TIL (0) | 2025.03.07 |