Post

Google I/O Extended Incheon 2025 후기

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 활용법

  1. 프로젝트를 만들고
  2. Gemini CLI에 앱 설명을 하고 GEMINI.md 만들어달라고 함
  3. 코드를 만들어달라고 함

=> 핵심은 GEMINI.md 만드는것

Gemini CLI로 만든 서비스 관리 툴 -> 유사 캐시

  • SSF API 퍼지 캐시 -> 100% Match되는 캐시는 낮음 / Vector DB(PG)를 통한 유사도 비교를 해보면 임베딩이 LM모델보다 훨씬 빠름
    • 내가 이해한것.. : 문자가 정확히 일치한게 오는 캐싱 매칭은 어려우니까… 벡터디비에 유사한 데이터 오면 조회해서 알려줌
    • 그룹바이를 하고(벡터 유사한것끼리) 크론잡과 환경을 세팅한 뒤 텔레그램 핸들러+DB 붙이는걸 스크립트 이용해서 만들어줌 => 매일매일 텔레그램에 문자를 받고 라벨링을 하는걸 자동화함

Gemini.md는 필수!!!!

  • Build & Fix Bugs 꼭 넣고
  • 기능들 하나하나 추가하면서 Markdown 체크박스로 관리하고
  • 모든 구현을 한 세션에서 관리하지 않고 단위 모듈별 세션으로 관리하도록

기여 사례로 알아보는 오픈소스 입문

기여할 프로젝트 찾기

  • 기여하기 좋은 프로젝트 = 살아있는 프로젝트
    • 이슈가 많은 프로젝트 / 이슈 라벨링(태그) 잘 되어있는 프로젝트 / Closed 된 PR 중 외부인의 PR이 많은 프로젝트

오픈소스 기여 프로세스

  1. 기여할 프로젝트 찾기
  2. 이슈 찾기&생성
  3. 코드 분석
  4. 해결
  5. 회귀 테스트 작성 => 내 코드의 신뢰도를 입증할만한 자료를 넣는거임
  6. 빌드 및 테스트 통과 체크
  7. PR 작성
  8. 리뷰 (코드를 팀 수준과 align)
  9. merged

기여 사례

이슈에 해결책이 있는 경우

  • 어떤 버그가 있고, 해결책이 있고, 구현 예시까지도 있다 까지 남겨주는 이슈도 있음
  • 이슈에 있는 회귀테스트를 활용하자 -> 관리가 잘 된 프로젝트는 테스트 예제가 있다?

영향을 끼치는 범위 최소화 하기

  • Breaking Change가 있기 때문에 우회 방법이 있으면 좋겠다는 리뷰를 받음 -> 영향 범위를 최소화해서 머지됨

비슷한 문제가 반복됨

강연에서 계속 강조하는 것

  1. 회귀 테스트
  2. 코드 분석
  3. 커밋 히스토리에서 힌트 얻기 -> 구현이 막막한 경우 비슷한 파일의 커밋 히스토리 뜯어보면 힌트를 얻을 수 있음
  4. 거절에 상처받지 않기

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한테 피드백 받기

글쓰기 파이프라인

  1. 일상 업무하면서 소재 발견 시 보관함에 추가(왜 추가하고 싶은지도 작성)
    • 노션에 잘 저장해두기
  2. (소재 공부) : 공부가 필요한 주제면 먼저 공부
  3. 글쓰기
    • 글쓰기 템플릿 : espanso 라는 템플릿이ㅣ 있음. 특정 단어 입력하면 원하는 문장(템플릿)으로 변경
    • 스트림 덱 : 글쓰기 템플릿 생성, GPT 실행 등등을 빠른 실행 가능
    • 글 구조 템플릿 : 내부적으로 writing 입력해서 템플릿 작성하도록
  4. 초안
  5. 업로드
  6. 피드백

소재 고민된다면

  • 디버깅 케이스
  • 튜토리얼, A-Z 시리즈
  • 회고글
  • 새로운 도전기
  • 특정 영역에 대한 깨달음
  • 행사 참여 후기
  • 프로젝트 진행 글
  • 책, 논문 리뷰

AI시대의 고민

  • 글이나 코드나… AI가 저보다 글을잘써요
  • 결론 : AI시대에도 글을 써야함. -> 인내심이 줄어드는 느낌이니 이런 시기일수록 내 생각을 정리하는 연습을 해야함
  • 경험을 만드는데 중요하다
  • AI가 쓰는 글은 머리에 남지 않기 때문에 “내가 쓴 글”로 남기자

게임 서버는 어떻게 만들고 무엇을 만들까

게임 서버? -> 한국의 메인스트림은 콘솔이 아니라 온라인 게임임… 주 과금 시스템은 F2P (P2E도 조금씩)

장르

  1. 온라인 보드게임 : 높지 않은 성능, 게임의 규모가 크지 않고 한명이 다 개발하는 경우도 있음
  2. 캐주얼 게임 : 보드게임에 비해 규모가 크고…
  3. MMORPG : 한국의 주류. 개발 규모가 크고 개발 인원도 많음. C/S방식의 TCP 사용. MMORPG 개발은 3~400억 4년 이상 개발기간이 필요함… 최소 100명은 들어감.
  4. 수집형, 모바일 게임(비 실시간 통신 게임) : 한국 주류

어떤 기술을 사용하나?

  • 언어 : 요즘은 무조건 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라는 단어도 다 이상하게 바꿔두고 …
  • 게임으로 획득할 수 있는걸 정해진 것 이상으로 주지 않도록 방어
  • 유저 플레이 기록을 서버로 날리고 -> 그걸 예측하지 않은 흐름으로 하는지 모니터링
  • 로그 관리가 엄청엄청엄청 중요함

세션

Image Image Image Image Image

This post is licensed under CC BY 4.0 by the author.