본문 바로가기

MySQL2

saveAll() 썼다가 서버가 뻗었다고요? JPA 벌크 인서트(Bulk Insert)의 배신과 JdbcTemplate 100배 최적화 안녕하세요, 여러분의 든든한 IT 길잡이 데브프리입니다. 백엔드 실무를 하다 보면 외부 API에서 대량의 데이터를 긁어오거나, 운영팀이 넘겨준 수만 건의 엑셀(Excel) 데이터를 DB에 한 번에 밀어 넣어야 하는 상황(데이터 마이그레이션, 로그 적재 등)이 반드시 찾아옵니다. 스프링 부트(Spring Boot) 개발자라면 당연히 리스트에 데이터를 차곡차곡 담은 뒤, userRepository.saveAll(users)를 호출하며 쿨하게 퇴근을 준비할 것입니다. 하지만 실서버에서 이 코드가 실행되는 순간, 서버 CPU가 미친 듯이 치솟고 30초가 지나도 응답이 오지 않는 기현상을 마주하게 됩니다. 데이터가 10만 건을 넘어간다면 무시무시한 OutOfMemoryError와 함께 서버가 그대로 기절해 버리죠.. 2026. 8. 10.
SQL과 NoSQL의 차이점, '아파트 설계도와 포스트잇 상자' 비유로 완벽 정리! 안녕하세요, 여러분의 든든한 IT 길잡이 데브프리입니다. 웹 서비스를 만들 때 데이터를 안전하게 보관하는 '데이터베이스(DB) 창고'를 고르는 일은 백엔드 개발의 시작이자 핵심입니다. 그런데 구글링을 하거나 기술 스택을 고르다 보면 크게 두 가지 갈래길을 만나게 됩니다. 바로 SQL과 NoSQL입니다. "프로젝트에 무난하게 MySQL을 쓰면 될까요, 아니면 요즘 유행하는 MongoDB를 써야 할까요?""둘 다 데이터를 저장하는 창고인데, 왜 굳이 나누어 놓은 거죠?" 백엔드 개발자 기술 면접에서 "인증/인가"만큼이나 뼈대 깊은 단골 질문인 이 주제! 오늘은 복잡한 데이터베이스 이론 대신, '정해진 아파트 설계도'와 '자유로운 포스트잇 상자'에 비유하여 평생 잊어버리지 않게 머릿속에 쏙쏙 정리해 드리겠습니.. 2026. 7. 10.