새로운 인프라 환경이 온다

JEONGYUJIN·2025년 4월 5일
0

인프라 스터디

목록 보기
1/4

1. 소개 및 아키텍처

새로운 인프라 환경

💡 핵심 개념

  • IaaS(Infrastructure as a Service) 필요에 따라 인프라를 선택하고 조합하여 사용하는 서비스
  • 애자일(Agile) 개발 방법론 짧은 주기를 통해 프로토타입을 만들고 개선하며 목표에 접근
  • 컨테이너(Container) 운영체제 커널에서 독립적으로 실행되는 프로세스 상태, 가상화보다 가볍고 빠름

주요 개념 상세 설명

개념설명예시
IaaS클라우드를 통해 필요한 인프라를 서비스 형태로 제공, 사용량에 따라 비용 지불AWS, Azure, GCP 등에서 필요한 만큼의 VM, 스토리지, 네트워크 사용
애자일짧은 주기(스프린트)로 반복적 개발과 테스트, 지속적 피드백 반영2주 단위 스프린트로 프로토타입 개발, 사용자 피드백 반영하여 개선
컨테이너애플리케이션과 실행환경을 포함한 독립적 실행환경, 호스트 OS 커널 공유로 자원 효율적Docker를 사용해 앱과 라이브러리, 설정 파일을 패키지로 배포

모놀리식 아키텍처

모놀리식 아키텍처(Monolithic Architecture)
하나의 애플리케이션에 여러 기능이 통합된 구조

장점과 단점

장점단점
초기 개발이 간단유지보수 어려움: 코드 복잡성 증가로 버그 수정, 기능 추가 어려움
배포가 용이확장성 부족: 특정 기능 사용량 증가 시 전체 앱 확장 필요
작은 프로젝트에 적합기술 혁신 어려움: 새로운 기술 도입 시 전체 시스템 변경 가능성
장애 위험 증가: 한 부분의 오류가 전체 서비스에 영향

예시 | 뉴스, 카페, 웹툰이 한번에 있다면?

웹툰에 트래픽이 몰리는 등 기능에 문제 발생 시 전체 서비스에 영향을 미칠 수 있음


마이크로서비스 아키텍처

마이크로서비스 아키텍처(MSA, Microservices Architecture)
개별 기능을 하는 작은 서비스들을 개발하여 연결하는 구조
![](https://velog.velcdn.com/images/yujin_jeong/post/2f12ccaa-4e91-45f6-9c65-1643aad3d884/image.png)

핵심 구성 요소

  • API 게이트웨이 외부 요청을 적절한 마이크로서비스로 라우팅
  • 서비스 디스커버리 마이크로서비스의 위치 관리 및 통신 지원
  • 이벤트 버스 서비스 간 비동기 통신 지원

장점과 단점

장점단점
독립적 개발/배포/확장: 각 서비스는 다른 서비스에 영향 없이 개발, 배포, 확장 가능복잡성 증가: 서비스 간 통신 관리 복잡
장애 격리: 특정 서비스 문제가 다른 서비스에 영향을 미치지 않음데이터 일관성: 서비스 간 데이터 일관성 유지 어려움
기술 다양성: 각 서비스에 적합한 기술 선택 가능모니터링/관리 복잡성: 전체 시스템의 모니터링 및 관리 복잡

예시: 온라인 쇼핑몰

사용자 서비스, 상품 서비스, 주문 서비스, 결제 서비스, 배송 서비스로 분리하여 독립적으로 개발, 배포, 확장

적합한 아키텍처 선택

컨테이너 인프라 환경은 마이크로서비스 아키텍처와 높은 호환성을 가짐.
  • 소규모 프로젝트 모놀리식 아키텍처가 선호되지만, 장기적 유지보수 시 마이크로서비스 고려
  • 대규모 프로젝트 마이크로서비스 아키텍처가 더 적합
  • 컨테이너와 연관성 컨테이너는 마이크로서비스와 1:1로 매핑되어 배포 및 확장 용이

결론.... 마이크로서비스는 필요하다!


2. 핵심 도구 소개

도커 (Docker)

도커(Docker)
컨테이너를 만들고 관리하는 도구. 운영체제 환경과 무관하게 일관된 결과를 보장.

도커의 장점

  • 일관성
    개발자가 로컬에서 작업한 내용이 그대로 테스트 서버와 실제 운영 환경에서도 동일하게 동작하므로, "내 컴퓨터에서는 잘 돌아가는데..."라는 말은 더 이상 듣지 않아도 됩니다.

  • 효율성과 생산성
    도커는 가상 머신에 비해 훨씬 가볍고 빠른 성능을 자랑합니다. 이는 애플리케이션의 배포와 확장을 더욱 효율적으로 만들어줍니다. 개발자들은 이러한 특성 덕분에 새로운 기능을 빠르게 테스트하고 배포할 수 있어 생산성이 크게 향상됩니다.

  • 격리
    도커의 컨테이너 기술은 각 애플리케이션을 독립적인 환경에서 실행할 수 있게 해줍니다. 이는 한 애플리케이션의 문제가 다른 애플리케이션에 영향을 미치지 않도록 보장하며, 전체 시스템의 안정성과 보안성을 높여줍니다.

주요 구성 요소

  • 이미지(Image) 컨테이너 생성에 사용되는 템플릿
  • 컨테이너(Container) 이미지 기반으로 생성된 실행 중인 인스턴스
  • Dockerfile 이미지 생성에 사용되는 명령어 집합
  • Docker Hub 도커 이미지 저장소

도커 이미지 생성 및 실행 예시

FROM node:16
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["npm", "start"]
# 이미지 빌드
docker build -t my-node-app .

# 컨테이너 실행
docker run -p 3000:3000 my-node-app

쿠버네티스 (Kubernetes)

쿠버네티스(Kubernetes): 다수의 컨테이너를 관리하는 도구.

핵심 기능

  • 자동 배포 컨테이너 자동 배포 및 관리
  • 자동 확장 서비스 부하에 따라 컨테이너 수 조절
  • 부하 분산 여러 컨테이너에 트래픽 분산
  • 서비스 디스커버리 서비스 위치 자동 연결
  • 헬스 체크 컨테이너 상태 모니터링 및 자동 복구
  • 롤링 업데이트 서비스 중단 없이 컨테이너 업데이트

쿠버네티스 배포 예시

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

젠킨스 (Jenkins)

젠킨스(Jenkins): 지속적 통합(CI)과 지속적 배포(CD)를 지원하는 도구.

주요 기능

  • CICD
    지속적 통합(CI) 코드를 지속적으로 통합, 빌드, 테스트하여 문제 조기 발견
    지속적 배포(CD): 통합 및 테스트 완료된 코드를 자동으로 배포
  • 파이프라인: CI/CD 프로세스 정의 및 관리
  • 플러그인 지원: Git, Maven, Docker 등 다양한 도구와 통합

젠킨스 파이프라인 예시

pipeline {
    agent any
    stages {
        stage('소스 코드 가져오기') {
            steps {
                git 'https://github.com/user/repo.git'
            }
        }
        stage('빌드') {
            steps {
                sh 'mvn clean package'
            }
        }
        stage('테스트') {
            steps {
                sh 'mvn test'
            }
        }
        stage('배포') {
            steps {
                sh 'docker build -t myapp .'
                sh 'docker run -d -p 8080:8080 myapp'
            }
        }
    }
}

프로메테우스 & 그라파나

프로메테우스(Prometheus) 상태 데이터 수집 도구.
그라파나(Grafana) 프로메테우스가 수집한 데이터를 시각화하는 도구.

주요 특징

  • 프로메테우스
    • 시스템 메트릭 수집 (CPU, 메모리, 네트워크 등), pull 방식 데이터 수집
    • PromQL 쿼리 언어 제공
  • 그라파나
    • 사용자 친화적 인터페이스, 사용자 지정 대시보드 생성
    • 다양한 차트 및 그래프 지원

프로메테우스 설정 예시

scrape_configs:
  - job_name: 'kubernetes-service'
    static_configs:
      - targets: ['localhost:9090']
        labels:
          job: 'kubernetes-service'
          kubernetes_namespace: 'default'

https://yumserv.tistory.com/475
업타임쿠마라는 것도 있는데 참고하시길 ~

3. 환경 구축 개요

새로운 인프라 시작

컨테이너 인프라 환경 구축 개요

  • 컨테이너 인프라 환경: 운영체제 커널에서 독립적으로 실행되는 컨테이너 중심 인프라
  • 마이크로서비스 아키텍처(MSA): 개별 기능을 하는 작은 서비스들을 독립적으로 개발하여 연결
  • 코드형 인프라(IaC): 코드를 통해 인프라 환경을 구축 및 관리

주요 도구 역할

graph TD
    A[컨테이너 인프라 환경] --> B[Docker: 컨테이너 생성 및 관리]
    A --> C[Kubernetes: 컨테이너 관리 및 자동 배포]
    A --> D[Jenkins: 지속적 통합 및 배포]
    A --> E[Prometheus & Grafana: 모니터링]
    A --> F[코드형 인프라: Vagrant, VirtualBox]

환경 구축 단계별 예시

  1. Docker 설치
    sudo apt-get update && sudo apt-get install docker.io
  2. 컨테이너 이미지 다운로드
    docker pull nginx
  3. 컨테이너 실행
    docker run -d -p 80:80 nginx
  4. Kubernetes 배포
    kubectl apply -f deployment.yaml
  5. 모니터링 도구 설치
    Prometheus 및 Grafana 설정
  6. CI/CD 파이프라인 구축
    Jenkins 설치 및 파이프라인 설정

요약

아키텍처 비교 요약표

항목모놀리식 아키텍처마이크로서비스 아키텍처
구조하나의 큰 애플리케이션작은 독립 서비스들의 집합
배포전체 애플리케이션 배포개별 서비스 단위 배포
확장성전체 애플리케이션 확장 필요필요한 서비스만 선택적 확장 가능
개발초기 개발 간단초기 설계 복잡하지만 장기적으로 유연
장애 영향전체 서비스에 영향해당 서비스에만 영향
기술 스택단일 기술 스택서비스별 최적 기술 선택 가능
컨테이너 적합성낮음높음 (1:1 매핑 효율적)
적합 프로젝트소규모, 단순 프로젝트복잡하고 확장 가능성 높은 프로젝트

핵심 도구 요약표

도구주요 역할핵심 기능
Docker컨테이너 생성 및 관리• 애플리케이션 패키징
• 일관된 환경 제공
• 이미지 빌드 및 공유
Kubernetes컨테이너 오케스트레이션• 자동 배포 및 확장
• 부하 분산
• 자동 복구
• 롤링 업데이트
JenkinsCI/CD 자동화• 지속적 통합
• 지속적 배포
• 파이프라인 관리
Prometheus모니터링 데이터 수집• 메트릭 수집
• 알림 설정
• 데이터 쿼리
Grafana데이터 시각화• 대시보드 생성
• 시각적 모니터링
• 다양한 차트 제공
profile
일단 하고 보자 (펠리컨적 마인드 ㅠㅠ)

0개의 댓글

관련 채용 정보