안녕하세요,
이번에는 제 이직 준비 과정에서 경험한 스프링 배치 관련 면접 질문에 대한 내용을 공유해보려고 합니다.
면접에서 자주 물어보는 질문들을 정리해보았습니다.
정말 간단히만 답을 적어둔 것이라 참고만 해주세요~
1. 왜 스프링 배치를 사용하나요?
스프링 배치는 대용량 데이터 처리와 스케줄링을 효과적으로 다루기 위한 프레임워크로, 이를 통해 일관성 있고 안정적인 배치 작업을 수행할 수 있습니다. 특히 대용량 데이터를 읽어 파일생성과 같은 작업을 할때 유용하게 사용할 수 있습니다.
2. 멱등성은 어떻게 유지하나요?
멱등성은 동일한 입력에 대해 항상 동일한 출력을 보장하는 원칙입니다. 멱등성이 깨지는 경우의 대표적으로 데이터를 insert 하는 잡을 들 수 있는데 이러한 잡을 두번 돌리는 경우 DB에 별도의 유니크 키 등이 없는 한 중복 데이터가 생성되게 됩니다. 이러한 현상을 막기 위해 배치를 구동할 때 배치를 통해 생성될 데이터들을 삭제하는 등의 사전 스텝들을 넣어놓았으며 이로 부족할 경우 별도의 잡을 구성하여 함께 돌리는 방식으로 데이터의 멱등성을 유지하였습니다.
3. 스프링 배치 메타 데이터 테이블은 어떤 것들이 있나요?
BATCH_JOB_INSTANCE, BATCH_JOB_EXECUTION, BATCH_STEP_EXECUTION 등의 테이블이 있으며, 이들은 배치 작업의 메타데이터를 저장합니다.
4. 배치가 중간에 실패하면 어떻게 처리하나요?
스프링 배치는 스킵 및 재시도 기능을 제공하여 실패한 청크를 스킵하거나, 실패 시 재시도할 수 있습니다.
5. 스프링 배치 멀티 스레드와 파티셔닝의 차이는 무엇인가요?
- 멀티 스레드 (Multi-Threading):
- 멀티 스레딩은 단일 배치 작업을 여러 스레드로 나눠 처리하는 방식입니다.
- 한 작업을 여러 스레드가 동시에 수행함으로써 처리 속도를 향상시키는 방법 중 하나입니다.
- 데이터를 병렬로 처리하므로 성능 향상을 가져올 수 있습니다.
- 주로 CPU 연산이 많이 필요한 작업에 적합합니다.
- 파티셔닝 (Partitioning):
- 파티셔닝은 대용량의 데이터를 여러 파티션으로 나누어 병렬로 처리하는 방식입니다.
- 각 파티션은 독립적으로 실행되며, 서로 영향을 받지 않고 작업을 수행합니다.
- 주로 데이터베이스나 파일 등에서 가져온 데이터를 특정 기준에 따라 분할하여 처리합니다.
- I/O 바운드 작업에서 성능 향상을 가져올 수 있습니다.
- 차이점:
- 목적:
- 멀티 스레딩은 주로 CPU 연산이 많은 작업에서 성능을 향상시키는 데 사용됩니다.
- 파티셔닝은 데이터를 병렬로 처리하여 I/O 바운드 작업에서 성능을 향상시키는 데 사용됩니다.
- 단위:
- 멀티 스레딩은 하나의 작업을 여러 스레드로 분할하여 처리합니다.
- 파티셔닝은 데이터를 여러 파티션으로 나누어 독립적으로 처리합니다.
- 종속성:
- 멀티 스레딩은 작업 간에 종속성이 있을 수 있습니다.
- 파티셔닝은 각 파티션 간에 독립적이므로 작업 간에 종속성이 적습니다.
- 목적:
6. 트랜지션 관리를 왜 청크 단위로 하는지 설명해주세요.
청크 단위로 트랜잭션을 관리하면 데이터베이스 부하를 최소화하면서 대용량 데이터 처리가 가능하며, 실패 시 롤백을 효과적으로 수행할 수 있습니다.
7. reader, processor, writer 의 차이는 무엇인가요?
배치 잡의 핵심 구성 요소 중 하나로, 데이터를 읽는 리더, 가공하는 프로세서, 결과를 쓰는 라이터의 세 가지 구성 요소를 가집니다.
- 리더 (Reader): 데이터를 읽어오는 역할을 수행합니다. 데이터는 파일, 데이터베이스, 메시지 큐 등 다양한 소스에서 읽을 수 있습니다.
- 프로세서 (Processor): 리더에서 읽어온 데이터를 가공하거나 변환하는 역할을 합니다. 이 부분은 선택적으로 사용할 수 있습니다.
- 라이터 (Writer): 최종 결과를 어떤 형태로 저장할지 정하는 역할을 합니다. 데이터베이스에 저장하거나 파일로 출력할 수 있습니다.
8. 커서 기반 대 페이징 기반의 차이점은 무엇인가요?
- 커서 기반 (Cursor-based):
- 배치 작업에서 데이터를 읽어오는 방식 중 하나입니다.
- 전체 데이터셋을 읽어오면서 커서를 사용하여 데이터를 순차적으로 읽어옵니다.
- 작업이 시작되면 데이터베이스에서 커서를 열고, 한 번에 모든 데이터를 가져오게 됩니다.
- 주로 작은 규모의 데이터에 적합하며, 대용량 데이터의 경우 메모리 부족 문제가 발생할 수 있습니다.
- 커넥션을 한번 연결해놓고 데이터를 계속 끌어오기때문에 속도가 빠른 편입니다.
- 다만... reader 에서 커서로 오픈해놓은 상태의 데이터에 대해 writer 에서 udpate 칠 경우 오류가 날 수 있으므로 주의가 필요합니다.
- 페이징 기반 (Paging-based):
- 대용량 데이터를 효과적으로 처리하기 위한 방법 중 하나입니다.
- 페이지 단위로 데이터를 나눠 읽어오는 방식입니다. 각 페이지는 일정한 양의 데이터를 포함합니다.
- 한 번에 작은 양의 데이터만 읽어오므로 메모리 부하가 상대적으로 적습니다.
- 데이터베이스에서 특정 범위의 데이터만 가져오기 때문에 전체 데이터를 읽는 것보다 효율적입니다.
- 일반적으로 페이지가 시작되는 id 값을 where 절에 추가하여 조회 속도를 높입니다.
9. 배치 실행은 어떻게 하는지 설명해주세요.
배치 실행은 스케줄러를 통해 주기적으로 실행하거나, 필요한 시점에 젠킨스를 통해 실행할 수 있습니다.
10. 지연되는 배치 잡은 어떻게 모니터링하나요?
- 배치 잡이 예상보다 오래 걸리는 경우 또는 일반적인 실행 시간과 비교해 더 오랜 시간이 소요되는 경우, 지연된 배치 잡을 모니터링해야 합니다.
- 모니터링 방법:
- 로그 분석: 배치 잡의 로그를 상세히 분석하여 어떤 부분에서 시간이 소요되는지 확인합니다.
- 성능 모니터링 도구 사용: 서버 및 데이터베이스의 성능을 모니터링하는 도구를 활용하여 병목 현상이나 성능 이슈를 파악합니다.
- 스케줄러 설정 확인: 잡이 실행되는 스케줄러의 설정을 확인하여 예상 시간과 일치하는지 확인합니다.
- 의존 잡 확인: 현재 실행 중인 잡이 다른 잡에 의존하는 경우, 의존 잡이 끝나길 기다리는 경우가 있을 수 있습니다.
지연의 원인을 파악한 후, 해당 문제에 대한 조치를 취합니다. 이는 데이터베이스 인덱스 최적화, 쿼리 튜닝, 잡의 병렬 처리 등의 방법을 포함할 수 있습니다.
지연이 예상 범위 내에 있다면 잡이 정상적으로 실행 중임을 감안하고 추가적인 모니터링을 진행하거나 알림을 설정합니다
'Backend > Spring' 카테고리의 다른 글
Spring에서 컴포넌트 스캔과 의존관계 자동 주입 해보기 (0) | 2023.10.29 |
---|---|
Spring batch 속도 향상하는 방법 (0) | 2023.02.28 |
Spring Batch TransactionManager 개념, 구현체 종류와 특징 (0) | 2023.02.28 |
테스트 케이스 돌리니 TestEngine with ID 'junit-vintage' failed to discover tests 오류가 뜨는 경우 (0) | 2021.11.06 |
[Spring] HTTP Range Requests 를 이용한 비디오 스트리밍 만들기(Video Streaming) (0) | 2021.02.07 |