Replies: 1 comment
-
당장 충돌 상황은 거의 발생하지 않을 것 같지만 그럼에도 도입하는 것이 좋아 보입니다. 사전에 차단해야 한다고 생각해요. 최신 terraform 버전에서는 S3로만 락킹을 하더라고요 ! 이전 버전에는 다이나모디비 방식도 있는 것 보면 해당 방식은 deprecated될 예정인 것 같습니다.
이 점에 대해서는 뭐가 나을지 잘 모르겠네요 ... 하나의 리소스에 하나의 파일을 매핑하면 직관적이다는 생각이 들면서도 파일이 너무 많아지는 건가 싶기도 하네요 .. 그렇다고 환경 별로 구분하자니 중복 코드가 생기고 ..
PR을 올리면 github actions를 통해 terraform plan을 수행하고, 머지 시 terraform apply하는 구조가 되면 뭔가 직관적인 흐름이 될 것 같습니다. 개인이 apply하면 협업 시 혼란이 생길 것 같고, 동시에 같은 리소스에 대해 apply해서 의도치 않은 동작도 발생할 것 같습니다. 다만 개발자는 로컬에서 plan으로만 잘 작성되었는지 확인할 수 있을텐데, plan이 성공적으로 된다 해도 apply가 반드시 성공하지는 않더라고요 .. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
논의 제안 배경
우리 SolidConnection 프로젝트의 인프라를 Terraform(IaC)으로 관리하기 시작하면서, 협업 시 인프라의 '상태(State)'를 어떻게 동기화할지에 대한 고민이 생겼습니다.
일반적인 애플리케이션 개발은 각자 로컬에서 코드를 짜고 Git으로 합치면 되지만, IaC는 '실제 클라우드 리소스'라는 단 하나의 실체를 두고 여러 명이 수정하는 구조입니다. 이 과정에서 다음과 같은 위험 요소들이 우려됩니다.
상태 덮어쓰기(Race Condition): 두 명의 작업자가 동시에 apply를 실행할 경우, 나중에 완료된 사람의 데이터가 이전 작업자의 상태를 덮어씌워 인프라 구성이 꼬일 수 있습니다.
코드와 실체의 불일치: 누군가 로컬에서 인프라를 변경하고 상태 파일(tfstate)을 공유하지 않으면, 다른 팀원이 plan을 수행할 때 의도치 않게 기존 리소스를 삭제하거나 변경하려는 시도가 발생합니다.
작업 내용의 혼선: 내가 작업 중인데 다른 사람의 작업 결과가 S3에 반영되어 내 로컬 실행 결과에 영향을 주는 상황이 발생하며, 이는 개발 안정성을 해칠 수 있습니다.
저의 제안
단순히 파일을 S3에 올려 공유하는 수준을 넘어, 'Locking 메커니즘' 과 '중앙 집중형 배포 절차' 를 통해 협업 구조를 안정화할 것을 제안합니다.
AWS S3 + DynamoDB 기반의 Remote Backend 구축
State 격리 구조 도입
CI/CD 파이프라인(GitHub Actions) 연동
논의 포인트
우리 팀의 현재 개발 속도와 편의성을 고려하여 아래 사항들에 대해 의견을 나누고 싶습니다.
Locking 도입의 시급성: 현재 우리 프로젝트 규모에서 DynamoDB를 통한 엄격한 Lock 관리를 바로 도입하는 것에 대해 어떻게 생각하시나요?
인프라 분리 기준: 기존 상태 파일을 ec2, s3 등 자원 또는 환경 기준으로 분리 관리하는 방식에서 문제점은 없을까요?
배포 권한 및 절차: 개별 팀원의 로컬 배포를 어디까지 허용할 것인지, 혹은 반드시 GitHub Actions 같은 공통 CI 도구를 통해서만 인프라를 변경할 것인지에 대한 의견이 궁금합니다.
참고자료
Beta Was this translation helpful? Give feedback.
All reactions