목록Project (14)
빙응의 공부 블로그
📝배경저번 포스팅 에서는 CSV 파일을 이용해 프로젝트 데이터를 불러오는 과정을 진행했습니다. 또한, MySQL 데이터를 CSV로 변환한 후 MongoDB로 복사하는 작업도 수행했습니다.이 프로젝트의 특성상 데이터는 약 10만 건으로 큰 변화가 없으며, 서버 실행 시 갱신됩니다. 원래는 한 달에 한 번 CSV 파일이 갱신되면, 서버를 재시작해 데이터를 반영하는 방식을 계획했습니다. [Place] 데이터 동기화 완료 - 추가/수정: 100676, 삭제: 0, 시간: 172223ms // 172초 거의 3분📝MySQL 데이터 추가 최적화하기 우선 MySQL 데이터 추가 및 갱신 로직을 최적화하겠습니다.데이터를 추가할 때는 기존 DB와 비교하여 중복 여부를 확인하고, 중복 데이터는 삭제, 갱신된 데이터는..
📝배경 [개인프로젝트]공간 데이터 최적화하기 [개인프로젝트]공간 데이터 최적화하기📝배경 이번에 개인 프로젝트를 진행하면서 공공데이터 포탈의 의료 데이터를 사용하게 되었습니다.그래서 의료 데이터 중 병원, 약국의 정보를 저장하여 그 데이터 중에서 좌표를 활용해서quddnd.tistory.com해당 포스팅에서 저는 공간 데이터를 이용한 병원, 약국 정보 조회에 대해 최적화를 진행했습니다. 이번에는 공간 데이터, 함수, 관계 함수를 제외한 나머지 요소들로 최적화를 진행하기로 했습니다. 해당 사항에 대한 리팩토링 과정을 정리하겠습니다. 📝MySQL 공간 인덱스 MySQL의 공간 인덱스는 R-Tree 인덱스라고 부릅니다. 그 이유 Rectangle의 R과 B-Tree 인덱스를 합쳤기 때문입니다.R-Tree..
📝배경개인프로젝트로 병원, 약국의 위치를 검색하고 그 병원의 진료 내역을 공유할 수 있는 서비스를 기획했습니다.병원, 약국 위치를 받기 위해 공공데이터 포탈의 CSV 파일을 활용하기로 하였고, CSV 파일을 DB에 유지하며 최신 정보가 들어왔을 때 정상적으로 갱신이 되게 하겠습니다. 최종 목표는 CSV 파일을 DB에 저장하고 최신 정보를 중복 처리, 최신화 하는 것입니다. 📝CSV 파일 저장하기 일단 들어가기 앞서 제 프로젝트의 RDB입니다. 지금 CSV 파일에 저장하는 데이터는 장소 정보로 약국, 병원 모두 같은 규격에서 저장합니다. 그것을 이제 타입을 통해 분리합니다.@Entity@Builder@Getter@AllArgsConstructor@NoArgsConstructor@Table(name..

📝배경 이번에 개인 프로젝트를 진행하면서 공공데이터 포탈의 의료 데이터를 사용하게 되었습니다.그래서 의료 데이터 중 병원, 약국의 정보를 저장하여 그 데이터 중에서 좌표를 활용해서 주변 약국, 병원을 조회하는 서비스를 만들기로 하였습니다. 데이터 저장에 성공하고 임의로 좌표 조회를 한 순간 매우 높은 응답 시간이 나와 최적화하기로 하였습니다. 📝MySQL 공간 데이터베이스 지금 사용하는 MySQL에서는 공간 데이터베이스를 제공합니다.MySQL :: MySQL 8.0 Reference Manual :: 13.4.1 Spatial Data Types MySQL :: MySQL 8.0 Reference Manual :: 13.4.1 Spatial Data Types13.4.1 Spatial Data ..

📝배경파티 프로젝트 UniP 진행 중에 파티에 대한 인원 수를 갱신하는 과정에서 동시성 문제가 발생했습니다. 📌문제 설명여러 사용자가 동시에 파티에 가입을 하여 파티 인원을 갱신 과정에서 트랜잭션 교착 상태(DeadLock)가 발생했습니다.교착 상태가 발생하여 한 명의 사용자를 제외한 나머지 사용자가 파티에 가입이 안된 것을 발견했습니다.Failed to join party: could not execute statement [Deadlock found when trying to get lock; try restarting transaction] 그래서 다시 간단하게 테스트를 진행했습니다. @Test void testConcurrencyOnJoinParty() throws In..

MySQL에 대해 심층적으로 공부하였으니 한번 적용해봅시다. 📝 배경졸업 작품 프로젝트 개발을 진행한 후, 깊이 있는 MySQL 공부를 위해 《Real MySQL 8.0》을 읽었습니다. 이번 글에서는 배운 내용을 실제 프로젝트에 적용해 보고자 합니다.우리 서비스의 핵심 기능 중 하나는 파티 목록을 무한 페이징(커서 페이징) 방식으로 가져오기입니다. 성능 저하 없이 지속적으로 데이터를 조회하려면, 인덱스 설계가 매우 중요합니다. [UniP]무한 페이징 기능 구현 및 성능 개선하기 [UniP]무한 페이징 기능 구현 및 성능 개선하기이 글은 무한 페이징에 대해 다루겠습니다.📝배경 이번 졸업 작품 프로젝트에서 메인서버를 맡아 개발하게 되었습니다.그 중 핵심 기능은 파티를 무한 페이지으로 가져오는 요구사항이..