본문 바로가기

개발공부/DevOps

데브옵스(DevOps) 설정방법

 

데브옵스에 대해 알아 보았으니 이제 설정 방법을 알아보자.

현재 회사에서는 gitlab을 활용하고 있어서 gitlab CI 또는 jenkins로 설정해야한다.

github을 사용하고 있다면 jenkins와 github Actions를 사용해도된다.

 

 

데브옵스(DevOps) 설정 방법은 조직의 요구 사항, 팀 규모, 사용하는 기술 스택 등에 따라 달라질 수 있지만, 기본적인 데브옵스 파이프라인 설정에는 다음과 같은 단계가 포함됩니다:

1. 데브옵스 도구 선정

데브옵스는 여러 도구를 통해 자동화, 모니터링, 배포 등을 구현합니다. 각 단계에 맞는 도구를 선정하는 것이 중요합니다. 기본적인 데브옵스 도구는 다음과 같습니다:

  • 소스 코드 관리: Git, GitHub, GitLab, Bitbucket
  • 지속적 통합/배포(CI/CD): Jenkins, GitLab CI, CircleCI, Travis CI, GitHub Actions
  • 빌드 도구: Maven, Gradle, Ant
  • 컨테이너화: Docker, Kubernetes
  • 인프라 관리: Terraform, Ansible, Chef, Puppet
  • 모니터링: Prometheus, Grafana, ELK Stack (Elasticsearch, Logstash, Kibana), Datadog
  • 클라우드 플랫폼: AWS, GCP, Azure

2. 버전 관리 시스템 설정 (Version Control System)

소스 코드 관리를 위해 Git을 사용하는 것이 일반적입니다. Git을 통해 모든 개발자가 동일한 코드베이스를 관리할 수 있도록 합니다.

  1. Git 설치: Git을 설치하고 로컬 저장소를 생성합니다.
  2. bash 코드 복사 git init
  3. GitHub, GitLab, Bitbucket 계정 설정: 클라우드 버전 관리 시스템을 선택하고, 리모트 저장소를 설정합니다.
  4. bash 코드 복사 git remote add origin <repository_URL> git push -u origin master

3. 지속적 통합/배포(CI/CD) 파이프라인 설정

CI/CD는 데브옵스의 핵심으로, 코드 변경이 있을 때마다 자동으로 빌드, 테스트, 배포가 이루어지도록 합니다.

  1. Jenkins 설정 (CI/CD 도구 예시):
    • Jenkins를 설치하고, Jenkins 웹 대시보드에 접속하여 필요한 플러그인을 설치합니다.
    • Jenkinsfile을 프로젝트 루트에 추가하여 CI/CD 파이프라인을 정의합니다.
    • groovy 코드 복사 pipeline { agent any stages { stage('Build') { steps { script { // 빌드 단계 예시 sh 'mvn clean install' } } } stage('Test') { steps { script { // 테스트 단계 예시 sh 'mvn test' } } } stage('Deploy') { steps { script { // 배포 단계 예시 sh 'deploy.sh' } } } } }
  2. GitLab CI 설정:
    • .gitlab-ci.yml 파일을 프로젝트 루트에 추가하여 GitLab CI 파이프라인을 설정합니다.
    • yaml 코드 복사 stages: - build - test - deploy build: stage: build script: - mvn clean install test: stage: test script: - mvn test deploy: stage: deploy script: - deploy.sh

4. 인프라 관리 자동화 (Infrastructure as Code, IaC)

인프라를 코드로 관리하고 자동으로 배포할 수 있도록 설정합니다.

  1. Terraform 설정:
    • Terraform을 사용하여 클라우드 인프라를 코드로 작성하고 자동화합니다.
    • main.tf 파일을 생성하여 AWS 인프라 리소스를 정의합니다.
    • hcl 코드 복사 provider "aws" { region = "us-west-2" } resource "aws_instance" "example" { ami = "ami-0c55b159cbfafe1f0" instance_type = "t2.micro" }
  2. Ansible 설정:
    • Ansible을 사용하여 서버 설정을 자동화합니다.
    • playbook.yml 파일을 작성하여 서버에 필요한 설정을 정의합니다.
    • yaml 코드 복사 - hosts: all become: true tasks: - name: Install Apache apt: name: apache2 state: present

5. 컨테이너화 및 오케스트레이션

애플리케이션을 컨테이너화하고, 이를 Kubernetes나 Docker Swarm과 같은 오케스트레이션 도구로 관리합니다.

  1. Docker 설정:
    • 애플리케이션을 Docker 컨테이너로 패키징합니다.
    • Dockerfile을 생성하여 애플리케이션을 빌드합니다.
    • dockerfile 코드 복사 FROM openjdk:8-jdk-alpine COPY target/app.jar app.jar ENTRYPOINT ["java", "-jar", "/app.jar"]
  2. Kubernetes 설정:
    • Kubernetes 클러스터를 설정하고, 애플리케이션을 Kubernetes에 배포합니다.
    • deployment.yaml 파일을 작성하여 애플리케이션을 Kubernetes에 배포합니다.
    • yaml 코드 복사 apiVersion: apps/v1 kind: Deployment metadata: name: app-deployment spec: replicas: 3 selector: matchLabels: app: app template: metadata: labels: app: app spec: containers: - name: app image: app:v1 ports: - containerPort: 8080

6. 모니터링 및 로깅 설정

애플리케이션의 성능을 실시간으로 모니터링하고 로그를 수집하여 문제를 빠르게 식별합니다.

  1. Prometheus 및 Grafana 설정:
    • Prometheus를 사용하여 애플리케이션 성능을 모니터링하고, Grafana를 사용하여 시각화합니다.
    • Prometheus 서버와 Grafana를 설정하고, 메트릭을 대시보드에 표시합니다.
  2. ELK Stack 설정:
    • Elasticsearch, Logstash, Kibana(ELK Stack)를 사용하여 애플리케이션 로그를 수집하고 분석합니다.
    • Logstash를 사용하여 로그 데이터를 Elasticsearch로 전달하고, Kibana 대시보드에서 데이터를 시각화합니다.

7. 지속적인 개선 및 피드백

데브옵스는 지속적인 피드백과 개선을 목표로 하며, 모든 단계에서 결과를 모니터링하고, 문제를 해결하는 방안을 지속적으로 적용합니다. 이를 통해 빠른 피드백 루프를 생성하고, 애플리케이션 품질을 높입니다.


결론

데브옵스 설정은 자동화, 협업, 통합을 통해 소프트웨어 개발과 운영의 효율성을 극대화하는 과정입니다. 도구와 프로세스를 선택하고, 이를 설정하여 개발, 빌드, 테스트, 배포, 운영 등 각 단계를 자동화하면 보다 빠르고 안정적인 서비스를 제공할 수 있습니다.

'개발공부 > DevOps' 카테고리의 다른 글

Github + Jenkins + Docker로 빌드  (0) 2025.02.13
데이터 웨어하우스 도입이나 ETL 설계가 필요한 상황  (0) 2025.02.13
ETL 파이프라인?  (0) 2025.02.13
Github + Jenkins 연동  (0) 2025.02.13
데브옵스(DevOps)란?  (0) 2025.02.12