241218 AWS EC2

241218 에이콘 아카데미 수업에 기반하여 작성되었음을 알립니다.


클라우드 개념

오늘의 AWS 실습 전 개념을 잡고가보자!

 

온 프레미스

기업의 서버를 클라우드 같은 원격 환경에서 운영하는 방식이 아닌, 자체적으로 보유한 전산실 서버에 직접 설치해 운영하는 방식을 의미한다.

 

하나의 컴퓨터(서버)를 두고 서비스를 시작했는데 서비스를 이용하는 사용자가 많아진다면 서버의 성능을 늘려야 한다. 이렇게 자체적으로 서버 성능을 늘리는 것을 scale up이라고한다. 계속해서 사용자가 늘어난다면 여러 개의 컴퓨터를 사용할 수 있는데 이렇게 서버를 운영하는 것을 scale out이라고 한다.

 

이렇게 온 프레미스 방식의 장점은 기업의 비즈니스 정보를 보안성 높게 관리할 수 있다는 것이고 단점은 시스템을 구축하는데 있어서 많은 시간과 비용이 들어간다는 것이다.

 

그렇기에 최근 기업에서는 온 프레미스 대신에 오프 프레미스(클라우드)을 사용한다. 중요 데이터는 온 프레미스으로, 반대의 경우 오프 프레미스를 사용한다.

🙏 [IT정보] 온프레미스(On-premise) 개념

Cloud Computing

 

Cloud Computing이란 인터넷을 통해 가상화 된 컴퓨터의 IT 리소스를 제공하는 것을 의미한다. 인터넷 기반 컴퓨팅의 일종으로 정보를 자신의 컴퓨터가 아니라 네트워크에 연결된 다른 컴퓨터로 업무를 처리하는 기술을 의미한다. 하드웨어, 소프트웨어적으로 자원을 제공하는 것이다.

 

클라우드 서비스 업체(AWS, 네이버 등)는 굉장히 많다. 각 업체별 특징, 성능, 비용, 확장성, 보안, 어떤 서비스를 지원하는지 고려해보고 결정한다.

 

X As A Service
 - Socar, 따릉이 : Mobility As A Service
 - Airbnb : Housing As A Service
 - Netflex : Video As A Service
 - Computing Resource As A Service

 

Cloud의 특징
 - 컴퓨팅 자원을 원할 때, 사용하는 만큼 요금을 지불하고 사용한다. 
    On Demand : 수도물 사용, 전기 사용 ...
 - 클라우드를 도입하면 Computing Resource에 수요에 따른 자원을 탄력적으로 운영 할 수 있다. 
 - 시스템에 대한 별도의 관리를 할 필요가 없다.


Cloud Computing 분류 기준 중 Service Model에따른 분류 유형 
  - IaaS : 물리적 또는 논리적인 컴퓨터를 제공, 시스템만 제공해준다. (Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP))
  - PaaS : code만 개발해서 배포하면 서비스 되는 환경을 제공, 데이터를 넣고 프로그램만 개발하면 된다.
  - SaaS : 돈만 내면 모든 것을 제공

 

라면을 끓여먹는다고 가정

IaaS : 주방만 제공, 내가 냄비, 라면, 물, 파, 계란, 레시피 등을 내가 준비해야한다.

PaaS : 주방, 주방 기기, 요리 재료까지 제공, 내가 레시피를 준비해야한다.

SaaS : 주방, 주방 기기, 요리 재료, 레시피 모두를 제공해준다. 끓여 먹기만 하면 된다.

 

CI/CD

소프트웨어 개발과 배포를 효율적으로 자동화하는 프로세스를 의미하며, 두 가지 주요 개념인 CI(지속적 통합)와 CD(지속적 배포 또는 지속적 제공)를 포함한다. 하기 링크에 들어가서 한번 읽어보자!

 

 - CI (Continuous Integration, 지속적 통합) : 개발자들이 작성한 코드 변경 사항을 자주 중앙 저장소에 통합하고 자동화된 빌드와 테스트를 실행하는 프로세스이다. 이를 통해 코드 품질을 유지하고 버그를 빠르게 발견할 수 있다.
 - CD (Continuous Delivery, 지속적 제공) : CI를 통해 통합된 코드가 자동으로 스테이징 환경이나 테스트 환경에 배포될 수 있도록 준비하는 과정이다. 사람이 수동으로 승인하면 프로덕션에 배포할 수 있다.
 - CD (Continuous Deployment, 지속적 배포) : 지속적 제공을 한 단계 더 확장한 개념으로, 코드 변경 사항이 자동화된 테스트를 통과하면 자동으로 프로덕션 환경에 배포된다. 별도의 수동 작업이나 승인 과정이 필요 없다.
간단하게 말해
  CI: 코드 변경 사항을 자주 통합하고 자동 테스트를 수행하는 과정.
  CD: 코드가 프로덕션 환경에 안정적으로 배포되도록 준비하거나 자동 배포하는 과정.
이 과정을 통해 개발팀은 소프트웨어를 더 빠르게, 더 안전하게 배포할 수 있다.

 

가장 많이 쓰이는 CI/CD 도구 5가지

1. 젠킨스
2. 서클CI
3. 팀시티
4. Bamboo (대나무)
5. GitLab

 

🙏 CLOUD platform, hosting 서비스

🙏 클라우드 개념 및 AWS 기본 용어정리

🙏 클라우드 서비스의 개념에 대한 이해

🙏 CI/CD 란

클라우드 배포 모델

  • 공개형(클라우드)
    • 모든 부분이 클라우드에서 실행
    • 낮은 비용
    • 높은 확장성
    • 보안과 제어를 중요시하는 업무(환경)에서 사용
    • 단일조직에서 주로 제공된다.
  • 폐쇄형(온프레미스)
    • 높은 수준의 커스터마이징이 가능하다
    • 초기 비용이 비싸다
    • 유지 비용이 비싸다
    • 보안성이 높다
  • 혼합형(하이브리드)
    • 폐쇄형과 공개형의 혼합
    • 폐쇄형에서 공개형으로 전환하는 과도기에 사용한다
    • 혹은 폐쇄형의 백업용으로 사용한다.

🙏 [CLOUD] 클라우드 컴퓨팅 모델 종류

가상화

서버, 스토리지, 네트워크 및 기타 물리적 시스템에 대한 가상 표현을 생성하는 데 사용할 수 있는 기술이며, 가상 소프트웨어는 물리적 하드웨어 기능을 모방하여 하나의 물리적 머신에서 여러 가상 시스템을 동시에 실행한다. 대량의 시스템을 필요로 하는 기업이나 단체는 가상화를 통해 하드웨어 자원을 효율적으로 사용하여 투자 대비 이익을 더 많이 얻을 수 있다. 또한 클라우드 컴퓨팅 서비스를 지원하여 조직의 인프라를 더욱 효율적으로 관리할 수 있다.

                            1세대                                  2세대                                2세대

AWS와 같은 3세대의 경우 하이퍼바이저 없이 하드웨어 위에 바로 App OS를 만들어 올려놓는 방법이다.

 

🙏 클라우드 서비스의 개념에 대한 이해


AWS Budgets 

예산 생성

 

 

예산 생성 완료


AWS VPC(Virtual Private Cloud)

Amazon Web Services(AWS)에서 제공하는 논리적으로 격리된 가상 네트워크입니다. VPC를 사용하면 AWS 클라우드 내에서 사용자의 네트워크 환경을 설정하고 관리할 수 있으며, 이는 사용자가 온프레미스 데이터 센터에서 사용하는 네트워크와 유사하게 동작합니다.

 

 

AWS VPC의 특징
  - 계정 생성 시 default로 VPC를 만들어 줌
  - EC2, RDS, S3 등의 서비스 활용 가능
  - 서브넷 구성
  - 보안 설정(IP block, inbound outbound 설정)
  - VPC Peering(VPC 간의 연결)
  - IP 대역 지정 가능
  - VPC는 하나의 Region에만 속할 수 있음 (다른 Region으로 확장 불가능)

 

🙏 AWS Virtual Private Cloud – Guide

 

사용 사례:

  • 웹 애플리케이션 호스팅: 퍼블릭 서브넷에서 웹 서버를 호스팅하고, 프라이빗 서브넷에서 데이터베이스 서버를 운영하여 보안을 강화할 수 있습니다.
  • 하이브리드 클라우드 환경: VPC를 사용하여 온프레미스 네트워크와 AWS 클라우드를 안전하게 연결하여 하이브리드 클라우드 환경을 구축할 수 있습니다.
  • 데이터 분석: 대규모 데이터 분석 작업을 위해 VPC를 사용하여 클라우드에서 데이터를 안전하게 처리하고 저장할 수 있습니다.

AWS VPC는 사용자에게 매우 유연하고 안전한 네트워크 환경을 제공하며, 클라우드 인프라를 설계하고 배포하는 데 필수적인 구성 요소입니다.

🙏 AWS VPC(Virtual Private Cloud)


AWS EC2

인스턴스 생성

HVM (하드웨어 버츄얼 머신) 3세대 사용

EBS (엘라스틱 블록 스토리지)

Amazon Machine Image(AMI) 가상화를 사용하기 위한 이미지 파일

💡애플리케이션 및 OS 이미지(Amazon Machine Image) 
🙏 Docker Hub(도커허브) 사용법
🙏 도커와 컨테이너의 이해 (3/3) - Docker image, Dockerfile, Docker compose

인스턴스 생성 완료

 

보안 설정

인바운드 규칙(외부에서 AWS으로 접근)설정 그 반대는 아웃바운드 규칙인데 설정할 경우가 거의 없다.

핑 확인

우분투 실행

방화벽 상태 확인

 

Java 설치

🙏 리눅스(Ubuntu)에서 자바 실습 환경 구축

 

MariaDB 설치

🙏 Linux에 MariaDB 설치

 

# MariaDB 서버에 접속

 

우분투 MariaDB 서버의 외부 접속 관련 설정 문제 해결해줘야함 (상기 링크 참고)

💡 AWS Security Group과 서버 방화벽의 관계
AWS Security Group: 클라우드 인프라의 외부에서 서버로 들어오는 트래픽을 제어
서버 방화벽(UFW/iptables): 서버 내부에서 포트에 대한 접근을 제어
AWS EC2 방화벽과 별개로 서버 방화벽, 두 방화벽 모두에서 허용 규칙이 설정되어야 한다.

 

서비스 배포

이클립스

application.properties : AWS IP 변경

spring.application.name=sprweb00sangdata

server.port=8080
spring.thymeleaf.cache=false

#mariadb server connect
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://43.201.30.30:3306/test
spring.datasource.username=root
spring.datasource.password=1111
# jpa
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.use_sql_comments=true
logging.level.org.hibernate.type.descriptor.sql=trace
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDBDialect

윈도우에서 AWS에 저장한 데이터 조회

파일질라

1. 콘솔로 이동 : 명령 프롬프트(cmd)로 이동
> cd c:\work\spring-sou\testproject
2. 빌드하기
> gradlew build
3. 빌드가 되지 않을 때 빌드 폴더를 삭제하고 다시 빌드하는 명령어
> gradlew clean
> gradlew clean build
4. jar 파일 생성 확인
> cd build/libs
> dir
5. 웹 프로젝트 배포 : 프로젝트명-0.0.1-SNAPSHOT.jar 파일만 복사해서 서버에 넣고, jar 파일을 실행
> java -jar 프로젝트명-0.0.1-SNAPSHOT.jar

💡ubuntu 서버에도 포트 허용
$ sudo ufw allow 22/tcp
$ sudo ufw reload
$ sudo ufw enable
$ sudo ufw status

 

연결 성공

배포파일 전송

서비스 작동 확인!

 

✨ 실습 완료 후 인스턴스 중지 / 종료(삭제), 종료됨으로 변경되는것까지 확인해줘야함!

✨ 설정했던 보안 그룹도 삭제! (굳이 안해도 괜찮음)

탄력적 IP 주소가 있으면 과금될 수 있음!