DevOps
[AWS] S3 - Simple Storage Service
[AWS] S3 - Simple Storage Service
2025.01.22말 그대로 AWS에서 제공하는 저장소 EBS는 EC2 인스턴스에 붙어서 로컬 디스크처럼 사용되는 블록 스토리지이고, S3는 버킷 구조를 사용하는 객체의 클라우드 스토리지이다. EBS는 디스크 S3는 클라우드 저장소라고 생각하자. S3는 데이터를 거의 무제한으로 저장할 수 있다. 버킷 (Bucket)S3에서 데이터를 저장하는 컨테이너 역할을 수행한다.AWS 계정으로 여러 버킷을 생성할 수 있고, 이 때 생성하는 버킷의 이름은 고유값이다. 객체 (Object)S3에 저장되는 데이터의 단위.Key(Full Path)로 데이터를 식별하고 메타데이터로 파일 형식, 사용자 정의 태그를 명시한다.디렉토리 구조를 지원하지 않지만 Key를 사용해 가상 디렉토리 구조를 표현한다. S3의 접근 제어 방식은 크게 User-B..
[AWS] Route53
[AWS] Route53
2025.01.18Route53은 AWS에서 제공하는 클라우드 DNS로, 사용자가 도메인을 등록하고 트래픽을 다양한 AWS 서비스나 외부 서버로 라우팅하는 기능을 제공한다. (53은 port) TLD(Top Level Domain)는 도메인 이름의 가장 마지막 부분이다. gTLD - .com / .org / .net 등 전 세계 공용 TLD ccTLD - .kr / .us 등 특정 국가나 지역을 나타내는 TLDnTLD - .app / .tech 등 비교적 최근에 추가된 특수 목적 TLD SLD(Second Level Domain)은 TLD 바로 앞에 붙어 도메인의 고유한 이름을 정의하고, SubDomain은 SLD 앞에 붙어 도메인을 세분화한다. 브라우저가 도메인 이름으로 목적지 IP를 찾을 때는..
[AWS] RDS - Relational Database Service
[AWS] RDS - Relational Database Service
2025.01.17클라우드에 RDB를 배포할 때 그냥 EC2를 사용해서 RDB 실행시키면 되지만, AWS는 운영편의성 및 자동화를 위해 RDS서비스를 제공한다. EC2에 RDB를 직접 배포할 때는 DB 설치, 구성 작업을 직접 수행해야 하고, 백업 및 복구 작업을 수동으로 처리해야 한다. RDS는 초기 설정을 알아서 처리해주고 일정 기간마다 데이터를 백업해 Timestamp 기반 복구를 지원해주고, Multi Availability Zone 배포로 장애 발생 시 자동 복구 기능을 사용하는 등 여러 편의 기능을 제공한다. 읽기 작업을 분산해 트래픽 증가에 대응할 때는 Read Replica를 사용한다.각 복제본들은 원본 데이터베이스로부터 비동기적으로 데이터를 복제하는데.. 덕분에 성능 저하는 없지만 복제 지연이 ..
[AWS] Availability and Scalability
[AWS] Availability and Scalability
2025.01.14AWS에서는 ELB(Elastic Load Balancer)를 사용해 트래픽을 여러 대상에 효율적으로 분신시켜 애플리케이션의 Availability와 Scalability를 높인다. 리버스 프록시처럼 클라이언트의 요청을 로드밸런서가 받아 여러 백엔드 리소스에게 넘겨주는 역할을 수행한다.이 때 트래픽 분산 알고리즘과 Health Check가 적용되고, 트래픽 증감에 따라 ELB는 자동으로 확장되거나 축소된다. 클라이언트에게 백엔드 리소스의 IP 정보를 숨길 수 있어 보안을 강화할 수 있고, 복잡한 설정을 AWS가 자동으로 관리해줘서 개발자는 비즈니스 로직 개발에 집중할 수 있다. 실제로 EC2에 엔진엑스같은 웹서버를 설정해 직접 로드밸런서를 구성할 수도 있지만, ELB가 제공하는 Auto Scailin..
[AWS] EC2 - Elastic Compute Cloud
[AWS] EC2 - Elastic Compute Cloud
2025.01.10EC2는 AWS에서 제공하는 깡통 컴퓨터라고 생각하면 된다. 보통 EBS, ELB, ASG 등 EC2를 더 쉽게 사용할 수 있도록 도와주는 여러 AWS 서비스들과 함께 사용한다. 용도에 따라 CPU, RAM, GPU, 스토리지, OS 등을 선택해 맞춤형 인스턴스를 구성할 수 있고대여한 EC2 인스턴스에 Security Group을 설정해 방화벽을 구성할 수 있다. Security Group은 클라우드 환경에서 수행되는 방화벽으로 AWS가 제공하는 소프트웨어 방화벽으로 생각하면 된다.물리적인 방화벽을 직접 제어하는게 아니고 가상화된 네트워크 수준에서 트래픽을 제어하는 방식으로 작동한다. 설정한 Security Group은 재사용 할 수 있고, 한 번 정의한 그룹을 다른 EC2 인스턴스에도 재사용 할 수 ..
[AWS] IAM - Identity and Access Management
[AWS] IAM - Identity and Access Management
2025.01.06AWS IAM은 클라우드 리소스에 대한 보안 및 접근 제어를 관리하는 서비스이다. 스프링 시큐리티에서 권한과 그룹을 설정하는 것과 유사하다.AWS 계정 내에서 사용자, 그룹, 역할, 정책을 활용해 세분화된 권한을 설정한다. 먼저 계정을 만들고 AWS 웹 콘솔에 접근할텐데.. 여기서 만든 계정은 루트 계정으로, 모든 AWS 서비스에 접근할 수 있는 권한을 가진다. AWS 계정 하나로 여러 IAM 사용자를 만들 수 있고, 각 사용자는 IAM 서비스가 제공하는 권한에 따라 지정된 서비스에만 접근할 수 있다. (ex. 개발자는 EC2, 데이터 분석자는 S3 버킷에만 접근) https://[IAM 아이디].signin.aws.amazon.com/console IAM 사용자들은 각각 고유한 URL을 발급..
[k8s] 쿠버네티스 도입
[k8s] 쿠버네티스 도입
2023.12.17도커를 사용해 여러 애플리케이션을 배포할 때, 한 컨테이너에 문제가 생겨 종료되는 경우 관리자가 문제를 확인하고 컨테이너를 다시 시작해 줘야 한다. 또, 특정 컨테이너에만 트래픽이 몰리는 경우 역시 관리자가 문제를 확인하고 스케일링 작업을 수행해 줘야 한다. AWS ECS 클라우드를 사용하는 경우 위에서 언급한 문제를 일부 해결해 주지만, 클라우드가 제공하는 기능에 의존적이게 돼 클라우드 변경 시 다른 방법을 찾아야 한다. 이런 문제를 해결하기 위해 Kubernetes가 도입됐다. 쿠버네티스는 컨테이너화된 애플리케이션의 배포, 확장 관리를 자동화하는 오픈소스 시스템으로 배포 환경에 관계없이 어디서든 사용될 수 있다. 1. 확장성 트래픽에 따라 컨테이너 인스턴스를 확장하거나 축소할 수 있고 로드밸런싱을 통..
[Docker] 네트워킹과 Docker Compose
[Docker] 네트워킹과 Docker Compose
2023.12.10도커는 다른 환경으로부터 격리된 환경에서 작동하고, 도커를 통해 만든 애플리케이션을 배포하게 되면 localhost가 더 이상 호스트 머신의 localhost를 의미하지 않게 된다. 백엔드 / 프론트엔드 / 데이터베이스 각 애플리케이션을 도커를 통해 배포했다고 해보자. 로컬에서 도커를 사용하지 않고 배포한 경우 백엔드에서 데이터베이스로 통신할 때 localhost:27017처럼 localhost로 데이터베이스와 연결할 수 있지만, 각 애플리케이션을 도커를 사용해 배포한 경우 컨테이너들은 호스트 운영체제와 독립된 환경에서 동작하기에 localhost 말고 다른 방법으로 접속해야 한다. docker run -p 8000:80 my_image 여기서 -p 8000:80 부분은 호스트 머신에서 사용할 포트 : ..
[Docker] Dockerfile 프로젝트 배포하기
[Docker] Dockerfile 프로젝트 배포하기
2023.12.06FROM node WORKDIR /app COPY . /app RUN npm install EXPOSE 80 CMD ["node" "server.js"] FROM :이미지 빌드를 위한 기반 이미지를 설정하고, 도커는 node라는 이름으로 이미지를 찾는다. WORKDIR : 컨테이너 내부의 작업 디렉토리를 생성한다. 모든 작업은 이 경로에서 실행된다. COPY : (Dockerfile이 위치한 호스트 파일시스템) (컨테이너 내부) / 실행에 필요한 소스코드나 묶음 파일을 복사할 때 사용한다. 도커는 실행 환경을 구축하는 역할도 하지만, 실제로 애플리케이션을 실행할 수 있어야 한다. 마운트를 사용해도 괜찮다. RUN : 이미지 빌드 중 명령어를 실행해 WORKDIR 내부에서 필요한 종속성을 설치한다. EXP..
[Docker] Docker Compose
[Docker] Docker Compose
2023.03.24MSA 처럼 여러 가지 서비스들이 모여서 하나의 애플리케이션을 구성하거나, Frontend / Backend / Database 가 모여서 하나의 애플리케이션을 구성하는 경우에 애플리케이션을 도커로 배포하려면 각각의 서비스들을 컨테이너로 띄워야 한다. 각 서비스들을 띄울 때 docker container run 명령어를 하나씩 실행하고 있자니.. 너무 번거롭고 실수할 확률도 높아진다. 이렇게 여러 서비스들이 합쳐저 애플리케이션을 구성하는 형태의 애플리케이션을 도커로 배포할 때 도커 컴포즈를 사용한다. version: '3.7' services: accesslog: image: diamol/ch04-access-log networks: - app-net iotd: image: diamol/ch04-imag..
[Jenkins] Pipeline Script
[Jenkins] Pipeline Script
2023.03.22node { def mvnHome stage('Preparation') { // for display purposes // Get some code from a GitHub repository git 'https://github.com/jglick/simple-maven-project-with-tests.git' // Get the Maven tool. // ** NOTE: This 'M3' Maven tool must be configured // ** in the global configuration. mvnHome = tool 'M3' } stage('Build') { // Run the maven build withEnv(["MVN_HOME=$mvnHome"]) { if (isUnix()) { s..
[Jenkins] CI와 젠킨스
[Jenkins] CI와 젠킨스
2023.03.22기존 소프트웨어 개발 사이클은 위와 같다. 요구 사항 분석 -> 설계 -> 구현 -> 테스트 -> 유지보수 워터폴 모델이라고 불리는 이 사이클은 수십 년 동안 원활하게 작동했지만, 몇 가지 단점이 있다. - 새로운 요구 사항이 자주 발생하는 영역에 적합하지 않다. - 개발이 끝난 후 통합이 진행돼 통합 관련 이슈들이 마지막 단계에서 발견된다 - 각 단계에서 진행 상황을 파악하기 쉽지 않다. 이런 단점을 극복하기 위해 새로운 개발 사이클인 애자일 방법론이 도입됐다. 애플리케이션을 여러 기능으로 분류하고 개발을 진행한다. 계획 -> 요구사항 분석-> 설계 -> 개발 -> 테스트 -> 배포 위의 사이클을 각 기능별로 수행해 기능을 빠르게 구현하고 고객에게 피드백을 받는 구조이다. 요구 사항이 자주 변경되는 프..