각종 후기/우아한테크코스

[우아한 테크코스 3기] LEVEL 2 회고 (85일차)

제이온 (J.ON) 2021. 4. 27.

안녕하세요? 제이온입니다.

 

오늘은 새로운 미션인 '배포'가 주어졌습니다. 오전 수업 이후 나머지 시간은 모두 여기다 박았습니다.

 

 

배포 인프라 1단계 미션 - 배포하기

AWS 인스턴스를 생성하여 보안 설정 및 로거, 자바를 설치하고 제가 예전에 작성한 체스 코드를 clone해서 배포하는 것이 목적이었습니다. 하지만, 그 과정에서 어려운 부분이 참 많았습니다. 일단 EC2가 뭔지, AWS 자체가 뭔지, 인스턴스가 하는 역할이 뭔지 등등은 잘 몰랐고, 우선 기능 구현에 집중했습니다. 

 

 

 

 

처음에는 AWS 인스턴스를 생성해야 합니다. 위와 같은 설정으로 서비스용과 bastion용 2가지 인스턴스를 생성해 주는 것은 크게 어렵지 않았습니다. 다만, 저는 개발 환경이 윈도우라서 맥과 다르게 PuTTY라는 것을 설치하여 pem 키 파일을 ppk 키 파일로 변환하고, 이 프로그램으로 리눅스 환경에서 코드를 입력해야 했습니다. 다만, 아직 정확히 PuTTY가 어떤 역할을 하는지는 잘 모르겠습니다.

 

 

 

 

그 다음 bastion에서 공개키를 생성하여 서비스에서 키를 추가하고, bastion에서 서비스로 접속할 수 있게 만들었습니다. 이때, [서비스용 서버 IP]는 퍼블릭 IPv4 주소가 아닌, 프라이빗 IPv4 주소를 입력해야 합니다. 이유는 잘 모르겠으나 퍼블릭으로 접속할 경우 timed out이라는 에러가 발생했습니다.

 

 

 

 

이후에는 bastion에서 서비스로 접속할 때 별칭을 정해주고 서버 보안을 설정하는등, 문서를 그대로 따라가도 문제가 없었습니다. 다만, bastion의 존재 의미를 잘 모르겠고 해당 과정이 실질적으로 배포를 하는데 도움이 되는지 와닿지가 않았습니다.

 

 

 

 

이제부터가 빌드의 핵심입니다. 처음에 제가 만들었던 체스 미션을 clone해 오고 빌드를 했습니다. 그리고 jar 파일명을 알아내서 Application을 실행하고, 'http://localhost:8080'에 접속하면, 1차적으로 성공입니다. 하지만, 아직 DB가 연결되지 않았으므로 여러 가지 핵심 로직을 실행할 수 없습니다. 또한, 저는 js에서 BaseUrl이라는 상수에 "http://localhost:8080"을 설정해 놨는데 이 부분을 "http://[퍼블릭 IPv4 주소]:8080"로 고쳐야 합니다.

 

 

나머지는 MySQL을 설치하면 되는데, 해당 링크에 따라 진행하면 됩니다. 또한, 진행하다가 만약에 root에 권한이 거부되었다는 것과 비스무리한 오류가 발생한다면 이곳을 참조하시길 바랍니다. 여기까지하면 사실 끝났습니다. 다만, 저처럼 인스턴스를 종료하면 체스 게임 URL에 접속을 못하는 문제가 발생할 수도 있습니다. 이럴 때는 "nohup java -jar [jar파일명] 1> [로그파일명] 2>&1  &" 명령어를 실행하면 됩니다. 자세한 원리는 모르겠으나, 터미널 세션이 끊어지더라도 URL이 죽지 않도록 만들어 줍니다.

 

이후에는 무료 도메인 사이트에서 DNS 설정을 해 주었습니다. 아무래도 인스턴스의 아이피를 그대로 공개하는 것은 좀 그래서 다른 도메인을 얻어서 사용했습니다.

 

 

정리

글로 써 보니까 그렇게 분량이 많지는 않은데, 중간 중간 자질구레하거나 큰 오류가 많이 발생해서 굉장히 힘들었습니다. 그래도 제가 만든 프로그램을 처음으로 배포하는 경험은 정말 의미있었다고 생각합니다. 다행히 오늘 하루를 박아서 1단계를 완수하였고, 내일은 2단계 미션인 '운영하기'를 해 보려고 합니다. 

 

추천 글