날씨가 갑자기 겨울로 넘어왔다…
손발이 떨릴정도로 이제 추운 날씨가 왔다.

갑자기 추워진만큼 건강관리를 잘해야겠다.
이제 다음주 부터 슬슬 프로젝트가 시작될 것 같으니
열심히 공부해서 참여하도록해야겠다 !


운영 환경 구성

여태까지 애플리케이션을 위한 프로그램을 배웠다면
이제 유저들이 사용할 수 있도록, 웹서비스에 배포를 해야한다.
그러기 위해서는 클라우드 서비스에 대한 내용을 알아야하며
가장 많이 사용하는 AWS(Amazon Web Service)를 이용할 예정이다.

1


Cloud Computing

기존에는 같은 공간에 더 많은 컴퓨터를 추가하거나, 컴퓨터 성능을 업그레이드했다.
하지만 이러한 방식에는 한계가 존재했다.

  1. 주기적인 관리가 필요
  2. 공간의 한계

와 같은 한계가 존재하다보니 거대 기업들은 데이터 센터라는
건물을 세워 유휴 자원을 대여해주는 서비스들이 생기기 시작했다.
이러한 서비스들은 서버의 자원과 공간, 네트워크 환경을 제공해준다.
이러한 환경을 On-premise라고 한다.

On-Premise : 자체적으로 보유한 전산실 서버에 직접 설치해 운영하는 방식


현대의 클라우드 컴퓨팅은 데이터 센터와 비슷한 역할을하지만
물리적인 컴퓨터가 아닌, 가상컴퓨터를 대여해준다는 점이 다르다.

그럼 클라우드 서비스의 장점이 무었이 있냐면

  1. 컴퓨팅 능력을 유연하게 조절가능
  2. 사용한 만큼 요금만 지불
  3. 컴퓨터의 스냅샷을 이용해 다른 컴퓨터로 즉시 이주가 가능

클라우드 서비스 형태는
SaaS (Software as a Service) : 네트워크+하드웨어+운영체제+DB/플랫폼+애플리케이션
PasS(Platform as a Service) : 네트워크+하드웨어+운영체제+DB/플랫폼
IaaS(Infrastructure as a Service) : 네트워크+하드웨어

이러한 서비스 형태를 제공해주고 서비스 범위가 각각 다르다.
AWS 같은 경우는 IaaS와 가까운 형태이다.


Deploy

전개하다, 배포하다라는 의미를 가지고 있다.
배포는 우리가 개발한 서비스를 사용자들이 이용 가능하게 하는 일련의 과정이다.

✅ 1단계 : Development  
로컬환경에서 개발 및 테스트 하는 단계이다.  

            ↓

✅ 2단계 : Intergration  
각자의 환경에서 개발된 부분을 취합하는 단계이다.  

            ↓

✅ 3단계 : Staging  
다양한 환경에서 테스트를 진행하는 단계이다.

            ↓

✅ 4단계 : Production  
실제로 서비스가 제공되는 단계이다.  

작성한 코드가 다른 환경에서 정상 작동할 수 있게 하려면
설정을 환경변수에 저장해야 한다.
환경 변수는 코드 변경 없이 배포 때마다 쉽게 변경할 수 있다.

이 외에도 docker와 같은 개발 환경 자체를 통일시키는
솔루션을 사용할 수 도 있다.


AWS EC2

2

Amazon Elastic Compute Cloud라고도 부른다.
AWS에서 원격으로 제어할 수 있는 가상의 컴퓨터 한 대를 빌리는 것을 말한다.
이렇게 빌린 컴퓨터를 인스턴스(Instance)라고한다.

Elastic(탄력적인)이라는 영어 단어에서 알 수 있듯이
우리가 사용한 만큼 비용을 지불하기 때문에
비용,성능,용량을 자유롭게 조절할 수가 있다.

EC2의 사용의 장점?

  1. 구성하는데 필요한 시간이 짧다
  2. 다양한 운영체제에 대한 선택이 가능하다

AMI는 Amazon Machine Image의 약자로
소프트웨어 구성이 기재된 템플릿이다.
(윈도우, 우분투 리눅스, 우분투+node.js 등등)
인스턴스 생성시 선택해야하는 소프트웨어라고 생각하면 될 것 같다.
사용 용도에 맞게 운영체제, 런타임 등의 구성된 셋팅을 선택할 수 있다.

AWS EC2 설명서를 확인해보면 도움이 될 것 같다.


RDS

3

Relational Database Service의 약자로
AWS에서 제공하는 관계형 데이터 베이스 서비스이다.

EC2에서 빌린 가상의 컴퓨터에서 MySQL을 설치해서 사용할 수도 있다.
하지만 RDS를 따로 사용하는 이유는

EC2 인스턴스를 사용하면 DB 관련해서
자동으로 관리를 담당하는 부분이 매우 적기 때문에, 사용자가 일일이
시간을 투자해서 데이터베이스 엔진의 설치, 버전관리, 데이터 백업을 해야한다.
또한 가용성과 내구성이 확보되지 않기 때문에, DB의 데이터가 유실되가나
정상적으로 사용하지 못할 확률이 커지고, 후에 필요에 따른 확장이 어렵기 때문이다.

즉, RDS를 이용하면 DB 유지보수와 관련된 일을 RDS에서 자동 관리한다.
사용자가 해야할 일은 초기 설정을 제외하고 DB에 저장된 데이터를 관리하는
일 밖에 없어지기 때문에 큰 편의성을 느낄 수 있다.

또한 여러가지 DB 엔진(Oracle, MySQL, MairaDB 등) 선택지를 제공해준다.


S3

4

Simple Storage Service를 줄여서 S3라고 부른다.
AWS에서 제공하는 클라우드 스토리지 서비스이며,
클라우드 스토리지 서비스는 인터넷 공간에 데이터를 저장하는 저장소를 얘끼한다.
ex) 구글 드라이브, 아이클라우드 등

S3 사용 시 장점?

  1. 데이터를 무한히 저장 가능하다.
  2. 스토리지의 내구성이 높다 (파일 유실가능성이 적다)
  3. 가용성이 보장된다.(저장된 파일들을 정상적으로 사용할 수있는 시간이 길다)
  4. 다양한 스토리지 클래스 제공
    -. Standard 클래스 : 데이터에 자주 엑세스할 때 사용 -. Glacier 클래스 : 데이터를 장기보관할 때 사용
  5. 정적 웹 사이트 호스팅이 가능

정적 파일 : 서버의 개입없이 생성된 파일
웹 호스팅 : 공간을 임대해 주는 서비스

S3에서는 버킷이 사용자들이 웹사이트를 배포할 수 있는 공간을 제공해준다.

버킷은 S3에 저장되는 파일을 담는 최상위 디렉토리이다.
저장되는 파일을 객체라 부르며, 키-값 페어 형식으로 데이터를 저장한다.

또한 S3에 저장되는 객체는 메타데이터가 있다.
객체의 생성일, 크기, 유형등의 정보를 담고있는 데이터 이다.

그리고 모든 객체는 고유한 URL 주소를 가지고 있다.


3 티어 아키텍처

5
출처 - amazon 3 Tier Architecture

3 티어 아키텍처는 배포 전략중 하나로
Client, Server, Database로 나누어 서비스를 제공할 수 있다.

S3 서비스로 Client를 제공할 수 있다.
EC2 서비스로 Sever를 제공해줄 수 있다.
RDS 서비스로 Database를 제공해줄 수 있다.


서버 배포

인스턴스 생성과정은 생략하려한다. AMI는 우분투이다.

5 5

인스턴스에 연결을 하면

6

위와 같은 화면이 뜬다. 이제 여기서 나는 bash가 편하기때문에

bash

그리고 폴더 Root경로를 상단으로 변경했다.

cd ~

여기서 root경로를 상단에 두지않고 git clone과 같은 명령어를
내보낼 경우 Permission denied 에러가 발생할 수 있으니 주의하자

본격적으로 인스턴스에 개발환경을 구축해야한다.

sudo apt update

패키지 매니저가 관리하는 패키지의 정보를 최신 상태로 업데이트한다.


sudo apt install openjdk-11-jre-headless

그리고 jdk를 설치해준다. 확인창이나오면 “Y”를 눌러 진행

설치가 완료되었으면

java --version

을 입력하여 설치가 잘되었는지 확인이 가능하다.

이제 우리가 배포하기위한 프로젝트를 Git에서 가져오면된다.

git clone 레포지토리주소

여기서 처음 셋팅하는 경우에는
SSH Key를 우분투에 발급 받아야한다.
그리고 발급받은 공개키를 GitHub SSH keys에 셋팅을 해줘야
우분투 서버에서 GitHub를 통해 clone을 해올 수 있다..

키 발급과 등록하는것은 생략하겠다.

이제 우리의 프로젝트를 가져왔으니
해당 프로젝트를 빌드해야한다. 우선 폴더경로로 진입해서

./gradlew build

파일을 빌드시켜주면 된다.

그리고 빌드된 .jar파일을 통해 java를 실행시켜보면

java -jar build/libs/DeployServer-0.0.1-SNAPSHOT.jar

Jar파일의 폴더 경로를 지정한 것이다.
그러면 내 인스턴스에서 만들었던 Spring 프로젝트가

7

정상 적으로 실행된 모습을 볼 수 있다.

이제 인스턴스의 퍼블릭 IPv4 DNS 주소를 :8080 포트를 붙여
웹 브라우저 상에서 접속을 시도해본다면

8

내가 만들었던 프로젝트가 정상적으로
보이는 것을 확인할 수 있다.



오늘은 이렇게 Cloud 운영환경에 대해 기초 지식과
실제로 Spring 프로젝트 파일을 빌드해보았다.

여러가지로 신기하고 재밌었다.
이렇게 가상으로 컴퓨터를 빌려 정말 간단하게 운영이 가능하다니..
얼추 이제 어떻게 시스템이 구성되어있고 각자의 위치가
어느정도 감이 잡히고 있다.

요번주도 공부하느라 고생많았다 !!!!
주말에 프로젝트 대비를 위함 Spring MVC 공부를 더해야겠다.

오늘 공부는 여기서 끝 !!


오늘의 커피량: ☕️ ☕️ ☕️
오늘의 점심: 김밥