개발자

여러 이미지 파일을 저장하는 DB 구조에 대해서

2024년 03월 20일조회 155

오답 노트에서 한 문제에 대한 풀이를 쓸 때 여러 개의 사진을 추가하는 기능을 개발 중인데, 여기서 1. 오답노트와 사진 테이블을 분리해서 사진 테이블에 오답노트 ID(FK)를 줄지 아니면 2. 오답노트 테이블에서 사진만 배열 형식으로 저장할지 고민 중입니다. 여러 사진 파일을 어떻게 데이터베이스에 저장하는 것이 가장 안전하고 효율적일까요? 참고로 이미지 수 제한은 없습니다!

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 1

박정환님의 프로필 사진

DB설계 질문을 주셨습니다. 오답노트가 일종의 master 역할을 하고 사진이 optional로 1:n의 관계를 가지는 것 같군요. 1:n의 관계라면 보통적으로는 1번으로 가시는게 맞습니다만 언제나 그렇듯이 정답은 없습니다. 상황에 따라 2번이나 아니면 또다른 방식을 고민하셔야 해요. 1번으로 설계하시고 차후에 상황을 맞추어 개선하시는것이 좋습니다. 또한 사진, 즉 이미지 파일은 현업에서는 별도의 CDN을 사용하여 본 파일은 CDN에 위치하고, DB에는 파일명이나 위치 정도의 텍스트만을 가지는 방식을 사용하기도 합니다. (여기에 보안적 요소가 추가되면, 암호화 시키기도 합니다.) 요새는 AWS가 보편화되어 거의 AWS에 위치시키기도 합니다. 따라서, 파일 자체를 blob화하여 DB에 저장하는 방식은 지양하시기 바라겠습니다.

임지현님의 프로필 사진

임지현

작성자

미림여자정보과학고등학교 2024년 03월 20일

좋은 답변 감사합니다!! 좀 더 고민해보도록 하겠습니다!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2024년 03월 20일

데이터베이스에서 이미지를 저장할 때는 몇 가지 점을 고려해야 합니다. 1. 일반적으로 이미지는 블롭(blob) 형식으로 DB에 직접 저장할 수 있습니다. 그러나, 이 방법은 대규모의 데이터를 다루기 어렵고, 탐색 및 검색 속도를 저하시킬 수 있으며 DB 부하를 증가시키므로 권장하지 않습니다. 2. 보다 효율적인 방법은 이미지를 디스크에 저장하고 해당 파일 경로만 DB에 저장하는 것입니다. 이렇게 하면 검색 속도를 크게 향상시킬 수 있습니다. 문제의 상황을 고려하면, 여러 사진에 대한 정보를 관리하기 위해 오답노트와 사진 테이블을 분리하는 것이 좋아 보입니다. 각 사진 row는 해당 오답노트 ID(FK)와 함께 사진의 파일 경로를 지정합니다. 그 결과, 오답노트와 관련된 모든 사진을 검색하는 쿼리는 간단히 정의할 수 있으며, 각 개별 사진에 대한 정보(예: 추가 날짜, 수정 날짜 등)도 쉽게 추적할 수 있습니다. 즉, 1번 선택지인 '오답노트와 사진 테이블을 분리해서 사진 테이블에 오답노트 ID(FK)를 준다'가 더 안전하고 효율적일 것으로 보입니다. 여러 이미지 파일을 배열로 저장하는 대신 따로 관리함으로써 신뢰성과 유지 보수성, 확장성 등에서 이점을 볼 수 있습니다. 마지막으로 Spring에서는 JPA나 MyBatis같은 ORM 도구를 사용하여 DB 연동 및 쿼리를 처리할 수 있습니다. 또한, 파일 시스템에 액세스하여 이미지 파일을 저장하고 검색하는 작업은 Java IO API 또는 Spring의 Resource abstraction 등을 활용해 구현할 수 있습니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!