본문 바로가기
개발관련

Window AWS배포 - EC2, RDS를 활용하여 배포하기편 (EC2접속하기)

by 수바니 2024. 8. 1.

국비학원다닐때 서버배포 경험이 없어서 항상 해보고싶었는데, 부트캠프를 하면서 해보았다.

이제라도 해봐서 넘 다행이다 싶다 ,,,

 

AWS 가입후, FileZilla 설치도 완료하였다.

그리고 RDS를 구매후 MySQL세팅까지 완료.

데이터베이스 생성하고 RDS 포트도 열어주는것도 성공!

인텔리제이에서 스트링부트와 MySQL과 연결도 성공하였다.

이거까지는 노션이나 구글링해서 여차저차 빠르게 성공했는데

문제는... EC2접속하기부터 포트포워딩까지 .. 6시간 넘게 붙잡고있었던것 같다.

접속하면서 어려웠던 점, 오류(?)들을 기록해보려한다.

 

https://ap-northeast-2.console.aws.amazon.com/ec2/v2/home?region=ap-northeast-2

 

https://ap-northeast-2.console.aws.amazon.com/ec2/v2/home?region=ap-northeast-2

 

ap-northeast-2.console.aws.amazon.com

링크로 접속해서 Ubuntu Server를 구매해준다.

t2.micro가 무료라고한다.

Key생성하기버튼을 눌러서 키페어 이름을 작성해주고, keypair type -> RSA, fileformat-> .pem으로 선택후 생성

키페어를 생성해준후 다운로드창을 확인!!  .pem 로 된것을 잘간직해야한다.

나는 다운로드 된줄도 모르고 .. 키페어가 어딨는거지 .. 나 키페어를 받았나?

생각하고 키페어를 까먹은줄 알았다 ㅋㅋㅋ (멍청이..)

구글링 해서 인스턴스 삭제하고 인스턴스를 삭제하면 리스트에서 사라지기까지 어떤사람말로는 5분~10분이라고하는데

나는 몇시간 걸렸던거 같다...

 

키페어삭제하기

근데 또 키페어 생성할때 키페어이름을 전과같이 입력하면 오류가 뜬다. 같은이름이 있다고..!!

그럴경우에는 EC2 대시보드에 네트워크 및 보안으로 들어가 키페어를 들어간다.

체크박스 체크후 키페어 삭제를 해주면된다. 그러면 삭제했던 인스턴스의 키페어 이름과 동일하게 설정할수있다.

 

그리고 EC2 접속을 해본다. 

gitBash를 켠다. 명령어로 입력

이렇게 입력하면된다.

ssh -i /path/my-key-pair.pem ubuntu@00.000.000.00

ssh는 명령어 path는 키페어의 위치! 00.000.000.00 은 aws에서 준 IP

위치를 모르겠다! 싶으면은 .pem폴더를 열어준다.

 

.pem파일을 드래그로 당겨서 가져다 놓으면 위치가 알아서 적힌다.

 

Filezilla를 이용해 배포파일을 업로드한다.

 

그 후로 gitBash에 java -jar JAR파일명.jar로 스프링부트를 작동시킨다.

만약 Web server failed to start. Port 포트번호 was already in use. 이런 오류문구가 뜬다면 포트를 죽인후에 다시 실행

 

포트죽이기

netstat -tnlp  로 해당포트번호의 PID를 확인

kill -9 pid번호 로 죽이면 된다.

 

AWS에서 80(http요청 기본), 8080포트(나의포트번호) 열어주고, 인바인드 규칙을 편집까지 완료한다면,

http://내 public 아이피:포트번호 로 접속할수있을것이다.

 

포트포워딩

이제 포트포워딩 & nohup적용 을해볼것이다.

http://내 public 아이피:포트번호

:포트번호 없이 그냥 aws아이피 주소로 접속할 수 있게끔 하는 작업이다.

 

1. 포트포워딩 룰을 입력 (gitBash  입력)

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

 

2. 다시서비스시작 (gitBash  입력)

java -jar JAR파일명.jar

 

 3. 포트번호를 떼고 접속

http://내AWS아이피/

 

4. SSH접속을 끊어도 서버가 계속 돌게하기 (gitBash  입력)

nohup java -jar JAR파일명.jar &

 

5. 포트번호를 떼고 접속

http://내AWS아이피/

 

이렇게 했는데도 계속 안되는것이다.

그래서 구글링을 열심히해서 일단 포트포워딩이 잘되어있는지 확인을 해보았다.

sudo iptables -t nat -L --line-numbers

sudo는 관리자권한으로 실행한다는 명령어

그럼 이렇게 포트포워딩이 잘되어있는지 확인이 된다.

이것도 잘되어있는데도 계속 되질 않았다.

그래서 저 두개중에 2번을 지워보기로 했다...

 

지우는 방법

iptables -t nat -D PREROUTING 지울num

하면 삭제가 된다..

이래도 저래도 안돼서 구글링을 해서 엄청 뭘 만졌더니 갑자기

iptables command not found

라는 문구가 떠버렸다...

apt install iptables 설치를 해주니까 다시 해결이 되었던거 같다 ....

 

6시간 넘게 낑낑거리다가 결국 부트캠프 질문방에 올렸더니 5분도 안돼서 해결했다.

결국 무엇이 문제였냐면,

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

sudo iptables -t nat -A PREROUTING -i enX0 -p tcp --dport 80 -j REDIRECT --to-port 8080

eth0 부분을 enX0으로 변경하니 바로 성공했다 ...

명령어를 다르게 하니 성공했다 !! ...

원인을 모르니 당연히 6시간넘게 낑낑거릴수밖에 ... 원인을 몰랐던것이 가장 컸던거 같다 ..

모르면 민망하더라도 꼭꼭 질문하기..!!!

 

원인이 트러블슈팅이라고 하는데, eth0와  enX0의 차이점이 궁금해 구글링을 해보았다.

eth0은 네트워크 인터페이스에 해당하는 요청들만 포트리다이렉트를 진행

enX0은 옵션이 없기때문에 특정 네트워크 인터페이스가 아닌 모든 네트워크 인터페이스의 요청을 포트 리다이렉트 하게 된다고한다.

 

ifconfig를 입력하면

이렇게 뜬다. 딱 첫줄! enX0이 된다.

이게 enX0이 현재 사용중인 EC2의 네트워크 인터페이스라고한다.

즉, 네트워크 인터페이스가 내가설정한것과 사용중인것이 다르기 때문에 정상적으로 작동하지 않았다.

 

처음에는 6시간 넘게 낑낑거리다가 명령어 하나로 성공하는거 보고 허무하다고 생각했는데,

덕분에 리눅스 명령어도 여럿알게되고, 몰랐던 것들을 공부하게 된거같아서 다행(?)  좋은경험이라고 생각이들었다.