Google I/O Extended Incheon 2025 후기
스터디 인연으로 Google I/O Extended Incheon 컨퍼런스에 다녀왔습니다.
기대했던 것 이상으로 너무나도 유익한 내용이 많았고, 무엇보다 제가 요즘 하던 고민들에 대한 답을 내릴 수 있어서 감사했던 자리였습니다.
기억에 남는 것
1인 개발 서비스를 위한 Gemini CIL 사용기
- Gemini 개발자 버전 1년 플랜이 생각보다 가성비가 좋다
기여 사례로 알아보는 오픈소스 입문
- 기여하기 좋은 프로젝트 = 살아있는 프로젝트 = 이슈가 많고, 외부인의 PR이 많으며, 라벨링 잘 되고 관리 잘 되어 있는 프로젝트
- 첫 시작은 아주 간단한 것 부터 (잘 찾다보면 이슈 자체에 해결책이 명시되어 있는 이슈들도 있음)
- 회귀테스트를 잘 쓰자 => 이 영역은 AI 도움을 적극적으로 받는 것도 고려 가능
8년간 개발 블로그를 하며 알게된 것들
- 발표 방식이 너무 깔끔하고 인상깊었음
- 여담
- 마침 하코 커뮤니티에서 블로깅 소모임 시작했던 찰나에 너무나 좋은 인사이트를 많이 얻었던 강연
- 블로깅 뿐만이 아니라 전반적으로 “지속 가능함을 만드는 방법”을 배울 수 있었음
게임 서버는 어떻게 만들고 무엇을 만들까
- 전반적인 게임 업계 흐름에 대해 알 수 있었음 -> 한국에서 주류 컨텐츠는 어떤 것이고(MMORPG, 모바일겜), 해당 컨텐츠에서 대략적으로 어떤 기술을 많이 쓰는지(과거에는 C++밖에 없었지만 요즘에는 다양하게…)
- 게임쪽은 DB 쿼리 짤 일은 거의 없고(최대한 단순하게) 네트워크 통신 && 로깅이 아주아주 중요
- 실력 쌓기 위해서는 기존 서비스 어떤식으로 구현되었을지 생각해서 클론코딩 해보는 것이 좋음
+ Action Item
- 재미나이 개발자 버전 결제하기
- 발표를 하는 자세
- 청중에게 “어떻게 들었으면 좋겠다” 방법을 제시 -> ex: 액션 아이템을 생각하면서 들어주세요
- 중요하게 생각하는 내용 강조 -> 추가로 그 부분에 대해 특정 아이콘으로 강조한 뒤, 청중에게 발표 시작 전 명시
- 귀여운 시각 자료 활용
- 저항을 줄이는 환경을 만들기 -> ex: 매 주 같은 카페에서 같은 글 쓰기 등
- 평일 퇴근 후 도서관 : OSSCA
- 토요일 저녁(OSSCA 이후) : 집 앞 이디야에서 글쓰기
- 일요일 스터디 이후 : 왕십리에서 잇고잇고 or 완두콩
- 자기 전에 3줄 기술적으로 알게 된 내용 일기 쓰기 (오늘 해결한 버그 / 오늘 알게 된 사실 / 동료에게 설명한 내용) => 일단 옵시디언에 쓰기
- 회사 일 잘하는 사람들 잘 관찰해서 그 사람 습관 따라해보기
- 게임 서버 클론코딩하기
- 회사 코드에서 해킹 방지 어떤 식으로 되어있는지 분석하기
- 회사 코드 로깅 시스템 잘 살펴본 뒤, 해당 로그로 뭘 할 수 있을지 더 고민해보기 (CMS 개선이나, 어뷰징 방지 등)
작성한 내용
1인 개발 서비스를 위한 Gemini CIL 사용기
서비스 소개
- LLM으로 스팸 필터링 가능 -> 다만 상용 LLM은 매우 비쌈
- 작은 모델을 학습시킴
- 학습시킬 데이터 : 개발자의 문자 데이터(iCloud에 백업된 수많은 메세지들을 직접 라벨링)
- 라벨링을 어떻게? : LLM 모델 사용
- Multi-class Labeling을 시켜줌
- 학습을 시켜준다 -> 모델 사용
1인 개발 서비스 하면서 느낀 어려운점들
- 서비스 개선을 위해 새로운 노력 : 화이트리스트 추가 / 자동화된 AI학습 / 모델 라벨링 자동화 / 임베딩 모델 개선 / 수많은 엣지케이스 대응 등… => 할 일이 너무 많다
- False Negative(스팸인데 정상으로 분류) & False Positive(정상인데 스팸으로 분류)
- 사람한테 요청 받아서 엣지케이스로 넣어주면 좋지만 학습 데이터 수집하고 학습 주기를 설정하는게 어려움
- DB에 쌓이는 것 중 유사한 문장으로 묶어서 보고, 해당 문장들의 임베딩의 의미 벡터를 representativevector로 삼아 이 vector에 라벨을 스팸/정상으로 달아주고 바로 써먹으면…?
- DB에 벡터도 쌓고, 유사한 문장 그룹핑도 하고 / 그룹된 문장을 보여줄 프론트도 만들고, 웹서버도 만들고 / 라벨링된 벡터도 만들어줘야 하고…. => 할게 많음 => Gemini CLI 활용
커서 Agent Mode 써도 되는거 아닌가? -> 단일 파일 수정은 Cursor가 직관적이지만 Turn 제한과 전체 구조 변경 제한이 있음
- 재미나이가 구글 검색 결과를 많이 가져와줌..
Gemini CLI 활용법
- 프로젝트를 만들고
- Gemini CLI에 앱 설명을 하고 GEMINI.md 만들어달라고 함
- 코드를 만들어달라고 함
=> 핵심은 GEMINI.md 만드는것
Gemini CLI로 만든 서비스 관리 툴 -> 유사 캐시
- SSF API 퍼지 캐시 -> 100% Match되는 캐시는 낮음 / Vector DB(PG)를 통한 유사도 비교를 해보면 임베딩이 LM모델보다 훨씬 빠름
- 내가 이해한것.. : 문자가 정확히 일치한게 오는 캐싱 매칭은 어려우니까… 벡터디비에 유사한 데이터 오면 조회해서 알려줌
- 그룹바이를 하고(벡터 유사한것끼리) 크론잡과 환경을 세팅한 뒤 텔레그램 핸들러+DB 붙이는걸 스크립트 이용해서 만들어줌 => 매일매일 텔레그램에 문자를 받고 라벨링을 하는걸 자동화함
Gemini.md는 필수!!!!
- Build & Fix Bugs 꼭 넣고
- 기능들 하나하나 추가하면서 Markdown 체크박스로 관리하고
- 모든 구현을 한 세션에서 관리하지 않고 단위 모듈별 세션으로 관리하도록
기여 사례로 알아보는 오픈소스 입문
기여할 프로젝트 찾기
- 기여하기 좋은 프로젝트 = 살아있는 프로젝트
- 이슈가 많은 프로젝트 / 이슈 라벨링(태그) 잘 되어있는 프로젝트 / Closed 된 PR 중 외부인의 PR이 많은 프로젝트
오픈소스 기여 프로세스
- 기여할 프로젝트 찾기
- 이슈 찾기&생성
- 코드 분석
- 해결
- 회귀 테스트 작성 => 내 코드의 신뢰도를 입증할만한 자료를 넣는거임
- 빌드 및 테스트 통과 체크
- PR 작성
- 리뷰 (코드를 팀 수준과 align)
- merged
기여 사례
이슈에 해결책이 있는 경우
- 어떤 버그가 있고, 해결책이 있고, 구현 예시까지도 있다 까지 남겨주는 이슈도 있음
- 이슈에 있는 회귀테스트를 활용하자 -> 관리가 잘 된 프로젝트는 테스트 예제가 있다?
영향을 끼치는 범위 최소화 하기
- Breaking Change가 있기 때문에 우회 방법이 있으면 좋겠다는 리뷰를 받음 -> 영향 범위를 최소화해서 머지됨
비슷한 문제가 반복됨
강연에서 계속 강조하는 것
- 회귀 테스트
- 코드 분석
- 커밋 히스토리에서 힌트 얻기 -> 구현이 막막한 경우 비슷한 파일의 커밋 히스토리 뜯어보면 힌트를 얻을 수 있음
- 거절에 상처받지 않기
Q) AI 도구를 활용해서 오픈소스에 기여하는 것에 대해서, 실력 향상이나 코드 품질 유지 측면에서 긍정적으로 생각하시는지
- 맥락이나 테스트코드 잘 해줌
- 2차적으로 검토를 하는 과정이 있기 때문에 도움이 된다고 생각함
- 연사자분도 적극적으로 활용함.
8년간 개발블로그를 하며 알게된 것들
액션아이템 생각하면서 듣자
글쓰기에 대한 마음가짐
- 글쓰기는 어렵다~ 어려움을 인지하자. 꾸준히 오래 하는 사람은 매우 적다. => 이걸 인정하는게 시작
- 글쓰기 할 때 생기는 고민 -> 글을 써도 될까 / 만족스럽지 않다 / 소재가 없다 / 계속 쓰는게 없다 -> 이 어려움을 해결하면 수월해진다. 여러번 반복하면 도움이 된다~
- 창작할 때는 저항감이 생김
- 저항감 : 어떤 대상 / 상황에 대해 거부하거나 반대하는감정 -> 저항감을 느끼는 이유를 찾아서 개선해야 함
왜 블로그를 만들고 글을 쓰려고 했나? -> 취업 목적 / 학습 목적 / 나를 알리기 위해
- 남보다 나를 위해 글을 쓰려고 함 : 배운걸 까먹지 않고, 이해를 잘 했나 정리하는 목적
- 매번 까먹는 (셸 스크립트 / 맥북 설치 후 설정 / 특정 문법 등) -> 이런거 매번 검색하지 말고 내 블로그에 정리해서 내가 수시로 보기 위해 작성
실행
- 글을 작성할 때 -> 이 글을 6개월 후에 보면 어떤게 궁금할지, 자주 사용하는 스니펫이 있는지
- 내가 잘 이해하도록 정리하기 : LLM이 말해준건 내 머릿속에 있는게 아님. 내 문장으로 정리하면 단기기억에서 장기기억으로 전환이 됨 -> 바닥부터 작성했을 때 장기기억에 도움이 많이 됨. LLM을 보조하는건 괜찮지만 LLM이 써주는 글은 글쎄
- 남을 생각하지 말고 나만 생각해서 글을 쓰자
- 제가 글을써도 될까요? : 타인 의식 -> 자신을 위해 시작했는데 타인을 의식하며 검열하기 시작함
- 글을 작성해도 만족스럽지 않아요 : 만족하는 글은 뭔데요? 일단 내가 작성할 수 있는 만큼만 쓰면 됨. 글쓰기에 정답은 없다
꾸준함 “지속 가능함 만들기”
- 본인 실력을 인정하고 계속 시도하는것이 핵심임
- 1일마다 동기부여 충전이 됨(1월1일 ㅋㅋ)
- 아무일도 일어나지 않으려면 어떻게 해야할까?
- 저항을 줄이는 환경 : 매 주 같은 카페에서 같은 글 쓰기등 -> 나는 어떤 환경에 있을까? (물리적, 사회적 환경) -> 글만 쓰는 카페를 정해서 다니고 있음. 맨날 몇시에 모여서 뭘 하는 것. 환경을 만드는 습관을 만들기
- 함께 하는 사람들(커뮤니티): 사회적 평판을 활용한 방법
- 하루 일기로 시작하기 : 자기 전에 3줄 딱 빠르게 쓰고 자기(알림 앱) -> 오늘 해결한 버그 / 새롭게 알게된 사실 / 동료에게 설명해준 내용 => 이런게 아이디어가 될 수도 있음
- 글쓰기에도 레벨이 있음. 처음부터 높은 수준의 글이 아니라 내 수준에 맞는 글을 쓰는 글을 쓰는게 필요함(메타인지) -> 점진적으로 높은 글 시도하기
글쓰기 레벨
- Lv1 단순 책, 강의 정리 : 블로그보다는 개인 노션 정리하는걸 추천. 단순 타이핑 느낌… 글쓰기 연습하는 관점에서 할 수는 있으나 블로그를 포폴로 쓴다면 비추
- Lv2 특정 기술 사용법 : 글 쓰기 수월하고 사람들이 많이 찾는 주제중 하나. ex) 어떤 A를 사용하는법, docker compose 사용하는법 등…. / 목차를 꼭 쓰자
- Lv3 경험 기반 문제 해결 : 이 단계부터는 좋은 글… 특정 문제를 해결하는 경험에 대해 작성한 글(Task, Project) Task 단위 정리-레거시 코드에 테스트코드 추가하며 겪은 어려움 / 경험이 있기 때문에 면접 대응 하기도 좋음. / ex: 쏘가 예약을 효율적으로 - 수학적 모델링을 활용한 쏘카 예약 테트리스 / 내 글이 포폴이 됨. 내용이 많으면 글로 써서 포폴에 링크로
- Lv4 생각의 구조화, 통찰 제시 : How보단 Why. 자신만의 철학, 원칙을 구조화해서 정리
=> 핵심은 레벨업! 지금 레벨1인건 중요한게 아니고 꾸준히 계속 쓰는게 중요함. 처음부터 완벽한 글을 쓰는 목적이 아니고 시간이 지나면 차차 실력이 쌓인게 보임.
레벨업을 위한 팁 : 분석
- 글 잘 쓰는 사람의 글을 분석해야 함
- 난 이 글이 왜 좋지? / 어떤 특징이 있지? / 목차 전개 흐름은? / 이런것들을 내가 적용하려면?
- 비슷하게 회사에서 일을 잘 하는 사람의 특징을 분석해서 자신에게 적용해보면 일을 잘 하는 사람이 될 수 있음
언제 될 지는 아무도 모르니까 조금씩 쓰면서 시도하면 언젠가 유의미한 결과를 얻는다~ 성과는 길게 봐야… -> 조회수가 높다고 성공한 블로그는 아님. 계속 글쓰기 -> 이런걸로 예상치 못한 기회를 얻을수도 있으니까
시스템 구조회/최적화
- 글을 쓰다보면 학습하느라 글을 쓰지 못하는 경우가 있음…. / 글 작성 자체가 어려운것도 있고 / 매번 글 구조를 새롭게 작성하거나 / 반복적으로 해야하는일(이미지 추가) / 고민의 핵심 : 내가 글을 어떻게 쓰고있지?
- 개발 방법론을 차용 -> 글쓰기에도 적용됨
- TDD를 글쓰기에 적용하기 : Test Case를 정의하고 글쓰기 {이 글을 본 독자가 어떻게 되었으면 좋을까? / 이 글을 본 독자가 무엇을 얻을 것인가?} => 이걸 처음 작성한 후 글을 작성 시작함
- DDD를 글쓰기에 적용하기 : DDD의 핵심은 비즈니스 요구사항 기반 도메인 모델 정의. 도메인 모델, 문제 본질같은 추상적 개념 정리 후 글 쓰기 시작
- 글 전개 : 문제 정의 -> 핵심 원리 -> 구체적인 방법/예시
- 모놀리식과 마이크로 서비스 : 모놀리식(처음부터 끝까지 알려주는 글). 이것만 알면 됩니다~ 하는글. 시간과 노력이 많이 들어감 / 마니크로서비스(하나의 글에 하나의 주제만 다루는 글) SOLID의 SRP 원칙 반영. 내 에너지가 작거나 잘 모르는 분야는 나눠서 작성한다
- 코드리뷰처럼 글도 리뷰하기 : AI 활용해서 글 피드백을 받을 수 있음. -> 글 작성한 뒤 AI한테 피드백 받기
글쓰기 파이프라인
- 일상 업무하면서 소재 발견 시 보관함에 추가(왜 추가하고 싶은지도 작성)
- 노션에 잘 저장해두기
- (소재 공부) : 공부가 필요한 주제면 먼저 공부
- 글쓰기
- 글쓰기 템플릿 : espanso 라는 템플릿이ㅣ 있음. 특정 단어 입력하면 원하는 문장(템플릿)으로 변경
- 스트림 덱 : 글쓰기 템플릿 생성, GPT 실행 등등을 빠른 실행 가능
- 글 구조 템플릿 : 내부적으로 writing 입력해서 템플릿 작성하도록
- 초안
- 업로드
- 피드백
소재 고민된다면
- 디버깅 케이스
- 튜토리얼, A-Z 시리즈
- 회고글
- 새로운 도전기
- 특정 영역에 대한 깨달음
- 행사 참여 후기
- 프로젝트 진행 글
- 책, 논문 리뷰
AI시대의 고민
- 글이나 코드나… AI가 저보다 글을잘써요
- 결론 : AI시대에도 글을 써야함. -> 인내심이 줄어드는 느낌이니 이런 시기일수록 내 생각을 정리하는 연습을 해야함
- 경험을 만드는데 중요하다
- AI가 쓰는 글은 머리에 남지 않기 때문에 “내가 쓴 글”로 남기자
게임 서버는 어떻게 만들고 무엇을 만들까
게임 서버? -> 한국의 메인스트림은 콘솔이 아니라 온라인 게임임… 주 과금 시스템은 F2P (P2E도 조금씩)
장르
- 온라인 보드게임 : 높지 않은 성능, 게임의 규모가 크지 않고 한명이 다 개발하는 경우도 있음
- 캐주얼 게임 : 보드게임에 비해 규모가 크고…
- MMORPG : 한국의 주류. 개발 규모가 크고 개발 인원도 많음. C/S방식의 TCP 사용. MMORPG 개발은 3~400억 4년 이상 개발기간이 필요함… 최소 100명은 들어감.
- 수집형, 모바일 게임(비 실시간 통신 게임) : 한국 주류
어떤 기술을 사용하나?
- 언어 : 요즘은 무조건 C++이 아니라(예전에는 무조건 C++)… 서버는 진짜 다양해짐. -> 점유율이 점점 씨플플 줄어들고 있음. 클라이언트는 아직 유니티/언리얼 같은 상용엔진 사용. 멀티플랫폼 지원하고 모바일 기기 호환성 때문에 / C++말고 다른 언어 써봐라
2006년 : Windows, C++, MS SQL Server 이 공식을 벗어나는 서버가 없었음. 정보는 채용사이트에서 얻어라.. 기술스택 차이
API 게임 서버 - 비실시간 통신 : 실시간보다 개발이 용이. 컨텐츠에 집중. 수집형 게임 서버
DB
- 게임쪽은 DB작업이 복잡하지가 않음. DB 쿼리가 복잡할 일이 없음.
네트워크
- 실시간 통신 : 초당 통신 횟수 / 지연시간..
- 실시간 통신을 하는 게임인데 지연시간이 짧아야 하면 구현 난이도가 높아지고 One 글로벌 서비스가 불가할 수 있음.
로그
- fluentd … 분석을 데이터로 구축 많이 함. 어떤 스테이지에서 많이 보려고 하는지..
- 분석 : ELK, 빅쿼리
- 모니터링 : 프로메테우스 - 그라파나
- PC 시대에는 8~11시가 피크타임이었는데 모바일로 바뀌면서 바뀜… 동접자수도 꾸준히 높아지고…
코드 관리
- SVN, Git, perfoce
- 게임쪽은 SVN도 많이 씀 -> 클라 리소스 때문에… Git이 바이너리 관리하기 안좋아서 SVN 쓰는경우도 많음. 그래픽 디자이너들은 Git 쓰는게 어려워서 SVN 쓰기도 함.
젠킨스, 도커, 쿠버네티스 쓰기도 함 : 게임쪽은 쿠버네티스 잘 안씀
- 게임서버 MMORPG는 크게 도움이 안됨…
게임서버 만들어보고 싶다 -> 퍼즐류 게임 클론코딩 해보기
- 계정 생성 / 로그인 / 유저 게임 데이터 로딩 / 스테이지 진행 / 메일 받기 / 출석부 / 랭킹
- IOCP 실습
- TrinityCore : MMORPG 입문용
서버 프로그래머가 할 일
- 게임 서버 프로그램 개발
- DB 설계 관리
- 로그데이터 전송, 수집, 관리
- 데이터 분석
- CMS 개발 -> 이거 잘만들수록 유저도 좋고 개발자도 좋고… CMS 더 파보자!! 모두가 좋아진다.
- 서버 모니터링
- 해킹방지 -> 꾸준히 모니터링 하면서 알아보고 대응… 막는다기보다는…
- 미들웨어는한계가 있음. 컨텐츠 구현할 때 부터 해킹 막을 수 있어야함…
Q) 경력자가 업계에서 오래 살아남을 실력을 키우기 위해서는 회사 일 외에 어떤걸 추가적으로 해야 도움이 될까
- 신입/저경력자 : 게임을 일단 만들어보자. 게임을 만들어보는 포폴을 준비하고 CS지식을 아주아주 탄탄히 쌓기
QQ) 게임을 만드는 것 이면 운영까지 해야 하는 것 인지? -> 서버 특성상 실제 유저가 없으면 유의미하지 못한거 아닐지
- 운영하는것 까지는 힘들다… 제대로 만들어보는 사람 자체가 거의 없음. 일반적인 게임을 핵심적으로 구현하는게 중요. 운영까지는 요구하지 않다.
- 다만 성능테스트는 아주 중요. 성능테스트를 하는게 아주 중요…. -> 더미 1000개 정도 붙여보고…. 응답시간 어느 정도 걸렸다 이런게 도움됨
QQQ) 오픈소스 기여한 이력 vs 게임 만들어본 이력 둘 중 어떤게 달콤한 이력일지
- 오픈소스 기여보다는 게임을 만들어봤는지가 더 중요. -> 게임을 만들어보지 않았는데 오픈소스 기여 해본건 음 글쎄
- 게임도 만들어봤는데 오픈소스도 기여했다? -> Good
소켓서버
- 소켓은 C# 으로 구현해봐라
- 1000단위 이상의 커넥션을 잘 유지할수 있도록….
- 경력이 많을수록 요구하는게 많아지기 때문에…
해킹을 어떻게 막나
- 미들웨어가 설치하고…
- 난독화 -> 클라이언트에서 코드를 암호화…. / money라는 단어도 다 이상하게 바꿔두고 …
- 게임으로 획득할 수 있는걸 정해진 것 이상으로 주지 않도록 방어
- 유저 플레이 기록을 서버로 날리고 -> 그걸 예측하지 않은 흐름으로 하는지 모니터링
- 로그 관리가 엄청엄청엄청 중요함