파비의 매일매일 공부기록

Java - 특정 상황에서 프로그램 오류가 발생해요. 본문

Trouble Shooting/From workplace

Java - 특정 상황에서 프로그램 오류가 발생해요.

fabichoi 2021. 1. 1. 23:30

이것 역시 최근 해결한 Trouble Shooting.

 

입력된 데이터의 전처리가 끝난 후에

A이라는 특정 프로그램(B)에 데이터를 집어넣어서 결과를 뽑아내는데,

이 A를 실행하는 B의 설정을 일부 변경 후 간혹 문제가 생기는 경우가 있었다.

 

B는 10초마다 한 번씩 DB의 특정 테이블에 데이터가 있는지 확인하고

있으면 가져와서 A를 실행시키는 매우 간단한 Polling 구조로 되어있다.

 

최근 A의 실행 요청이 증가함에 따라

B의 설정을 변경하여, 한 번에 2개 이상의 A를 실행 가능하도록 하였다.

 

그러나 시/분/초가 동일한 시점에 B가 A의 실행 요청 시

B가 완료되는 시점을 저장하는 log 파일의 생성/확인/삭제 시간이 겹치면서 오류를 뿜어냈다.

예를 들어 A에 1번 요청에 대한 Log파일이 20210101233000_log.log가 생성된 뒤에 확인 후 이미 삭제되었는데

같은 시간에 A에 2번 요청에 대한 Log파일이 20210101233000_log.log가 이미 있는 걸 확인(생성은 되어 있었으니)하고 삭제하려고 보니 파일이 없어서 오류를 발생시키는 상황이 있었다. 

 

log파일이 시분초_log.log 형태로 되어있다 보니 어쩔 수 없이 발생하는 부분이었는데

이를 시분초밀리초_log.log 형태로 바꾸면 문제없을 것으로 보여 시도했으나

다른 프로그램들과의 형식이 달라지면서 정상 동작하지 않았다.

 

그래서 결국 해결한 방법은 다음과 같다.

B가 10초에 한 번씩 Polling을 하는데

Polling후 A를 실행할 때마다 특정 시간(5초)의 Delay를 주도록 변경했다.

그렇게 되면 A의 실행 시점이 시/분/초가 동일한 경우가 생길 수 없으니 더 이상 오류가 발생하는 케이스는 없었다.

 

A, B 프로그램 외에 연관된 다른 프로그램의 동작에 대해서도 한번 더 확인해볼 수 있는 좋은 기회였다.

반응형
Comments