Git과 AWS


STS에서 Git에 연동하기

STS 설치 후 spring boot starter project를 만들었다.

프로젝트 우클릭 후 Team에 들어가보면 Share project 항목이 있다.

(소스 코드를 공유하는 기본 마인드가 장착된 플랫폼이기 때문에 Team 항목에 들어가 있나보다.)

해당 프로젝트를 use or create repository in parent folder of project로 해서 최상위 폴더로 만들어주고 create repository를 하면 로컬상 프로젝트 폴더가 생성한다.

여기까지는 아직 git과 직접적인 연동이 된 건 아닌듯 하다!

자바 코드에 아무거나 추가하거나 수정하고 나면 git staging 항목에 변경된 파일이 올라와 있다.

그 파일들을 Staged Change 항목에 넣어주고 commit and push를 눌러주면 Git repository를 정하려는 창이 올라온다.

ㅇURI에 미리 만들어둔 git repository를 적어주고 아이디 및 비밀번호를 입력하고 나면 끝이다.

Git에 가보면 내가 처음 해본 commit 사항이 잘 반영되어있다.

이제 내 로컬 저장소와 Git에 있는 저장소가 완벽히 연결되었다.



—

윈도우에서 SSH로 서버 접속

AWS 서버 생성 후 SSH로 서버에 접속하기 위해 putty를 다운받았다.

SSH는 Secure Shell의 약자로 원격지에 있는 컴퓨터를 안전하게 제어하기 위한 프로토콜(또는 이것을 사용하는 프로그램)

윈도우는 터미널이 없기 때문에 putty나 cygwin을 통해 원격 서버에 접속해야 된다.

puttygen을 통해 pem파일을 ppk로 바꾸고 putty로 접속하는 방법은 aws 문서로 잘 나와있다.

하지만 접속할 때 자꾸

Disconnected: No supported authentication methods available (server sent: publickey)


이런 창과 함께 접속이 거부되었다. 구글을 뒤져보면

1. ppk 파일 생성 시 key comment를 수정

2. ec2-user 디렉토리의 권한 문제

3. ec2-user 이름을 수정

이 정도의 해결책들을 찾을 수 있었는데 나의 경우는 3번이었다.

ubuntu를 쓰기 때문에 ec2-user가 아닌 ubuntu를 써야됐다!!


AWS에 코드 배포

서버에 자바를 설치하고 path까지 적용하고 나면 본격적으로 코드를 배포할 수 있는 환경설정이 완료되었다.

1. git clone을 통해 프로젝트를 가져온다.

2. ./mvnw clean package

기존 결과물을 날리고(clean) 배포할 수 있는 코드로 다시 빌드해라고 말하는 명령이다.

이 때 나는 ./mvnw 를 쓸 수 없었는데 권한 문제여서 chmod -x로 권한 재설정 해주었다.

apache maven을 설치하고 내 프로젝트를 위해 필요한 jar 파일들을 pom.xml을 참고해 다운받는다.

처음만 오래걸리고 다음부터는 local 어딘가에 저장해놓고 재사용하므로 빨라진다.

결과물들은 target 디렉토리에서 확인 가능하다.



3. java -jar 프로젝트.jar

실행하면 명령어 입력이 안되고, 빠져나오면 프로그램이 동작이 안되는 진퇴양난을 겪어봤다.

이러한 상황을 방지해주기 위해 끝에 &를 붙여주면 정상적으로 둘 다 수행할 수 있다.



4. curl http://localhost:8080 로 로컬에서 접속해보자

분명 제대로 다 빌드했는데 접근이 안된다.

문제는 방화벽이었다! 내 컴퓨터를 엄중하게 보호해야 하기 때문에 포트도 몇개 안 열어놓는 문지기 역할을 제대로 하고 있음을 볼 수 있었다.

서버 인스턴스의 보안 그룹으로 가 inbound 설정을 바꾼다.

(inbound는 로컬에서 서버 접속할 때의 설정을 담당해준다. 반대는 outbound)

열어줄 포트를 public으로 바꿔준 후 접근하면 수월하게 잘 동작



aws 서버에서 git에 있는 내 코드를 배포했다.


서버에서 코드 재배포

1. git pull을 사용해 변경사항을 받아온다.

2. 기존에 떠있는 서버가 있다면 재시작 해야한다.

ps -ef | grep java은 현재 프로세스와 pid를 보여준다. pid를 찾아서 kill 해주면 끝!

3. 새로운 코드로 빌드해준 후 target에 가서 잘 되었는지 확인한다.

이렇게 서버에 최신 코드를 반영할 수 있다


로컬 개발 코드를 git에 올리고 aws 원격 서버가 가져와 배포하는 과정까지

최초로 반복 주기를 경험해봤다.