Claude와의 문답-1

Alex·2024년 9월 2일
0

Seoul_Nolgoat

목록 보기
11/11
  1. 스프링배치

벌크 INSERT가 단건 INSERT보다 훨씬 빠르다는 것을 확인하셨는데, 그렇다면 모든 상황에서 벌크 INSERT를 사용하는 것이 좋을까요? 어떤 경우에 단건 INSERT가 여전히 필요할 수 있을까요?
-연관관계를 설정해줄때는 벌크 insert를 쓰기 쉽지 않았습니다. 이런 경우와 데이터 셋이 많지 않다면 사실 벌크 insert를 굳이 쓸 필요가 없을 거 같습니다.

JPA의 saveAll() 메서드와 JdbcTemplate의 batchUpdate 메서드를 비교해보셨습니다. 이 두 방식의 장단점은 무엇일까요? 어떤 상황에서 어떤 방식을 선택하는 것이 좋을까요?
-jpa의 saveAll()은 벌크 업데이트와는 개념이 조금 다릅니다. sql쿼리를 하나씩 나눠서 보내기 떄문이죠. 그만큼 db부하가 커집니다. jdbc template를 쓰면 쿼리를 묶어서 보낼 수 있어서 db 부하가 줄어듭니다.

벌크 INSERT를 사용할 때 데이터의 무결성이나 검증은 어떻게 보장할 수 있을까요? 이와 관련해 어떤 추가적인 고려사항이 있을 수 있을까요?
-무결성과 검증은 사실 로직에서 직접 구현해야 합니다. 이 부분은 구현이 쉽지 않아서 제대로 시도해본 적이 없습니다.

로컬 DB와 배포 DB에서 성능 차이가 크게 났다고 하셨는데, 이런 차이가 발생하는 이유는 무엇일까요? 배포 환경에서의 성능을 더욱 최적화하기 위해 어떤 추가적인 방법들을 고려해볼 수 있을까요?
로컬 db는 아무래도 네트워크를 타지 않고 제 로컬 pc에서 돌아가는 db프로그램에 쿼리를 날리는 것이라서 그런 거 같ㅅ브니다. 배포환경에서 성능을 최적화하기 위해선, 네트워크를 타는 횟수를 줄이기 위해서 쿼리를 묶어서 보낼 수 있습니다. 배치를 쓰면 네트워크를 타는 횟수가 줄어들뿐 아니라 다른 이점도 있습니다. sql을 단건으로 보내면 그때마다 lock이 발생하고 트랜잭션을 관리해야 합니다. 배치로 벌크로 보내면 이것들의 횟수를 줄여 db부하를 줄일 수 있습니다.

트러블슈팅 과정에서 DB 연결 문제와 테이블 이름 대소문자 불일치 문제를 겪으셨는데, 이런 문제들을 미리 예방할 수 있는 방법은 없을까요? 개발 과정에서 이러한 문제들을 사전에 발견하고 해결할 수 있는 방법에는 어떤 것들이 있을까요?
-아무래도 코드 이곳저곳에 흩어져 있어서 더 헷갈렸던 거 같습니다. 하드코딩하지 않고 상수로 모아서 관리하며 될 거 같습니다.

벌크 INSERT의 성능이 단건 INSERT에 비해 크게 향상되었다고 하셨는데, 데이터의 양이 더 많아진다면 (예: 100만 건, 1000만 건) 어떤 추가적인 고려사항이 필요할까요? 메모리 사용량이나 트랜잭션 관리 측면에서 어떤 문제가 발생할 수 있을까요?
-데이터가 너무 많아지니까 벌크로 넣는 것도 중간에 pc가 down됐던 일이 있었습니다. 쿼리가 메모리에 저장됐다가 db로 전송되는 것으로 보여지는데, 그렇다면 적절한 레코드 수로 나눠서 보낼 수 있도록 구조를 작성해야 합니다.

JPA에서도 벌크 연산을 지원하는 방법 (예: EntityManager의 createQuery 메소드)에 대해 어떻게 생각하시나요?
-이걸 쓰려면 id 생성 전략을 auto_increment를 쓰지 못하는 걸로 알고 있는데 맞나요?(mysql의 경우) 이런 점들을 고려해야 할 거 같습니다.
SEQUENCE 생성기를 사용하는 경우, 이러한 제한을 피할 수 있습니다. 하지만 MySQL은 기본적으로 시퀀스를 지원하지 않습니다.

네트워크 지연 외에 배포 환경에서 성능에 영향을 미칠 수 있는 다른 요인들은 무엇이 있을까요?
아무래도 배포서버는 메모리양이 크지 않은 경우가 많고, cpu 성능도 좋지 않습니다(aws 프리티어기준) 대량의 데이터를 처리하는 실무에서는 성능적인 이슈가 클 거 같습니다.

또한, 대규모 트래픽의 경우 서버 하나로 부하를 다 감당하는 것은 쉽지 않아서 서비스들간의 의존성을 끊고, 독립적인 서버계층들(예를 들면 알림 전송 서비스, 알림 수신 서비스)구조를 만들어서 수평적 확장이 가능하도록 해야 할 거 같습니다.

데이터베이스 인덱싱, 파티셔닝 등의 기법이 벌크 INSERT 성능에 어떤 영향을 미칠까요?
인덱스 정도가 생각이 나는데요. 인덱스가 많을수록 벌크 insert의 성능은 저하될 거 같습니다. 왜냐하면 새로운 레코드가 삽입될 때마다 인덱스가 재정렬돼야 하는 것으로 알고 있기 때문입니다.

(파티셔닝의 영향:

테이블 파티셔닝은 대량 데이터 처리 시 성능을 향상시킬 수 있습니다.
벌크 INSERT 시 특정 파티션에만 데이터가 삽입되므로 전체 테이블 잠금을 피할 수 있습니다.
파티션 키 선택이 중요: 데이터 분포를 고려해야 합니다.) 이 지점도 생각해볼 이슈같다.

profile
답을 찾기 위해서 노력하는 사람

0개의 댓글