많은 프로젝트에서 이미지가 필요하다. 그런 이미지를 저장하고, 읽어오고, 수정하고 마지막으로 삭제하기 위해서는 어떻게 해야 할까?
생각해봐야 하는 것들
먼저 이미지가 어떻게 저장되는지를 프로필사진 등록을 예로 생각해 보자.
프로필 사진이 등록될 때 아래와 같은 과정이 있다.
- 프로필 사진 등록하기 클릭
- 프로필 사진을 컴퓨터에서 찾고 선택한 이미지 저장
그러면 클라이언트에서 선택한 이미지는 서버로 오게 되는데 이 이미지를 S3와 같은 저장소에 저장을 해야 한다. 그리고 S3에서 이미지를 저장하면 이미지를 조회할 수 있는 URL이 반환이 된다.(Image URL이다.) 그리고 우리는 반환된 이미지 URL을 Database에 저장을 하면 된다. 그럼 아래와 같은 순서로 작동하게 만들면 된다.
- 클라이언트에서 들어온 이미지를 저장소에 업로드
- 이미지 저장소에서 반환한 이미지 URL을 Database에 저장
이미지 등록을 기준으로 생각해 보면 우리 프로젝트에 필요한 건 아래와 같다.
- 이미지를 저장할 저장소 확보
- 실제 이미지가 저장될 공간
- 이미지 저장소에서 반환한 이미지 URL을 저장할 공간
- 이미지에 대한 요청을 받을 로직과 프로젝트의 이미지 저장소 관련 설정
- 프로젝트 이미지 저장소 설정 및 CRUD관련 로직 구현
- 구현된 이미지 관련 CRUD 프로젝트에 적용
* 참고로 CRUD는 Create, Read, Update, Delete를 뜻한다.
이번 프로젝트를 위해 사용한 이미지 저장소는 AWS의 S3이다.
가장 먼저 S3를 설정하는 법을 확인해 보자.
(AWS 계정이 있고 EC2서버 또한 있다는 가정하에 진행되고 있으니 아직 없음 만들어야 한다.)
이미지 버킷 생성
그럼 첫 번째로 이미지가 실제로 저장이 될 S3를 확보해 보자.
먼저 AWS에 들어가 검색창에 S3를 입력하고 들어가 보자 그러면 아래와 같은 페이지가 먼저 뜬다.
여기서 오른쪽 중간 주황색 버튼 '버킷 만들기'를 눌러준다.
그러면 다음 화면으로 넘어가지고 아래와 같은 정보를 입력하라고 한다. 한 개씩 보면 아래와 같다.
- AWS 리전 : 어디 지역에서 쓰니? -> 당연히 한국이다.
- 버킷 이름 : 우리가 만드는 이미지 저장소의 이름이다. AWS에서는 S3저장소를 Bucket이라고 한다. 본인이 원하는 아무 이름이나 정하자.
- 기존 버킷에서 설정 복사: 옆에 보면 선택사항이라고 쓰여있다. 개인적인 경험으로 선택사항과 권장은 돈과 관련된 게 아니면 건들지 않는 게 좋다.
4. 이 버킷의 퍼블릭 액세스 차단 설정: 이 Bucket에 저장된 정보에 대한 액세스 관련 내용을 선택하는 거다. 초기에 모든 퍼블릭 액세스 차단이 선택돼 있는데 선택을 해제하고 아래의 체크 박스를 체크해 주자. 위험할 수 있다는 경고의 내용이다.
5. 버킷 버전관리: 굳이 필요 없다.
6. 태그: 비용을 추적하는데 쓰인다고 하나 Facebook 수준이 아닌 이상 걱정할 필요 없는 내용이다.
7. 기본암호화
- 암호화 유형: 기본적인 Public Key & Secret Key 사용하는 게 제일 편하다. 하지만 위험하기도 하다. 일단 가장 첫 번째 관리형 키를 선택하자.
- 버킷 키: 활성화로 선택하자.
IAM 설정
그럼 우리가 작성한 프로젝트가 저장소에 이미지를 저장하고 수정하고 삭제하기 위해서는 우리가 만든 프로젝트만 접근이 가능하도록 만들어야 한다. 그렇게 하기 위해서는 아래와 같이 우리가 만든 S3 저장소에 대한 접근권한을 생성하고 생성한 권한을 추후에 프로젝트에 설정하여야 한다.
먼저 AWS에 검색창에 'IAM'이라고 입력한다. 그러면 아래와 같은 화면으로 이동한다.
1. 오른쪽 상단에 있는 '사용자 생성'에 들어간다.
2. 1단계에서는 간단히 만들 IAM을 이름을 뭘로 설정할지에 대해 묻는다 그러니 그냥 패스.
3. 2단계에서는 만들 IAM의 권한을 설정해야 한다. 여기서는 무조건 '직접 정책 연결'을 선택하자
4. 그럼 하단에 권한 정책이 뜨는데 1161개 중에서 하나를 선택해야 한다.(많기도 하다) 'AmazonS3 FullAccess'를 무조건 사용해야 한다.
5. 1,2단계에서 설정한 내용에 대한 확인을 진행하고 사용자 생성을 진행을 눌러 진행한다.
6. 그럼 사진과 같이 추가가 된다.
7. 사용자 이름을 누르면 보이는 내용이다. 우리가 생성한 사용자에 대한 정보를 알 수 있다. 그런데 여기서 중요한 것은 바로 액세스 키를 만드는 것이다. 오른쪽에 있는 액세스키 만들기를 누른다.
8. 어떤 용도로 사용할지 묻는 거다 '기타' 빼고 아무거나 눌러도 된다.
9. 2단계의 설명 태그설정은 무시하고 바로 생성된 액세스 키를 확인할 수 있다. 꼭! '. csv 파일 다운로드'를 눌러 저장하자.
개발을 하다 보면 이런 전설을 들어본 적이 있을 것이다. 'AWS 요금이 2000달러가 나왔다.' '해킹을 당했다.' 등등 듣기만 해도 소름이 돋는 이야기들인데 대부분의 사람들이 여기서 발급된 액세스 키를 클라우드 저장소에 올려놔서 그런 거다. 진짜로 조심해야 하는 부분이다. 물론 로컬에 저장된 내용은 누군가 조회하기 힘들지만 클라우드 저장소에 올려놓는 것은 고양이에게 생선가게 맡겨두고 뿌듯해하는 것과 같다. 일단은 로컬에 저장을 하고 추후에 Project에 저장을 하면서 어떻게 가리는지 공유하겠다.
이렇게 하면 프로젝트에서 이미지를 다루기 위한 프로젝트 외부적인 설정이 끝났다고 생각하면 된다.
이미지가 실제로 저장될 저장소와 저장소에 대한 사용권한을 만들었다.
그럼 이제 남은 것은
- 프로젝트와 저장소 연결
- 프로젝트 내의 이미지 관련 요청 처리 구현
글이 길어졌으니 2편으로 찾아뵙겠습니다.
감사합니다!
'Backend Dev. > Project Impl' 카테고리의 다른 글
Spring Boot 개발노트: 프로젝트 HTTPS 적용 2편 (0) | 2023.12.14 |
---|---|
Spring Boot 개발 노트: S3를 이용해 프로젝트에 이미지관련 CRUD 구현 2편 - Spring Boot 설정 (0) | 2023.12.13 |
Spring Boot 개발노트: application.properties .gitignore에 추가 (0) | 2023.12.12 |
Spring Boot 개발 노트 : 프로젝트 HTTPS 적용 1 (1) | 2023.12.07 |