Writing

[WIP] On 2024

[WIP] On 2024

재미 삼아 24년 초 친구와 신점을 보러 갔다.
나한테 25년에는 하는 일이 바뀔 거란다.


3월
복학

23년 산업기능요원 복무가 종료된 후, 24년도 4학년으로 복학하였다.
퇴사하지 않고, 학업과 파트타임 업무를 병행하였다.

이미 학업과 일의 병행은 경험한 적이 있다.
코로나 바이러스의 영향으로 모든 수업이 비대면이었던 20년 당시에도 회사 일과 3학년 수업을 병행하였다.

당시에는 40시간 풀타임 근무였기에 특히나 고생이 많았다.
수업 시간에 맞춰 강의를 켜 출석만 챙기고, 퇴근 후에서야 강의를 제대로 다시 들으며 과제를 하였다.
이번에는 3일 출근-24시간 근무였기에 이전보다는 쉽겠다며 덥석 기회를 잡았다.

처음 3주 정도는 굉장히 좋았다.
어찌 되었든 이틀은 출근하지 않아도 되었고, 다시 학교에 들어서서 수업을 들으러 가는 길이 좋았다.
아침 지하철역 빵집에서 소금빵 하나와 아이스 아메리카노를 사 들고 학교 정문에 들어서면
세상 그렇게 설렐 일이 없었다.

24.04.02.혼자 찍고 있었는데, 가려니까 다른 사람들도 벚꽃 찍고 있었음

24.04.02.혼자 찍고 있었는데, 가려니까 다른 사람들도 벚꽃 찍고 있었음

수업은 수학과 과목이 특히 많았다.
4학년이어서 그런지, 졸업 학점 중 교양과 전공과목은 이미 거의 다 채워져 있었다.
부족한 부전공 과목 학점 위주로 채우다 보니 특히 그러했다.
듣고 싶던 수업 위주로 채워, 무엇 하나 부족함 없던 복학이라 생각했다.

3주간 행복학 복학 생활을 즐긴 뒤
하나둘 현실감이 생겨갔다.

우선 학교 자연대학이 너무 높다.
학교에서도 산 끝에 있어서 고도도 높고, 올라가는 길도 험하다.
전국 경사도 높은 대학에 있는 학교인데, 심지어는 학교에서도 제일 높이에 있다.
분명 전철역에서 산 빵인데, 건물에 도착하면 다 먹다 못해 소화도 다 한 기분이었다.

반면 컴퓨터 공학 대학은 학교 후문에 있다.
연강인 날에는 그저 후문에서 정문 앞의 산 끝까지 달려야 한다.
지금 체력은 올해 1학기에 다 만든 것 같다.

둘째는 수학 과목이 공부할 게 너무 많았다.
비록 이틀은 출근하지 않아 수업 끝나고 공부할 시간이 있었지만,
결국은 출근한 3일도 퇴근한 후에 카페로 출근해야 했다.

6시 퇴근 - 저녁 식사 - 7시 카페 출근 - 3시간 공부 - 10시 퇴근의 굴레에 빠졌다.
3일 출근하면 일이 줄어들 것이라 누가 그러던가
업무량도 줄이지 못해 그저 3학년 병행의 후회를 되풀이 한 사람이 된 것 같았다.

별 수 없었다.
내가 잡은 기회였고, 그냥 열심히 해야지 하면서 지냈다.


수학과

2학년 때 수학과 부전공을 신청하여 3학년 때부터 수학 전공을 듣게 되었다.
원래는 1학년 때 다전공을 신청하였지만, 미적 성적이 좋지 못해 거절되었다.

4학년이 되고 졸업 기준을 보니 부전공으로 이수한 것은 신의 한 수였다.
다전공은 들어야 할 학점도 많고, 졸업 논문도 써야 한다고 들었다.
그에 비해 부전공은 학점도 적고, 졸업 논문 없이 수업 학점만 채우면 되니 좋아하는 공부를 가볍게 하기 좋았다.

물론 그렇다고 내용이 가볍지는 않았다.
3학년 때 선형대수, 해석학까지만 해도 할 만하다고 생각했다.

문제는 3년 회사 일만 하다가 학교에 돌아와 들은 수업이 복소해석, 위상, 현대대수였다.
한동안 손 놓고 있다가 돌아와서 주전공자들과 동일하게 학점 경쟁을 해야 하니 골머리가 아플 수밖에 없었다.

그나마 위상수학은 할만했다. 오히려 컴퓨터를 하는 듯한 감각을 많이 받았다.
기존까지의 수적 구조를 위상 구조로 추상화하고 또 다른 방식으로 구체화하는 과정이
코드를 추상화하여 Trait을 만들고 implement 하는 과정과 상당히 흡사했다.
그리고 그를 통해 보장받는 어떠한 불변성 역시 개발을 하는 과정과 상당히 비슷하다 느꼈다.

24.06.01.복소 과제 중

24.06.01.복소 과제 중

복병은 복소수였다.
나름 음성 합성 공부를 하면서 신호 처리나 복소 공간에 대해 익숙하다 생각했는데, 이는 큰 오산이었다.

안 그래도 아는 사람 없는 아싸 복학생인데, 수업 시간은 또 아침 9시다.
늦잠이라도 자면 못 들은 부분은 독학의 영역이다.

안 그래도 영어로 수업해 더 난해한데,
복소 공간에서의 쌍곡 함수 표현, 미분 가능성에 다다르니 이제는 도를 닦는 기분이었다.
내 앞의 종교인이 심오한 인생의 철학을 연설하는데, 이를 알아듣지도 못하면서 고개를 끄덕이는 신도가 된 듯했다.

할 수 있는 건 그저 퇴근하고 카페에 출근해 공부하는 것뿐이었다.
매주 나오는 과제를 풀고, 머리를 싸매는 것 말고는 할 수 있는 게 없었다.

그럼에도 이런 시간이 아깝지 않았고, 마냥 좋았다.
물론 이 과제 언제 끝내지, 이거 끝내고 일도 마저 해야 하는데, 이런저런 고민에 골은 아파졌지만
하나의 문제를 오래 고민하지 못했던 사무실 공간에서 벗어나
문제 하나를 위해 고민하는 시간을 낼 수 있다는 것이 좋았다.

그렇게 중간고사, 기말고사를 보았다.
예상대로 위상수학은 잘 보았고, 복소해석과 현대대수는 딱 평균만큼 보았다.


시험 당일, 당연하게도 수학과 학생들은 삼삼오오 모여 본인들의 풀이에 관하여 이야기했다.
그 중 비상해 보이는 한 친구는 자신의 증명을 설명하고 있었다.

실제로는 아닐 수도 있지만, 공부를 많이 하지 않았다고도 한다.
그때 또 그런 감정을 느꼈다.

고등학생 당시 컴퓨터 보안 분야를 잘하는 친구가 있었다.
하루에 30분만 자고 1년을 살아도, 도저히 그 친구를 이기지 못할 것 같았다.
넘을 수 없는 벽을 보았고, 끝내 인공지능 분야로 넘어와 활동하게 되었다.

수학과에서 그런 사람이었다.
원래는 수학과 대학원 진학도 고려하였지만, 그 사람을 보고 깔끔히 포기했다.

인공지능 분야에서도 그런 사람을 만나면 어떻게 할지 고민했다.
꽤 태평했다.

5년을 인공지능 개발자로 일하였고,
일하면서 정말 그런 사람이 없었냐면 그건 아닌 것 같다.
그럼에도 이 일을 계속하고 있다면, 난 앞으로 그냥 계속 이 일을 할 사람인가 보다 했다.


졸업 프로젝트

우리 과는 졸업 프로젝트를 진행해야 졸업이 가능하다.
지도 교수가 정해져야 하고, 2인 이상 팀으로 참여해야 한다.

아직 졸업하지 않은 동기가 하나 있어 팀 선정이 어렵지는 않았다.
보안 분야로 취업하길 희망하는 친구였다 보니, 주제는 자연스럽게 보안으로 기울었다.

졸업 프로젝트 주제는 교수가 사전에 제안을 하기도 하고,
경우에 따라 학생이 교수를 찾아가 주제를 제안하기도 한다.

사전에 공지된 주제 중 보안 프로젝트는 많지 않았고,
여러 교수님을 컨택하던 중 LLM을 기반으로 Fuzzer를 개선하는 프로젝트로 결정하였다.

처음 만난 교수님은 주에 2회 이상 연구실에 출근하라 하셨지만,
당시 나는 재직 중이었기에 현실적으로 어려운 일정이었다.

두 번째 교수님은 주 1회 대면으로 진행 상항 보고만 하라 하셨다.
이 정도면 할만하다 싶어 결정하였는데, 막상 해보니 주 1회도 쉽지는 않았다.
(동기들에게 들어보니, 학기에 2번만 뵌 교수님도 계셨다고 한다.)

교수님에 따라 진행 방식에 편차가 있었다.
우리 프로젝트는 온보딩 기간과 연구 개발 기간으로 나뉘었고,
3월부터 7월까지는 Fuzzing 기술에 관한 온보딩, 8월부터는 실제 연구 개발을 수행하였다.

3월 컨택이 마무리된 후, 교수님은 온보딩의 일환으로 매주 과제를 내주셨다.
git+antonio-morales/Fuzzing101의 실습을 매주 1개씩 푸는 것이다.
보안 회사에 있었지만, 실제 Fuzzing을 해보는 것은 처음이었다.

연구 개발 경과가 좋다면, 회사에서도 써볼 법한 기술이었기에
더 욕심이 생겨 열심히 했다.

Fuzzer도 돌리고, Crash가 나오면 코드 보면서 Root cause도 정리하여 보고서로 작성했다.

하지만 현실적으로 직장 생활 - 수학과 과제 - 졸업 프로젝트를 모두 병행하는 것이 쉽지만은 않았다.
주로 수요일에 연구실로 찾아뵙고 준비된 자료를 발표하였다 보니,
보고가 끝나자마자 다음 실습 환경을 준비하여 Fuzzer를 돌려놓고,
주말에 하루는 크래시를 모아 분석, 하루는 수학과 과제를 하며 보냈다.

생각보다 재밌었다.
당시 회사에서는 CVE 설명문을 토대로 PoC를 생성하는 시스템을 개발하고 있었는데,
Fuzzer를 공부하다 보니, 이를 활용하여 특정 지점에서 Crash를 발생시키는 PoC를 생성해 볼 수 있지 않을까 싶었다.

온보딩 기간은 무난하게 흘러갔다.
동기와 분석도 같이 하고, 발표 자료도 함께 정리하는 등 협업에 큰 무리가 없었다.
문제는 동기가 취업한 이후였다.

동기는 졸업 전 마지막 학기에 취업에 성공하였다.
1학년 때부터 함께했던 친구였기에 진심으로 축하했다.

하지만 동기는 입사 첫 주부터 야근을 달리게 되었다.
8시 출근, 새벽 1시에 퇴근하는 친구는 집에 도착하면 바로 잠에 들었다.
당연하게도 함께 졸업 프로젝트를 이어 가기는 쉽지 않았다.

나는 퇴근 시간 조정이 가능했기에,
1학기 병행 때에도, 2학기 취업계를 내고도 퇴근 후 3~4시간은 졸프에 투자가 가능했다.

결국 온보딩이 끝난 8월 넘어서는 홀로 졸프를 이어 나가게 되었다.
나무랄 수도 없었다.
누구보다 피곤해할 친구였기에, 홀로 진행한다 생각하고 미련 없이 그러려니 했다.


프로젝트는 PromptFuzz[arXiv:2312.17677]를 개선하는 방향으로 이뤄졌다.
테스트가 부족한 영역에 LLM으로 Harness를 생성하여, 커버리지를 보강하는 방법론이다.

저자가 공개한 코드가 있었기에; git+PromptFuzz/PromptFuzz
8월부터 실제로 벤치마크 데이터를 돌려보며 경향을 살폈다.

벤치마크 프로젝트의 경향을 토대로 Taxonomy도 제안하고, 문제점도 정리하였다.
버그도 몇 가지 찾아 포크 레포에 정리해 두었다. git+revsic/PromptFuzz

개선 방향성은 LLM Agent로 잡았다.
PromptFuzz는 생성한 하네스를 평가하여, 부적절하다 판단된 하네스를 과감히 버리는데
이러다 보니 버려지는 하네스가 너무 많았고, 몇몇 API는 하네스에 반영조차 되지 못했다.

평가에 통과하지 못한 사유를 LLM에게 전달하고,
LLM이 하네스를 수정하여 재평가받을 수 있도록 파이프라인을 설계하였다.
이렇게 되면 하네스의 재사용성도 증가하고, 대부분의 API가 하네스에 포함될 수 있을 것이라 판단하였다.

PromptFuzz를 파이썬으로 재구현하고, git+revsic/agent-fuzz
본격적으로 개선에 착수했다.

역시나 개선은 마음처럼 되지 않았다.
코드를 주고받다 보니 Context-length는 늘어나 갔고, LLM의 코드 수정 성능은 하락, API 코스트는 증가했다.

Context-length를 줄이는 트릭을 도입하고, 몇몇 엔지니어링을 추가 진행하였다.
결과적으로 대부분의 프로젝트에서 10~20%의 개선을 확인했다.
아쉽게도 2개 벤치마크 프로젝트에서는 오히려 성능 하락이 관찰되어 논문으로 정리하지는 않기로 하였다.
아마 조금 더 깎으면 되지 않을까 싶기도 하다.

프로젝트가 종료되었고, 논문 대신 블로그 글을 하나 정리하고 있다. blog/agentfuzz

아쉬움이 없지는 않았다.
회사에 재직 중이지 않았다면 더 깎아서 논문까지 정리해 볼 수 있지 않았을까 싶기도 하다.

얻은 것도 많았다.
회사에서 DARPA AIxCC 대회에 참가 중인데, 여기서 경험한 것들을 토대로 개발 속도를 내고 있다.
Context-length 길이 관리에 사용했던 트릭이나, Fuzzer 도입 등 여러 아이디어를 적용해 내고 있다.
이번 대회는 풀타임으로 참여하고 있기에 더 좋은 결과가 있기를 기대한다.


5월
마지막 축제

올해도 학교 축제에 다녀왔다.
졸업 전의 마지막으로 다녀올 축제였다.

수업을 듣고 재학생 인증을 받으러 갔다.
학생증 인증을 하면 입장권을 주는데, 입장권이 있어야 중앙의 재학생 자리에 앉을 수 있다.

생각보다 재학생 인증 줄이 길지는 않았지만, 공연장에 입장하는 줄이 정말 너무 길었다.
입장 2시간 전부터 서 있던 줄은, 노천극장에서 중앙도서관까지 산길을 따라 이어져 있었다.
선착순으로 입장하기 때문에, 재학생 자리에 들어가는 것은 포기했다.

24.05.24.마지막 축제

24.05.24.마지막 축제

결국 극장 사진만 찍고, 컴퓨터 공학관으로 돌아왔다.

학교에서는 학과마다 주점을 하나씩 내주고,
각 학과는 학생들에게 주점 자리를 예약받기도 한다.

내가 활동했던 AI 동아리는 미리 자리를 잡아두었었고, 오랜만에 후배들도 볼 수 있었다.
오히려 아는 후배는 몇 없었고, 거의 새로 보는 얼굴들이었다.

이미 이전에 갔던 엠티에서 90년대생이 나 혼자였기에, 이제는 졸업할 때가 되었나 보다 했는데
주점을 둘러보고는 진짜 졸업해야겠다는 생각을 많이 했다.

졸업이 그다지 멀지도 않다는 생각에 싱숭생숭했다.


10월
대학원 입시

뒤에서 할 이야기이지만, 7월에 건강이 다시 안 좋아짐을 느끼고,
끝내 10월 팀장을 위임하고, 연구원으로 내려와 건강 회복에 집중했다.

일을 덜어내고 어느 정도 상황과 건강이 안정되고 나니, 대학원이 눈에 들기 시작했다.

이전부터 학위에 대한 생각은 가지고 있었다.

첫 회사에서 처음 팀장을 하던 당시,
박사 학위를 막 취득하고 입사한 신입 사원은 나에게 당신을 인정할 수 없다며 자만하지 말라 했다.

새로운 사람이 합류할 때마다 챌린지를 받아왔다.
막상 시간이 지나고 나면 업무 수행 능력도 인정받고, 신뢰도 쌓아 팀장 업무에 큰 무리는 없었다.
다만, 초기에 신뢰를 얻는 비용이 남들보다 많이 드는 것 같았다.

나이가 어려서 그런가, 연차가 적어서 그런가, 학력이 짧아서 그런가
이런저런 고민을 많이 하였다.

나이와 연차는 시간이 해결해 줄 수 있지만, 학력은 움직여야 했다.
그러다 보니 특히 대학원에 대해서는 기회가 될 때 가야겠다 생각하고 있었다.

대학원에 가서는 연구에 집중하고 싶었다.
팀장으로 근무하다 보면, 이런저런 행정 작업이 많이 요구되는 시기가 있다.
채용, 성과 평가, 연봉 협상 등 인력 관리 / OKR, 투자자 보고 등 성과 관리 / 사업 기획, 영업 미팅 등 사업 관리

연구에 집중하고 싶어도, 실질적으로 분기 말-반기 말-연말에는 행정 작업에 치여 연구를 하기 어렵다.
연구에 집중하더라도 성과가 사업적으로 이어질 수 없거나, 더 강한 사업적 기회가 발견되면 중단되는 경우도 잦았다.

7월에서 9월은 특히 그러한 행정 업무의 강도가 강했다.
아예 직무를 사업 개발로 옮겨야 할 수준이었다.

연구에 집중할 수 있는 환경을 만들고 싶었고,
팀장을 내려놓고 나니 대학원 생각이 나는 것은 당연한 수순이었다.


대학원을 알아보기 시작했다.
대부분의 연구실이 학부 연구생으로 활동한 학생을 우선 선발하고 있었다.

나는 재직 중이었기에 출퇴근이 필요한 학부 연구생 활동이 불가능하였고,
관심 있는 교수님께 메일을 보내 학부 연구생 활동 없이도 선발이 가능할지 의향을 물어보는 것이 최선이었다.

그럼에도 긍정적인 반응을 전달주신 교수님이 계셨고, 합격증부터 가져오라 하셨다.

퇴근 후 졸업 프로젝트도 하고, 이제는 입시 준비도 해야 한다.
이력서를 쓰고, 포트폴리오를 정리했다.

근무 경력을 쓰기 위해서는 재직 증명서도 떼야 했는데,
현재 직장의 재직 증명서만 발송했다가, 전 직장은 경력으로 인정을 못 받기도 하였다.

다른 동기들에게 물어보니 주로 졸업 프로젝트에서 작성한 논문을 많이들 낸다고 한다.
나는 당시 아직 졸프를 진행하던 시기였고, 아직 논문이 없었기에 포트폴리오로 낼 것이 많지 않았다.
결국 경력 기술서 정도만 첨부하여 발송했다.

운이 좋게 두 개 대학 서류 전형에 합격하였다.
다음은 면접이었다.

한 학교는 면접 때 나올 수 있는 기술 질문을 정리하여 학과 홈페이지 공지 게시판에 올려두었다.
3년을 휴학하고 나니 이제는 질문을 봐도 답이 가물가물했다.
프림 알고리즘, 크루스칼 알고리즘, 데이터 해저드, 하나씩 다시 공부하며 답을 정리하였다.

실제로 면접 당시 최소 신장 트리에 관한 질문이 나왔지만, 답을 썩 잘 하지는 않았던 것 같다.

해당 학교는 하루에 두 번의 면접을 봐야 했는데,
운이 좋게도 두 면접 모두에 보안을 하던 교수님이 계셔서, 현재의 직장 경력을 긍정적으로 봐주신 듯하다.

거의 2시간에 가까운 면접을 보았고, 할 수 있는 모든 것을 이야기하고 왔다.

두 번째 학교는 따로 준비할 것이 제시되지는 않았다.
면접 10분 전에 질문지를 주고, 면접에서 문제의 풀이를 하는 방식이었다.

면접은 15분 정도로 아주 짧게 이뤄졌고, 심지어는 문제도 다 못 풀었다 보니 아쉬움이 많이 남았다.
심지어는 60명 중 60번으로 면접을 보아, 이건 당연히 떨어졌다 했다.


결과는 둘 모두 합격하였다.
한 분은 강화학습을 하는 교수님이셨고, 한 분은 비전을 하는 교수님이셨다.

전 직장에서는 비전 합성을, 현 직장에서는 LLM 기반 보안 자동화를 하고 있었기에
어느 랩실을 선정하여도 큰 무리는 없었다.

어떤 랩실을 가야 할지 고민하던 중, 비전 랩실을 결정하게 되었다.

건강이 안 좋아지고 다시 병원에 통원 치료를 하고 있었는데,
당시 의료계 상황도 좋지 않다 보니, 직장에서 거리가 좀 있음에도 병원을 옮기는 것에 부담을 느끼고 있었다.

강화학습 랩실은 대전에 있었다 보니, 통원 치료가 더 부담이었다.
가까운 대학원으로 최종 선정하고, 교수님께도 상황을 설명하고 입학 포기 의사를 전달하였다.


대학원 진학이 확실시된 후 회사에 퇴사 의사를 밝혔다.

가장 많이 들은 반응은 왜 비전 연구실인지였다.
새로운 프로젝트의 시장 반응도 좋은데 지금 꼭 가야 하냐,
회사에서 LLM하고 보안 잘하고 있었는데 갑자기 비전 연구실이냐

설명을 많이 드렸다.
전 직장에서 비전을 해왔고, 학위에 대한 결핍도 있었고, 연구 환경도 만들고 싶었다.
2년 정도 연구에 집중해 보고 싶다고 이야기했다.

1월 마지막 주로 퇴사 일정을 조율하였다.

2월에 학교 근처로 이사도 가고, 중순부터 연구실에 나가기로 했다.
그전까지 24년도에 쓰려고 했던 글들도 정리하고, 연구도 정리하려 한다.


12월
계엄

12월 3일 저녁 11시, 자려고 누웠는데 유튜브에 MBC 속보가 올라왔다.
비상계엄에 관한 대국민 담화였다.
전쟁인가 싶어 급하게 담화 전문을 살폈다.

당황을 금치 못했다.
이 계엄이 정말 합헌적인지, 정말 저 사유로 계엄이 발생한 것인지 믿을 수 없어 두어번 더 읽었다.

당연히도 그날 잠은 포기했다.
국회의 의결 후에도 계엄 해제 선포가 올라오지 않아 몇시간은 더 자지 못했다.

걱정의 연속이었다.
안 그래도 정리해고의 소식이 잦았던 한 해였다.
환율은 급속도로 올랐고, 해외 투자자들은 빠져나갈 것이다.

당장 해외 투자를 계획 중이었던 대부분의 회사는 굉장한 비보였을 것이다.
이제 더 이상 이런 기사는 남의 일이 아니었다.
이렇게 한 달, 두 달이 이어졌다간 내가 혹은 친구들이 다시 취직 시장으로 풀려나올 것이다.

빠른 상황의 해결이 필요했다.
할 수 있는걸 하자 싶어 8일 집회에 향했다.

엄청나게 많은 인파가 결집해 있었다.
또 너무 가까이 서 있을 때 사고가 날 수 있다며, 간격을 지키기 위한 노력도 돋보였다.

24.12.14.여의도 공원

24.12.14.여의도 공원

14일 한 번 더 집회에 참여했다.
이번엔 가결되길 바라며 자리를 잡았다.

사람들은 서로 가진 간식을 나눠주고, 방석을 빌려주기도 했다.
유독 추웠던 하루, 모두가 간절하게 국회를 향해 구호를 외치고 있었다.

당일 표결, 모두가 현장의 스크린을 통해 중계를 바라보고 있었다.
가결 발표 후 현장의 모두는 환호성을 질렀다.
사람들은 그제서 하나둘 자리를 털고 일어났다.

하지만 글을 쓰는 지금까지도 모든 것이 해결되지는 않았다.
조속히 재판이 마무리되고, 상황이 나아지길 바랄 뿐이다.


여행


맥주


Theori

1월
On-premise LLM 구축


2월
다이어그램 생성


5월
위협 시나리오 생성


7월
재발


9월
출장


10월
선임 연구원


11월
AIxCC


1월
퇴사