• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

이미지 삭제 or 서버에 보관

21.08.04 00:01 작성 조회수 202

2

안녕하세요. 이미지 삭제 강의를 보다가 궁금한게 있어서 질문드립니다.
보통 이미지 삭제 요청이 프론트에서 오면 디비와 파일시스템에서 사진을 삭제를 하나요 아니면 유저가 접근못하게 deactivate를 하나요?
이미지도 나중에 많이 쌓이면 좋은 자료일거 같아서 그냥 삭제하기에는 아쉬워보여서요,

답변 2

·

답변을 작성해보세요.

1

도구(stack)보다는 Event Driven Architecture를 공부해보세요. Kafka는 EDA를 구현하는데 사용하는 대표적인 도구일뿐이에요. Kafka를 대체할 수 있는 도구들은 많아요. Redis Stream, NATS Streaming 등등

전 원래 NATS Streaming을 사용했었는데요. Kubernetes에 마이크로 서비스들과 NATS Streaming을 배포해서 사용했었어요.

저 같은 경우 최근에 Kafka에 관심을 갖게된 이유는 아무래도 많이 사용되고 있고 무엇보다 Confluent라는 클라우드사 때문입니다. Atlas 덕분에 인프라 걱정없이 몽고디비를 편하게 사용하고 있는데요. Kafka도 Confluent가 그런 역할을 해주는 것 같더라고요. Confluent에도 좋은 자료들을 많이 공유하는 것 같은데 보시면 좋을것 같아요.

참고로 MSA는 백엔드 서비스를 여러개로 나눠서 배포하는걸 말하는데요. 근데 정작 중요한건 그러면 백엔드 로직과 데이터를 어떻게 나눌거냐에요. 마이크로 서비스들끼리 서로 API호출을 하게 할까? 호출하려고 하는 서비스에 장애가 발생해서 응답을 안하면? 디비를 공유? 근데 그러면 디비부하가 병목이 되서 서비스를 나누는게 의미가 없지 않을까? 그러면 디비를 나눌까? 나눈다면 populate/조인이 안되는데 이걸 어떻게 해야할까? 이런식으로 고려해야할 문제들이 엄청 많아져요. 그래서 이런 사항들이 충분히 고려되지 않은 상황에서 요즘 트렌드에 따라 MSA를 적용하면 실패하는 경우가 많습니다. 근데 지금 보여드린 질문들을 보면 MSA가 아닌 Monolith에서도 가능해요. 중요한건 비즈니스 로직을 어떻게 모듈화해서 관리하느냐에요. 여기서 중요한 역할을 하는게 Event Driven Architecture에요. 일단 도구보다는 EDA를 이해하시고 EDA를 하기 위해 필요한 요소들이 무엇인지 파악해보세요. 그 다음에 관련 도구들을 나열해보시고 요구사항을 충족하는 도구들을 추려내면 됩니다 :)

아래는 eventstore라는 도구를 제공하는 기업인데요. 해당 도구를 사용해보진 않았지만 좋은 블로그들이 많았어요

https://www.eventstore.com/blog/articles

1

rrallvv .J님 안녕하세요 :)

좋은 질문입니다. 일단 딱 정해진 답은 없는데요.

사진을 계속 저장하면 문제가 될 것 같은 경우들을 먼저 몇가지 알려드릴게요. 약정상 선택지 없이 무조건 삭제해야할 수도 있어요. 그리고 아무리 S3버킷 같은 파일저장소가 저렴하다고 하더라도 파일을 저장해두면 조금이라도 비용이 발생하겠죠. 서비스 특성상 S3비용이 부담스러울 정도로 정말 많은 사진(파일)들이 업로드된다면 삭제를 하는것도 고려해볼 수 있을 것 같아요.

반대로 rrallvv .J님 생각처럼 이미지 또한 좋은 데이터가 될 수 있어요. 좋은 데이터란 딥러닝 학습을 위한 재료로 생각이 되는데요. 모든 데이터가 딥러닝(머신러닝)을 위한 좋은 자료가 되지는 않아요.  딥러닝의 학습은 사람이 학습하는 원리와 매우 비슷해요. "이런 환경"(Input)일 때 "이런 결과"(Output)를 내더라! 이렇게 패턴을 찾아내는거에요. Input, Output양쪽의 데이터가 다 있어야 학습이 가능해져요. 근데 아쉽게도 Input 혹은 Output 한쪽에서 데이터가 누락되어서 사용할 수 없는 경우가 많아요. Input은 변수가 정말 다양한데 핵심 변수 기록을 놓쳤을 수도 있고요. 여기서 만약 사진 데이터를 삭제한다면 사진을 활용한 딥러닝을 구현한다고 했을 때 치명적인 데이터 손실이 생길 수 있어요. 데이터베이스에 있는 데이터들도 마찬가지로(훨씬 더) 취약합니다. 데이터베이스의 데이터는 mutable하니깐요. 최종 결과값도 중요하지만 삭제되기 전, 업데이트 되기 전 어떤 값들이 어떻게 변화되어 왔는지 히스토리를 아는게 정말 중요한데 Update, Delete과정에서 히스토리 데이터가 모두 누락되죠. 이러한 데이터의 경우 Apache Kafka 같은 도구를 이용한 Event Driven Architecture(EDA)를 구축하게 되면 문제를 해결할 수 있어요. EDA는 여러 장점이 있는데요. 보통 MSA를 하기 위해 도입되는 핵심 아키텍처에요. 같이 딸려 오는 장점 중 하나가 모든 행동(C,R,U,D,...)들을 각각 event로 immutable하게 저장해줍니다. 오래 된 이벤트들은 S3에 저렴하게 저장해도 되고요. 이건 저장해도 용량이 파일보다 훨씬 적고 값어치는 훨씬 높을 수 있어서 비용 걱정은 안해도 된다고 봐요.

보관 비용이 얼마나 들 것인가? 나중에 활용 가치가 있을 가능성이 얼마나 되는가? 법적 문제는 없는가?

잘 고민해보시고 진행하시면 될 듯합니다! 아 그리고 참고로 딥러닝(머신러닝) 분야를 추상적인 개념정도만 알아도 중요한 데이터인지 아닌지 판단이 가능하실거에요. 데이터만 잘 축적해두시면 나중에 필요하실 때 딥러닝 공부해서 적용해보시면 되고요!

rrallvv .J님의 프로필

rrallvv .J

질문자

2021.08.16

"Apache Kafka 같은 도구를 이용한 Event Driven Architecture(EDA)를 구축" 을 하실수 있다고했는데, 필수적으로 사용되는 stack들에 대한 키워드를 알려주실수 있으실까요?

찾아볼수 잇는 정보는 너무 많은데 제가 아직 무엇이 있는지 어떻게 적용을 하고 있는지에 대한 지식이 부족해서요, 좋은 공부가 될거 같습니다.