프로젝트/협업 프로젝트(2023.12.18-2024.01.25)

[Key Word 개발기] Aws S3 + CloudFront (cf. lambda)

dal_been 2024. 1. 8. 20:34
728x90

협업 프로젝트에서 회원 프로필 이미지를 저장해야하는 기능을 구현해야했다. 그래서 어처피 배포도 AWS할 거고 그럴꺼면 S3을 이용하자고 했다. 사실 개인프로젝트에서 S3를 구현해본적이 있어서 그렇게 큰 거부감??은 없었다. 다만 단순하게 S3를 도입하기에는 너무 간단하다고 생각해서 관련된 기능이 없는지 찾아보았다.

 

그래서 찾은게 lambda와 cloudfront였다.

 


 

lambda

 

간단하게 lambda에 대해서 말하자면 어떤 이벤트(트리거)를 설정하면 내 서버가 아니라 AWS서버에서 대신일을 처리해준다.

그래서 이미지사이즈는 다양하기 때문에 기준을 정하여 s3에 저장할때 lambda에서 이미지 리사이징 작업을 하려고 했다.

 

다만 적용하지 않았다.

 

첫번째 이유 관리포인트가 늘어난다.

lambda를 이용하려면 aws에서 코드를 설정하던가 등록해야한다. 즉 프로젝트 코드에서 aws lambda코드까지 관리해야하는 부분이다. 

사실 우리의 프로젝트의 경우 프로필 이미지 하나만 저장하면 되었기 때문에 관리해야할 부분이 늘어나는 것은 효율적이지 않다고 생각했다.

 

두번째 그럼 이미지 리사이징 프로젝트 코드안에서 하면되잖아

JAVA를 활용한 이미지 리사이징 라이브러리를 제공한다.

- java.awt.Graphics2D
- Image.getScaledInstance()
- Imgscalr
- Thumbnailator
- Marvin

 lambda없이 구현가능하다.

그러나 협업같이하시는 프론트분들에게 이야기해보니 프론트쪽에서 리사이징하셔서 주실거라고 하셨다.

그렇다면 굳이 서버의 리소스를 더 사용할 필요가 있을까?? 생각했다. 또한 인터넷에 찾아보니 생각보다 이미지 처리가 리소스를 많이 잡아먹는다고 한다.

 

 

정리하자면 lambda를 사용시 관리포인트가 늘어나고 프론트쪽에서 이미 리사이징을 해서 보내주기 때문에 굳이 서버의 리소스를 잡아먹을 필요가 겂다고 생각했다.

 


그래서 lambda와 같은 이미지리사이징 기능은 구현하지 않는 걸로 하고 cloudFront는 적용하기로 했다.

 

 cloudFront

 

개인프로젝트때는 s3버킷안에 있는 객체URL 호출한다는 가정하에 진행했다.

 

위와 같이 하면 일단 클라이언트가 직접적으로 s3에 접근하기 때문에 보안측면에서도 아쉽고 s3에 자체적인 부하를 많이 줄 수 있다.

 

그래서 AWS에서 S3데이터를 좀 더 효율적으로 전송하게 해주는 CloudFront를 제공해주고 있다.

 

 

CDN

cloudFront에 대해 얘기하기전에 CDN에 대해 간단하게 설명하겠다.

CDN이란 지리적 제약없이 전 세계 이용자들에게 빠르고 안전하게 콘텐츠를 전송할 수 있는 기술이다.

 

조금더 자세하게 말하자면

Origin Server(원본데이터를 가지고 있는 서버)로부터 최초 요청일때는 컨텍츠를 고객에게 전송하는 동시에 Edge Server에 캐싱한다.

두번째 요청일때는 Origin Server가 아닌 Edge Server에서 조회하여 컨텍츠를 가져온다.

 

 

CloudFront

AWS는 CDN와 같이 S3데이터를 효율적으로 제공할 수 있는 CloudFront 캐시서버를 전세계에 두었다.

 

S3컨텍츠를 CloudFront를 이용함으로써

- 캐싱을 통하 S3부하감소

- Edge Server를 통한 응답속도 향상

- 콘텐츠 보안유지(cloudfront를 통해서 s3에 대한 액세스 제한을 강화할 수 있다)

 

 


물론 우리 프로젝트가 작기에 s3부하가 안될것이라고 예상하지만 CloudFront공부할겸 적용해보았다.

 

 

https://velog.io/@chrkb1569/AWS-S3-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EC%A0%80%EC%9E%A5

https://earth-95.tistory.com/128

https://velog.io/@dankim/CDN%EC%9D%B4%EB%9E%80-CloudFront%EB%9E%80

https://velog.io/@rungoat/AWS-S3%EC%99%80-CloudFront-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0