Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

DOing

[AWS] AWS 배포 회고 본문

AWS

[AWS] AWS 배포 회고

mangdo 2021. 5. 8. 11:29

최근에 AWS를 이용해서 총 두개의 프로젝트를 배포해보게 되었습니다.

그에 대한 회고를 해보려고 합니다.


[ 계기 ]

 

 꽤 오랫동안 진행해왔던 Spring 프로젝트를 마무리 지어가고 있었습니다. 워낙 많은 시간과 노력을 투자해서인지 애착이 크게 느껴졌는데 이 프로젝트가 내 컴퓨터에서만 동작할 수 있다는게 아쉽게 느껴졌습니다. 물론 배포를 하고 싶긴했지만, "만약 실제로 배포를 한다면 이미지는 어떻게 저장하지?? DB는 어떻게 연동해야하지??? 그럼 코드를 여기서 건드려야하는건가??"라는 두려움이 있었습니다.

 하지만 실제 회사들에서도 AWS를 사용하고 있고 점점 증가하는 추세라는 말을 들으며, 이번 기회에 한번 AWS를 이용하여 배포에 도전해보자라는 결심을 했습니다.


[ 학습 과정 ]

1. Spring Boot 프로젝트 배포

 이전까지 AWS를 제대로 이용해본 적이 없었기 때문에 우선은 '스프링 부트와 AWS로 혼자 구현하는 웹 서비스(이동욱 저)'를 읽으며 실습을 진행하였습니다. 실습에서는 SpringBoot 프로젝트를 EC2(Amazon linux)와 RDS(Maria DB)를 이용하여 배포하였습니다. 이를 통해 AWS란 무엇인지, 어떻게 사용해야할 것인지에 대한 감을 잡았습니다. 

 

2. AWS 강의, AWS 책

 아무래도 SpringBoot책에 일부분으로 나온 AWS내용만으로는 이해가 안되는 부분이 있었기 때문에 생활코딩의 AWS 강의와 AWS 책을 찾아 공부하였습니다. 시중에 나온 AWS책은 여러가지가 있지만 그 중에서도 저는 '아마존 웹 서비스 AWS Discovery Book'과 '예제를 통해 쉽게 따라하는 아마존 웹 서비스'를 많이 참고하여 공부하였습니다. 책 전체를 읽기보다는 제가 이해가 안됬었던 AZ(가용구역), IAM부분과 앞으로 사용하게될 EC2, RDS, S3 부분을 골라 읽었습니다.

 

3. Spring 프로젝트 배포

 드디어 목표였던 직접 진행한 Spring 프로젝트를 배포시켰습니다. 이전의 Spring Boot 프로젝트와는 다른점이 크게 세가지 있었습니다.

 

1) War VS Jar

 Spring Boot는 톰캣을 JAR파일에 내장하기 때문에  바로 실행가능한 JAR파일로 빌드와 배포가 가능합니다.

즉, EC2서버에 톰캣을 깔지 않아도 빌드, 배포가 가능했습니다.

이때 스프링 부트의 장점인 "독립적이고 가볍게 만들 수 있다" 라는 장점을 직접 느낄 수 있었습니다.

Spring 프로젝트에서는 EC2서버에 톰캣을 설치하였습니다.

 

이에 관련 포스팅 : 

2021.04.19 - [WEB] - JAR vs WAR 그리고 스프링 부트

 

2) Maven 설치

 Spring Boot 프로젝트에서는 Gradle을 사용하였습니다. 

Gradle은 gradlew라는 wrapper파일을 사용할 수 있습니다. gradlew은 Gradle이 설치되지 않은 환경에서도 해당 프로젝트에 한해서 Gradle을 쓸 수 있도록 지원하는 wrapper파일입니다. 덕분에 Gradle의 설치가 필요하지 않았지만 Maven은 EC2서버에 maven을 설치하였습니다.

 

이에 관련된 포스팅 :

2021.05.08 - [WEB] - 빌드 도구, Gradle vs Maven

 

3) AWS 파일서버, S3 이용


[ 어려웠던 점 & 배운 점 ]

1. 클라우드 서비스에 대한 이해

Cloud?

 우선 저는 클라우드라는 서비스에 대한 이해가 부족했었습니다. 어렴풋이 느낀 '핸드폰에 있는 내 파일을 구글 클라우드에 저장하면 안전하게 보관할 수 있다.' 외에는 클라우드에 대한 이해 자체가 없었습니다. 

 AWS를 공부하면서 클라우드란 무엇인가? 왜 클라우드를 사용하는가?에 대해서 생각해보게 되었습니다.

 

이에 관련한 포스팅 : 

2021.04.14 - [WEB] - 웹 호스팅, 서버 호스팅, 클라우드

 

2. 네트워크에 대한 이해

 AWS의 RDS와 EC2에는 보안정책을 설정할 수 있습니다. 보안 정책에서는 해당 인스턴스에 누가 접속할 수 있는지 지정하는 일종의 방화벽입니다. 보안그룹에 모든 접속을 허용하는 것은 집에 문을 열어놓고 사는 것과 같기 때문에 위험합니다. 때문에 보안그룹을 설정하여 제한된 접속들만 인스턴스에 접근하게끔 해야합니다. 보안 그룹에는 IP, 포트, 프로토콜을 설정하여 특정한 접속만을 허용할 수 있습니다.

 이때 네트워크, 특히 IP, 포트와 프로토콜에 대한 이해가 필요했습니다. 학교에서 "컴퓨터 네트워킹"수업에서 배웠던 내용을 다시 정리하고 직접 적용할 수 있는 시간을 가졌습니다.

 

이에 관련한 포스팅 :

2021.04.12 - [WEB] - Internet VS Web

2021.04.14 - [WEB] - Dyanmic IP와 DHCP

2021.04.14 - [WEB] - 공유기 (Private IP, NAT)

2021.04.12 - [WEB] - Port와 Port Forwarding

 

3. 보안 관리

 

 AWS에 관한 정보를 얻기 위해 구글링을 하다보니 생각치 못한 과금 피해를 입은 사례들을 찾을 수 있었습니다.

크게 두가지 종류였는데 첫번째는 생각치 못한 서버를 켜놓은 경우이고 두번째는 해킹이었습니다.

 AWS에서는 1년동안 제한된 서비스를 무료로 사용할 수 있는 프리티어 계정을 제공해줍니다. 제한된 서비스라고 함은 EC2에서는 t2.micro의 성능으로 750시간만 사용이 가능합니다. 750시간을 넘어가게되면 요금을 내야합니다. 24시간*31일 = 744시간, 즉 1대의 서버만 켜놓을 수 있습니다. RDS와 S3에서도 역시 각각의 제한이 있습니다. 이는 학생인 저의 입장에서는 부담이 되는 금액이기 때문에 제한을 넘지않기 위해 수시로 모니터링을 했습니다.

 

 두번째인 해킹사례에 있어서는 더욱 세심한 관리가 필요했습니다.

AWS계정을 해킹하여 비트코인 채굴에 사용하게 되면 몇천만원 금액대의 과금을 내는 경우들이 있습니다. 이런 사례의 대부분은 AWS계정 정보가 포함된 소스코드를 github에 올리면서 일어난 일이였습니다. 때문에 저도 github에 계정정보가 올라가지는 않는지 여러번 확인하였고 AWS의 보안을 강화하기 위해 MFA와, IAM을 설정하였습니다.

 

이에 관련한 포스팅 :

2021.04.19 - [AWS] - [AWS] AWS 사용 요금 확인

2021.04.14 - [AWS] - AWS MFA 설정

2021.04.18 - [AWS] - AWS의 IAM

 

4. S3

 제가 진행하던 Spring 프로젝트에서는 상품을 등록할때 필수로 이미지도 등록해야했습니다. 등록된 이미지는 빠른 조회를 위해 원본 뿐만아니라 섬네일로도 만들어 저장해야했습니다. 이미지를 등록할때는 한 폴더에 지나치게 많은 이미지파일이 저장되지 않도록 '년/월/일' 폴더를 나누어 저장해야했습니다.

 배포하기 전에는 로컬 서버에 저장(C:\\shoppingmall\\upload)하였지만 배포 이후에는 그럴 수 없었습니다. 그래서 AWS의 파일서버, Simple Storage Service(S3)을 사용하였습니다.

 

 EC2와 RDS를 다루는 책과 포스팅들은 많았지만 이미지를 다루는, 특히 섬네일까지 다루는 책과 포스팅은 없었기때문에 주로 AWS의 공식 문서를 참고하며 개발하였습니다. AWS의 공식문서는 주로 영어에 간단한 예제로만 설명되어있어 개발하는데 어려움을 겪었었습니다.

 

이에 관련한 포스팅 :

2021.04.22 - [AWS] - [AWS] S3를 스프링 프로젝트에서 사용하기 - 이미지 업로드

2021.04.23 - [AWS] - [AWS] S3를 스프링 프로젝트에서 사용하기 - 이미지 조회

2021.04.23 - [AWS] - [AWS] S3를 스프링 프로젝트에서 적용하기 - 이미지 삭제

 

 

[ 마치며 ]

 새로운 기술을 배우고 이를 적용하는 것은 흥미롭지만 가끔은 막연한 두려움이 생길 때도 있습니다. 특히 이번 AWS를 사용하는데 있어서는 이러한 감정이 많이 들었습니다. '내가 멀쩡한 프로젝트를 괜히 건드리는 것이 아닐까..?'란 생각이 들었습니다. 그럼에도 불구하고 '내 컴퓨터에서만이 아닌 모두의 컴퓨터에서 실행되었으면 좋겠다. 미루지 말고 이번 기회에 한번 해보자! '라는 생각으로 AWS를 공부하고 이를 적용시켜 배포까지하게 되었습니다.

 

 AWS를 이용한 배포 과정은 막상 해보니 생각보다 간단했고 왜 AWS 사용이 증가하는지에 대해서 느낄 수 있었습니다.

새로운 기술이라고 피하기보다는 역시 도전해보길 잘했다라는 생각이 들었습니다.

 이번 기회를 통해서 프론트엔드, 백엔드에 이어 클라우드라는 새로운 분야에 대해서 도전하고 공부하게 되어 더 넓은 시야를 가질 수 있게 된 것 같습니다.