참고 사이트
1. https://aws.amazon.com/ko/blogs/tech/inflab-ec2-spot-instance/
2. https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/preserving-volumes-on-termination.html
3. https://inpa.tistory.com/entry/AWS-%F0%9F%93%9A-EFS-%EA%B0%9C%EB%85%90-%EC%9B%90%EB%A6%AC-%EC%82%AC%EC%9A%A9-%EC%84%B8%ED%8C%85-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC
AWS Technic Blog의 “인프랩의 EC2 스팟 인스턴스를 활용한 Jenkins 기반의 CI/CD 구축 사례” 글을 읽던 도중 의문이 생겼다
일단 아래 아키텍처를 보자
Jenkins 기반의 CI/CD 아키텍처이다

해당 아키텍처의 설명으로
Jenkins는 빌드 이력과 설정을 모두 디스크에 파일 형태로 저장하는데, private subnet에 설치된 Jenkins Controller 인스턴스가 종료되는 경우를 대비하여 JENKINS_HOME 경로를 EC2 인스턴스의 EBS가 아닌 EFS 네트워크 드라이브 경로에 설정하는 것이 빌드 이력과 설정, artifact 등을 손실하지 않고 유지할 수 있다
라는 설명이 있다
여기서 하나 궁금한게 생겼다
인스턴스가 종료되면 EBS 역시 같이 종료되어서 데이터가 삭제되는 건가?
NO!🙅🏻 EBS 역시 인스턴스가 종료되어도 EBS 볼륨의 DeleteOnTermination 속성 값을 사용하여 영구적으로 데이터를 보존할 수 있다
그럼 왜 EBS가 아닌 EFS에 mount 해야 안정적으로 데이터를 보존할 수 있는 것일까?
바로, EFS와 EBS의 가용성 및 내구성 차이이다
위와 같이 EFS는 데이터를 다중 AZ 복제하기 때문에 EBS 보다 가용성과 내구성이 더 높지만
EFS가 더 가용성이 높다고 무조건 선택하는 것이 아닌, 워크로드의 특성, 성능 요구사항 등 종합적으로 고려하여 EFS와 EBS 중 적절한 스토리지 솔루션을 선택해야 한다