기록하며 성장한다 - 개발, 회고

개발 회고록

[ 개발 회고록 ] 여러 대의 서버를 위한, AWS S3 활용 이미지 관리

전대홍 2024. 1. 2. 22:07

이미지를 서버에 올리면, 서버가 여러 대일 때 어떻게 클러스터링 하지???

 

 


서론

현재 배달과 관련 된 토이프로젝트를 진행하고 있다.

토이 프로젝트 링크 <<<

원래는 이미지를 업로드 할 때, 서버에 upload 폴더 혹은 images 폴더 등으로 관리를 하였다.

그러나 이 방법은, 서버가 한 대만 있을 경우 가능한 방법이다.

내가 올린 이미지가, 다른 페이지로 이동 했을 때 다른 서버로 넘어간다면, 그 이미지가 보이지 않을 수 있기 때문이다.

그럴 경우를 해결하기 위하여 AWS S3 를 사용하기로 하였다.

 

 


본론

필자는 이미 AWS 회원이므로, 회원가입 절차는 생략하였다.

 

1. AWS S3 버킷 생성 및 설정, 그리고 Key 발급

먼저 AWS S3 에 버킷을 만들어주어야 한다.

AWs Console 에서 S3 를 찾아 버킷을 누르고, 버킷 만들기를 누른다.

 

버킷 이름을 설정해주고,

아래와 같이 클릭을 해주면 된다.

 

다음은 사용자를 생성해주어야 한다.

AWS console 에서 IAM 을 누른 후, 엑세스 관리에서 사용자 추가를 클릭한다.

여기서 Access Key 와 Secret Key 를 발급 받아야 하기 때문이다.

 

 

 

다음은 엑세스 키를 생성해야 한다.

동일한 IAM 에서 엑세스 관리자를 누르고, 사용자 안에서 보안 자격 증명, 엑세스 키 만들기를 클릭해 주어야 한다.

그러면 이렇게 키를 발급 받을 수 있다.

이 키가 AWS S3 와 SpringBoot 를 연결하는데 사용 될 것이다.

 

 

2. Spring Boot 연동 ( properties 설정 )

Spring Boot 와 연동하기 위해서는 properties 혹은 yml 을 설정해주어야 한다.

필자는 properties 를 사용하였다.

이렇게 버킷 이름, access key, secret key 를 적어주면 된다.

ap-northeast-2 는 지역을 한국으로 고정하는 것이고,

stack.auto 를 false 로 두는 것은 EC2 를 사용하게 되었을 때, Spring Cloud 프로젝트를 실행시키면 기본으로 CloudFormation 구성을 시작하기 때문에, 그 CloudFormation 이 없으면 오류가 발생한다.

그걸 막기 위해 false 를 설정해두어야 한다.

 

 

3. Config 추가

properties 에 설정한 값을 토대로, Config 를 만들어 준다.

필자는 AmazonS3 와 BasicAWSCredentials 를 사용하였다.

 

 

4. Controller 와 Service 생성

원래는 Controller 는 생성하지 않아도 된다.

실제로 사용하는 Controller 에서 해당 FileService 를 불러내주면 되기 때문이다.

하지만 필자가 Controller 를 따로 만든 이유는, Test 를 하기 위함이다.

실질적인 컨트롤러는 다음과 같다.

 

여기서 서비스를 연결하여,

이렇게 사용할 수 있다.

 

 

5. Test

로직을 만들었으면, 당연 Test 는 따라와야 한다.

Test 를 통하여 AWS S3 에 제대로 저장이 되는지를 확인하여야 한다.

필자는 Post Man 이라는 것을 사용하였다.

Get Post 요청을 통한 테스트를 진행하기 아주 좋으니, 꼭 사용해보기를 바란다.

이렇게 AWS S3 Image Test 를 위한 폴더와, New Request 까지 생성하였고,

타입은 Post 로 바꾼 뒤, URL 를 입력해주었다,

그리고 Body 에는 File 타입으로, Test Image 를 넣어주었다.

 

과연 결과는 ???

 

성공적이었다.

모자이크로 가려두었지만, 성공적으로 저장이 되었다는 뜻이다.

 

실제로 AWS S3 에 들어가보면,

 

이렇게 저장이 잘 되어있는 것을 확인 할 수 있다.

 


결론

우리가 단일 서버를 운영한다면, upload 폴더 하나에 저장을 하여도 상관 없다.

그러나 요즘은 수 많은 서비스들이 다중 서버를 두고 있고

DB Connection Pool 을 튜닝 하는 것보다도, 그냥 서버를 여러대 두는 것을 선택하는 추세이다.

AWS S3 에 이미지를 저장하는 방법은 서버끼리 업로드한 이미지를 클러스터링 할 수 있는 방법 중 하나이며,

가장 유용한 방법이라고 생각한다.