곰터뷰와 IDrive e2 (2) - IDrive e2λ₯Ό μ‚¬μš©ν•œ λΉ„λ””μ˜€ μ €μž₯/쑰회 둜직

κ³°ν„°λ·° μ„œλΉ„μŠ€μ—μ„œ IDrive e2λ₯Ό μ‚¬μš©ν•œ λ‘œμ§μ— λŒ€ν•΄ μ„€λͺ…ν•œ κΈ€μž…λ‹ˆλ‹€.

Profile Picture
quiet-honey
2023-12-06

원본 κΈ€ λ³΄λŸ¬κ°€κΈ°

μ§€λ‚œ 1νŽΈμ—μ„œ 곰터뷰에 λŒ€ν•œ κ°„λ‹¨ν•œ μ„€λͺ…κ³Ό κ³°ν„°λ·°μ—μ„œ Object Storage둜 μ™œ IDrive e2λ₯Ό μ‚¬μš©ν•˜κ²Œ λ˜μ—ˆλŠ”μ§€ ν¬μŠ€νŒ…μ„ ν–ˆμ—ˆλ‹€. μ΄λ²ˆμ—λŠ” 그럼 IDrive e2λ₯Ό μ‚¬μš©ν•˜μ—¬ μ–΄λ–€ λ°©μ‹μœΌλ‘œ λΉ„λ””μ˜€λ₯Ό μ €μž₯ν•˜κ³  μ‘°νšŒν•˜λŠ”μ§€ μ‚΄νŽ΄λ³΄κ² λ‹€.

λΉ„λ””μ˜€ μ €μž₯ 둜직

λ¨Όμ € λΉ„λ””μ˜€ μ €μž₯ λ‘œμ§μ„ κ°„λ‹¨ν•˜κ²Œ 그림으둜 μ‚΄νŽ΄λ³΄μž.
λ‹€μŒκ³Ό 같은 3가지 과정을 톡해 λΉ„λ””μ˜€λ₯Ό μ„œλ²„μ— μ €μž₯ν•  수 μžˆλ‹€. λΉ„λ””μ˜€ μ €μž₯ 둜직 흐름도

1. Pre-Signed URL λ°œκΈ‰

μš°μ„  Pre-Signed URL이 무엇인지 λ¨Όμ € μ•Œμ•„λ‘˜ ν•„μš”κ°€ μžˆλ‹€. Pre-Signed URL은 μ›Ή μ„œλΉ„μŠ€μ—μ„œ 많이 μ‚¬μš©λ˜λŠ” λ³΄μ•ˆ 기술 쀑 ν•˜λ‚˜λ‘œ, AWS S3와 같은 객체 μŠ€ν† λ¦¬μ§€ μ„œλΉ„μŠ€μ—μ„œ μ‚¬μš©λ˜λŠ” κ°œλ… 쀑 ν•˜λ‚˜μ΄λ‹€. μ„œλ²„ μΈ‘μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈκ°€ νŠΉμ • λ¦¬μ†ŒμŠ€μ— 직접 μ ‘κ·Όν•  수 μžˆλŠ” URL을 μƒμ„±ν•˜λŠ” λ°©μ‹μœΌλ‘œ, μ„œλ²„μ—μ„œ μ •μ˜ν•œ κΆŒν•œ(Read, Write λ“±)κ³Ό 만료 μ‹œκ°„μ΄ ν¬ν•¨λ˜μ–΄ μžˆλ‹€. μ„œλ²„κ±° μ‹€μ œλ‘œ νŒŒμΌμ„ μ „μ†‘ν•˜μ§€ μ•Šκ³ λ„ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ•ˆμ „ν•œ λ°©λ²•μœΌλ‘œ νŒŒμΌμ— μ ‘κ·Όν•  수 있게 ν•˜κΈ°μ— λ³΄μ•ˆ μΈ‘λ©΄μ—μ„œ 맀우 μœ μš©ν•˜λ‹€. κ³°ν„°λ·°μ—μ„œλ„ λ‹€μŒκ³Ό 같은 이유둜 Pre-Signed URL을 ν΄λΌμ΄μ–ΈνŠΈμ— λ°œκΈ‰ν•΄μ£Όμ–΄ IDrive에 λ©΄μ ‘ μ˜μƒμ„ μ—…λ‘œλ“œ ν•˜λ„λ‘ κ²°μ •ν•˜μ˜€λ‹€.

  • μ„œλ²„ μΈ‘μ—μ„œ λ™μ˜μƒμ„ μ—…λ‘œλ“œν•˜κ²Œ ν•  경우 μ„œλ²„μ˜ λ¦¬μ†ŒμŠ€λ₯Ό λ„ˆλ¬΄ 많이 μ‚¬μš©ν•˜μ—¬ λ¬Έμ œκ°€ λ°œμƒν•  수 있음
  • ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ λ™μ˜μƒμ„ μ΄¬μ˜ν•˜κ³  이λ₯Ό μ„œλ²„μ— λ„˜κΈ°λŠ” 경우 λ„€νŠΈμ›Œν¬ λΉ„μš©μ΄ 많이 λ°œμƒν•  수 있음

그렇기에 ν΄λΌμ΄μ–ΈνŠΈμ— Pre-Signed URL을 λ°˜ν™˜ν•˜κ³ , 이λ₯Ό μ‚¬μš©ν•΄ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ λΉ„λ””μ˜€λ₯Ό μ—…λ‘œλ“œ ν•˜λ„λ‘ κ΅¬ν˜„ν•˜μ—¬ μ„œλ²„μ˜ λΆ€λ‹΄κ³Ό μ†ŒλΉ„λ˜λŠ” λΉ„μš©μ„ μ΅œλŒ€ν•œ 쀄이기 μœ„ν•΄ λ…Έλ ₯ν•˜μ˜€λ‹€.

2. Pre-Signed URL을 μ‚¬μš©ν•œ λΉ„λ””μ˜€ μ €μž₯

1λ²ˆμ—μ„œ κ΅¬ν˜„ν•œ Pre-Signed URL λ°œκΈ‰ λ‘œμ§μ„ μ‚¬μš©ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ IDrive에 λ°”λ‘œ μ˜μƒμ„ μ—…λ‘œλ“œν•œλ‹€.
HTTP Body에 binary ν˜•νƒœλ‘œ μ˜μƒμ„ λ‹΄μ•„ PUT λ©”μ„œλ“œλ‘œ Pre-Signed URL에 μš”μ²­μ„ 보내면 κ°„λ‹¨ν•˜κ²Œ IDrive μ„œλ²„μ— λ™μ˜μƒμ΄ μ—…λ‘œλ“œκ°€ λœλ‹€.

3. λΉ„λ””μ˜€ μ—…λ‘œλ“œ μ™„λ£Œ ν›„ μ„œλ²„μ— λΉ„λ””μ˜€ 정보 μ €μž₯

ν΄λΌμ΄μ–ΈνŠΈ μΈ‘μ—μ„œ λΉ„λ””μ˜€κ°€ IDrive에 μ €μž₯됨을 ν™•μΈν•œ ν›„ IDrive에 μ €μž₯된 λΉ„λ””μ˜€μ˜ URL, 파일 이름 등을 ν¬ν•¨ν•˜μ—¬ μ„œλ²„μ— μš”μ²­μ„ 보내면 DB에 λΉ„λ””μ˜€μ˜ 정보λ₯Ό μ €μž₯ν•œλ‹€.
그리고 이후 λΉ„λ””μ˜€ 쑰회 μ‹œμ—λŠ” DB에 μ €μž₯된 λΉ„λ””μ˜€μ˜ 정보λ₯Ό μ‚¬μš©ν•΄μ„œ IDrive에 μ ‘κ·Όν•  ν•„μš”μ—†μ΄ κ°„λ‹¨ν•˜κ²Œ μ €μž₯ν•œ λΉ„λ””μ˜€λ₯Ό μ‹œμ²­ν•  수 μžˆλ‹€.

λΉ„λ””μ˜€ 쑰회 둜직

μ €μž₯ν•œ λΉ„λ””μ˜€λ₯Ό λ‹€μ‹œ λ³΄λŠ”, 즉 μ‘°νšŒν•˜λŠ” λ‘œμ§λ„ μ„œλΉ„μŠ€μ—μ„œ ν•„μˆ˜μ μ΄λ‹€.
κ³°ν„°λ·°μ—μ„œ μ œκ³΅ν•˜λŠ” λΉ„λ””μ˜€ 쑰회 λ°©μ‹μ—λŠ” μ•„λž˜μ™€ 같이 두 가지가 μžˆλ‹€. 각 쑰회 λ°©μ‹μ˜ λ‘œμ§μ„ μ„€λͺ…해보겠닀.

개인 λΉ„λ””μ˜€ 쑰회

λ¨Όμ € μžμ‹ μ˜ λΉ„κ³΅κ°œ λΉ„λ””μ˜€λ₯Ό ν™•μΈν•˜λŠ” λ‘œμ§μ„ κ°„λ‹¨ν•˜κ²Œ 그림으둜 μ‚΄νŽ΄λ³΄μž. 개인 λΉ„λ””μ˜€ 쑰회 λ‘œμ§μ—λŠ” μ•„λž˜μ™€ 같은 두 가지 κ²½μš°κ°€ μžˆλ‹€. 개인 λΉ„λ””μ˜€ 쑰회 둜직 흐름도

1. μžμ‹ μ˜ λΉ„λ””μ˜€ 전체 쑰회
μžμ‹ μ˜ λΉ„λ””μ˜€λ“€μ„ ν•œ λ²ˆμ— μ „μ²΄μ μœΌλ‘œ μ‘°νšŒν•  수 μžˆλ„λ‘ κ΅¬ν˜„ν•˜μ˜€λ‹€. μ„œλ²„μ—μ„œ λ°œκΈ‰λ°›μ€ μΏ ν‚€μ—μ„œ νšŒμ› 정보λ₯Ό μΆ”μΆœν•˜κ³  μΆ”μΆœν•œ idλ₯Ό ν† λŒ€λ‘œ κ·Έ νšŒμ›μ˜ λͺ¨λ“  λΉ„λ””μ˜€λ₯Ό μ‘°νšŒν•˜λ„λ‘ κ΅¬ν˜„ν•˜μ˜€λ‹€.

2. 단일 λΉ„λ””μ˜€ 쑰회
DB에 μ €μž₯된 video의 idλ₯Ό 기반으둜 μ‘°νšŒν•˜λŠ” 것이기에 둜직이 어렡지 μ•Šμ•˜λ‹€. λ‹€λ§Œ μΏ ν‚€λ₯Ό 기반으둜 νšŒμ› 정보λ₯Ό μΆ”μΆœν•˜κ³ , 뽑아낸 νšŒμ› 정보λ₯Ό 기반으둜 λΉ„λ””μ˜€μ˜ μ‹€μ œ μ΄¬μ˜μžμΈμ§€ ν™•μΈν•˜λŠ” 둜직이 쑰금 λ³΅μž‘ν•˜μ˜€λ‹€.
특히 ν…ŒμŠ€νŠΈ 진행 μ‹œμ— 이에 λŒ€ν•œ 경우λ₯Ό ν…ŒμŠ€νŠΈ ν•˜λŠ” 것에 어렀움을 κ²ͺμ—ˆλ‹€.

νƒ€μΈμ˜ 곡개된 λΉ„λ””μ˜€ 쑰회

λ‹€μŒμœΌλ‘œ νƒ€μΈμ˜ 곡개 λΉ„λ””μ˜€λ₯Ό μ‘°νšŒν•˜λŠ” λ‘œμ§μ„ 그림으둜 κ°„λ‹¨ν•˜κ²Œ μ‚΄νŽ΄λ³΄μž. Public λΉ„λ””μ˜€ 쑰회 κ΅¬ν˜„μ„ μœ„ν•΄μ„œλŠ” λ‹€μŒ 두 가지 경우λ₯Ό κ΅¬ν˜„ν•΄μ•Όν–ˆλ‹€. νƒ€μΈμ˜ 곡개된 λΉ„λ””μ˜€ 쑰회 둜직 흐름도

1. λΉ„λ””μ˜€ Public으둜 μ „ν™˜
λΉ„λ””μ˜€λ₯Ό Public으둜 λ³€ν™˜ν•˜κ³ , Public으둜 λ³€ν™˜λœ λΉ„λ””μ˜€μ˜ URL을 μ•”ν˜Έν™”ν•˜μ—¬ {ν•΄μ‹œκ°’:μ‹€μ œ URL}의 ν˜•μ‹μœΌλ‘œ Redis에 μ €μž₯ν•˜λ„λ‘ ν•˜μ˜€λ‹€.
μƒνƒœλ₯Ό μ „ν™˜ν•˜λ €λŠ” λΉ„λ””μ˜€κ°€ μ‹€μ œ 촬영자의 μš”μ²­μ— μ˜ν•΄ μ „ν™˜λ˜λŠ”μ§€ ν™•μΈν•˜λŠ” 과정을 λ°˜λ“œμ‹œ 거치게 ν–ˆλ‹€.
이λ₯Ό ν†΅κ³Όν•œλ‹€λ©΄ ν•΄μ‹œκ°’κ³Ό μ‹€μ œ URL을 Redis에 μ €μž₯ν•˜κ³ , μ‹€μ œ URL 정보λ₯Ό ν† λŒ€λ‘œ ν•΄λ‹Ή λΉ„λ””μ˜€κ°€ Public μƒνƒœμΈμ§€ μ‘°νšŒν•  수 μžˆλ„λ‘ ν•˜μ˜€λ‹€.

2. λΉ„λ””μ˜€ ν•΄μ‹œκ°’μ„ μ‚¬μš©ν•œ λΉ„λ””μ˜€ 상세 정보 λ°˜ν™˜
λΉ„λ””μ˜€ ν•΄μ‹œκ°’μ„ μ‚¬μš©ν•œ λΉ„λ””μ˜€ 상세 정보 λ°˜ν™˜ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄, 이전에 μ‚¬μš©ν•˜μ˜€λ˜ Redis μ‚¬μš© λ‘œμ§μ„ μ‚¬μš©ν•˜μ˜€λ‹€. λΉ„λ””μ˜€ ν•΄μ‹œκ°’μ΄ μš”μ²­μœΌλ‘œ λ“€μ–΄μ˜€λ©΄ ν•΄λ‹Ή ν•΄μ‹œκ°’μ„ λ³΅ν˜Έν™”ν•˜μ—¬ μ‹€μ œ URL을 μ•Œμ•„λ‚΄κ³ , μ‹€μ œ URL이 Public인지 Private인지 ν™•μΈν•˜μ—¬ λΉ„λ””μ˜€ 상세 정보 λ°˜ν™˜μ„ μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•˜μ˜€λ‹€.

λ‹€μŒ ν¬μŠ€νŒ…μ—μ„œλŠ” AWS SDK for JavaScriptλ₯Ό ν™œμš©ν•œ μ‹€μ œ μ—…λ‘œλ“œ λ‘œμ§μ„ λΈ”λ‘œκΉ…ν•˜λ„λ‘ ν•˜κ² λ‹€.

Β© 2024 Adultlee. All rights reserved.Made with ❀ by 이성인