일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 괜찮음
- 미드시청
- 개발자
- 매일
- leetcode
- 쓰릴오브파이트
- realclass
- 잡생각
- 10분
- Daily Challenge
- 프로젝트
- 영어공부
- 월간
- 스탭퍼
- 영어원서읽기
- 파비최
- Writing
- 화상영어
- 뭐든
- FIT XR
- Problem Solving
- 링피트
- English
- 만화도
- 30분
- 사이드
- 운동
- 읽기
- 3줄정리
- 리얼 클래스
- Today
- Total
파비의 매일매일 공부기록
Java - 특정 상황에서 프로그램 오류가 발생해요. 본문
이것 역시 최근 해결한 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 프로그램 외에 연관된 다른 프로그램의 동작에 대해서도 한번 더 확인해볼 수 있는 좋은 기회였다.
'Trouble Shooting > From workplace' 카테고리의 다른 글
iBatis - DB Connection Hang이 자꾸 발생해요(defaultStatementTimeout 설정) (2) | 2021.01.13 |
---|---|
Oracle - 데이터가 너무 많아서 조회속도가 느려요. (0) | 2021.01.05 |
Apache Tomcat - 특정 페이지에서 개발과 운영 웹 서버 동작이 달라요. (0) | 2021.01.04 |
iBatis - DB Migration 이후 특정 화면의 조회속도가 너무 차이나요. (0) | 2020.12.30 |
JS - Local 서버랑 개발/운영 서버의 동작이 달라요. (4) | 2020.12.21 |