db 3

원자성 보장 코드에서? DB에서?

🍎 마주한 문제에서 데이터의 원자성을 어느 곳에서 관리하면 좋을지 고민하게 되어 정리합니다.🍏 문제 상황✓ 공공데이터 API에서 여러 건의 원시 데이터를 조회한 후, 이를 내부 비즈니스에 활용할 수 있도록 정제하여 저장해야 했다. 이 과정에서 데이터를 여러 개의 테이블에 나누어 저장해야 하는 상황이 발생 ✓ 처음에는 Bulk Insert를 사용하여 성능을 최적화하는 방안을 고려했지만, 하나의 테이블이 아닌 여러 개의 테이블에 데이터를 삽입해야 하기 때문에 Bulk Insert를 적용할 수 없었다. ✓ 결국 데이터를 한 건씩 개별적으로 저장하는 방식이 필요했는데 중간에 데이터 삽입이 실패할 경우 어떻게 처리할 것인가라는 고민이 생겼다. ✓ 데이터 정제 및 저장 로직이 일부만 실행되고 중단될 경우, 데이..

Dev 2025.03.18

원시 데이터가 DB에 존재하는 모습

🍎 원시 데이터(이하 Raw Data)를 내부 DB에 저장할 때 어떤 모습으로 담겨야 하는지 생각한 부분을 정리합니다.- 가공되기 전 데이터인 Raw Data는 비즈니스에 사용되기 전까지 한 번 이상의 가공을 거쳐야 하는 데이터입니다.- Raw Data가 중요한 이유는 가공되지 않기 때문에 중요하다고 생각합니다. 가공된 후 다양한 모습으로 비즈니스 데이터가 될 수 있으며 혹시나 가공 처리 과정에 오류가 있어 오염이 될 경우, 근원 데이터로 오류 추적, 개선을 할 수 있기 때문입니다. ❓ 어떻게 Raw Data를 저장해야 할까?- Raw Data의 모습은 규정할 수 없이 다양한 형태로 존재합니다. 외부 API에서 제공하는 데이터가 Raw Data가 될 수 있고 운영되는 서비스의 사용자 활동 이력도 Raw..

TIL 2025.03.05

Hard, Soft Delete and etc..

🍎 프로젝트 관련 수영장 정보 삭제 시 오늘 알게 된 Soft Delete를 사용했습니다. 이유는 잠재적인 미래 사용을 생각했기 때문입니다. 잠재적인 미래 사용으론 운영되고 있지 않은 수영장을 사용자가 고르게 되면 다른 체육 활동 시설, 운영되고 있는 수영 시설을 제공하기 위함입니다. 좌표계산 부분을 어느 계층에 두어야할 지 고민하고 있습니다. 나중에 리팩토링이 필요한 부분이고 일단 infra에 정의해 진행합니다. 🍏 예외는 정말 예외인 곳에서 사용해야 합니다. 이유는 예외를 생성할 때 스택 추적 전체를 캡처하기 때문에 비용이 많이 발생하기 때문입니다. 🍏 Query Parameter vs Path Variable의 차이 위 두 방식은 어디에 어떤 데이터(명사)를 요청하는 것인지 명확하게 정의하기 위해 ..

TIL 2023.04.03