본문 바로가기
부트캠프 개발일기/Cloud

72일차: 배포(AWS)

by shyun00 2023. 5. 25.

❯ 클라우드 컴퓨팅

가상의 컴퓨터를 대여하여 사용한다고 생각하면 이해하기 쉽다. 필요한 경우 컴퓨터 능력을 조절 가능하며 사용한 만큼의 요금을 지불하면 된다. 또한 스냅샷을 사용해 다른 컴퓨터로의 이주가 가능해 관리하기 용이하다.

클라우드 서비스의 종류는 다음과 같이 구분할 수 있다.

  • SaaS(Software as a Service): 당장 사용 가능한 소프트웨어를 제공하는 방식이다. ex.구글 드라이브, Dropbox
  • PaaS(Platform as a Service): 애플리케이션 개발 및 배포를 위한 플랫폼을 제공한다. ex. Heroku, AWS Elastic Beanstalk
  • IaaS(Infrastructure as a Service): 가상화된 컴퓨터 리소스를 제공하는 방식이다. ex. Amazon EC2

이번 학습에서는 AWS의 서비스에 대해 학습할 예정이다. (EC2, RDS, S3)

배포(Deployment)

소프트웨어 애플리케이션을 실제 운영 환경에서 실행 가능한 상태로 만드는 과정을 의미한다.

크게 네가지 단계로 이루어진다.

  1. Development: Local 환경에서 개발, 테스트를 진행한다. 더미데이터를 사용해 각자 환경에서 수행한다.
  2. Integration: 작성된 코드를 취합하고 코드간의 Conflict, 충돌이 있는지 확인한다.
  3. Staging: 실제 출시 단계와 유사한 환경에서 테스트한다.
  4. Production: 개발된 서비스를 출시한다.

배포를 할 때, 중요한 환경설정 요소들을 코드와 분리시키는 것이 필요하다. 절대경로 대신 상대경로를 사용하고 환경변수를 통해 설정해주는것이 좋다. -> Docker 를 통해 환경 자체를 메타데이터로 담아서 개발 환경을 통일시켜줄 수 있다.

EC2(Elastic Compute Cloud)

AWS에서 제공하는 클라우드 컴퓨팅 중 하나로 가상화된 컴퓨팅 리소스를 제공한다.

가상 서버를 제공하며 사용자는 필요에 따라 성능과 용량을 조절할 수 있고 사용한 만큼의 비용을 지불한다.

AMI(Amazon Machine Image): 소프트웨어 구성이 기재된 템플릿으로, 인스턴스의 운영체제나 소프트웨어, 설정, 데이터 및 보안 설정등을 포함한다. AWS에서 다양한 운영체제와 소프트웨어, 프레임워크를 제공하고있어 필요에 맞게 사용 가능하다.

=> 즉, AWS EC2 인스턴스를 생성한다는 것은 AMI를 바탕으로 구성된 운영체제, CPU, RAM 혹은 런타임 등을 장착한 컴퓨터를 빌리는 것이다.

RDS(Relational Database Service)

AWS에서 제공하는 관계형 데이터베이스 서비스이다. 사용자가 별도로 데이터베이스 인프라를 구축하거나 관리할필요 없이 관계형 데이터베이스를 사용할 수 있다.

MySQL, PostgreSQL, Oracle Database, Amazon Aurora 등의 엔진을 사용할 수 있으며 데이터베이스 관리 작업 없이 사용할 수 있다. RDS는 데이터베이스 인스턴스에 대한 보안을 제공한다. VCP(Virtual Private Cloud) 내에서 실행되며 데이터베이스 암호화, 액세스 제어, 네트워크 보안 그룹 등의 기능을 제공한다.

S3(Simple Storage Service)

AWS에서 제공하는 객체 스토리지 서비스이다.

파일, 이미지, 비디오, 문서 등과 같은 객체를 저장하는데 사용된다. S3를 사용해 애플리케이션 데이터, 정적 웹사이트 호스팅 등을 관리할 수 있다. 객체는 버킷에 담기는 파일로 파일(실제 데이터)과 메타데이터(생성일, 크기 등의 정보)로 구성되며 고유한 URL 주소를 가진다.

S3는 다음과 같은 특징을 갖는다.

  • 확장성: S3는 거의 무제한의 저장 용량을 제공하며 필요에 따라 데이터를 쉽게 확장할 수 있다.
  • 내구성: 여러 복제본으로 복제되어 저장되므로 데이터의 유실이나 손상 위험을 최소화 한다.
  • 가용성: 여러 region에 걸쳐서 데이터를 복제하므로 정상 사용 가능성을 높인다.
  • 보안: 데이터 암호화, 액세스 제어, 버킷 정책 등을 통해 데이터에 대한 보안을 강화한다.

3 Tier-Architecture 배포 전략

애플리케이션을 세가지 계층으로 구성하는 패턴이다. Client(Presentation Layer), Server(Application Layer), Database(Data Layer)로 구성되며 각 계층은 독립적으로 개발, 배포, 확장, 유지보수될 수 있다.

  • 프리젠테이션 계층: 사용자가 애플리케이션과 상호작용하는 Client, Frontend 부분을 말한다.
          S3를 이용해 정적 데이터를 전달하며 CDN* 서비스인 CloudFront를 통해 콘텐츠를 빠르게 제공할 수 있다.
          *CDN: Content Delivery Network, 사용자에게 더 빠르고 안정적 콘텐츠 제공을 위해 설계된 분산 서버 네트워크.
  • 애플리케이션 계층: 비즈니스 로직을 처리하고 데이터 처리를 위한 인터페이스를 제공하는 계층으로 Backend, Server 부분이다.
          E2를 이용해 서버 코드를 배포할 수 있다.
  • 데이터 계층: 데이터베이스와 같이 데이터 저장 및 관리 시스템을 의미한다. 
          RDS를 이용해 데이터베이스를 사용할 수 있다. 

 

참고자료

스프링부트 jar 파일 백그라운드 실행 방법

Linux 프로세스 확인 / 종료

3계층 아키텍처(3 Tier Architecture)


오늘은 오타와의 싸움이었다. 강의 자료에 있는 내용을 따라서 작성했으나 중간중간 오류가 발생했는데

전부 다 오타나 주소값을 잘못 입력해서 발생한 오류들이었다.

아무래도 코드들이 비슷비슷하게 생기다보니 잘못 보기 쉬운것같다. 꼼꼼하게 확인하는 습관이 필요할듯하다.

'부트캠프 개발일기 > Cloud' 카테고리의 다른 글

77일차: 운영 전략  (0) 2023.06.02
76일차: Github Actions  (0) 2023.06.01
75일차: AWS 배포 자동화(Automated Deployment)  (0) 2023.05.31
74일차: Docker  (0) 2023.05.30
73일차: 3 Tier Architecture 배포 실습  (0) 2023.05.26