9/30
Image Upload Server
- client ➡️ 백엔드 서버로 이미지 업로드 요청이 들어온다.
- 백엔드 서버 ➡️ 이미지 서버로 업로드 요청이 들어온다.
- 원본 이미지를 minio/s3에 저장한다.
3-1. 이미지 서버 데이터를 db에 저장한다.
- Queue에 작업을 넣은 후 비동기적으로 메타데이터 수정이나 리사이징 같은 추가 작업이 Internal Image Server에서 동작한다.
Image URL Server
- client ➡️ 백엔드 서버로 이미지 조회/다운로드 요청이 들어온다.
- 백엔드 서버 ➡️ 이미지 서버로 조회/다운로드 요청이 들어온다.
- 요청 하는 이미지 정보를 db에서 가져온다.
- db에서 가져온 정보로 cdn을 확인한다.
- 이미지가 없다면 minio/s3에서 이미지 url을 가져온다.
10/1
1. 역할 분담
- ImageUploadServer : 안지연
- ImageInternalServer : 서병준
- ImageURLServer : 노민경
- CDNServer : 최준
2. git repo 생성
https://github.com/4-Image-Module/Image-Module
3. 규칙
https://teamsparta.notion.site/adaf36bc6b7e4de78ea67718b77e9d29
4. 발견한 오류
🚨PostgreSQL 포트 충돌
로컬에 설치된 PostgreSQL과 Docker로 실행된 PostgreSQL이 충돌이 생겼다.
⇒ 로컬 db를 중지시킴
10/2
1.minio 실습
docker-compose.yml
services:
minio:
image: minio/minio
container_name: minio
ports:
- "9000:9000" # Minio API 포트
- "9001:9001" # Minio 웹 콘솔 포트
volumes:
- ./data:/data # 데이터를 저장할 로컬 디렉토리
environment:
MINIO_ROOT_USER: minio # Minio 로그인 사용자 이름
MINIO_ROOT_PASSWORD: miniopass # Minio 로그인 비밀번호
command: server /data --console-address ":9001" # Minio 서버 실행 명령
application.yml
minio:
url: http://localhost:9000
accessKey: minio
secretKey: miniopass
bucket: mybucket
2. 발견한 오류
🚨 class file for okhttp3.HttpUrl not found
⇒ OkHttp 라이브러리 부재 Minio 클라이언트는 S3 API와 호환되는 객체 스토리지를 관리하는 라이브러리로,
객체를 업로드, 다운로드, 삭제하는 등의 기능을 수행할 때 HTTP 통신을 사용한다.
이 과정에서 Minio는 신뢰성 있는 HTTP 클라이언트가 필요하고, 그 역할을 OkHttp가 담당한다.
implementation 'com.squareup.okhttp3:okhttp:4.9.3' 추가하기!
10/4
1. cdn url → 정적 생성 채택
2. 테이블 정비
- resizing된 이미지들은 원본 이미지의 UUID 가지고 있게 하자. 그리고 backend client에게는 업로드 시 원본 이미지 UUID를 반환해 이미지 구분. resizing된 이미지 얻고 싶으면 해당 이미지의 UUID와 width, height 보내도록. 원본 이미지는 원본 이미지 UUID를 자기 자신 갖도록.
- 치환된 이미지 이름은 UUID_업로드 요청시간 ex) d5f59b88-2d5f-4d89-9e21-35fc2bcd0012_20231004123456
- minio에서는 s3처럼 정적인 이미지 url을 제공하지 않으므로 stored_url은 필드에서 제거하도록 한다.
3. 발견한 오류
🚨 Invalid return type for async method (only Future and void supported)
⇒@Async 사용시 return값이 다음으로 제한 되어있음
1. CompletableFuture.class
2. org.springframework.util.concurrent.ListenableFuture.class
3. Future.class void.class
5. kotlin.Unit
10/6
https://github.com/4-Image-Module/Image-Module/issues/10
@SneakyThrows
Java에서 메서드 선언부에 Throws 를 정의하지 않고도, 검사 된 예외를 Throw 할 수 있도록 하는 Lombok 에서 제공하는 어노테이션
'TIL' 카테고리의 다른 글
docker compose, kafka 그리고 TimeoutException (2) | 2024.10.18 |
---|---|
[TIL 2024/10/15] MSA 프로젝트 Docker로 실행하기 (0) | 2024.10.16 |
[TIL 2024/10/01] docker db 연결 오류 (1) | 2024.10.03 |
[TIL 2024/09/30] 이미지 서버 모듈 (1) | 2024.10.01 |
[TIL 2024/09/12] 공공 데이터 API service Key (0) | 2024.09.13 |