개발자
velog를 참고하여 Spring + Vue를 이용하여 마크 다운 기반 게시글을 구현하고 있습니다.. 글을 쓰는 도중에 이미지를 올리면 s3에서 url를 반환하여, 이것을 통째로 Post 테이블 Content 필드에 저장하여 순서를 보장하는 식으로 진행하고 있습니다. 로직 흐름은 이렇습니다. 1. 사용자가 이미지를 올린다면, 클라이언트에서 글쓰기 버튼을 눌렀을 때 미리 만들어 놓은 UUID와 이미지를 서버로 보낸다. 2. 서버에서는 s3객체에 임시 저장 여부를 확인하는 isTemp를 태그를 넣어서 서버를 걸쳐서 S3에 쏜다. 3. S3에서 객체를 찾아서 key값과 클라이언트에서 보낸 uuid를 Image 테이블에 저장해서 Post와 간접적으로 연관 관계를 맺는다. 4. 글쓰기를 누른다면 내용과 UUID를 보내서 UUID를 Post의 primary key로 사용하고, UUID 기반으로 Image 테이블에서 key들을 갖고 와서 S3 객체의 isTemp 태그를 false로 바꾼다. 4-1 . 뒤로 가기나 임시 저장을 눌렀을 때는 isTemp를 true로 설정하고 저장한다. 5. 30일이 지날 때마다, Post에 있는 isTemp를 통해 임시 여부를 확인하여 임시 저장된 글을 삭제하고, S3에서는 수명 주기를 설정하여 태그를 기반으로 true인 이미지들을 삭제한다. 객체를 삭제하는 이유는 불필요한 데이터가 공간을 차지하는 것이 별로라고 판단했습니다. UUID는 글을 다 쓰기도 전에 서버로 쏘기 때문에, 어떤 게시글에서 쓰였는지 확인하기 위해서 사용했습니다. 성능이나 용량 면에서 안 좋다고 하지만, 이는 데이터를 넣어 놓고 조회를 하여 성능을 확인하였고 현재 프로젝트 크기를 생각했을 때 접목해도 상관없을 것 같아 넣었습니다. 하지만 이런 식으로 진행하니, 만약 사용자가 중간에 이미지 링크를 삭제한다면? 이라는 시나리오를 생각했을 때 이를 대처할 방도가 떠오르지 않습니다. 다른 분들은 어떤 식으로 처리했는지, 제가 너무 어렵게 생각하고 짜는지 궁금합니다.
답변 1
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2월 4일
사용자가 게시글 작성 중 이미지 링크를 삭제하는 시나리오 처리에 대해 몇 가지 방법이 있습니다: 1. **프런트엔드 글쓰기 UI 개선**: 이미지가 포함된 게시글을 저장하기 전에, 사용자가 이미지 링크를 삭제할 수 있는 선택적 기능을 제공할 수 있습니다. 즉, 사용자는 이미지를 업로드하면 즉시 미리보기 화면에서 해당 이미지 위에 'x' 표시 또는 '삭제' 버튼 등을 표시하여 해당 이미지를 삭제할 수 있게 하면 됩니다. 2. **백엔드에서 HTML 파싱 및 validation**: 클라이언트로부터 게시글 내용(HTML)을 받은 후, 서버 측에서 HTML 파싱 라이브러리(ex: Jsoup)를 사용하여 img 태그들의 src 속성(URLs)을 찾아낼 수 있습니다. 이렇게 찾아낸 URL들과 DB에 저장된 UUIDs와 비교하여 없어진(UUID가 없는) URL이 있다면 그것은 사용자가 중간에 삭제한 것으로 간주하여 관련 S3 객체를 삭제할 수 있습니다. 3. **S3 Event Notifications 사용**: S3의 객체 접근 패턴에 따라 이벤트 알림(Event Notification) 설정도 가능합니다. 예를 들어, 어떤 객체가 한 달 동안 접근되지 않았다면 자동으로 삭제하는 등의 정책을 구성할 수 있습니다. 하지만 이 방법은 사용자가 중간에 이미지 링크를 데잍는 시나리오와는 조금 다른 상황에서 더 유용합니다. 위와 같이 복합적인 접근 방식을 도입하면 사용자의 행동에 따라 좀 더 유연하게 대응할 수 있을 것입니다. 이에 대한 최선의 선택은 개발 환경, 리소스, 요구사항 및 프로젝트 팀의 기술 스택에 따라 달라질 수 있습니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!