Ject 2차 회고록

2026. 7. 9. 18:04·Review
728x90

이 활동은 젝트에서 진행한 프로젝트입니다.
젝트 공식 홈페이지 👉 https://ject.kr


들어가며

솔직히 말하면, 이번 회고가 1차보다 쓰기 훨씬 어렵다.

1차 회고 말미에 "데모데이까지 남은 기간엔 더 욕심을 내보려 한다"고 썼다.
그런데 그 약속을 제대로 지키지 못했다. 소프트웨어 마에스트로(소마) 일정이 본격화되면서,
젝트에 쓸 수 있는 시간이 눈에 띄게 줄었다. 데모데이 같은 핵심 행사에도 온전히 함께하지 못했다.
팀원들한테 많이 미안한 2차였다.

그래도 회고는 해야 한다. 작게나마 만든 것들, 그리고 그 안에서 배운 것들을 담담하게 적어보려 한다.


이번에 만든 것들

필터를 더 단단하게 — 대소문자를 모르는 욕설 탐지

1차에서 KMP 알고리즘으로 욕설 필터를 구현하고 나름 뿌듯해했다.
그런데 얼마 지나지 않아 허점이 보였다. "shit" 은 걸러내지만 "Shit" 이나 "SHIT" 은 그냥 통과했다.

수정 자체는 한 줄이었다.

 
java
// Before
char[] text = input.toCharArray();

// After
char[] text = input.toLowerCase(Locale.ROOT).toCharArray();

KMP에 넘기기 전에 입력을 소문자로 정규화한 것이다.
Locale.ROOT를 선택한 건 이유가 있었다. 터키어 같은 일부 언어에서는 'i' → 'İ' 처럼
일반적인 대소문자 변환 규칙과 다르게 동작하는 케이스가 있다.
특정 로케일 환경에서 필터가 예상 밖으로 흔들리는 걸 막으려면 로케일에 독립적인 ROOT가 안전하다.

한 줄짜리 수정이었지만, 알고리즘을 맞게 짜는 것과 현실의 입력을 안전하게 처리하는 건
별개의 문제라는 걸 다시 한번 확인했다. 1차에서 KMP를 직접 구현한 게 "알고리즘"이었다면,
이번엔 그 알고리즘이 실제로 믿을 수 있으려면 무엇이 필요한지를 배운 셈이다.


닉네임 데이터셋 리뉴얼 — 코드 바깥의 고민

1차에서 만든 닉네임 추천 시스템은 형용사 + 명사 조합이었다.
직접 써보니 "효율적인회의", "유연한책상" 같은 닉네임들이 나왔다. 말은 되지만 서비스와 어울리지 않았다.

두 가지를 바꿨다.

  • 형용사 셋: 중립적인 단어들을 걷어내고, 밝고 긍정적인 느낌의 단어들만 추렸다.
  • 명사 셋: 일반 명사 대신 친숙하고 귀여운 동물 이름(2자)으로 전부 교체했다.

커밋 기록을 보면 데이터를 다듬는 커밋이 기능 코드보다 많다.
"이 단어는 너무 딱딱하다", "동물 종류도 차가운 느낌을 주는 "를 하나씩 걸러내면서,
코드 바깥의 감각적인 판단이 결과물에 얼마나 영향을 주는지 실감했다.
처음엔 "데이터셋이야 그냥 채우면 되지"라고 생각했는데, 전혀 그렇지 않았다.


부족했던 것들

기여 자체가 적었다. 이건 돌려서 쓸 말이 없다.

소마 일정이 겹치면서 젝트에 온전히 몰입하지 못했고, 팀원들이 데모데이를 준비하고 마무리하는 동안
내가 함께 있지 못한 순간들이 생겼다. 두 가지를 동시에 잘 하고 싶었지만, 결과적으로
어느 한쪽에도 온전히 집중하지 못한 기간이었다.

1차에서 "시간에 쫓기다 보니 테스트 코드를 제대로 작성하지 못했다"고 썼는데,
2차엔 그보다 더 근본적인 문제가 있었다. 시간 배분 자체가 무너진 것이다.
다음에 비슷한 상황이 생긴다면, 처음부터 한쪽에 집중하거나 아니면 각각의 기대치를 팀원들과 미리 맞추는 게 낫겠다는 걸 배웠다.


마치며

숫자로 보면 2차 기간의 기여는 초라하다. 그걸 부풀려서 쓰고 싶지 않았다.

다만 적게 만든 것들 안에서도 배움은 있었다.
한 줄의 정규화가 알고리즘의 허점을 막고, 데이터 한 줄의 뉘앙스가 사용자 경험을 바꾼다는 것.
그리고 개발자가 '코드 바깥'의 감각도 길러야 한다는 것.

팀원들한테는 미안함이 크다. 그 미안함을 소마에서의 성장으로 갚는 수밖에 없겠다고 생각하고 있다.


이 활동은 젝트에서 진행한 프로젝트입니다.
젝트 공식 홈페이지 👉 https://ject.kr

728x90
저작자표시 (새창열림)

'Review' 카테고리의 다른 글

[ByteByteGo] Database Indexing Strategies(데이터 베이스 인덱스 전략)  (0) 2026.07.12
[ByteByteGo] Multi-Region Architecture: Going Global Without Going Broke  (0) 2026.07.05
[ByteByteGo] How AI Agents Manage Memory and Avoid Forgetfulness  (0) 2026.07.04
Ject 회고록  (0) 2026.06.22
'Review' 카테고리의 다른 글
  • [ByteByteGo] Database Indexing Strategies(데이터 베이스 인덱스 전략)
  • [ByteByteGo] Multi-Region Architecture: Going Global Without Going Broke
  • [ByteByteGo] How AI Agents Manage Memory and Avoid Forgetfulness
  • Ject 회고록
쿨쿨.
쿨쿨.
  • 쿨쿨.
    All of the life
    쿨쿨.
  • 전체
    오늘
    어제
    • 분류 전체보기 (278)
      • Programming (47)
        • C, C++ (18)
        • Python (6)
        • Java (1)
        • HTML,CSS,JS (3)
        • SQL(DB) (13)
        • SpringBoot (3)
        • Android (2)
        • CI,CD (1)
      • Algorithm (173)
        • Review (4)
      • Security (14)
        • WebHacking (3)
        • Websecurity (11)
      • OS (19)
        • Linux (12)
        • Mac os (2)
      • 머신러닝 (1)
      • CS(Computer Science) (12)
        • 컴퓨터 네트워크 (3)
        • 컴퓨터 구조 (1)
        • 인공지능 (8)
      • Docker (1)
      • Dev Book Review (3)
        • Clean Code (1)
        • Effective Java (0)
        • Real MySQL (2)
      • SWM (1)
      • Review (5)
      • AWS (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    DP
    누적합
    다익스트라
    WebSecurity
    다이나믹 프로그래밍
    wargame
    시뮬레이션
    코딩
    그리디
    Leviathan
    DFS
    우선순위큐
    그래프 이론
    백준
    BFS
    깊이우선탐색
    백트래킹
    비트마스킹
    구현
    c언어
    우선순위 큐
    linux
    에라토스테네스의 체
    정렬
    재귀
    투포인터
    브루트포스
    이분탐색
    트리
    Bandit
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.6
쿨쿨.
Ject 2차 회고록
상단으로

티스토리툴바