회사내부에 기존 이미지서버 저장공간을 AWS로 전환되면서 EFS를 사용하게 되었습니다. 근데 비용을 보아하니 너무 비싸더군요. 그래서 저렴하게 이용할수 없을까 해서 CF와 S3를 이용해서 이미지서버를 구축하게 되었습니다. CF에 비용이 만만치 않을것 같지만 비용부분이 크게 걱정하지 않고 편한길을 택하기로 했습니다. 물론 비용부분도 더불어 해결했구요. 참고로 아래 비용은 저희 회사와 AWS간의 계약금액을 토대로 정한거라 개인이 사용하실땐 비용차이가 많이 납니다.
안녕하세요. DX혁신부문 학원솔루션개발팀에 이병철입니다. :)
저희팀에서 기존 웹서버에 구축된 이미지서버를 CloudFront와 S3 구성으로 변경하고 이에 문제점들을 해결하기위한 과정을 수행하게 되었습니다.
구글링에서 나온 문서를 토대로 구축해서 진행을 해도 되겠지만 기존방식과의 차이점 또는 성능이슈를 분석하고 올바른 길로 가기위해 불필요한? 아닌 필요한 테스트를 좀 해보았습니다.
아키텍처
먼저 팀내에 프론트 아키텍처를 구성해 보고 이 방안이 맞는건지 조심스럽게 접근하기로 했습니다.
| | CloudFront + S3 | NginX + S3 |
| :————— | :——————————–: | :—————————: |
| 글로벌서비스 | 해당사항없음 | |
| 사용량 | 일 평균 트래픽 80GB / 월평균 2.4TB | |
| 비용 | 예상비용 $40 미만 | 예상비용 $10 내외 |
| 파일 무효화 | 필요 | 없음 |
| 파일 무효화 비용 | 필요 | 없음 |
| 보안 | HTTPS | HTTPS + S3 endpoint(http) |
| 요청제한 | 엣지로케이션 활용 | GET:5500/sec (최상위폴더기준) |
| 작업공수 | 없음 | 별도구축필요 |
| 비용안분 | 필요 | 없음(빌링태그) |
요청제한의 경우 자동 재시도 로직 구현필요 또는 최상위 펄더를 상세하게 분류 (팀 상황으로 보면 요청건수가 적음으로 해당사항없음)
위에 표를 가지고 비교를 해보니 Nginx로 가는게 저렴해 보입니다.
ec2 비용이 나올건데 저렴하지? 라고 말하실듯 해서 원래 웹서버에 추가해서 구축하게 되면 비용이 안나오게 됩니다.
저희는 비용 대비 작업공수와 속도를 비교해서 결정하기로 했습니다.
비용
- CloudFront + S3
월 데이터 전송 2.4TB 비용 = $40.6 예상 + S3저장비용
- Nginx + S3
월 데이터 전송 2.4TB 비용 + S3저장비용 = 최대 $10 예상
비용은 뭐 거기서 거기구만 특히 몇만원더 나온다고 특별히 문제가 되지 않을거고 기존에 EFS 비용에 비해 현저히 낮은 비용이 나오기 때문에 작업공수라도 줄여야 한다고 생각했습니다.
한 50%정도는 CF+S3로 마음이 치우쳤네요. 그런데 한가지 마음에 걸리는게 있습니다.
캐싱
* S3 파일업로드후 메타데이터를 추가 (TTL 세팅)
* aws cli 또는 url 을 이용한 무효화 방안 (파일 or 폴더지정)
* 파일명 또는 폴더명에 버전관리 or QueryString
보통의 경우 버전관리로 끝낼수 있는 문제라고 생각하는데 현실은 그렇지 않죠.
React나 Vue를 사용한곳에서는 빌드시 적용이 될거라 크게 관여치 않습니다. 저희팀에서는 옛날방식의 소스가 많다보니 그리고 프론트 백앤드 분리가 안되어 있어서 이슈가 더 많네요.
최종협의가 이뤄지지는 않았지만 모든 이미지 버전관리를 하는걸로 가닥을 잡고 있습니다. 그렇게 함으로써 디자인/퍼블간의 이슈도 사라질테니깐요.
마치며
일반적으로 이미지서버구성시 대충구성하면 되는거 아냐? 라고 하실수도 있지만 회사사정상 기존에 이슈도 있고해서 발빠르게 대처가 어렵습니다.
그래서 저희는 사업부와 논의도 해야 하고 설명도 해야하고 이해관계자들과도 협의도 해야 했습니다. 다소 복잡하고 아직 진행이 더디지만 차츰 나아지리라 생각됩니다.
위에서 말씀드렸듯이 비용절약과 관리적은 요소를 없애기 위해 꼭 CF 구성을 한것은 아닙니다. 다만 CF구성을 염두해 두고 생각하다 보니 이와 같은 결론이 나버렸네요.
읽어주셔서 감사합니다.
!Warning : 작성자가 직접 ETOOS TechBlog에 작성한 게시물 내용입니다.
게시물의 저작권은 ETOOS에 있습니다.