Writing

On 2024

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일 한 번 더 집회에 참여했다.
이번엔 가결되길 바라며 자리를 잡았다.

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

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

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


여행

올해도 종종 여행을 다녀왔다.

팀장 위임이 결정되고 리프레시 겸 해운대에 다녀왔다.
항상 가던 호텔에 가고, 항상 가던 식당에 다녀왔다.

매번 같은 곳에 가도 갈 때마다 좋다.

24.09.19.부산

24.09.19.부산

코타키나발루로 가족 여행도 다녀왔다.
거의 4년 만의 해외여행이었다.

관광지라 그런지, 점원 절반 이상이 한국어를 굉장히 잘했다.
심지어는 망고 시장에 존맛탱구리라 적혀 있어 크게 웃었다.

확실히 휴양지였다.
시내 관광, 야시장, 스노클링까지 무엇하나 빠짐없이 재밌었다.

특히 음식이 입에 잘 맞았다.
카야 토스트도 맛있었고, 쌀국수 역시 거슬리는 것 하나 없이 좋았다.

말레이시아에서만 파는 맥주가 있었는데, 이 역시 챙겨 먹었다.

귀국 전날 거의 3시간가량 해변에서 일몰을 보았는데,
지금까지 본 일몰 중에 가장 인상 깊었다.

이래서 해외 여행 다니나 보다 했다.

24.12.25.코타키나발루

24.12.25.코타키나발루

바로 다음 주에 대학 동기들과 삿포로에 다녀왔다.

크리스마스 연휴에 붙여 목금 연차,
이듬 주 설 연휴에 붙여 목금 연차로 2주 정도 푹 쉬고 왔다.

8명이라는 꽤 많은 인원이 같이 여행을 떠났다.
시내도 다니고, 맛집도 찾아다니며 즐거운 시간을 보냈다.

특히 3일 내내 술을 마시는데, 하루 더 있었으면 술병이 날 뻔했다.

요리를 잘하는 친구가 있어 안주도 많이 먹고,
공포 영화도 보고, 인생 상담도 하고, 연애 상담도 하고 나중에 또 가도 재밌을 것 같다.

정말 오랜만에 뇌 빼고 잘 놀다 온 것 같다.

25.01.01.삿포로

25.01.01.삿포로


맥주

올해도 맥주 많이 마셨다. 올해는 98번까지 23캔 정도가 추가 되었다.

이제 슬슬 편의점에서 새로운 맥주를 찾기 힘들다.
오히려 해외여행 두 번에서 새로 보는 맥주를 많이 마셨다.
이제는 원정을 떠나야 하나 싶다.

올해는 제로 맥주도 많이 시도 했었는데, 끝까지 마신 맥주는 없었다.
알코올을 빼면서 사라진 향내와 그걸 메꾸기 위해 추가한 인공 감미료가 오히려 거북한 경우가 많았다.

그나마 괜찮았던 것은 홉스플래시 IPA와 빅웨이브 골든 에일 정도였다.
원래는 캔에 들어있는 IPA는 쇳내가 많이 나 선호하지 않는데,
홉스플래시 IPA는 쇳내도 많지 않고, 홉 향의 쓴 내가 산미를 잘 잡아줘서 맛있게 마셨다.
빅웨이브 골든 에일은 에일 특유의 산미에 라거스러운 홉 향이 겹쳐 최근에 마신 에일 중에 가장 맘에 들었다.

내년엔 100번은 무난히 채울 것 같고, 그다음에는 다른 주종에 대해서 도전해 볼까도 고민 중이다.

76번부터 98번 맥주

76번부터 98번 맥주


Theori

1월
On-premise LLM 구축

23년 12월 드디어 회사에 A100 서버가 한 대 들어왔다.

서버 구매를 설득한 이유는 몇 가지 있었다.
우선 AWS가 너무 비싸다.
다른 GPU 클라우드 업체를 조사해도 12개월 이상 A100 GPU의 풀타임 임대가 이뤄지면 대여비가 구매비를 넘는다.

아무래도 LLM을 기반으로 한 보안 기술 연구를 목표로 했기에, GPU 활용은 필연적이었다.
또, 고객사에서 보안상 이유로 외부 클라우드 배제를 희망하는 경우도 있어,
앞으로의 자동화 사업에 있어 사내 GPU 서버 구매는 꼭 필요한 상황이었다.

서버가 들어오고 이제 실제로 On-premise LLM 서버를 구성하였다.

당시에는 Llama-2-70B-chat이나 Mixtral 8x7B 정도가 후보에 있었고,
이를 어떻게 실시간에 가깝게 운영할지 고민하고 있었다.

처음에는 내부 연구원이나 컨설턴트들이 사용할 수 있는 사내 서비스를 만드는 게 목표였는데,
아무래도 다들 ChatGPT나 Claude에 익숙하다 보니, 응답에 지연이 생기면 피드백이 썩 좋지 않았다.

Quantization, Pruning 등 경량화 시도도 있었고,
전용 쿠다 커널도 찾아보며 이런저런 퍼포먼스 실험을 많이 하였다.

문제는 대부분이 라마에 맞춰 개발된 프로젝트가 많았다 보니,
MoE 기반의 Mixtral은 작동하지 않는 경우가 많았다.

하루 이틀씩 투자해서 Mixtral에 맞게 코드 작업하고, 오픈소스에 기여하는 등 시간을 많이 가졌다.
그렇게 1k context-length 미만에서 30tok/sec, 12k 미만 20tok/sec까지 열심히 깎았다.

그럼에도 GPT3.5나 당시에 막 출시한 GPT4보다는 오픈소스 모델 성능이 썩 좋지 않았기에,
범용 목적보다는 특정 작업에 맞게 파인튜닝된 모델이나 특수 파이프라인을 지원하는 방향으로 선회하였다.


또 다른 문제는 GPU가 1대이다 보니, LLM 서빙이 이뤄지고 나면 학습 등 연구 목적으로는 사용이 불가능했다.

당장 GPU를 추가 구매할 수는 없던 상황이다 보니,
결국 GPU 클라우드를 사용해야만 했다.

프라이빗 클라우드까지 나가도 되는 정보와 사내에만 있어야 하는 정보를 나누고,
API가 취급하는 정보에 따라 클라우드와 사내 서버로 로드를 나눴다.

그럼에도 클라우드를 풀타임 운영하는 것에는 비용상 부담이 있었기에, 오토 스케일러도 함께 알아보았다.
AWS는 스케일러를 지원하였지만, GPU 클라우드 중에서도 가장 비싼 편이었기에 후보에서 배제되었다.

알아본 업체 중 보안도 잘 챙기고, 가격도 저렴한 업체로는 Runpod이 있었다.
다만 스케일러를 지원하지는 않았고, Runpod의 클라우드 인스턴스를 동적으로 올리고 내릴 수 있는 API를 지원했다.

사내 서비스에서 주기적으로 사용량을 관찰하다,
일정 시간 동안 요청이 없을 때는 Runpod API로 인스턴스를 내리고, 요청이 발생하면 인스턴스를 띄우게 해두었다.

마찬가지로 사내 서버에서도 vLLM 서비스를 띄워두었다가, 요청이 없을 때는 서비스를 내리고,
요청이 발생하면 vLLM 서버를 다시 띄우도록 해두었다.

비용은 월 30만원까지 줄일 수 있었고, 서비스 운영과 연구 병행에도 큰 차질을 주지 않았다.


2월
위협 시나리오 생성

GPU 환경이 생기고 가장 먼저 연구한 주제는 위협 시나리오 생성이다.
소스 코드를 분석하여 자동으로 위협을 발굴할 수 있는가이다.

사내에는 모의 해킹 교육용으로 만들어진 웹 서비스가 하나 있었는데,
가장 먼저는 해당 서비스에 심어져 있는 취약점을 찾는 시스템을 만드는 것이 목표였다.

여러 가지 문제를 직면했다.
몇십만줄의 코드를 LLM에 모두 넣을 수도 없었고,
함수 단위로 넣으면 함수 내부의 위협은 발췌해도, 호출 관계나 비즈니스 로직 수준에서의 위협은 발굴할 수 없었다.

상용 위협 시나리오 툴을 리서치하니, 대부분은 구성 컴퍼넌트와 데이터 플로우에 초점을 맞추고 있었다.
다만 RDB가 있다면 SQLi를 조심하라, 웹 서버가 있다면 XSS를 조심하라 등 다소 나이브하다 느껴졌다.
또한 시스템 내에 어떤 컴퍼넌트가 있고 어떤 데이터 플로우가 있는지를 사용자가 직접 입력해야 했다.

이를 구체화하기 위해 우리는 어떤 데이터 플로우 다이어그램을 만들어야 실질적 위협을 검출할 수 있을지 의논했다.
특히 모의 해킹 교육용 서비스의 취약점이 발굴되기 위해서는 어떤 요소가 기입되어야 할지 케이스 스터디에 집중했다.

서비스 컴퍼넌트를 어느 단위에 맞춰 노드로 정의할지, 각 노드는 어떤 속성을 지녀야 하는지,
데이터 플로우에는 어떤 정보가 들어가야 하고, 데이터의 제약 조건은 어떻게 전파할지,
다이어그램만으로 위협 발굴이 가능할지, 소스 코드까지 필요할지 다양한 논의가 이어졌다.

여러 형태의 다이어그램을 LLM에 입력해 보며 LLM이 이해하기 위한 다이어그램의 형태에 관하여도 논의했다.
일차적인 다이어그램 명세가 정리되고, 원하는 위협이 모두 LLM에 의해 생성될 수 있음을 확인했다.

이후 소스 코드로부터 다이어그램을 만들기 위한 시도가 이어졌다.


다이어그램 생성 자체에서도 여러 난관이 있었다.
코드가 길어 함수 하나조차 LLM에 넣지 못할 때는 코드를 분할, LLM을 통해 노드의 속성을 추출하고 병합했다.

단번에 다이어그램 전체를 만들 수는 없었기에, 몇 가지 단계로 나눠 순차적으로 다이어그램을 완성해 갔고,
노드의 크기와 단위에 따라 다이어그램도 추상화 단계에 맞춰 여럿 만들어 두었다.

End-to-End 파이프라인을 완성하고, 실제 테스트 베드에서 위협이 생성됨을 확인했다.

이제는 On-premise LLM에서도 작동하게 만들어야 한다.
특히 소스 코드는 고객사 자산 중에서도 특히 보안이 중요하기에, 대부분 클라우드로 나가는 것조차 꺼리는 편이다.
OpenAI GPT를 기반으로 만들었기에, On-premise LLM에서의 작동 여부는 따로 확인해야 했다.

오픈 소스 LLM 중 다이어그램 생산에 적합한 모델을 찾기 위해
케이스 스터디 당시에 만들어두었던 GT 페어를 토대로 평가용 데이터셋을 만들었다.
생성된 그래프를 데이터셋과 매칭하는 방식으로 자동화된 정량 평가를 수행했다.

그렇게 여러 오픈 소스 LLM을 평가하여 하나를 골랐고,
프롬프트를 더 깎아 GPT 보다 나은 성능의 시스템을 만드는데 성공했다.

이후에는 실사례에서 성공하는 경우를 보이기로 했다.
Curl 같은 오픈소스 라이브러리에 있던 1-day 취약점을 동일 버전에서 위협으로 발굴할 수 있는가 보았다.

몇몇은 실제로 찾아내기도 했고, 몇몇은 찾지 못했다.
문제는 생성한 몇천개의 위협 중에 실존하는 위협이 얼마나 있는지 분간이 어렵다는 것이다.

모든 위협을 대상으로 PoC를 만들거나 검증하려 든다면 너무나도 많은 리소스가 들 것이다.
이를 자동으로 검증하거나 트리아제할 수 있는 새로운 시스템에 관한 니즈가 발생했다.

이는 당장 개발을 고려하지는 않았고, 잠시 미루기로 하였다.


7월
재발

이직을 하고 1년, 몸이 다시 안 좋아짐을 느꼈다.

분명 23년 퇴사 후 1개월간 대부분의 증상이 완화되었고,
이직 후에도 경과가 좋아 24년 초만 해도 의사 선생님과 이야기를 나눠 약을 잠시나마 끊기도 하였다.

여기서는 서로를 존중하고 신뢰하는 분위기 속에서 큰 무리 없이 지내고 있다고 느꼈다.

그렇기에 다시 몸이 안 좋아짐에 당황스럽기도 했다.
무엇 때문에 또 출근이 힘들어지는지, 회의와 대외 활동이 스트레스로 다가오는지 고민뿐이었다.

아무래도 이전 회사에서 연구 경과가 사업적 성과로 이어지지 못했었다 보니,
이번 회사에서는 특히 연구 결과를 사업적 성과로 잇기 위한 노력을 많이 했다.

하지만 이미 각자의 사업과 로드맵이 있는 부서에, AI를 활용한 새로운 기능을 제안하는 것은 쉽지 않았다.
또한 기술적 성취가 충분하고 이에 자부심을 느끼는 기업 분위기 속에서,
LLM이 만든 “그럴듯한 무언가"는 그들의 엄밀함과 기준을 만족시키지 못하는 경우가 많았다.

이러한 상황에서 팀 빌딩 후 1년이 되어가다 보니 알게 모를 초조함에 스트레스를 많이 받았나 보다.

주변에서는 걱정 말고 더 연구해 봐라, 안 된다면 다른 방향을 탐구해도 좋다고 이야기하지만,
막상 또 내 성격이 여유를 가지지는 못하나 보다.

업무 자체가 가중되기도 했다.
내 연구 주제도 있었고, 그 외적으로 인력 관리, 성과 관리, 목표 관리, 예산 지출 관리 등 매니징 업무도 적지 않았다.

자리에 앉아 있는 시간보다 미팅을 가는 시간이 더 많았고,
팀 사이의 역학 관계 속에서 신설 팀의 목소리를 내고, 우리의 성과를 만들고 이행하는 것도 쉽지 않았다.

결국 다시 통원 치료를 받기 시작했고, 약도 다시 챙겨 먹기 시작했다.


9월
출장

9월은 유독 출장이 많았다.

금융보안원에서 8월 망 분리 규제 완화에 관한 보도 자료를 공개했다.
금융권에서 클라우드 서비스나 AI를 순차적으로 도입할 수 있게 하되, 관련 보안 감사를 조건으로 내건 것이다.

회사는 이에 발맞춰 AI 서비스에 관한 보안 감사 서비스를 새로 기획하게 되었다.

당시에는 사내 비즈니스 개발 조직이 별도로 없었기 때문에, 사내 관련 인원을 모아 TF 조직을 급하게 구성하였다.
팀의 사업적 성과에 목말라 있던 나는 초기 분석과 사업 기획의 틀을 만드는데 나섰다.

금융보안원의 자료와 관련 금융권 기술 트렌드를 분석하고,
AI 도입 시 발생 가능한 위협 시나리오와 관련 사례를 수집하기 시작했다.

금융권 망 분리 완화 대응 프레임워크를 개발하고, 관련 사업에 관한 브로슈어 초안을 만들었다.
큰 틀은 사내 컨설팅팀의 확장판으로 가되, AI에 관련된 항목은 AI팀에서 처리하는 협업의 방향이었다.

미팅에 나가서는 회사의 기본 컨설팅 서비스와 AI 보안 감사에 관한 서비스를 소개했다.

대부분의 고객사는 AI 도입을 희망하기는 하나, 이를 통해 무엇을 할 수 있을지가 명확하지는 않아 보였고,
그러다 보니 어떤 부분에서 위협이 발생할 수 있는지 구체화하지 못하고 있었다.

우리 또한 사업을 완전히 구체화한 상황은 아니었다 보니, 하나둘 조율해야 하는 상황이었다.
당연하게도 첫술에 배부를 수는 없었지만, 한편으로는 많이 아쉽기도 했다.

팀의 공감대를 끌어내는 것도 쉽지 않았다.
기술적 구체화가 이뤄지지 않은 상황에서 사업 제안을 먼저 꺼내는 것이 맞는지,
이 사업을 했을 때 우리 팀의 성과는 얼마나 인정되는지,
우리 팀이 이를 수행할 역량이 있는지 등 팀 내에서의 챌린지를 대응하는 데에도 시간이 들었다.

그럼에도 당장 시작해야 할 사업이라 느꼈다.
지금 당장 사업 제안과 기술 개발이 병행되지 않는다면 24년 말 25년 초에는 다른 이들이 자리를 선점할 것이다.
조금 부족하더라도 우리 회사에 이러한 사업이 있음을 알리고, 첫 레퍼런스를 따내는 것이 중요하다 느꼈다.
첫 사업을 성공적으로 끝낸다면, 근 몇 년은 매출에 관한 여유를 갖고 다른 사업이나 연구에 집중할 수 있을 것이다.

반면에 내가 이 사업을 발전시킬 수 있을까에 대해서는 걱정도 많았다.
사업적 방향성과 기술 지원에 관해서는 이런저런 경험이 있었지만, 실제 사업을 구체화하고 영업을 한 경험은 없었다.
그렇기에 이에 대한 부담이 없었다면 거짓말일 것이다.

이런저런 부담과 스트레스에 재발했을 수도 있겠다.
전반적으로 스트레스의 내구성이 낮나 보다.

매주 나가는 대외 미팅은 점점 힘들어져 갔고, 나는 결국 리타이어 했다.
더 이상 팀장 업무 수행은 어려울 것 같다 느꼈고, 본격적으로 팀장 위임에 관하여 인사팀에 이야기를 꺼냈다.

운이 좋게도 당시 회사는 비즈니스 조직을 다시 강화해 나가고 있었고,
나는 사업 기획은 비즈니스 조직으로, 기술 개발은 다음 팀장분께 위임하고 하나둘 일을 덜어갔다.


10월
선임 연구원

인사팀에 솔직히 이야기를 꺼내기 전, 팀의 시니어 연구원에게 먼저 이야기를 꺼냈다.
사실 근래 몸이 좋아지지 않았음을, 업무 수행에 지장이 있음을 토로했다.
혹여 팀장을 위임한다면 맡아줄 수 있을지 의향을 물었다.

그분이라면 다른 팀원들이 잘 따라줄 것 같았다.
사업적 욕심도 있었기에, 내가 아니더라도 진행되던 사업을 더 잘 키워주실 것 같았다.

다행히 긍정적인 답변을 받았다.
정말 크게 한숨 놓인 기분이었다.

만약 받아주지 않는다면 어떡하지, 난 이 일을 계속할 자신이 없는데,
다른 대안이 있어야 하나, 다 포기하고 퇴사할까 등 다양한 고민이 있었지만, 한순간 사라졌다.

인사팀을 찾아갔다.
마찬가지로 근래 몸이 안 좋아짐을, 업무 수행에 지장이 있음을 밝혔다.
그리고 팀장의 위임을 희망함을, 대상자와 이야기 나눴음을 전달했다.

긍정적 호응을 받았다.
직무 변경은 꽤 잦은 일이고, 대상자와도 협의가 되었다면 큰 무리가 없다는 것이다.

어떻게 보면 이전의 회사와 지금의 회사는 정말 다양한 부분에서 반응이 달랐다.
이전 회사에서도 위임을 이야기했지만, 당시에는 다 그렇다며 버티라는 반응이 전부였다면,
지금은 건강이 최우선이라며 바로 전환 계획을 구체화하기 시작했다.

인사팀, 대표님과도 한 달여간 이야기를 나누며 전환에 관한 계획을 구체화했고,
대상자와의 인수인계도 시작했다.

그렇게 계획이 확정된 후 팀원들에게도 현황을 알렸고, 다행히 큰 무리 없이 수긍하는 모습을 보였다.

한 달여간의 순차적 인수인계 후 10월, 인사 공지가 올라오며 전환이 마무리되었다.

이후 팀은 파트 체제를 공식화하였다.
Security for AI, AI 시스템의 보안 감사를 맡는 파트와
AI for Security, 보안 기술을 자동화하는 파트로 나뉘었다.

나는 2월부터 수행한 위협 시나리오 생성 및 검증 연구를 이어가기를 희망했고,
AI for Security 파트의 파트장으로 업무를 보게 되었다.

위임 후 처음 한 달은 체감이 잘 안되었다.
하지만 12월이 된 후, 24년 지출 결산, 25년 예산 계획, 인력 운용 및 채용 계획, 팀 기술 연구 목표 및 사업 매출 기획 등
밀려 들어오는 행정 업무를 처리하는 팀장님을 보고 나서야 체감이 되었다.

현재는 대학원 진학 및 퇴사를 결정짓고, 파트장 역시 위임하여 선임 연구원으로 기술 개발에 집중하고 있다.

사실 이렇게 일을 줄이고 나면 바로 건강이 회복될 것이라 기대했지만,
막상 또 23년 퇴사 당시처럼 극적으로 좋아지지는 않았다.
24년 7월보다는 확실히 나아지고 있기에, 또 몇 달이면 괜찮아지지 않을까 싶기도 하다.


11월
AIxCC

AI for Security 파트는 위협 시나리오 생성 연구의 연장선으로
미국팀과 협업 아래 AIxCC 대회 본선을 준비하기 시작했다.

원래에는 미국팀과 별개로 자체적인 연구 개발에 집중하고 있었지만,
미국팀이 한국에 방문하여 이런저런 이야기를 나누다 아예 협업으로 방향성을 잡게 되었다.

졸업 프로젝트가 AI 기반 Fuzzing 기술 개선이었고,
미국팀이 그리는 시스템 또한 너무나도 매력적이었기에 이는 놓쳐선 안 될 기회였다.

이후 곧장 한국팀에서 기여할 수 있는 기술과 관련된 개발 로드맵을 만들어 공유했다.
계획에 없던 협업임에도 미국팀은 흔쾌히 이를 수용하였고, 우리는 곧장 연구 개발에 착수했다.

근래에는 매주 미국팀과 비디오 콜을 하고 있다.
개발 내용에 관한 공유와 의견 교류를 목적으로 하고 있다.

항상 잔뜩 써가고, 의견을 듣고 나면 하고 싶은 말도 많지만,
말이 목까지 올라왔다 뱉어지지 못하고 항상 들어간다.
결국 하고 싶었던 말은 미팅이 끝난 후에 슬랙에 글로 남기는 편이다.

팀 내에 영어를 정말 잘하는 팀원이 있는데, 브리핑은 이분이 거의 전담해 주시고 있다.
확실히 영어는 필수구나 하는 생각이 들었지만, 막상 공부는 시작하지 않고 있다.

자세한 기술적 내용은 대회가 끝나난 후에 풀어 보겠다.


1월
퇴사

대학원 진학이 확정된 후, 팀장님과 인사팀에 퇴사 의사를 밝혔다.

적지 않게 당황해하는 분위기였다.
대학원에 갈 것 같기는 했지만, 그게 지금 시점일지는 몰랐다는 것이다.
왜 비전 연구실로 가는지도 많이들 물어왔다.

당연하게도 내막을 모르는 인원은 사실 팀장 위임이 퇴사를 위한 큰 그림이었냐고도 물었다.
이런 런 질문에 열심히 해명을 담아 왔다.

아직 회사에 말을 돌리지는 않았다.
가능한 조용히 나가고 싶기도 했고, 혹여나 있을 오해는 없었으면 하기도 헀다.

퇴사 소식을 접한 인원들은 아쉽다는 인사를 전해왔다.
이런저런 이야기를 들으며 그래도 회사 생활 열심히 했나보다 생각이 들었다.

이번 회사에서도 정말 여러 경험을 해왔다.
예산이나 매출 관리도 해보고, 사업 기획 및 영업도 나가보았다.
처음으로 내 위에 대표님 외의 사람도 모시고,
처음으로 정리해고가 아닌 자발적 퇴사도 해보았다.

돌아오고 싶은 회사다.
정말 좋은 경험 많이 했고, 비전도 있는 회사이다.
엑싯까지 보고 가는 것도 좋았겠지만, 지금은 대학원에 대한 기대도 크다.

퇴사 일자가 정해졌고, 지금은 인수인계 중이다.
퇴사 후에는 쓰고 싶던 블로그 글이나 왕창 쓰며 쉬다가 연구실로 출근할 계획이다.

올해에도 새로운 것들 많이 해보며 즐겁게 지내길 바란다.

25.01.24.퇴사

25.01.24.퇴사