Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 객체지향
- 코드스테이츠
- 호스트인식
- codestate
- css in js
- 원시자료형
- css
- Prototype
- 참조자료형
- 회고
- codestates
- 프로토타입
- 코드스테이스
- 개발자
- cta버튼
- condestates
- JS
- 자바스크립트
- 계산기
- cta button
- Router
- Javascript #코드스테이츠
- self reliance
- JavaScript
- html
- 프론트엔드
- CDD
- OOP
- frontend
- WAI-ARIA
Archives
- Today
- Total
jh.nrtv
[Deploy] AWS 본문
✅ AWS
아마존 웹 서비스(AWS)란 아마존이 자사의 노하우를 살려 제공하고 있는 ‘클라우드 컴퓨팅 서비스’를 의미합니다. AWS에는 컴퓨팅, 스토리지, 데이터베이스, 분석, 네트워킹, 모바일, 개발자 도구, 관리 도구, IoT, 보안, 엔터프라이즈 애플리케이션 등 다양한 서비스가 준비되어 있으며, AWS의 다양한 서비스를 조합하여 모든 애플리케이션과 인프라를 구축할 수 있기도 합니다.
AWS의 특징
- 서비스를 조합하기 쉽습니다. AWS에서만 제공하는 서비스로도 필요한 기능을 대부분 구축 가능하며, AWS와 AWS 외부 시스템을 조합하여 구축하기 쉽습니다.
- 앞으로 사용할 양을 미리 생각하지 않고 현재 필요한 만큼만 사용하고 부족해지면 그때마다 추가할 수 있으며, 같은 양을 계속 빌려야 하는 정액제와 차별점이 있습니다.
- 네트워크 및 서버가 매우 큰 규모가 아니라면 네트워크나 서버 전문가가 아니더라도 사용 가능합니다.
- 전세계 21개 리전 66개의 시설(가용 영역)에서 데이터 센터 운영하고 있어, 글로벌로 확장 시 확장하고자 하는 지역과 지리적으로 가까운 리전에서 서비스 시작 가능합니다.
- 한국어 지원 및 원화 결제 가능하며, 보안 관련하여 법령, 규정, 프라이버시 기준을 준수하고 있는 안전한 서비스입니다.
이런 AWS는 165개 이상의 서비스를 제공하고 있으며, 목적에 따라 다양한 서비스를 사용할 수 있습니다. 그 중 유명한 서비스로는 EC2, S3, RDS 등이 있습니다. 해당 서비스들에 대하여 개념을 익혀두면 향후 프로젝트에서 여러분들이 만든 앱을 배포할 때 큰 어려움이 없을 것입니다.
✅ Cloud Computing
- 클라우드 컴퓨팅 이전의 서버? 전산실 등에 컴퓨터 배치하고 인터넷을 연결해서 서비스를 제공했음
- 만약 요청 수용능력이 한계에 다다르면? 컴퓨터 추가설치 후 여러 대가 요청 나눠서 해결 or 한 대의 컴퓨터 성능 높여서 해결
- 이러한 방식의 문제점? 주기적인 관리 필요, 공간의 한계
- -> 거대기업의 데이터 센터 등장 -> 유휴 자원 대여 서비스 등장 (클라우드 컴퓨팅의 시작)
- 데이터센터에서 서버의 자원과 공간, 네트워크 환경을 제공 -> '온프레미스'라고 부름
- 클라우드 컴퓨팅 -> 데이터 센터와 비슷한 역할 하지만 물리적 컴퓨터X 가상의 컴퓨터를 대여한다는 차이점 ->가상화 (Virtualization)기술의 발전으로부터 비롯됨
- 다음과 같은 장점 존재
- 필요할 때마다 컴퓨팅 능력 유연하게 조절
- 고정적인 비용 들어가는 온프레미스와 달리 사용한 만큼만 지불
- 컴퓨터의 스냅샷('이미지' 라고 부름) 을 이용해 다른 컴퓨터로 즉시 이주(migration) 가능
- 클라우드의 단점
- 운영환경 자체가 클라우드 제공자에 종속됨 -> 서버장애시 영향받음
- 백엔드 구성 기술이 해당 회사 기술에만 종속됨
- 클라우드는 모든 것을 서비스 하는 것을 목표로 함. 대표적인 클라우드 형태는 다음과 같음
- SaaS -> Software as a Service <-당장 사용가능 소프트웨어
- PaaS -> Platform as a Service <- DB, 개발플랫폼까지 제공
- IaaS -> Infrastructure as a Service <- 대부분의 가상 컴퓨터 제공은 IaaS에 해당
✅ Amazon EC2 (Elastic Compute Cloud)
- EC2란 아마존 웹서비스에서 제공하는 클라우드 컴퓨팅 서비스
- 클라우드 컴퓨팅 서비스? 인터넷(클라우드)를 통해 서버, 스토리지, 데이터베이스 등의 컴퓨팅 서비스를 제공하는 것
- 정리하면 아마존에서 가상의 컴퓨터 한 대를 빌리는 것과 같다.
- EC2의 Elastic = 탄력있는, 유연한 -> 후불제 pc방과 같이 사용한 만큼 비용을 지불하기에 탄력적 , 성능과 용량도 탄력적
- 장점
- 구성하는 시간이 짧다
- AMI ( 제공하는 템플릿 ) 를 통해 필요한 용도에 따라 다양한 운영체제 선택 가능 , CPU나 RAM도 손쉽게 구성 가능
- EC2는 컴퓨터로 할 수 있는 모든 일을 할 수 있다.
- 컴퓨터를 조작하기 위해 네트워크(인터넷)을 통해서만 컴퓨터를 제어해야 한다는 차이만 존재함
- 아마존 EC2를 통해 할 수있는 가장 기본적인 일은 -> 웹서버 설치하고 웹 서버를 통해서 사용자가 요청하는 서비스 제공
- 아마존에서 빌리는 컴퓨터를 인스턴스( Instance)라고 하며, 인스턴스는 컴퓨터 1대를 의미하는 단위
- AMI (Amazon Machine Image) ->소프트웨어 구성이 기재된 템플릿 ->단순히 운영체제(윈도우, 우분투, 리눅스)만 깔린 템플릿을 선택할 수도 있고, 아예 특정 런타임이 설치된 템플릿이 제공되는 경우도 있음(우분투 +node.js)
- Instance는 선택한 AMI를 토대로 구성됨
- 다양한 AMI 세팅이 존재하기에 편리하게 고르거나, 직접 구성할수도 있음
AWS EC2 인스턴스 생성한다 = AMI를 토대로 OS, CPU, RAM 혹은 런타임이 구성된 컴퓨터를 빌린다.
✅ RDS (Relational Database Service )
- RDS ? AWS에서 제공하는 관계형 데이터베이스 서비스
- RDS를 왜 사용할까? EC2에 MySQL과 같은 관계형 데이터베이스 엔진 설치하면 되는데..
- EC2 인스턴스에 데이터베이스를 설치하여 데이터를 관리하는 것은 개인 소유 차량을 이용하는 것과 비슷-> 유지보수 등 시간과 수고가 큼
- 자동관리가 적고, 엔진 설치와 버전관리, 데이터백업 등을 직점 수행, 가용성과 내구성 확보되지않고, 유실될 가능성도 존재, 후에 데이터베이스 규모 확장도 어려움
- 이에반헤 RDS는 렌터카와 비슷 -> 위의 여섯가지 모두 AWS가 유지보수 자동관리 해줌, 사용자는 초기 설정을 제외하고 데이터베이스에 저장된 데이터를 관리하는 일 맊에 없기에 편의성 큼
- 기타 RDS 의 장점
- 다양한 데이터베이스 엔진 선택지 제공
✅ S3 (Simple Storage Service)
- 클라우드 스토리지? 인터넷 공간에 데이터를 저장하는 저장소 ->컴퓨터 부품으로 보면 하드디스크 ->어디서나 접근 가능하기에 접근성 뛰어남
- S3는 AWS에서 제공하는 클라우드 스토리지 서비스
- S3 사용시 이점
- 높은 확장성 ->추가요금 내고 무한히 확장 가능
- 강력한 내구성 ->데이터소실 가능성이 벼락 맞을 확률보다 700배 작다
- 높은 가용성 ->1년 중 8.76시간 동안만 스토리지 이용시 장애 발생
- 다양한 스토리지 클래스 제공 ->저장소 목적에 따라 효율적으로 선택할 수 있는 스토리지 클래스가 달라짐. 대표적으로 (Standard클래스와 , Glacier 클래스)
- Standard -> 빠르게 데이터접근, 보관비용 비쌈 / Glacier -> 데이터 접근 느림, 보관비용 저렴
- 정적 웹사이트 호스팅 가능
- 정적이란? 서버의 개입 없이 생성된 파일
- 동적이란? 클라이언트가 서버에 요청 보내면 서버가 요청에 맞게 그 자리에서 생성한 파일
- 호스팅이란? 서버의 한 공간을 임대해주는 서비스 의미
- S3에서는 버킷이 사용자들이 정적 웹사이트를 배포할 수 있는 공간 제공-> 버킷이라는 저장공간에 정적 파일 업로드 후 버킷을 정적 웹 사이트 호스팅 용도로 구성하면 정적 웹 사이트를 배포 가능
- 버킷이란? S3에 저장되는 파일들이 담기는 바구니 ->파일 저장하는 최상위 디렉터리 ->S3에서 저장되는 모든 파일은 버킷 안에 저장되어야 하고, 무한한 양의 파일 저장 가능, 버킷 이름 리전에서 고유해야함
- 버킷에 담기는 파일을 '객체'라고 부름 -> 키,값 페어 형식으로 데이터를 저장하기 때문
- 객체는 파일과 메타데이터로 구성
- 파일-> 실제 데이터 저장, S3에서는 최대 5TB 가능, 파일의 키는 객체를 고유하게 만드는 식별자
- 메타데이터 -> 객체의 생성일, 크기, 유형 등의 정보가 담긴 데이터
- 버킷이란? S3에 저장되는 파일들이 담기는 바구니 ->파일 저장하는 최상위 디렉터리 ->S3에서 저장되는 모든 파일은 버킷 안에 저장되어야 하고, 무한한 양의 파일 저장 가능, 버킷 이름 리전에서 고유해야함
✅ 배포 전략
- 배포 ? 개발한 서비스를 로컬 영역을 넘어 외부의 사용자가 사용할 수 있도록 하는것
- Client 배포 AWS의 S3 서비스를 통해 사용자들에게 Client 코드 제공 가능
- 로컬 환경에서는 자체 개발 서버 (예, create-react-app)를 이용해서 클라이언트 앱을 실행시키는 것이 보통입니다. 그럼, 클라이언트를 위해서 EC2 인스턴스를 사용해야 할까?
- ->그렇지 않다. 클라이언트 앱을 정적 파일로 빌드해서 제공, 따라서 S3이용해서 클라이언트에 배포
- 이 때 필요한 것이 빌드
- 빌드 ? 불필요한 데이터 없애고, 통합/ 압축해서 배포하기 최적화된 상태 만드는 것 -> 빌드 전보다 데이터 용량이 줄어들고 로딩 속도 빨라진다는 장점
- 하지만 일반적인 의미의 빌드는, 소스코드를 실행 가능한 번들로 변환하는 컴파일 과정을 의미. 웹 앱에서와같이 HTML, CSS, JS의 형태로 배포하는 경우는 조금 다르다. -> 웹 앱은 배포 가능한 정적 파일(static files)의 형태로 만들어 줘야 함.
- S3로 사용자들에게 Client Application을 제공하고 있는데, 사용자가 지구 반대편에 있다면 어떻게 빠르게 서비스를 제공할 수 있을까? -> AWS에서 제공하는 CDN 서비스인 CloudFront를 통해서 각지의 데이터 센터에 데이터를 분산시켜서 저장해 뒀다가 가까운 지역에서 데이터를 주는 방식으로 사용자에게 더 빠르게 서비스를 제공
![](https://blog.kakaocdn.net/dn/ciLTWo/btrXOv3rCw1/Gok3wFEouUpIg4P24ZXcK0/img.png)
- Server Application 배포는? AWS EC2서비스 통해 서버 구성하고 서비스 제공
- AWS에서는 Database 특화 서비스인 RDS 서비스를 제공함. AWS가 유지 보수 작업을 담당하는 RDS를 이용하여 즉시 데이터베이스를 사용할 수 있다. RDS 서비스를 이용하여 EC2를 통해 배포된 Server Application의 데이터를 저장, 제공하는 데이터베이스를 배포가능
- AWS에서 제공하는 Route 53 서비스 이요하면 직관적인 도메인 주소를 통해서 서비스 접근 가능
✅ Deploy
- 기본적으로 4단계 과정을 거쳐서 개발한 서비스 배포
- Development 단계는 각자의 컴퓨터에서 코드를 작성하고 테스트하는 과정. 개발 단계이기 때문에 실제 데이터를 이용하지 않고 더미 데이터를 이용해서 테스트합니다.
- Integration 단계는 각자의 컴퓨터에서 작성한 코드를 합치는 과정입니다. 내가 작성한 코드가 다른 코드를 침범해서 오류를 일으키지 않는지, 코드 간에 conflict가 있지는 않은지 확인하는 과정을 거칩니다.
- Development 환경과 Production 환경은 서로 다를 수가 있으므로 배포에서는, 환경의 차이를 이해하고 환경 설정을 코드와 분리하는 것이 중요.
- 작성한 코드가 다른 환경에서 정상 작동할 수 있게 하려면, 설정을 환경 변수(envvars나 env라고도 불림)에 저장해야 한다. 환경 변수는 코드 변경 없이 배포 때마다 쉽게 변경할 수 있음. 설정 파일과 달리, 잘못해서 코드 저장소에 올라갈 가능성도 낮다. 애플리케이션의 모든 설정이 정상적으로 코드 바깥으로 분리되어 있는지 확인할 수 있는 간단한 방법은 어떠한 인증정보도 유출시키지 않고 코드가 지금 당장 오픈 소스가 될 수 있는지 확인하는 것. 슬라이드에 나온 내용은 이러한 환경 설정을 코드로부터 분리하는 방법론을 이야기하고 있다. 코드 상의 모든 곳에 절대 경로가 아닌 상대 경로를 사용해야 하며, `.env` 등을 이용해 환경 변수를 설정한다. 그 외에도 docker와 같은 가상화 도구는 환경 자체를 메타데이터로 담아서 아예 모든 개발 환경을 통일시킨다.
'Network, server' 카테고리의 다른 글
[Deploy] AWS 실습 (0) | 2023.02.02 |
---|---|
Fetch 사용법(get, post, put, delete) , 커스텀 훅 useFetch (0) | 2023.01.26 |