이 글은 PyCon Korea 2025에서 진행된 <RDD(Rage-Driven Development)> 세션을 정리한 내용입니다. 사회문제에 대한 분노를 동력 삼아 사이드 프로젝트를 개발한 경험과 그 과정에서 배운 점과 느낀 점을 공유합니다. 발표 자료는 PyCon Korea 2025 공식 홈페이지에서 확인할 수 있습니다. (모든 이미지의 출처는 발표자에게 있습니다.)
RDD(Rage-Driven Development)
김혜원 엔지니어
안녕하세요. 파이콘 한국 2025에 발표자로 참여한 데이터 엔지니어 김혜원입니다. 프롭테크 기업 RSQUARE에서 파이썬을 활용해 데이터 ETL 파이프라인을 개발하고 있습니다. 제 발표의 제목은 ‘RDD(Rage-Driven Development)’, 우리말로는 ‘분노 주도 개발’입니다. 사회문제에 대한 분노를 동력 삼아, 사이드 프로젝트를 개발한 경험과 그 과정에서 배운 점과 느낀 점을 공유하고자 합니다. 발표를 이해하기 위해 필요한 사전 지식은 없고, 프로그래밍에 관심이 있는 분이라면 누구나 편하게 읽으실 수 있습니다.
이 발표를 통해 얻어가시길 바라는 것들은 다음과 같습니다.
그럼 이제 시작하겠습니다.

여러분은 프로그래밍을 좋아하시나요? 이 글을 읽고 계신다면 프로그래밍에 관심이 많으실 것으로 짐작합니다. 저도 프로그래밍을 좋아하는데요. 제가 프로그래밍을 좋아하는 이유 중 하나는 그 본질이 문제 해결이기 때문입니다. 누군가 제게 프로그래밍의 정의가 뭐냐고 묻는다면 저는 ‘컴퓨터 기술로 현존하는 문제의 아직 찾지 못한 해답을 찾는 과정’이라고 답할 거예요.
개발자라면 누구나 사이드 프로젝트에 관심이 있죠. 그런데 ‘사이드 프로젝트 개발해야 하는데…’ 생각은 하면서 막상 시작을 하지 못하거나, 시작해도 흐지부지 끝나는 경우가 많습니다. 이건 제 경험담이기도 한데요. 왜 그럴까 생각해봤더니, 이 발상 자체가 문제였더라고요.
앞서 얘기한 것처럼 저는 프로그래밍의 본질은 문제 해결이라고 생각합니다. 이 점을 생각하면서 앞의 문장을 다시 볼까요? 이제 ‘개발해야 하는데…’는 ‘해결해야 하는데…’와 같은 의미입니다. 그럼 자연스럽게 어떤 생각이 이어질까요? ‘무엇을? 왜?’입니다. 이상하죠? 뭔가를 해결해야 한다고 생각하지만, 정작 그게 무엇인지는 모르는 겁니다. 무엇을, 왜 해야 하는지가 불분명하니 시작하기도, 지속하기도 어려울 수밖에 없죠.
만약 여러분도 이런 고민을 하고 계신다면, 여러분이 해결하고 싶은 문제가 무엇인지부터 찾아보시면 좋겠습니다. 불행인지 다행인지 모르겠지만, 우리가 사는 세상은 완벽하지 않아서 해결할 문제가 아주 많습니다. 매일 일상에서 마주하는 사소한 불편함을 해소하거나, 단순 반복적인 일을 자동화하는 것부터 시작해도 훌륭합니다. 내가 정말 해결하고 싶은 문제를 해결하기 위해 개발을 하면, 무엇을, 왜 해야 하는지가 분명하기 때문에 프로젝트를 시작하고 계속 이어 나가는 힘이 되더라고요. 그럼 이제부터 제가 해결하고 싶은 문제가 무엇이었는지, 그 문제를 해결하기 위해 어떤 시도를 했는지 얘기해 보겠습니다.
프로젝트 Leave Her Alone은 여성혐오 뉴스 아카이브입니다. 쉬운 말로 풀어서 설명하자면, 우리 사회에서 일어나는 여성에 대한 차별, 폭력, 혐오에 대한 뉴스 기사를 수집하고 기록하는 온라인상의 저장소입니다. 기술 관점에서는 데이터 ETL 파이프라인을 활용해 데이터 수집, 분석을 자동화하고, 그 결과를 웹 클라이언트로 전시하는 프로젝트로 설명할 수 있겠습니다.
‘사람을 해치면 안 된다. 여성은 사람이다. 고로 여성을 해치면 안 된다.’라는 간단명료한 삼단논법을 납득할 수 있는 사람이라면 누구나 공감할 수 있는 프로젝트라고 생각합니다. 데이터를 기반으로 문제의 실태를 가시화함으로써, 우리가 사회적 차원에서 이 문제를 직시하고 해결을 논의할 수 있게 되길 희망하면서 개발하고 있습니다.
프로젝트를 소개하면 다들 가장 먼저 ‘어떻게 만들게 됐나?’를 궁금해하시더라고요. 이 프로젝트의 시작은 무려 2018년으로 거슬러 갑니다. 당시 저는 언론사에서 인턴 기자로 근무하고 있었습니다. 뉴스 모니터링이 일과 중 하나여서, 매일 뉴스를 읽다 보니 어떤 경향성이 보이더라고요. 그때 우리 사회에서 여성을 대상으로 하는 정말 많은 범죄가 일어나고 있다는 걸 알게 됐습니다. 웬만큼 충격적인 사건이 아니고서는 사회의 주목을 받지 못하고, 심지어 주목을 받더라도 금방 잊혀지고 만다는 것도요. 단건의 사건이 산발적으로 일어나기 때문에 매일 뉴스를 꾸준히, 관심 있게 보지 않으면 알기 쉽지 않은 정보였습니다. 우리 사회에서 특정 인구 집단에 대한 차별과 폭력이 지속적으로 발생하고 있는데도, 이 현상에 대한 공식적인 통계조차 없고 사회적 인지도가 낮다는 점에서 문제의식을 느꼈습니다.
‘부작위에 의한 방조’라는 법률 용어를 아시나요? ‘법적 의무가 있는 자가 그 의무를 이행하지 않아 범죄 실행을 용이하게 한 경우'를 가리키는데, 저는 우리 사회가 여기에 해당한다고 느꼈어요. 문제가 뭔지 모르는 게 진짜 문제라고 하죠. 모르는 문제를 해결할 수는 없기 때문인데요. 그래서 누구나 이 문제의 심각성을 인지할 수 있도록 현상을 기록하고 공론화해야 마땅하다고 생각했지만, 2018년의 저는 그 방법을 몰랐죠. 그렇게 하릴없이 몇 년이 흘렀고, 오랫동안 마음 한 켠에 이 문제의식을 지닌 채 지내다 보니 범죄 기사를 많이 보는 날이면 분노로 마음이 괴롭기도 했습니다.
그사이 인턴 기자였던 저는 소프트웨어 엔지니어를 거쳐 데이터 엔지니어로 직무를 전환했고, 소프트웨어 개발과 데이터 활용 역량을 갖춘 엔지니어가 됐습니다. 그러고 나니 문득 이제는 제가 이 문제를 해결하기 위해 뭔가 해볼 수 있겠다는 생각이 들었고, 분노에 소모되는 대신 이 분노를 동력 삼아 할 수 있는 뭐든 해보기로 결심했습니다. 그렇게 ‘분노 주도 개발'을 시작하게 됐습니다.

프로젝트 구성도는 위와 같습니다. 크게 데이터 수집, 가공, 분석, 그리고 활용, 네 가지 단계로 이루어진 파이프라인으로 요약할 수 있습니다. 이어서 각 단계의 내용을 문제와 해결 관점에서 자세하게 설명드리겠습니다.
가장 먼저 마주한 문제는 데이터를 어디서 어떻게 수집할지였습니다. 언론사 근무하는 동안 국내 거의 모든 언론사에서 발행하는 기사가 포털 사이트에 게시된다는 정보를 알게 됐습니다. 그래서 포털 사이트를 수집 원천으로 결정하고, 파이썬 라이브러리인 requests와 beatufiulsoup을 활용해 웹 스크래핑 스크립트를 작성했습니다.

그 결과 제목, 요약문, url, 언론사, 네 가지 항목을 수집할 수 있었어요. 저작권을 존중하기 위해 기사 본문은 수집 대상에서 제외했습니다. 이렇게 데이터 수집 문제를 해결하고 나니 다음 문제가 보였어요. 매일 수집하는 사건/사고 기사의 수가 평균 1,000여 건 정도 되는데, 그 중 상당수의 기사가 주제와 연관이 없다는 것이었습니다.
이제 수집한 기사 데이터 중 주제인 여성혐오와 관련된 기사만을 추출하는 과제가 주어졌습니다. 자연어처리 관련 지식이 전무한 상태로 프로젝트를 시작했기 때문에 머신러닝을 학습한 후 직접 구현하기보다 LLM을 활용하기로 결정했습니다. 다만 토큰의 수가 비용과 정비례 하기 때문에, 불필요한 토큰 낭비를 줄이기 위해 간단한 키워드 기반 필터링을 선행했습니다.

대표적인 한국어 자연어처리 라이브러리인 KoNLPy와 형태소 분석기 Mecab을 활용했고, 이 작업을 통해 일 단위 전체 사건/사고 기사 중 주제와 연관이 있는 5-10%의 기사만 추려낼 수 있었습니다. 이렇게 처리 대상을 대폭 줄인 후, LLM을 활용해 의미 기반으로 연관 기사 필터링을 수행했습니다.

처리 대상 텍스트가 기사 제목과 요약문으로 짧고 고도의 추론이 필요하지 않기 때문에, 앤스로픽(Anthropic) API의 claude-3-5-haiku 모델을 선택했고, 랭체인(LangChain)을 활용해 편리하게 파이프라인을 확장했습니다. 그 결과 키워드 기반 필터링에서 거르지 못한, 주제와 무관한 데이터를 추가로 제외할 수 있었습니다.
이렇게 주제와 연관된 기사만을 추려내니 매일 50-100건의 유효한 데이터를 수집하게 됐습니다. 데이터 관점에서 생각하면 아주 적은 양이지만, 단순히 나열해 놓고 사용자들이 읽기를 기대하기는 어려운 양이죠. 이제 문제는 효과적인 정보 전달을 위해 이 많은 기사를 어떻게 보여줄지가 되었습니다.
개발을 진행하면서 초기 구상과 달라진 부분도 있었는데요. 처음에는 범죄 기사에만 집중할 생각이었는데, 수집한 데이터를 놓고 보니 우리 사회 곳곳에 각자의 자리에서 이 문제의 개선을 위해 노력하는 분들이 존재한다는 게 보였습니다. 이런 긍정적인 면도 관심을 받을 수 있도록 수집 범위를 확장하고, 더 나은 사용자 경험을 위해 범주화를 수행하기로 했습니다.

범주화 작업 역시 앤스로픽 API와 랭체인을 활용했습니다. 범주는 두 계층으로, 상위 범주는 수집한 데이터에 기반해 범죄/정책/실태/사회 반응 4종으로, 범죄 유형에 한해 국제기구 UN WOMEN의 기준을 참고해 친밀한 파트너 폭력/성폭력 /스토킹 /여성 살해 등 8종의 하위 범주로 분류했습니다. 이렇게 어두운 주제에 관한 뉴스를 매일 읽는다는 게 정신건강에 좋지 않을 수밖에 없는데, AI 기술의 발전 덕분에 이런 일을 사람이 모두 직접 하지 않아도 된다는 게 참 다행이라 느꼈습니다. 그러나 아직 해결하지 못한 문제가 남았는데요. 바로 수집된 데이터 중 의미상 중복 기사가 너무 많다는 것이었습니다.
사회의 이목을 끄는 충격적인 사건에 대해서는 거의 모든 언론사가 보도를 하기 때문에, 텍스트상으로는 서로 다르지만 의미상으로는 중복인 기사가 굉장히 많았습니다. 이 모든 기사를 나열하기만 해서는 사용자들이 실태를 파악하기 힘들겠다 판단했고, 벡터 임베딩(Vector Embedding)과 오픈서치(OpenSearch)를 활용해 유사도가 높은 기사들을 묶어서 표시하기로 했습니다.

벡터 임베딩 모델은 허깅페이스에서 한국어 문장 유사도 판별에 특화된 임베딩 모델 몇 가지를 찾아 벤치마크 한 결과 성능이 가장 좋은 ‘jhgan/ko-sroberta-multitask’를 사용했습니다. 이어서 오픈서치를 활용해 벡터 임베딩 간 유사도를 비교해 중복을 판별하고 대표 기사를 선정했어요. 대표 기사 선정 시에는 1) 컨텐츠 길이: 더 상세한 기사 선호, 2) 언론사 신뢰도: 주요 언론사 우선, 3) 시간순: 최초 보도 우선의 기준을 적용했습니다. 그 결과, 아래 이미지와 같이 의미상으로 동일한 기사들을 묶어서 대표 기사 하위에 표시할 수 있었습니다.


다음으로 제가 프로젝트 Leave Her Alone을 통해 얻은 것들을 소개합니다. 첫째로, 1인 프로젝트였기 때문에 문제 정의부터 기획, 디자인, 개발, 배포, 운영까지 모든 과정을 직접 경험해볼 수 있었습니다. 유의미한 경력이나 경험은 기업 환경에서만 얻을 수 있다는 착시에 빠지는 경우를 흔히 보는데요. 해보고 싶은 경험이 있다면 사이드 프로젝트를 시작해 기회를 스스로 만들 수도 있습니다.
둘째는 관심 있는 기술을 직접 사용하면서 체득할 수 있었다는 점입니다. 평소 관심은 있지만, 당장 하고 있는 일들 때문에 ‘언젠가 공부해야지…’ 하면서 미뤄온 기술들 다들 있으실 텐데요. 프로젝트 활용이라는 필요성을 만듦으로써 미루지 않게 되고, 또 직접 사용하는 과정을 통해 효과적으로 학습할 수 있었습니다.
셋째로 진심으로 나를 괴롭히는 문제를 해결하기 위해 개발을 하면 자의 반, 타의 반으로 중도 포기하지 않게 됩니다. 긴 하루 끝에 지쳐서 ‘오늘은 좀 쉬어야지’ 하고 인터넷 창을 열면 으레 분노를 일게 하는 뉴스가 눈에 띄더라고요. 그럼 ‘뭐라도 해야 해!’ 하면서 분노 주도 개발을 하게 되는 거죠.
마지막으로,같은 관심사를 공유하는 사람들을 만날 수 있었습니다. 프로젝트를 더 많은 분들께 알리고자 IT 행사와 온라인 커뮤니티에 공유했는데 뜻밖에도 굉장히 많은 분들이 응원의 메세지를 보내주셨습니다. 혼자서 프로젝트를 개발하면서 지치고 힘든 시간도 있었는데, 많은 분들의 응원과 지지를 덕분에 힘내서 나아갈 수 있었습니다.

이어서 제가 프로젝트를 개발하는 데 도움이 된, 그래서 여러분께 권하고 싶은 마음가짐을 공유합니다. 우선 첫 번째는 작은 일부터, 일단 시작하기입니다. 여기서 작은 제 자랑을 하나 하자면, 저는 주변에 좋은 분들이 참 많습니다.
첫 번째 항목 아래에 적힌 ‘완성된 모습이 아니라 당장 할 수 있는 일에 집중하기’, ‘고민은 뭘 하고 싶은지까지만, 일단 시작하기’는 제 직장 선배들께서 해주신 조언입니다. 보통 뭔가를 시작하기 전에 멋지게 완성된 결과물부터 떠올리는데, 그러면 잘하고 싶은 마음에 압도돼 시작하기가 어렵게 느껴지더라고요. 이런 고민을 얘기했을 때 선배들께서 해주신 조언이 도움이 됐습니다. 일단 시작해야, 시작됩니다.
둘째는 주변에 알리기, 그리고 커뮤니티와 함께하기입니다. 초기에는 제 주변에 이 문제에 관심이 있는 사람이 없을 거라고 생각했는데, MVP를 만들어 공유했더니 의외로 많은 분들이 같은 문제의식을 갖고 있었더라고요. 가족, 친구, 동료들의 피드백과 응원이 정말 큰 힘이 됐습니다. 같은 맥락에서 개발자 커뮤니티와 함께하는 걸 추천하는데요. 정서적 지지뿐만 아니라, 기술적 조언까지 얻을 수 있다는 큰 장점이 있습니다. 제 프로젝트에 도움을 주신 위민후코드, AWSUGKR, 파이웹심포지움, 파이레이디스서울에 이 자리를 빌어 감사를 전합니다.
마지막으로 Trust yourself, 스스로를 믿기입니다. ‘Trust yourself’는 제가 정말 좋아하는 노래의 제목이기도 한데요. 제가 좋아하는 가사를 인용합니다: ‘One step a day even just by inches, one step a day closer to your meanings’. 2018년의 언론사에서 글을 쓰던 제가 몇 년 뒤 프로그래밍을 하고 있으리라곤 상상도 못 했고, 파이콘에서 발표하게 될 줄도 몰랐습니다. 자신이 뭘 원하는지를 알고, 스스로를 믿고, 조금씩 꾸준히 나아간다면 무엇이든 해낼 수 있다고 생각합니다.

이번 발표 내용을 보고, 문제 해결을 위한 개발, 공익을 위한 개발에 관심이 생기셨거나, 마음은 있는데 어디서부터 시작할지 고민되신다면, 지금 가입할 수 있는 멋진 시빅 테크(Civic Tech) 커뮤니티들을 소개하며 발표를 마무리하겠습니다.
앞서 말씀드린 대로 저는 이 발표를 통해 여러분이 어떤 문제를 해결하기 위한 프로젝트를 시작하려는 마음을 얻어가셨으면 합니다. IT업계에서 일하다 보면, 자칫 기술 중심의 세계에 매몰되기 쉬운데요. 파이콘 한국 2025의 슬로건인 ‘Weave with Python’처럼, 기술이 결코 사회와 유리돼 있지 않다는 점, 한 사람 한 사람의 프로젝트가 문제 해결과 변화의 씨앗이 될 수 있다는 점을 기억하시면 좋겠습니다. 2026년 파이콘에서는 여러분의 멋진 발표를 들을 수 있길 기대하겠습니다. 감사합니다!
©️요즘IT의 모든 콘텐츠는 저작권법의 보호를 받는 바, 무단 전재와 복사, 배포 등을 금합니다.