오늘은 수업은 없는 날이다.
아무래도 진도를 따라가기 위해 약간의 시간을 주고자 하는 원장님의 배려가 아니었을까 하는 생각도 한다.
수업이 없다고 해서 쉴 이유는 없으니 학원에서 구현하던 것을 마저 구현하기로 했다.
어제 실마리를 찾지 못했던 것을 오늘은 어떻게 해서라도 찾아야 했기 때문이다.
그래도 천만 다행이었던 것이 계속해서 비슷한 패턴이 재현이 됐다는 것이다.
어디서 문제가 있을까 하고 봤는데...
동기화 문제도 아니었고, 자료구조의 문제도 아니었다.
순전히 내가 로직의 구현을 잘못해서 벌어진 일이었다.
가만히 잘 생각을 해보니 이미 완료가 되어서 다 없어진 곳에다가 집어넣으면 당연히 이상하게 되는 것인데.
그걸 미처 생각하지 못하고 예전에 쓰던 코드를 그대로 갖다가 쓰려다보니 벌어진 참사였다.
생각을 더 했어야 했는데 생각없이 짜다보니 이런 경우를 맞이하게 됐다.
멀티스레드 프로그래밍을 하면서 확실히 이전보다는 더 생각하고 더 조심하게 만들게 되는 것 같다.
싱글스레드 환경에서 만들 때는 돌아가게 만들면 되겠다라는 생각으로 만들기만 했었는데.
이제는 돌아가는 것이 다가 아니라 '정말 제대로 동작하고 있는가'를 봐야했다.
멀쩡하게 돌아가는 것 같지만 하나라도 틀어지면 싹 다 틀어지는 것이 멀티스레드 환경이다.
그래서 이번 일을 계기로 더욱 더 신경써서 조심스럽게 프로그램을 작성해야 한다는 것을 몸소 느낄 수 있었고.
지금 와서 생각해보면 정말 멍청하면서도 바보같은 실수였다.
그래도 실전에 나가서 박살이 날 바에는 지금 줘터지는 편이 훨씬 낫다.
나중에 가서 실수를 하면 돌이킬 수 없는 상황이 될 수도 있기 때문이니까 말이다.
항상 조심하고 좀 더 생각하고 구현할 수 있도록 하자.