본문 바로가기

부트캠프/한화시스템 BEYOND SW캠프

한화시스템 BEYOND SW 부트캠프 16기 18일차 (2025-06-12 | 목)


오늘 수업은 어제 배운 내용을 빠르게 요약하며 시작되었다. 핵심 개념들을 다시 정리하면서 자연스럽게 하루의 리듬을 잡을 수 있었고, 덕분에 복습이 한층 수월하게 느껴졌다. 다만 오늘은 수업 외적으로도 일정이 많은 날이었다. 바로 'PCCP 시험'이 있는 날이었기 때문이다.

 

점심시간에는 학원 근처 중국집인 윤윤차이나에 들렀다. 음식이 전반적으로 기대 이상이었다. 특히 탕수육은 겉은 바삭하고, 소스는 과하지 않게 새콤달콤하게 배어 있어 만족스러웠다. 나는 이번에 짬뽕을 주문했는데, 국물의 풍미가 깔끔하고 얼큰해서 식사 내내 기분 좋게 먹을 수 있었다. 다음번에는 짜장면을 한 번 먹어봐야겠다는 생각이 들었다. 메뉴 구성이 탄탄하고 기본적인 맛이 잘 잡혀 있어, 앞으로도 종종 방문하게 될 것 같다.

 

그런데 수업 도중, 지완이형에게서 한 통의 메시지가 도착했다. 코딩테스트 준비 과정에서 작성한 코드에서 ConcurrentModificationException이 발생했다고 하며, 본인도 꽤 흥미롭다는 반응을 보였다. 처음에는 나 역시 "Concurrent"라는 단어에 주목해, 이 오류가 멀티스레드 환경에서 발생하는 전형적인 동시성 문제일 것이라 생각했다. 그러나 곧 의문이 들었다. "우리가 연습 중인 코딩테스트 환경은 기본적으로 단일 스레드인데, 왜 이런 예외가 발생하는 걸까?"

 

알고 보니 이 예외는 Java 컬렉션이 fail-fast하게 동작하기 때문에 발생하는 것이었다. Iterator로 순회하던 중 컬렉션을 직접 수정하면, 구조적 변경으로 인식되어 예외가 발생한다는 것. 즉, 실제 스레드 충돌이 없어도, 하나의 흐름 안에서 '읽기'와 '쓰기'가 동시에 일어나는 것을 Java는 '논리적 동시성(Logical Concurrency)'으로 간주한다는 사실을 알게 되었다. 멀티스레드가 아니어도 예외가 발생할 수 있다는 개념은 조금 헷갈릴 수 있었지만, 실코드를 기반으로 친구들과 토론하며 차근차근 개념을 잡을 수 있었던 유익한 시간이었다.

 

오늘 단 하나 아쉬운 점은, 매주 목요일에 참여하고 있는 비영리 민간단체 ‘코더스어스’의 이산수학 강의 영상 프로젝트 회의에 오늘은 참석하지 못했다는 것이다. PCCP 시험 일정과 겹쳐 불가피하게 불참하게 되었는데, 그동안 회의는 늘 내 학교 계정 Personal Zoom Meeting을 이용해 진행해왔기 때문에, 메인 강사이자 내 오랜 친구인 재웅이에게 미리 임시 호스트 권한을 넘기고 시험에 집중할 수 있었다. 시험과 프로젝트 모두 중요한 일정이었기에, 어느 한 쪽을 완전히 놓지 않기 위한 나름의 선택이었다.

 

PCCP 시험은 생각보다 어려웠지만, 그래도 한 문제를 맞췄다는 데서 위안을 삼았다. 시험을 마치고 나서는 코딩테스트 스터디원들과 함께 근처 치킨집으로 이동해 회식을 가졌다. 다들 고생 많았다며 격려를 주고받았고, 부담에서 해방된 듯한 분위기 속에서 웃음이 끊이지 않았다. 그렇게 하루를 마무리하고 집에 도착하니 거의 1시가 다 되어 있었다. 바로 씻고 잠자리에 들며 오늘 하루를 정리했다.