[백엔드 기초] 클라우드 개념 이해하기 (보충작성 필요)

2025. 11. 11. 20:52·Spring/백엔드 기초

오늘의 학습목표 💡

1. 클라우드 컴퓨팅의 개념을 이해하고 사용해야하는 이유를 설명할 수 있다.

2. AWS가 무엇이고, AWS를 활용하는 방법을 학습하여 프로젝트에 적용할 수 있다.

3. EC2를 생성하고 개발환경을 설정하여 콘솔과 터미널로 EC2를 실행할 수 있다.

4. 리눅스의 개념을 이해하고 터미널을 다룰 수 있다.

5. AWS RDS 에 대해 학습하고 구성할 수 있다.

6. 배포에 대해 이해하고 배포를 진행할 수 있다.

7. 배포된 애플리케이션에 DB를 연결하여 사용할 수 있다.


클라우드 컴퓨팅이란?

: 인터넷을 통해 서버, 저장공간, 데이터베이스, 네트워크, 소프트웨어 같은 컴퓨팅 자원을 필요할 때 빌려쓰는 기술

 

클라우드를 사용해야하는 이유?

안정적인 인프라 환경에 대한 수요가 증가하고 클라우드에 자신들의 인프라를 배포하는 상황이 보편화 되었음.

운영하는 서비스의 규모가 커지고, 동시간대 많은 접속과 요청을 처리하려면 클라우드 인프라에서 제공되는 인스턴스 구성을 적절히 활용할 필요가 생기게 되며 클라우드의 중요성이 커졌음

 

AWS란?

: Amazon Web Services는 세계에서 가장 포괄적이고 널리 채택된 클라우드 플랫폼을 말함

그 이전에 알아야할 개념으로는 리전(Region)과 VPC 의 개념을 인지하고 있어야 함

 

✅ 리전(Region)은 AWS가 전 세계에 분산된 물리적인 데이터 센터의 집합

✅ VPC(가상 사설 클라우드, Virtual Private Cloud)는 AWS 클라우드 내에서 개개인마다의 독립된 가상 네트워크를 만드는 서비스

 

리전 안에 여러개의 VPC를 구성하는 것이 가능하고, 이 리전 내부에 dev/stage/prod와 같이 환경을 격리해서 사용하는 케이스가 있음 

 

+ 서브넷(Subnet)이란?

: VPC 내에서 네트워크를 작은 단위로 나눈 개념, 퍼블릭 서브넷(Public Subnet)이 있고, 프라이빗 서브넷(Private Subnet)이 있음

 

+ 가용 영역(Availability Zone)이란?

: 가용 영역이란 각 리전 내에 물리적으로 격리된 데이터 센터

리전이 동일해도 다른 가용 영역에 AWS 서비스를 각각 배치했다면 물리적으로는 복수의 데이터 센터를 사용한다고 할 수 있음

 

+ Security Group이란?

: 보안그룹(이하 SG)은 AWS에서 제공하는 가상 방화벽으로, EC2 인스턴스와 같은 리소스에 대한 인바운드 및 아웃바운드 트래픽을 제어

 

보안그룹을 통해 누가, 어떤 방식으로 서버에 접근할 수 있는지 세밀한 설정이 가능함

 

서비스 둘러보기

: AWS 대표하는 서비스는 3개로, EC2, RDS, S3가 있음

  • EC2 : 서버가 필요할 때 사용
  • RDS : 데이터베이스가 필요할 때 사용 (MySQL, PostgreSQL 등)
  • S3 : 파일 저장소가 필요할 때 사용 (이미지, 로그, 백업 등)

조금 더 자세히 알아보도록 하자.

 

AWS EC2

: EC2는 클라우드에서 안전하고 크기 조절이 가능한 컴퓨팅 용량을 제공하는 서비스

인스턴스(Instance)는 EC2를 통해 실제로 생성된 개별 가상 서버 한 대를 의미

 

+ 추가 개념 정리

  • Amazon Machine Image (AMI) : AMI는 인스턴스를 시작하는 데 필요한 소프트웨어 구성이 담긴 템플릿. 운영체제, 애플리케이션 서버 등이 미리 구성되어 있으며, Ubuntu와 같은 기본 AMI를 선택하여 인스턴스를 시작하지만, 직접 구성한 서버 환경을 그대로 복제하여 자신만의 커스텀 AMI를 만들 수도 있음. 이는 서버 구성을 표준화하고, 장애 발생 시 신속하게 복구하거나, 트래픽 증가 시 동일한 서버를 여러 대로 확장(Scale-out) 하는 데 매우 유용

  • 인스턴스 유형 : EC2는 컴퓨팅, 메모리, 스토리지 등 특정 워크로드에 최적화된 수백 가지의 다양한 인스턴스 유형을 제공. 인스턴스 유형은 패밀리.세대.크기 형식으로 명명됨.

 

AWS RDS

: RDS는 클라우드에서 관계형 데이터베이스를 손쉽게 설정, 운영 및 확장할 수 있도록 지원하는 완전 관리형 서비스

MySQL, PostgreSQL, MariaDB 등 널리 사용되는 다양한 데이터베이스 엔진을 지원

 

+ 추가 개념 정리

  • DB 인스턴스 (DB Instance) : 클라우드에서 실행되는 격리된 데이터베이스 환경(서버)
    EC2 인스턴스와 유사하게, 워크로드에 필요한 CPU, 메모리, 스토리지 및 네트워크 용량을 선택하여 생성

  • 데이터베이스 엔진 (DB Engine) : DB 인스턴스에서 실행할 특정 관계형 데이터베이스 소프트웨어
    MySQL, PostgreSQL, MariaDB, Oracle, Microsoft SQL Server 등 널리 사용되는 다양한 상용 및 오픈소스 엔진을 지원

  • 관리형 기능 (Managed Features) : RDS의 핵심가치이며, AWS가 자동으로 OS 및 데이터베이스 엔진의 소프트웨어 패치를 적용하고, 사용자가 설정한 주기에 따라 자동 백업을 수행하며, 특정 시점으로 복구(Point-in-Time REcovery)할 수 있는 기능을 제공

  • 고가용성 (Multi-AZ) : 운영중인 기본 DB 인스턴스에 장애가 발생할 경우를 대비해, 다른 가용 영역(Availability Zone) 에 동기식 예비 복제본을 자동으로 프로비저닝하고 유지 관리함. 장애 시 RDS가 자동으로 예비 인스턴스로 트래픽을 전환하여 다운타임을 최소화

  • 읽기 전용 복제본 (Read Replicas) : 읽기 작업이 많은 워크로드의 성능을 향상시키기 위해 원본  DB 인스턴스의 비동기식 복제본을 하나 이상 생성할 수 있음. 애플리케이션은 쓰기 작업은 원본 인스턴스로, 읽기 작업은 읽기 전용 복제본으로 분산시켜 부하를 줄일 수 있음

  • 보안 및  네트워크: VPC 내에서 DB 인스턴스를 실행하여 네트워크 격리를 제공. 보안 그룹을 사용하여 인스턴스에 대한 인바운드/아웃바운드 트래픽을 제어

 

AWS S3

: 인터넷을 통해 언제든지 파일을 저장하고 가져올 수 있는 AWS의 객체 스토리지 서비스로 확장성이 뛰어남
다양한 종류의 파일과 데이터를 수집하고 보관할 목적으로 제공하고 있으며 S3는 Simple Service Storage라는 이름을 줄여 만들었다고 전해짐

 

+ 추가 개념 정리

  • 버킷 (Bucket) : S3에 저장되는 객체(파일)의 컨테이너. 버킷 이름은 S3 리전 내에서 고유해야 하며, 데이터를 저장할 리전을 선택하여 생성. 모든 객체는 특정 버킷에 속하게 됨

  • 객체 (Object) : S3에 저장되는 기본 엔티티로, 파일 데이터와 메타데이터로 구성됨. 데이터는 사진, 동영상, 문서 등 모든 종류의 파일이 될 수 있으며, 각 객체는 고유한 키(이름)을 가짐

  • 스토리지 클래스 (Storage Class) : 데이터의 액세스 빈도와 보관 기간에 따라 다양한 스토리지 클래스를 제공하여 비용을 최적화할 수 있음

  • 높은 내구성 및 가용성 : 객체를 여러 가용 영역(AZ)에 자동으로 복제하여 높은 내구성을 제공하도록 설계. 이는 데이터 손실 가능성이 극히 낮음을 의미

  • 보안 및 액세스 제어 : IAM 정책, 버킷 정책, 액세스 제어 목록(ACL) 등을 통해 버킷과 객체에 대한 세분화된 액세스 권한을 제어할 수 있음. 기본적으로 모든 S3 리소스는 비공개(Private) 임

  • 정적 웹사이트 호스팅 : S3 버킷을 구성하여 HTML, CSS, JavaScript 및 이미지 파일과 같은 정적 컨텐츠로 구성된 웹 사이트를 직접 호스팅할 수 있음 

AWS EC2 알아보기

(연결과정 정리 필요)

Linux란 무엇인가? 

: 배포하고 관리하려는 소프트웨어 서비스를 정상적으로 구동할 수 있도록 도와주는 엔진 역할을 하는 것이 바로 리눅스라는 운영체제라 할 수 있음. 

 

✅ 리눅스에서 자주 사용하는 커맨드

> pwd
> ls
> cat
> grep
> echo
> env
> rm
> cp
> mkdir

 

1️⃣ pwd

: print working directory의 준말로 내가 위치한 폴더(디렉토리)를 보여줌.
주로 현재 터미널 상에 위치한 디렉토리의 절대 경로 파악 시에 사용됨

2️⃣ ls

: list segment의 준말로, 현재 폴더에 있는 파일과 폴더 목록을 보여줌. 
보통의 경우 -alt 옵션을 함께 사용하는데, 이유는 아래와 같다.

-a 옵션 : 숨김 처리된 파일이나 디렉토리까지 출력
-l 옵션 : 파일이나 디렉토리의 이름과 속성정보까지 출력
-t 옵션 : 수정 또는 생성된 시간 순으로 정렬하여 출력

이 과정이 중요한 이유는 터미널을 활용하여 파일의 생성시기와 생성자들을 파악할 수 있기 때문에 중요한 커맨드이다.

3️⃣ cat

: concatenate라는 단어의 약자이며, 특정 파일에 대해 기록된 텍스트를 확인할 목적으로 사용하는 리눅스 명령어

cat gradlew

 

4️⃣ grep

: global/regular expression/print의 약자로 단독으로도 사용할 수 있는 명령어이며, 입력으로 전달된 파일의 내용에서 특정 문자열을 찾고자 할 때 사용하는 명령어를 말한다. 

grep "app" gradlew

 

5️⃣ echo

: 메아리라는 의미로 터미널에 입력한 텍스트를 화면에 출력하거나, 변수를 표시할 때 사용
여기서 변수란, 리눅스에 설정한 환경 변수를 의미한다.

 

6️⃣ env

: environment의 약자로 등록된 환경 변수 목록을 확인하는데 유용하게 사용된다.
즉, 시스템이 요구하는 환경 변수를 구성할 땐 반드시 env를 활용해서 등록이 잘 됐는지 확인해볼 수 있다.

7️⃣ rm

: remove의 약자로 파일 또는 디렉토리를 삭제하는 명령어로 쉽게 말해 화면상에 삭제하기와 동일한 기능
rm으로 삭제된 것은 복귀되지 않기에 주의해야하며 삭제할 때도 파일 단위로 하나만 삭제를 해야함

cd docs
rm curl-examples.md

 

8️⃣ cp

: copy의 약자로 파일이나 디렉토리를 다른 곳으로 복제할 때 사용하는 커맨드
종종 사용하는 예시로는 production 파일의 환경을 다른 개발환경으로 복제하여 사용하기도 하며, 다른 곳에서 작업하다 production 환경으로 옮겨줄 때 사용하기도 함

cp dbdiagram.md dbdiagram2.md

 

9️⃣ mkdir

: make directory의 약자이며, 새로운 디렉토리를 생성할 때 사용된다. 보통 -p라는 옵션과 함께 사용하여 최상위 디렉토리 구성 시에 많이 사용한다.

mkdir -p test_mkdir

 

MySQL(RDS) 연결하기

(연결과정 정리 필요)

 

수동 배포하기

: 그 전에 배포의 개념에 대해서 알아야 하는데, 배포(Deployment)는 개발된 애플리케이션을 사용자가 접근하는 환경에 올려 실제로 동작하게 만드는 모든 활동을 말한다.

실제로 동작하기 위해 만드는 모든 활동이란 다음과 같다.

빌드 → 테스트 → 배포 실행 파일 생성 (jar 파일 구동) → 환경 구성 → 서비스 시작 → 검증 → 트러블 슈팅

 

목표는 안전하게, 일관되게, 재현 가능하게 새 버전을 운영에 반영하는 것으로 어떤 사용자든 문제 없이 사용할 수 있게 클라우드 서버에 올려두는 것

 

✅ 수동 배포와 자동 배포는 무엇인가?

수동 배포는 사람이 직접 위의 과정을 진행하는 배포이고, 자동 배포는 CI/CD 도구가 대신 수행해 재현성과 안정성을 높인 배포

구분 수동 배포 자동 배포
배포 방식 개발자가 직접 파일 복사, 서버 접속, 명령 실행 트리거에 의해 자동 실행
트리거(시작하는 방법) 사람이 직접 배포 버튼 클릭 또는 서버 접속 깃허브 등의 원격 코드 저장소에 이벤트(PR Merge, 코드 Push)가 발생한 경우 자동 실행
사람이 하는 일 서버(EC2)에 접속해서 명령어 실행 -
속도 / 실수 가능성  느리고, 사람의 실수 발생 가능 (환경 변수 누락 등) 빠르고, 항상 동일하게 배포됨
재현 가능성 동일한 결과를 보장하기 어려움 항상 동일한 과정 → 일관된 배포
예시 개발자가 직접 EC2에 들어가서 jar 파일 실행 도구를 활용해 자동 배포

 

 

'Spring > 백엔드 기초' 카테고리의 다른 글

[백엔드 기초] 데이터베이스 기초  (0) 2025.11.13
[백엔드 기초] CI / CD  (0) 2025.11.12
[백엔드 기초] Validation 개념 정리  (0) 2025.10.30
[백엔드 기초] RestTemplate  (0) 2025.10.24
[백엔드 기초] Filter, Spring Security  (0) 2025.10.24
'Spring/백엔드 기초' 카테고리의 다른 글
  • [백엔드 기초] 데이터베이스 기초
  • [백엔드 기초] CI / CD
  • [백엔드 기초] Validation 개념 정리
  • [백엔드 기초] RestTemplate
stark77
stark77
하마의 IT 자기개발 이모저모, 백엔드 개발자로 거듭나기
  • stark77
    하마의 개발자 성장일기
    stark77
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 컴퓨터구조와 운영체제
        • 컴퓨터구조
        • 운영체제
      • SQL 기초
      • Spring
        • 백엔드 기초
        • Spring 실습
      • JAVA
        • Java 실습
      • HTML&CSS
        • HTML&CSS 실습
      • Git&GitHub
        • Git&GitHub 실습
      • 내배캠 끄적끄적
        • Today I Learned
      • 유용한 툴 및 사이트 정리
      • 취미
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    프로세스와 쓰레드
    Spriingboot
    MVC
    RestTemplate
    Java 문법기초
    웹소켓
    백엔드 기초
    BEAN
    algorithm
    for문
    Stomp
    백엔드 기초다지기
    경합조건과 교착상태
    다형성
    java
    네트워크 기초
    Spring
    객체지향
    Til
    thymleaf
    jsp
    Github
    HTML&CSS
    JPA
    객체지향프로그래밍
    SpringSecurity
    String.format
    WebSocket
    실시간 데이터 처리
    git
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
stark77
[백엔드 기초] 클라우드 개념 이해하기 (보충작성 필요)
상단으로

티스토리툴바