[WIL] 프로젝트 2주차

2024. 10. 7. 11:18·TIL

9/30

 

 

 

Image Upload Server

  1. client ➡️ 백엔드 서버로 이미지 업로드 요청이 들어온다.
  2. 백엔드 서버 ➡️ 이미지 서버로 업로드 요청이 들어온다.
  3. 원본 이미지를 minio/s3에 저장한다.

3-1. 이미지 서버 데이터를 db에 저장한다.

  1. Queue에 작업을 넣은 후 비동기적으로 메타데이터 수정이나 리사이징 같은 추가 작업이 Internal Image Server에서 동작한다.

Image URL Server

  1. client ➡️ 백엔드 서버로 이미지 조회/다운로드 요청이 들어온다.
  2. 백엔드 서버 ➡️ 이미지 서버로 조회/다운로드 요청이 들어온다.
  3. 요청 하는 이미지 정보를 db에서 가져온다.
  4. db에서 가져온 정보로 cdn을 확인한다.
  5. 이미지가 없다면 minio/s3에서 이미지 url을 가져온다.

 

10/1

 

1. 역할 분담

  • ImageUploadServer : 안지연
  • ImageInternalServer : 서병준
  • ImageURLServer : 노민경
  • CDNServer : 최준

2. git repo 생성

https://github.com/4-Image-Module/Image-Module

 

GitHub - 4-Image-Module/Image-Module: Repository for Last Project Image Module

Repository for Last Project Image Module. Contribute to 4-Image-Module/Image-Module development by creating an account on GitHub.

github.com

 

3. 규칙

https://teamsparta.notion.site/adaf36bc6b7e4de78ea67718b77e9d29

 

규칙 | Notion

정해야 할 것

teamsparta.notion.site

 

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

 

[FEAT] 이미지 업로드 구현 · Issue #10 · 4-Image-Module/Image-Module

어떤 기능인가요? 이미지 업로드 작업 상세 내용 minio 이미지 업로드 기본 구현 이미지 업로드 시 db에 이미디 데이터 저장 참고할만한 자료(선택)

github.com

 

@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
'TIL' 카테고리의 다른 글
  • docker compose, kafka 그리고 TimeoutException
  • [TIL 2024/10/15] MSA 프로젝트 Docker로 실행하기
  • [TIL 2024/10/01] docker db 연결 오류
  • [TIL 2024/09/30] 이미지 서버 모듈
dev_ajrqkq
dev_ajrqkq
알고리즘 천재가 될 거야
  • dev_ajrqkq
    기록이 자산이다
    dev_ajrqkq
  • 전체
    오늘
    어제
    • 분류 전체보기 (147)
      • Front-end (0)
      • Back-end (11)
        • Spring (1)
        • Java (8)
      • CS (9)
        • 데이터베이스 (5)
        • 네트워크 (4)
      • Algorithm (80)
      • 이것저것 (0)
      • 버그잡기 (1)
      • TIL (37)
      • 후기 (1)
      • 취준 (0)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      개발자취업
      항해99
      코딩테스트준비
      TypeScript
      티스토리챌린지
      99클럽
      오블완
      Til
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.2
    dev_ajrqkq
    [WIL] 프로젝트 2주차
    상단으로

    티스토리툴바