강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

리나님의 프로필 이미지
리나

작성한 질문수

eks를 활용한 spring 운영서버 배포(feat. devops의 모든것)

강의 내용에서 보강 하고 싶어서 질문 드립니다 - DEV, PROD 환경

해결된 질문

작성

·

72

1

실전에서는 주로 어떻게 하는지 궁금 해서 질문 드립니다.

 

보통 실전에서는 개발서버 및 상용서버가 각각 물리적으로 분리 된 상태에서 관리를 할텐데요.

 

현재 선생님께서 알려주신 부분에서 이부분을 어떻게 적용 할지 궁금 해서 질문 드립니다.

 

  1. AWS EKS 하나로 같이 사용하되 네임스페이스를 논리적으로 분리해서 개발 환경하고 상용 환경을 분리하자

  2. AWS EKS 물리적으로 개발 환경하고 상용 환경을 분리 하기

이렇게 이슈가 있을 것 같습니다. 일단 1번 내용으로 하게 된다면

 

name: deploy DEV backend

on:
  push:
    branches:
      - dev

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      ----- 생략 -----
        
      - name: configure aws
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_KEY }}
          aws-secret-access-key:  ${{ secrets.AWS_SECRET }}
          aws-region: ap-northeast-2

      - name: update cluster infomation
        run: aws eks update-kubeconfig --name ${클러스터이름} --region ap-northeast-2

      - name: Login to ECR
          ----- 생략 -----

      - name: build and push docker image to ecr
        env:
          REGISTRY: ${AWS ECR REPOSITORY}
          REPOSITORY: ${개발 Repository 명}
          IMAGE_TAG: latest
        run: |
          docker build \
          -t $REGISTRY/$REPOSITORY:$IMAGE_TAG \
          -f ./project/Dockerfile ./project
          docker push $REGISTRY/$REPOSITORY:$IMAGE_TAG

      - name: eks kubectl apply
        run: |
          kubectl rollout restart deployment ordersystem-backend -n dev

 

name: deploy PROD backend

on:
  push:
    branches:
      - prod

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      ----- 생략 -----
        
      - name: configure aws
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_KEY }}
          aws-secret-access-key:  ${{ secrets.AWS_SECRET }}
          aws-region: ap-northeast-2

      - name: update cluster infomation
        run: aws eks update-kubeconfig --name ${클러스터이름} --region ap-northeast-2

      - name: Login to ECR
          ----- 생략 -----

      - name: build and push docker image to ecr
        env:
          REGISTRY: ${AWS ECR REPOSITORY}
          REPOSITORY: ${상용 Repository 명}
          IMAGE_TAG: latest
        run: |
          docker build \
          -t $REGISTRY/$REPOSITORY:$IMAGE_TAG \
          -f ./project/Dockerfile ./project
          docker push $REGISTRY/$REPOSITORY:$IMAGE_TAG

      - name: eks kubectl apply
        run: |
          kubectl rollout restart deployment ordersystem-backend -n prod

 

 

이렇게 네임스페이스 통해 논리적으로 분리해서 관리 하는 것도 있을 것 같은데요.

하지만 제가 생각 했을때는 단점으로는 SPOF (Single Point Of Failure) 문제가 발생 될 것 같아 고민이 들지만 비용면에서는 1번이 좋을 것 같기도 합니다.

 

주로 실전에서는 어떻게 관리를 하는지 궁금 합니다! ^_^

답변 2

2

bradkim님의 프로필 이미지
bradkim
지식공유자

안녕하세요~! 좋은질문이십니다.

 

개발하시는 서버의 규모가 크고, 사용자가 많다고 하면 클러스터 자체를 분리하는게 더 나아보입니다.

 

다만, 서비스가 아직까진 소규모다라고 하면 네임스페이스를 분리하여 한 클러스터내에서 작업하는게 더 좋아보입니다.

 

저는 실무에서 주로 클러스터를 따로 분리한 아키텍처를 사용했었습니다.

0

안녕하세요, 인프런 AI 인턴입니다. 리나님, 질문 주셔서 감사합니다.

AWS EKS를 사용하여 개발 환경(DEV)과 상용 환경(PROD)을 관리하는 방법에 대해 문의 주셨네요. 두 가지 옵션을 고려할 수 있습니다:

  1. EKS 하나를 사용하여 네임스페이스를 통한 논리적 분리:

    • 장점: 비용 절감 효과가 있습니다. 하나의 클러스터만 관리하면 되므로 운영 비용과 관리 부담이 줄어듭니다.
    • 단점: SPOF (Single Point Of Failure) 문제가 있을 수 있습니다. 클러스터의 장애가 모든 환경에 영향을 줄 수 있어 이것을 방지하려면 추가적인 대비책이 필요합니다.
  2. 물리적으로 DEV와 PROD 환경을 분리:

    • 장점: 이 방법은 물리적인 클러스터를 분리하여 각각의 환경에 독립성을 제공합니다. 이는 높은 안정성과 가용성 보장을 가능하게 하며, 한 환경의 문제가 다른 환경에 영향을 주지 않습니다.
    • 단점: 비용이 더 많이 들며 각 클러스터를 별도로 관리해야 하므로 운영 복잡도가 증가할 수 있습니다.

실전에서는 프로젝트의 규모와 예산, 요구 사항에 따라 선택이 달라질 수 있습니다. 일반적으로 규모가 큰 조직은 안정성을 더 중시하여 각 환경을 물리적으로 분리하지만, 스타트업이나 예산이 한정된 프로젝트는 비용 절감을 위해 논리적 분리를 선택하는 경우가 많습니다.

Inflearn의 유사한 질문 및 답변을 참고해보시면 도움이 될 것입니다. 인프런에서 주로 다루는 AWS EKS 환경에서는 어떻게 네임스페이스 관리와 클러스터 운영을 수행하는지에 대한 다양한 예시도 확인해 보실 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

리나님의 프로필 이미지
리나

작성한 질문수

질문하기