김솔미

Software Engineer

제품의 완성도는 화면에 드러나지 않은 상태에서 결정된다고 생각합니다.

로그인 여부와 앱 설치 여부, 재진입 경로처럼 명시되지 않은 분기를 먼저 발견하고 사용자의 흐름이 끊기지 않도록 작은 어색함까지 다듬습니다. 필요한 답이 프론트엔드 밖에 있다면 백엔드와 데이터, 인프라까지 파고듭니다.

아이디어를 빠르게 제품으로 옮기고 실제 반응을 보며 다시 고치는 일을 좋아합니다. 새로운 기술은 직접 써보고 한계를 확인하며 효과가 있었던 방법은 동료가 다시 사용할 수 있는 시스템과 문서로 남깁니다.

Work Experience

오늘의집 (Bucketplace)

Space AI Team

Full-stack Software Engineer2026.08 ~

Frontend Software Engineer (Intern)2025.07–2026.07

Ohouse AI

사용자의 공간 사진을 바탕으로 AI가 새로운 인테리어 룩을 생성하고 이미지 속 상품까지 탐색할 수 있는 인테리어 추천 서비스입니다.

배포가 필요했던 운영을 누구나 바로 바꿀 수 있는 시스템으로

앱의 콘텐츠를 바꿀 때마다 클라이언트를 배포해야 했습니다. 레이아웃과 콘텐츠를 서버가 스키마로 내려주는 SDUI(Server-Driven UI) 구조로 재설계하고, 비개발자가 직접 데이터를 관리하는 어드민을 프론트엔드부터 백엔드까지 구현했습니다.

기능 반영 시간을 하루에서 수 분으로 단축

이미지 합성부터 노출 실험까지 하나의 구독 퍼널로

워터마크가 구독을 유도할 수 있다고 판단했지만 단순히 강하게 노출하면 생성 경험을 해칠 수 있었습니다. BFF에서 Sharp.js로 원본 이미지와 로고를 합성하고 프론트엔드는 노출 UI와 시점 및 위치를 조합별로 실험할 수 있도록 분리했습니다.

워터마크 A/B 테스트를 주도해 구독 전환율 1%에서 10%로 개선

생성에서 끝나던 경험을 다시 탐색하고 구매하는 흐름으로

재진입 데이터를 보고 반복 노출을 셔플 방식으로 바꿨습니다. 생성된 공간 속 상품을 커머스 딥링크와 연결해 탐색이 실제 구매 행동으로 이어지게 만들었습니다.

사용자 1인당 평균 요청량 2배 이상 증가, 스크랩 전환율 11배 상승

연속해서 바뀌는 이미지 편집을 되돌릴 수 있는 구조로

사진 위에 브러시로 그리거나 이미지와 가구 객체를 추가하고 삭제하는 편집 캔버스를 구현했습니다. 전체 캔버스 스냅샷 대신 각 동작을 execute와 undo 클로저를 가진 Command 패턴으로 기록했습니다. Undo 이후 새로운 동작이 실행되면 남은 Redo 분기를 제거하고 최대 50개의 이력만 유지하는 히스토리 매니저를 설계했습니다.

3D 방꾸미기 (Room Planner)

실제 방과 가구를 3D 공간에 배치하며 인테리어를 미리 구성하고 오늘의집 상품으로 연결할 수 있는 공간 설계 서비스입니다.

AI의 답변을 상품 추천과 3D 배치까지 이어지는 대화로

Markdown과 커스텀 태그가 섞인 AI 응답을 파싱해 텍스트와 추천 상품 및 3D 배치 액션을 하나의 대화 흐름 안에서 렌더링했습니다. Polling 기반의 전송 계층과 세션 관리를 구현해 생성 중인 응답을 안정적으로 이어 보여주었습니다.

한 장의 응모권이 동시에 두 번 사용되지 않도록

첫 바이럴 이벤트의 프론트엔드와 백엔드를 단독으로 맡아 응모권 도메인과 MongoDB 스키마부터 추첨 및 당첨자 발표까지 구현했습니다. 멱등 처리와 낙관적 락, 원자적 상태 전환을 조합해 요청이 동시에 몰려도 응모권이 중복 사용되지 않도록 설계하고 추첨과 발표까지 운영했습니다.

플랫폼마다 다른 WebView 제약에도 저장 흐름이 끊기지 않도록

iOS와 Android WebView에서 서로 다른 다운로드 제약을 발견해 하나의 저장 방식으로 양쪽을 처리할 수 없었습니다. Android는 로컬 Blob, iOS는 Presigned URL 기반으로 저장 경로를 분리했습니다. 플랫폼 분기는 공통 인터페이스 안에 감춰 호출부는 실행 환경을 몰라도 되게 했습니다.

공개된 3D 에셋이 대량 수집 경로가 되지 않도록

3D 에셋 대량 수집 문제의 대응을 맡아 URL만으로 수집 가능한 경로를 재현했습니다. CDN과 오리진의 요청 흐름을 분석해 방어 지점을 특정한 뒤 인프라팀과 단계적인 보안 정책을 적용했습니다. 배포 후 차단 로그를 모니터링해 정상 요청의 오차단까지 발견하고 정책 범위를 다시 조정했습니다.

업사이트 (Upsight)

Frontend Engineer (Intern)2025.06–2025.07

건설 현장 관리 SaaS

현장의 도면과 문서, 보고서를 한 곳에서 관리하고 진행 상황을 실시간으로 공유하는 웹 서비스입니다.

배포 이후 보이지 않던 에러를 관측 가능하게

배포 후 실제 환경에서 무엇이 깨지는지 추적할 수 없던 상황에서 Sentry로 에러 모니터링 체계를 세웠습니다. axios 응답 인터셉터에서 API 에러를 엔드포인트와 상태코드로 태깅하고, 토큰이나 비밀번호 같은 민감정보는 걸러 보냈습니다.

실시간 알림이 조용히 끊기거나 화면을 흔들지 않도록

SSE로 실시간 알림을 붙이며 두 가지 숨은 문제를 다뤘습니다. EventSource가 인터셉터를 타지 않아 토큰이 만료되면 연결이 조용히 끊기던 문제는 SSE 전용 토큰 갱신과 재연결을 분리해 해결했습니다. 새 알림이 스크롤 위치를 흔들지 않도록, 목록 맨 위에서는 즉시 반영하고 아래로 내려가 있으면 배지로만 알린 뒤 다시 올라오면 반영하도록 설계했습니다.

Working with AI

AI를 코드를 빨리 쓰는 도구가 아니라, 한 사람이 낼 수 있는 속도와 범위를 넓히는 도구로 씁니다.

Figma MCP와 Claude Code로 디자인과 개발 사이의 반복을 줄이고, FE와 BE 스펙을 하나의 문서로 모아 사람과 AI가 같은 컨텍스트에서 일하도록 만들었습니다.

개발 바깥의 문제도 같은 방식으로 풀었습니다. 콘텐츠팀이 없던 상황에서 카드뉴스 제작을 Figma 플러그인으로 자동화하고, 처음 다뤄보는 SEO도 AI로 빠르게 학습해 적용하며 오가닉 유입을 만들었습니다.

도구를 늘리기보다 입력을 먼저 의심합니다. 같은 모델과 프롬프트라도 디자인의 레이어 구조를 바꾸면 AI의 생성 결과가 달라지는 것을 실험으로 확인하고, 모델보다 입력 구조와 컨텍스트를 먼저 설계한다는 기준을 세웠습니다.

전사 코드 생산성 상위 10% 기여, 사내 AI Native MVP 선정

Projects

뻐미, 저시력자 버스 번호판 인식 서비스

2025.03–2025.06문제 정의부터 UX 설계와 프론트엔드 개발까지 리드

저시력자가 정류장에서 버스 번호를 확인하기 어렵다는 문제에서 시작했습니다. 이동 중에도 사용할 수 있는 핸즈프리 UX와 TTS 온보딩을 설계하고 네트워크 상태에 따라 통신 방식을 전환하는 구조를 구현했습니다.

React Query의 Dependent Queries로 위치 전송과 주변 정류장 탐색 및 버스 도착 조회의 실행 순서를 제어했습니다. 모바일 카메라 테스트에 HTTPS가 필요한 제약은 Docker와 ngrok을 결합해 팀원이 한 번의 명령으로 동일한 환경을 실행할 수 있도록 자동화했습니다.

뿌슝타로, SMS 오늘의 운세 서비스

2025.02–2025.03제품 구체화와 디자인, 개발, 법무 검토까지 1인 풀스택으로 진행

동아리 홍보를 재미있게 해보고 싶어, 운세라는 가벼운 아이디어를 기획부터 디자인과 개발, 법무 검토까지 끝까지 끌고 갔습니다. 결과를 URL과 SMS로 공유하게 만들어 자연스러운 확산을 유도했고, SMS와 MMS의 발송 단가와 예상 사용량을 기준으로 운영 비용을 산정했습니다. 이미지 운세는 MMS로 발송하되 이미지 처리에 실패하면 SMS로 전환하도록 설계했고, 법학과 동료와 법적 엣지케이스와 이용약관까지 검토했습니다.

Bookmark, 독서 공간 공유 플랫폼

2024.11–2025.025인 팀 프론트엔드 리드

Z세대가 서로의 독서 공간을 탐색하고 공유하는 5인 팀에서 프론트엔드를 리드했습니다. Socket.io를 이용해 장소별 실시간 채팅을 구현하고 서비스의 프론트엔드 구조와 개발 방향을 조율했습니다.

북마크 상태 하나를 확인하기 위해 전체 장소 정보를 다시 받는 구조와 페이지마다 중복된 상태 로직을 발견했습니다. 백엔드에 북마크 전용 API를 제안하고 TanStack Query 캐시를 기준으로 상태를 통합해 토글 시 요청을 2회에서 1회로 줄였습니다.

북마크 API 응답 크기 1.6KB에서 0.95KB로 54.2% 감소

Toys

Cyber Fireworks

2026.06Unity 6, WebGL, Claude Code

방구석에서 여름밤 불꽃놀이를 즐기고 싶어 만든 웹게임입니다. Unity 기본 입력이 지원하지 않는 한글 IME를 WebGL .jslib 브리지로 브라우저 네이티브 입력에 연결하고 입력한 문자를 픽셀로 샘플링해 글자 모양의 파티클로 렌더링했습니다.

Writing and Community

개인 기술 블로그

2022.01–현재130개 이상 포스팅, 누적 방문 2.9만 회

남들이 다 아는 개념을 옮기는 글은 재미가 없어서, 프로젝트에서 직접 부딪힌 문제와 선택하지 않은 대안까지 기록합니다. Figma MCP의 실제 한계를 비교하고 렌더링 사이클과 OAuth 재시도처럼 직접 검증한 경험을 4년간 남겼습니다. 반복해서 나오던 질문은 신규 팀원 온보딩 가이드로 만들어 같은 시행착오가 반복되지 않게 했습니다.

Yourssu

2024.04–2025.08숭실대학교 개발 동아리 · 프론트엔드

Scouter에서는 HR팀이 반복하던 메일 작성과 발송 및 동아리원 관리 과정을 제품으로 옮겼습니다. TipTap Extension으로 메일 에디터를 구현하고 수신자 탭을 전환해도 작성 내용이 유지되도록 상태를 설계했습니다. Dialog가 위치 계산 전에 화면 좌측 상단에 그려지는 미세한 깜빡임은 여러 렌더링 방식을 비교한 뒤 RAF와 visibility 제어를 조합해 제거했습니다.

Spacer에서는 단체와 공간 관리부터 검색과 예약 및 취소까지 주요 프론트엔드 흐름을 구현했습니다. 예약 캘린더와 시간대별 상태를 설계하고 24시간 운영 및 날짜 경계에서 발생하는 시간 엣지케이스까지 대응했습니다.

Yourssu 스터디에서는 이미지 압축이 UI를 막는 과정을 재현하고 Web Worker 적용 전후를 비교하는 실험 페이지를 만들어 공유했습니다.

GDSC Soongsil

2023.09–2024.09기술 세미나 연사

제 개발의 시작은 게임이었습니다. 무언가를 만들어 사람을 즐겁게 하는 그 재미를 나누고 싶어, 게임 개발을 주제로 세미나를 열고 스터디 영상을 다음 구성원도 쓸 수 있는 학습 자료로 남겼습니다.

Education

숭실대학교 소프트웨어학부

2022.03–2026.083.69 / 4.5