기록일지
-
9월, 잘 된 일 한 가지와 그렇지 않은 한 가지
"결국 잘 되지 않았다."어디서부터였을까. 처음부터였을까. 오래 보는 성향이라 해서 몇 번 더 보자고 제안했다. 연락하는 걸 보면 준연애였다. 아침에 인사하고, 점심에 뭐 먹는지, 저녁에 서로 뭐 했는지, 취침 전 인사하고, 이랬는데 연인이 아니면 이 사이는 뭘까? 약속도 상대가 먼저 언제 보냐고 하면 그린 라이트 아닌가?다섯 번째로 보는 날, 상대가 25분 정도 늦었다. 뭐 큰 신경 쓰이지 않았다. 그보다 기다리는 시간이 곧 만난다는 설렘이었다. 원래 약속은 전 주에 보는 거였는데 상대가 아파서 일주일 미뤘다. 공모전 하느라 신경을 많이 써서 생긴 병인데 어쩔 수 없었다. 그 대신 주말에도 만나기로 했으니까 아주 좋았다. 그전까지 약속이 다 있어서 첫 만남 빼고 주말에 본 적이 없었다. 저녁을 얻어먹고..
2026.09.26 15:10 -
8월, 해킹-매칭-사별-권고사직
"연차 전 날 해킹"많은 일이 있었다. ClickFix 공격에 당해서 맥을 포맷해야 하지 않나, 사이트 악성 코드 삭제 작업을 하지 않나. 연차 전 날에 깔끔하게 기능 배포 마무리하고 여유로운 저녁을 보내려 했지만 내 저녁은 회사에서 이뤄졌다.금방 끝날 일이었지만 공격당한 노트북에서 악성 코드 제거 작업을 하는 건 리스크가 컸다. 포맷하고 비밀번호를 바꾸는 데 오랜 시간이 걸렸다. 이런 경험이 처음이기도 해서 어떤 작업을 우선순위로 가져가야 할지 방향을 잡는 것이 병목이었다. 동일한 보안 사고가 일어나면 이것보다 더 빠르게 대처할 수 있을 것이다. 맥에서 로그인되었던 비밀번호 수정과 포맷을 동시에 했으면 새벽 1시 전에 집 도착했을 텐데 아쉽다.솔직히 포맷을 해야하나 긴가민가 했다. "굳이 포맷을?" 안..
2026.08.29 20:10 -
7월, 막상 할 게 없어지는 주말
"왜 살고 있는지 의문이다"평일이면 주말을 기다리지만 막상 주말이 되면 무엇 때문에 주말을 기다렸는지 모르겠다. 매번 똑같은 패턴이어서 그런 가. 운동, PC방, 집, 글쓰기가 내 주말 루틴이다.새로운 장소를 가보거나 무언 가를 해보려 할 때 거리와 금액이 날 멈춰 세운다. 여름이라 날씨도 한몫한다. 에어컨이 있어서 실내는 괜찮지만 야외에서 걸어 다닐 때 찝찝함을 견디는 내 모습이 예상된다. 물질적 접근성은 낮지만 심리적 접근성 때문인 가 행동으로 옮기기 꺼려워진다.그렇다고 집에 있다고 해서 생산적인 행동을 하는 건 아니다. 오히려 손쉽게 접근할 수 있는 도파민 창구인 인터넷으로 가게 된다. 온라인은 양날의 검이다. 잘 이용하면 득이 되지만 중독되기 쉽다.침대에 누워서 폰을 만지작 거리고 엄지로 스크롤만..
2026.07.25 17:00
Frontend
-
귀가 중 한탄 글 - 클라우드플래어 워커스 결제
내가 잘못 생각했다.메인 서비스에서 미들웨어를 쓸라고 nextjs를 선택했고 랜딩 페이지를 빠르게 구현하기 위해서 react를 선택했다.반대가 되어야 했다.아무리 랜딩 페이지이어도 SEO가 필요했다. 그래도 랜딩페이지는 프로젝트에서 비중이 크지 않아서 마이그레이션 하거나 냅둬도 된다. 하지만 비중이 큰 메인 서비스는 그렇지 않다. 오늘 서버 cpu 활성 시간 확보하기 위해서 Cloudflare workers를 결제했다. React라면 cpu 시간 때문에 결제하지 않아도 됐을 텐데 내 지식 한계로 추가 비용이 생겼다.월 $5달러다.스타벅스에서 한 잔 마셨다고 생각할 수 있다. 언제까지 마셔야 할지 모르는 게 흠이다. 문제를 안 만들려면 문제를 알고 있으면 된다. 어떻게 모든 문제를 미리 알 수 있을까.. ..
2026.09.14 21:20 -
PG 결제, History가 50개 이상 쌓였을 때 발생한 문제
모바일에서 결제 완료 후 뒤로가기 시 이노페이 PG 창 재진입 문제에서 PG 결제 이후 뒤로가기를 했을 때 이노페이 PG 창으로 다시 진입하는 문제를 해결했다.당시에는 PG 진입 전 history.length를 저장하고, 결제 후 현재 History와의 차이를 계산해 PG 진입 전 페이지로 돌아가도록 처리했다.그런데 제품 출시를 앞두고 다시 테스트하면서 이 로직에도 한계가 있다는 걸 발견했다.이미 수정했고 출시했지만, 까먹기 전에 수정된 내용을 기록해야했다. PG 결제 후 결제 페이지로 정상적으로 복귀시키기PG 과정에서 History Entry가 추가될 수 있기 때문에, PG 진입 전과 결제 후의 history.length 차이를 이용해 실제로 몇 번 뒤로 이동해야 하는지 계산하는 방식이었다./paym..
2026.09.13 23:30 -
리사이즈했는데도 왜 모바일에서 버벅였을까?
올라온 하나의 QA 이슈이커머스 웹 프로젝트에서 리뷰 기능을 개발하던 중 QA에서 웹 로딩이 느리고 모달 애니메이션이 버벅거린다는 이슈가 올라왔다. 어떤 문제였을까개발 서버와 PC에서는 특별한 문제 없었지만, 실제 모바일 기기에서 확인해 보니 리뷰 삭제 모달이 하단에서 올라오는 애니메이션에서 프레임 드랍이 발생하고 있었다.처음에는 서버에서 데이터를 가져오는 시간이 오래 걸리거나, 데이터를 가져온 이후 파싱하는 과정에서 문제가 발생한다고 생각했다.하지만 네트워크 탭을 확인해 보니 예상하지 못한 곳에서 문제가 발생하고 있었다.바로 이미지였다.리뷰에 포함된 이미지의 용향이 컸고, 모바일 브라우저에서 이미지를 디코딩하고 렌더링 하는 과정에서 상당한 리소스가 사용되고 있었다. 이 과정과 모달 애니메이션이 동시에 ..
2026.09.06 12:50 -
6개월 차 신입 개발자가 악성 코드 공격에 당한 썰
요약먼저 결론부터 말하면, 현재 사이트는 정상화된 상태다.- 사이트의 악성 코드는 완전히 제거- 공격자가 접근할 수 있었던 침입 경로도 모두 폐쇄- 악성 코드가 사이트에 노출된 시간은 2026년 8월 6일 새벽부터 저녁까지, 약 17시간 정도처음에는 단순한 Cloudflare 인증 화면인 줄 알았다.알고 보니 사이트 자체가 공격당한 상태였고, 방문자에게 악성 프로그램을 설치하도록 유도하고 있었다.이번 글에서는 어떻게 이런 일이 발생했고, 어떤 과정을 거쳐 대응했는지 기록해보려고 한다. 1. 처음에는 Cloudflare 인증인 줄 알았다8월 6일 점심 이후, 콘텐츠 업로드를 위해 사이트에 접속했을 때였다. 직원으로부터 평소와 다른 화면이 나타났다는 이야기를 전달받았다. 화면에는 Cloudflare의 캡차 ..
2026.08.08 14:30 -
결제 페이지 바텀시트, 뒤로가기로 닫히지 않는 문제
배경결제 페이지에서 결제하기 버튼을 누르면 확인용 바텀시트가 등장한다. 안드로이드 기기에서 뒤로가기 버튼을 누르면 바텀시트가 닫히도록 useBackClose 커스텀 훅을 구현했다.useBackClose 커스텀 훅은 바텀시트가 열릴 때 히스토리를 pushState로 하나 추가하고, 브라우저의 popState 이벤트가 발생하면 바텀시트를 닫는 방식이다.다른 페이지의 바텀시트는 정상적으로 닫혔지만, 결제 페이지에서만 브라우저 뒤로가기로 닫히지 않는 문제가 있었다. 증상정상 페이지1. 바텀시트 열기 2. history.pushState() 실행 3. 브라우저 뒤로가기 4. popState 이벤트 발생 5. 바텀시트 닫힘 결제 페이지1. 바텀시트 열기 2. history.pushState() 실행 3. 브라우저 ..
2026.07.12 16:45
우아한테크코스 8기
-
[자문자답] 우테코 8기 최종 테스트 결과
1. 무엇을 하면서 2주(01.10.~01.23.)를 기다렸는지?2주 동안 코드를 보지도, 작성하지도 않았다. 2년 동안 개발 공부하면서 이렇게 긴 시간 동안 아예 개발하지 않은 적은 처음이었다. 한 주는 블로그 글 작성, 기묘한 이야기 정주행, 방탈출, 취업박람회를 갔고 다른 한 주는 마켓컬리 일용직, 도서관, PC방에 가면서 시간을 보냈다. 2. 최종 테스트 결과는 어떻게 되었는지?예제 테스트 결과 "예기치 않은 오류"처럼 탈락했다. PC방에서 롤 랭크전을 끝내고 메일을 확인했는데 다들 웃고 있는 곳에서 나만 울고 있으니 처량했다. 3. 심정이 어떤 지?결과를 본 지 하루가 지나서 마음이 조금 진정된 상태다. 전날은 슬픔, 분노, 자책이 가득 차 있었다. 스무 살이 지나서 이렇게 많이 울고 자책한 적..
2026.01.24 13:30 -
우테코 8기 최종 테스트 후기 "예기치 못한 오류로 인하여 실행에 실패하였습니다."
2026.01.10.(일) FE 테스트 본 날, 귀갓길에 작성 불친절한 미션 리드미"예기치 않은 오류"를 마지막으로 최종 테스트가 종료됐다. 미션 제출 전에 어떻게 PR을 하면 되는지 미션 내용에 적혀 있지 않아서 다른 사람들의 PR을 보고 따라 했다. 브랜치 이름도 아이디로 해야 할 거 같아서 17시 되기 직전에 급히 main에서 깃허브 아이디로 브랜치 생성해서 PR 보냈다. PR 생성 시간이 17시까지인 줄 착각했다. 도움 되지 않았던 준비해 간 소감문 제출이 17시부터였고 17시 이후로는 추가 push가 불가능했다. 16:57 쯤에 PR을 생성했고 17시부터 소감문을 작성했다. 혹시 모를 상황에 소감문을 "."으로 작성해서 임시방편으로 일단 제출했다. 소감문 작성이 중요하다고 생각해서 예제 테스트 ..
2026.01.12 14:25 -
우테코 8기 최종 테스트 선발 발표 30분 전, 한 달 되돌아보기 (+결과)
오픈미션이 끝난지 한 달이 지났다. 오픈 미션을 할 때처럼 최종 테스트 결과를 기다리는 것도 지친다. 길어질수록 마음이 붕 떴지만 결과 발표일이 다가올수록 긴장됐다.우테코가 끝나고 어떻게 지냈는지 공유하고 싶어서 글을 쓰게 됐다.지금 시간으로 발표(15:00)까지 30분 정도 남았다. 미션 끝나고 한 것들- 평일평일 오전에는 알고리즘을 알기 위한 자료구조를 공부했다. 커리큘럼을 따로 세운 건 아니지만 유데미 알고리즘 강의가 대부분 자료구조-알고리즘 순서로 되어 있어서 자료구조를 먼저 공부했다.1. Master the Coding Interview: Data Structures + Algorithms2. [한글자막] JavaScript 알고리즘 & 자료구조 마스터클래스이 두 강의를 들었다.유데미는 할인을 ..
2025.12.29 14:30
도서정리
-
좋은 코드는 기능보다 변경을 쉽게 만든다
"리팩터링과 최적화를 구분하자."마틴 파울러, 「리팩터링 2판」- 불필요한 복제본을 만드는 편이, 예상치 못한 수정이 촉발한 오류를 디버깅하는 것보다 낫다.- 조건을 검사하고 그 결과에 따른 동작을 표현한 코드는 무슨 일이 일어났는지 이야기 해주지만 '왜' 일어나는지 제대로 말해주지 않을 때가 많은 것이 문제다. 안토 아라빈스 · 스리칸스 마치라주, 「함수형 자바스크립트 입문」- 순수 함수는 테스트하기 편한 코드다. 이문기, 「지속 가능한 프런트엔드 엔지니어링」- 매개변수의 개수가 다른 함수보다 많다면 이 함수는 결합도를 더 높일 수 있습니다.- DTO를 사용해 제공받은 데이터를 필요한 구조로 전달합니다. API 개발이 완료되기 전까지 프런트엔드는 명세에 맞는 임의 데이터를 정의해서 사용합니다.
-
프로젝트를 빠르게 만드는 것보다 오래 유지하는 것이 중요하다
"자신의 컨텍스트에 맞는 접근 방식을 찾기 위해 시간을 들여야 한다."헨릭 크니버그, 「스크럼과 XP」- 내적 품질은 논의 대상이 될 수 없다. 어떠한 상황에서도 시스템의 품질을 유지하는 것이야 말로 팀이 책임져야 할 사항이다.- 애자일 소프트웨어 개발을 다루는 많은 책에서 소프트웨어 개발의 경우 장기간 초과 근무가 생산성을 저해한다고 주장한다.- 더 적게 개발하되 안정적으로 개발하는 것이 많이 개발하면서 정신 없이 버그를 잡아야 하는 것보다는 항상 더 싸게 먹힌다. 샘 뉴먼, 「마이크로 서비스 도입 이렇게 한다」- 우리는 재사용을 통해 기능을 더 신속하게 제공하거나 비용을 절감할 수 있기를 원한다. 그러나 재사용을 위해 프로세스를 최적화 한다면 작업 진행이 느려지는 결과를 낳을지도 모른다.- 여러분과 ..
-
나는 사람을 얼마나 정확하게 판단하고 있을까
"특히 사람을 판단할 때는, 그리고 그 판단이 중요할 때는, 그 대상을 여러 상황에서 마주쳐봐야 한다는 점이다."리처드 니스벳, 「마인드웨어」- 감정은 늘 정보에 영향을 받는 사실을 기억해야 한다.- 성격과 관련한 과거의 행동에서 성격과 관련한 앞으로의 행동을 예측할 때, 다양한 상황에서 많은 사례를 관찰하지 않는 한 조심하고 겸손해야 한다. 최인철, 「프레임」- 자기 중심적 프레임 때문에 우리는 다른 사람들도 나와 비슷할 것이라고 생각한다(허위 합의 효과). 세상에는 자신과 생각이 다른 사람들이 예상보다 훨씬 많다는 점이다.- 우리가 다른 사람들에 대해서 말하는 평가나 내용을 보면, 다른 사람이 어떤 사람인지에 대해서보다 우리 자신이 어떤 사람인지를 더 많이 드러낸다.- 상황이 원인이라면, 어떤 상황에..
-
타인의 시선에서 벗어나 내가 선택하는 삶
"이의를 제기해서 무너질 정도의 관계라면 그런 관계는 없으니만 못하네. 관계가 깨질까봐 전전긍긍하며 사는 것은 타인을 위해 사는 부자유스런 삶이야."기시미 이치로 · 고가 후미타케, 「미움 받을 용기」- 생활양식이 타인이나 환경에 의해 결정된 것이라면 책임을 전가하는 것도 가능하겠지. 하지만 우리는 자신의 생활양식을 스스로 선택하네.- '아버지에게 맞아서 아버지와 사이가 나쁘다.'라는 원인론에 입각해서 생각하면 나로서는 할 수 있는 게 아무것도 없네. 하지만, '아버지와 잘 지내고 싶지 않아서 맞을 기억을 꺼냈다.'라고 생각하면 관계를 회복할 카드를 내가 쥐게 되지. 내가 '목적'을 바꾸면 그걸 문제가 간단해진다는 뜻일세.- 남이 내게 무엇을 해주느냐가 아니라, 내가 남을 위해 무엇을 할 수 있는 가를 ..