Showing Posts From

코드리뷰

부모님한테 '회사 어때' 물어볼 때의 거짓말

부모님한테 '회사 어때' 물어볼 때의 거짓말

부모님한테 '회사 어때' 물어볼 때의 거짓말 한 달에 한 번 오는 전화 일요일 저녁 8시. 부모님한테 전화가 온다. 정확히 한 달에 한 번. 어머니는 매달 첫째 주 일요일 저녁에 전화하신다. 캘린더에도 없는데 정확하다. "여보세요, 아들." "네, 엄마." "밥은 먹었어? 회사는 어때?" 이 질문이 온다. 매달 똑같은 질문.나는 매달 똑같이 대답한다. "네, 잘 먹고 있어요. 회사도 괜찮아요." 거짓말이다. 전부 거짓말. 사실은 괜찮지 않다 어제 새벽 3시에 깼다. 심장이 두근거렸다. 내일 PR 올려야 하는데 코드가 안 돌아간다. 테스트 케이스 3개가 빨간색이다. 고치는 법을 모른다. 침대에 누워서 천장을 봤다. 에어컨 소리만 들렸다. 4시까지 잠이 안 왔다. 핸드폰으로 스택오버플로우 봤다. 영어라 이해 안 됐다. 5시에 겨우 잠들었다. 8시 알람에 일어났다. 출근했다. 회사 가서 선배한테 물어봤다. "저... 이 테스트 케이스가 계속 실패하는데..." 선배가 내 화면 봤다. "아 이거? mock 데이터 형식이 틀렸네. 여기 타입 정의 다시 봐." 10초 만에 해결됐다. 나는 이것 때문에 밤새 고민했다.'괜찮아'라는 말의 무게 부모님은 대전에 산다. 나는 서울에 산다. KTX로 1시간 30분. 가까운데 멀다. 부모님은 내가 서울에서 개발자로 취업한 게 자랑스럽다고 하셨다. "우리 아들 서울서 IT 회사 다녀." 친척들한테 말씀하신다고 들었다. 나는 그 말을 들을 때마다 배가 아프다. IT 회사 맞다. 개발자 맞다. 근데 나는 아무것도 모른다. 입사 8개월 됐다. 아직도 React 헷갈린다. TypeScript는 더 헷갈린다. 선배들 회의 들으면 외계어다. "이거 Redis로 캐싱하고, pub/sub 패턴으로 가면 되지 않을까요?" "좋네요. 그럼 Docker Compose에 Redis 컨테이너 추가하고..." 무슨 말인지 모른다. 고개만 끄덕인다. 근데 부모님한테는 말 못 한다. "회사 어때?" "네, 괜찮아요." 이 거짓말의 무게가 55kg이다. 내 몸무게만큼 무겁다. 전화할 때 보이는 것들 전화할 때 내 방을 본다. 빨래 3일치가 의자에 쌓여 있다. 컵라면 용기 2개가 책상에 있다. 어제 먹은 거다. 모니터에는 인프런 강의가 켜져 있다. "React 완벽 가이드". 진도는 15%. 노션에는 "오늘 배운 것" 페이지가 열려 있다. 마지막 작성일: 2주 전. 바닥에는 택배 상자. 알고리즘 책이다. 아직 안 뜯었다. 이게 내 일상이다. 부모님은 이걸 모른다."방은 깨끗하게 쓰고 있지?" "네, 깨끗해요." 거짓말. "밥은 잘 챙겨 먹고?" "네, 잘 먹어요." 거짓말. 오늘 점심은 편의점 삼각김밥 2개였다. "친구들은 자주 만나?" "네, 가끔 만나요." 반은 진짜. 한 달에 한 번 부트캠프 동기들이랑 만난다. 다들 힘들다고 한다. 말하고 싶은데 못 하는 것들 선배가 코드리뷰 남긴다. "이 부분 렌더링 최적화가 필요합니다. useMemo 사용해보세요." useMemo가 뭔지 모른다. 구글링한다. 글 10개 읽는다. 여전히 모르겠다. 유튜브 본다. "useMemo 쉽게 이해하기". 20분짜리 영상. "쉽게"라는데 어렵다. 결국 ChatGPT한테 물어본다. "useMemo 예제 코드 보여줘." 코드 받는다. 복붙한다. 돌아간다. 뭔지는 모르겠는데 돌아간다. PR 다시 올린다. "수정했습니다." 선배가 approve 누른다. 나는 여전히 useMemo를 모른다. 이런 이야기를 부모님한테 할 수 없다. "엄마, 나 회사에서 매일 모르는 거 투성이야. 선배들 말 하나도 이해 못 해. 코드 복붙해서 넘어가. 3개월 뒤 수습 평가 떨어질까 봐 무서워." 이렇게 말하면 어머니는 걱정하신다. "그럼 그만둘래? 집으로 올래?" 그건 더 싫다. 그래서 거짓말한다. "회사 괜찮아요. 잘 하고 있어요." 거짓말하는 이유 부모님은 내가 부트캠프 다닐 때 600만원 보내주셨다. "공부 열심히 해. 좋은 회사 들어가." 나는 6개월 동안 공부했다. 매일 12시간씩. 취업했다. 중소기업. 연봉 3400만원. 적지만 취업이 어디냐고 생각했다. 부모님은 좋아하셨다. "우리 아들 대단하다. 개발자 됐네." 나는 그때 처음으로 부모님을 속였다. "네, 회사 좋아요." 사실은 첫 출근 날부터 겁났다. 선배가 "Git 쓸 줄 알지?" 물었다. "네." 대답했다. 사실 Git Bash랑 GitHub Desktop 차이도 몰랐다. "그럼 이 브랜치에서 작업해." 브랜치가 뭔지 몰라서 유튜브 봤다. 화장실에서. 이런 걸 부모님한테 말하면 실망하실 것 같다. 600만원이 아깝다고 생각하실 것 같다. 그래서 계속 괜찮다고 말한다. 전화 끊고 나면 통화는 10분 정도 한다. "그래, 건강 챙기고. 너무 무리하지 말고." "네, 엄마도요." "응. 끊는다." "네." 전화 끊는다. 방은 조용해진다. 노트북만 웅웅거린다. 팬 소리. 나는 침대에 눕는다. 천장을 본다. '괜찮아'라고 말했다. 거짓말이다. 내일 회의가 있다. 진행상황 공유. 준비 안 됐다. 모레 코드리뷰. 떨린다. 다음 주 배포. 내가 짠 코드가 에러 안 나면 좋겠다. 다다음 주 월급날. 월세 나가면 120만원 남는다. 교통비 빼면 100만원. 식비 빼면 70만원. 저축? 못 한다. 부모님은 이걸 모른다. 나는 잘하고 있다고 말했으니까. 언젠가는 말할 수 있을까 부트캠프 동기 중에 한 명이 퇴사했다. "못 버티겠더라. 매일 혼나고, 매일 모르겠고." 우리는 그 친구를 위로했다. "괜찮아. 다른 회사 찾으면 돼." 근데 속으로는 생각했다. '나도 곧 저럴 것 같은데.' 아직 8개월. 아직 신입. 아직 모르는 게 당연하다고 생각한다. 근데 매일 불안하다. 언제쯤 '괜찮아'가 진짜가 될까. 언제쯤 부모님한테 거짓말 안 해도 될까. 언제쯤 코드리뷰 받을 때 손 안 떨릴까. 언제쯤 회의에서 한마디라도 할 수 있을까. 모르겠다. 아직 모르겠다. 그래도 버틴다 내일도 출근한다. 9시 10분에 도착한다. 10분 늦는 게 습관이다. 슬랙 확인한다. 멘션 3개. 심장 뛴다. 모니터 켠다. VS Code 켠다. 어제 못 끝낸 작업 이어한다. 모르는 거 나오면 구글링한다. 유튜브 본다. ChatGPT한테 물어본다. 점심은 편의점. 삼각김밥. 오후에 회의. 고개 끄덕인다. 퇴근은 7시. 야근 아니래. 집 와서 강의 본다. 10분 듣고 잔다. 이게 내 일상이다. 힘들다. 근데 버틴다. 다음 달 첫째 주 일요일에 또 전화 올 거다. "회사 어때?" 나는 또 대답할 거다. "괜찮아요." 거짓말. 근데 언젠가는 진짜가 될 거다. 그렇게 믿는다. 그래서 버틴다.오늘도 거짓말했다. 미안해, 엄마.

주말에 포트폴리오 정리해야지, 하고 게임하는 이유

주말에 포트폴리오 정리해야지, 하고 게임하는 이유

주말에 포트폴리오 정리해야지, 하고 게임하는 이유 금요일 저녁의 다짐 금요일 퇴근길이다. 지하철에서 폰 보다가 링크드인 알림 떴다. "회사에서 프론트엔드 주니어 개발자를 찾습니다." 클릭했다. 자격 요건 봤다.React 실무 2년 이상 TypeScript 능숙 포트폴리오 필수실무 2년은 아니지만 8개월이면... 아니지. 그래도 포트폴리오는 있으니까. 그런데 내 깃허브 들어가 봤다. 마지막 커밋이 4개월 전이다. "이번 주말엔 진짜 정리해야지." 집 도착했다. 노트북 켰다. 깃허브 들어갔다. README 파일 열었다. "# My Portfolio"라고만 써있다. 닫았다. "내일부터 할래."토요일 아침의 각오 11시에 일어났다. 평일엔 7시 반에 일어나는데 주말은 다르다. 몸이 알아서 더 잔다. 핸드폰 봤다. 부트캠프 동기 단톡방에 메시지 왔다. "너네 이직 준비해?" "ㅇㅇ 포폴 정리 중" "나도 주말에 해야됨" 거짓말이다. 다들 안 한다는 거 안다. 나도 그렇게 답장 보냈다. "나도 오늘 할 거임" 샤워했다. 커피 내렸다. 책상 앞에 앉았다. 노트북 켰다. 브라우저 열었다. 깃허브 들어갔다. 그런데 유튜브 탭이 하나 떠있다. "리액트 성능 최적화 10분 정리". 어제 보다 만 거다. 일단 이것부터 봐야지. 10분이면 되니까. 24분 봤다. 알고리즘이 추천 영상 띄웠다. "주니어 개발자 면접 후기". 이것도 봐야 할 것 같다. 면접 준비도 해야 하니까. 38분 더 봤다. 시계 봤다. 12시 40분이다. 점심 먹어야겠다. 배달 앱 켰다. 치킨은 아까워. 피자는 더 아까워. 편의점 갔다. 컵라면이랑 삼각김밥 샀다. 2,800원 절약했다. 집 와서 먹으면서 유튜브 또 켰다.오후 2시의 딜레마 포폴 정리 시작했다. 진짜로. README 파일 열었다. 뭘 써야 하지. 검색했다. "개발자 포트폴리오 README 작성법". 블로그 10개 열었다. 다들 다르게 말한다. "간단하게 쓰세요" "프로젝트 상세히 설명하세요" "기술스택 뱃지 넣으세요" "GIF로 시연 영상 넣으세요" 머리 아프다. 일단 기술스택부터 쓸까. "## SkillsReact JavaScript ..."TypeScript도 쓸까. 쓰긴 쓰는데 any 남발하니까. 근데 요즘 TypeScript 안 쓰면 안 뽑아준대. 쓰자. "- TypeScript" 추가했다. 그 다음은 프로젝트 설명이다. 부트캠프 때 만든 거 3개. 회사에서 한 거는 못 올린다. 비밀유지서약서 썼으니까. 첫 번째 프로젝트 제목 썼다. "### 중고거래 플랫폼". 그 다음은 설명인데. "중고거래 플랫폼입니다." 이건 너무 성의없다. "사용자가 물건을 등록하고 거래할 수 있는 플랫폼입니다." 이것도 별로다. 검색했다. "개발자 포트폴리오 프로젝트 설명 예시". 또 블로그 읽었다. 30분 지났다. 아직 세 줄 썼다. 집중이 안 된다. 핸드폰 봤다. 알림 없다. 다시 노트북 봤다. 커서 깜빡인다. 손이 Alt+Tab 눌렀다. 스팀 켰다. "잠깐만 30분만 하자."게임 시작의 정당화 게임 켰다. "30분만"이라고 다짐했다. 그런데 게임은 그렇게 안 된다. "한 판만 더"가 시작된다. 첫 판 졌다. 팀 운이 나빴다. 두 번째 판 이겼다. 기분 좋다. 세 번째 판 시작했다. 머릿속으로 정당화가 시작된다. "포폴은 저녁에 해도 되지." "어차피 오늘 다 못 끝내." "내일도 있어." "지금 스트레스 풀어야 저녁에 집중되지." 다 거짓말이다. 나도 안다. 근데 손은 계속 움직인다. 마우스 클릭. 키보드 타이핑. "ㅋㅋㅋ" 채팅 친다. 게임에선 말이 많아진다. 시계 안 본다. 보면 죄책감 느껴서. 핸드폰 진동 왔다. 엄마다. "밥 먹었니?" 답장 보냈다. "네 먹었어요." 게임 계속한다. 5시가 됐다. 배고프다. 라면 끓였다. 먹으면서 게임 영상 봤다. 유튜버는 나보다 잘한다. 부럽다. "나도 저렇게 해봐야지." 게임 다시 켰다. 이제 7시다. 저녁의 자책감 8시 반이다. 게임 껐다. 눈 아프다. 허리 아프다. 노트북 화면 봤다. 아직 깃허브 켜져있다. 아까 쓴 세 줄 그대로다. 죄책감 온다. "오늘 뭐 한 거지." 계산해봤다. 게임 5시간 반. 유튜브 1시간. 포폴 작업 10분. "내일은 진짜 해야지." 근데 오늘도 그렇게 말했다. 지난주도 그랬다. 지지난주도. 깃허브 프로필 봤다. 초록색 잔디 없다. 4개월째 없다. 다른 동기들 깃허브 들어가 봤다. 걔네도 없다. 위안된다. 근데 위안되면 안 되는데. 링크드인 다시 켰다. 아까 그 공고 또 봤다. "포트폴리오 필수". 저장했다. "내일 지원할 거야." 거짓말이다. 샤워했다. 침대 누웠다. 핸드폰 봤다. 유튜브 알고리즘이 또 띄웠다. "개발자 이직 성공 후기". 봤다. 20분 봤다. "나도 저렇게 될까?" 모르겠다. 불 껐다. 눈 감았다. 내일 생각했다. "일요일엔 진짜 해야지." 잠들었다. 일요일의 반복 11시 반에 일어났다. 토요일보다 30분 늦다. 핸드폰 봤다. 회사 선배가 단톡방에 글 올렸다. "다들 주말 잘 보내?" 답장 안 했다. 뭐라고 답해야 할지 모르겠어서. 씻었다. 커피 내렸다. 책상 앉았다. 노트북 켰다. 어제랑 똑같다. 근데 오늘은 다르다고 생각했다. "오늘은 진짜 할 거야." 깃허브 열었다. 어제 쓴 거 읽었다. 고칠 거 없다. 계속 써야 하는데. 유튜브 탭 눈에 들어왔다. "리액트 Hook 완벽 정리". 이거 봐야 할 것 같다. 면접에 나올 수도 있으니까. "10분만 보고 할게." 1시간 봤다. 배고프다. 편의점 갔다. 또 삼각김밥이랑 컵라면 샀다. 먹으면서 생각했다. "오늘은 포폴 안 되겠다." "대신 강의라도 봤으니까." "공부도 중요하니까." "내일 월요일이니까 다음 주말에 하지." 합리화 완료됐다. 게임 켰다. "스트레스 풀고 내일 출근해야지." 6시까지 했다. 저녁 먹었다. 또 게임했다. 9시 됐다. 내일 생각하니까 우울하다. "월요일이다." "또 회사다." "포폴 결국 못 했다." 침대 누웠다. 핸드폰 봤다. 링크드인 알림 떴다. "지원 마감 3일 전". 아까 그 공고다. 저장 취소했다. "어차피 못 넣어." 불 껐다. 왜 이러는 걸까 이유 안다. 사실. 포폴 정리가 무섭다. 정리하면 내 실력이 보인다. 프로젝트 3개밖에 없다는 것도. 코드 별로 안 이쁘다는 것도. 설명할 게 없다는 것도. 다 보인다. 게임은 다르다. 게임에선 이길 수도 있고 질 수도 있다. 져도 "팀 운이 나빴어"라고 하면 된다. 내 실력이 아니라는 핑계 댈 수 있다. 근데 포폴은 그게 안 된다. 내 실력이 그대로 나온다. 그게 무섭다. 그리고 피곤하다. 평일에 회사에서 코드 짠다. 에러 고친다. 선배한테 혼난다. 퇴근하면 기운 없다. 주말까지 코드 보기 싫다. 노트북 켜기 싫다. 개발 관련된 거 다 싫다. 게임은 쉽다. 버튼만 누르면 된다. 머리 안 써도 된다. 그냥 재미있다. 포폴은 어렵다. 뭘 써야 할지 모른다. 어떻게 설명해야 할지 모른다. 시작하면 끝이 안 보인다. 그래서 게임한다. 간단하다. 그래도 월요일 출근했다. 팀장님이 말했다. "다들 주말 잘 보냈어?" "네." 대답했다. 거짓말이다. 점심시간에 편의점 갔다. 삼각김밥 사면서 생각했다. "이번 주말엔 진짜 해야지." 또 똑같은 말이다. 근데 이번엔 다를 수도 있다. 아닐 수도 있다. 모르겠다. 그냥 오늘 하루 버티면 된다. 내일 생각은 내일 하면 된다. 지금은 밥 먹는다. 삼각김밥 맛있다.결국 또 다음 주말에 "이번엔 진짜"라고 말하겠지.

React와 Next.js 중에 뭘 써야 하는데

React와 Next.js 중에 뭘 써야 하는데

React와 Next.js 중에 뭘 써야 하는데 아침부터 막힌다 출근했다. 오늘 새 프로젝트 킥오프. 팀장님이 말했다. "이번 건 Next.js로 갑시다." 어? 우리 지금까지 React 썼잖아. 뭐가 다른데.회의실에서 돌아왔다. 일단 노션 켰다. 'React vs Next.js' 검색했다. 아티클 100개 나온다. 다 읽을 수 없다. ChatGPT한테 물었다. "Next.js가 뭔가요?" 답: "Next.js는 React 프레임워크입니다." ...그래서? 사실 React도 헷갈린다 솔직히 말하면 React도 아직 헷갈린다. useEffect 의존성 배열. 빈 배열이면 한 번만 실행. 값 넣으면 그거 바뀔 때마다 실행. 맞나? 맞긴 한데 실전에서 쓰면 무한 루프 돌아간다. 왜 그런지 모른다. 선배가 "React 기본기부터 다시 보세요" 했다. 알겠다고 했다. 안 봤다. 이제 Next.js를 배워야 한다. React도 모르는데.점심시간. 편의점 갔다. 삼각김밥 2개. 유튜브 켰다. "Next.js 10분 완벽 정리" 10분이 아니다. 30분이다. 거짓말하지 마. 영상 보는데 모르는 단어 나온다. "SSR", "SSG", "ISR". ...뭔데. 선배한테 물어봐야 하는데 오후 3시. 선배 자리 옆 지나갔다. 물어볼까. 아니다. 바빠 보인다. 4시. 다시 지나갔다. "저기... 선배님." "응?" "Next.js랑 React 차이가 뭔가요?" 선배가 웃는다. "아 그거? 간단해." 간단하다는 말 들으면 간단한 적이 없다."Next.js는 React 위에 올라간 프레임워크야. 서버 사이드 렌더링 지원하고." "아..." "라우팅도 파일 기반으로 되고, API 라우트도 만들 수 있어." "네..." "근데 너 React Router 써봤어?" "네. 쓴 것 같은데요." "그거랑 비교하면 이해 빠를 거야." 안 빠르다. 블로그 읽기 시작 자리 돌아왔다. 구글 검색 시작. "React vs Next.js 차이" 첫 번째 글. 영어다. 닫았다. 두 번째 글. 한국어다. 읽는다. "React는 라이브러리, Next.js는 프레임워크입니다." 뭐가 다른데. 라이브러리랑 프레임워크. 또 검색한다. "라이브러리 vs 프레임워크" "라이브러리는 내가 호출, 프레임워크는 나를 호출." ...무슨 소리야. 세 번째 글. 그림 많다. 좋다. "CSR vs SSR" CSR은 Client Side Rendering. 브라우저에서 렌더링. SSR은 Server Side Rendering. 서버에서 렌더링. 그래서 뭐가 좋은데. "SSR은 SEO에 유리합니다." SEO가 뭔데. 또 검색. Search Engine Optimization. 검색 엔진 최적화. 아... 구글 검색 잘 되게 하는 거구나. 그럼 무조건 SSR 써야 하는 거 아냐? 아니래. 경우에 따라 다르래. 어떤 경우에. 예제 코드 보기 유튜브 다시 켰다. "Next.js 시작하기" 따라 한다. npx create-next-app@latest설치 중. 5분 걸린다. 완료. 실행한다. npm run devlocalhost:3000 열린다. 뭔가 나온다. 오... 신기하다. 근데 이게 React랑 뭐가 다른지 모르겠다. 코드 본다. app 폴더 있다. page.tsx 있다. 어? 우리 회사는 pages 폴더 쓰는데. 검색한다. "Next.js app directory vs pages directory" 아. 버전이 다르다. App Router랑 Pages Router. 둘 다 배워야 하나. 머리 아프다. 회의 시간 5시. 회의 시작. 팀장님: "Next.js로 하는 이유는 SEO 때문입니다." 아 그거 아까 봤다. 팀장님: "그리고 Image Optimization도 자동으로 되고요." 이미지 최적화? 그게 뭔데. 선배: "Font도 자동으로 최적화되죠." 다들 고개 끄덕인다. 나도 끄덕인다. 이해 못 했다. 팀장님: "신입님, 이번 프로젝트 메인 페이지 맡아보세요." "네... 네." 끝났다. 자리 돌아왔다. 멘붕이다. 다시 공부 시작 퇴근까지 2시간. 일단 Next.js 공식 문서 켠다. 영어다. 한국어 있나. 있다. 번역 이상하다. 그냥 영어 본다. 번역기 돌린다. "Getting Started" export default function Page() { return <h1>Hello, Next.js!</h1> }이건 React랑 똑같은데. 다음 페이지. "Routing" "Next.js uses file-system based routing." 파일 기반 라우팅. 뭔 소리야. 설명 읽는다. 아... app/about/page.tsx 만들면 /about 경로 생긴다. 오 신기하다. React에선 Router 설정 따로 했는데. <Route path="/about" component={About} />이렇게. Next.js는 그냥 파일 만들면 끝. 이거 하나는 편하네. 실습 시작 노션 닫는다. VSCode 연다. 새 프로젝트 만든다. create-next-app. 이번엔 제대로 본다. TypeScript? Yes. ESLint? Yes. Tailwind CSS? Yes. (쓸 줄 모르는데) App Router? Yes. 설치 완료. 폴더 구조 본다. app/ layout.tsx page.tsx public/ ...layout.tsx 연다. 뭔가 많다. RootLayout. children 받는다. 아... 이게 전체 레이아웃이구나. page.tsx 연다. 메인 페이지. 수정해본다. export default function Home() { return <h1>테스트</h1> }저장. 브라우저 새로고침. "테스트" 나온다. 된다! 기분 좋다. 뭔가 한 것 같다. 라우팅 테스트 폴더 만든다. app/test/page.tsx export default function Test() { return <h1>테스트 페이지</h1> }저장. /test 접속. 된다! 오... 이거 되게 직관적인데? React Router는 설정 파일 따로 만들어야 했는데. 이건 그냥 폴더만 만들면 되네. 좋다. 이해했다. 조금. dynamic route 해본다. app/post/[id]/page.tsx export default function Post({ params }: { params: { id: string } }) { return <h1>Post {params.id}</h1> }/post/1 접속. "Post 1" 나온다. /post/123 접속. "Post 123" 나온다. 오... React Router에선 useParams 썼는데. 여긴 props로 받네. 다르다. 근데 이해 간다. 데이터 fetching 막힘 다음. 데이터 가져오기. 블로그 글 봤다. "Next.js에선 async component 쓴다" 뭔 소리야. 코드 본다. async function getData() { const res = await fetch('https://api.example.com/data') return res.json() }export default async function Page() { const data = await getData() return <div>{data.title}</div> }어? component에 async? React에선 안 됐는데. useEffect에서 fetch 했는데. 혼란스럽다. 검색한다. "Next.js async component" "Server Component에서 가능합니다." Server Component? 또 새로운 개념. Client Component도 있대. "use client" 쓰면 Client Component. 안 쓰면 Server Component. ...뭐가 다른데. Server Component vs Client Component 블로그 3개 읽었다. 정리한다. Server Component:서버에서 실행 useState, useEffect 못 씀 데이터 fetching 편함Client Component:브라우저에서 실행 useState, useEffect 씀 상호작용 필요할 때아... 그러니까. 버튼 클릭, input 입력 → Client Component. 그냥 데이터 보여주기 → Server Component. 이해 간다. 조금. 근데 실전에서 어떻게 나누지. 모르겠다. 일단 넘어간다. 7시 퇴근 퇴근 시간. 가방 챙긴다. 오늘 배운 것:Next.js는 React 위 프레임워크 파일 기반 라우팅 Server Component, Client Component아직 모르는 것:언제 Next.js 쓰고 언제 React 쓰는지 SSR, SSG, ISR 차이 Image, Font 최적화 API Routes Middleware ...많다. 내일 또 배워야지. 집 가는 지하철. 앉았다. 인프런 켰다. "Next.js 완벽 가이드" 10분 듣다가 잤다. 집 도착 11시. 씻고 침대 누웠다. 노션 켠다. "오늘 배운 것" 적는다. 2024.01.15 - Next.js 기본 세팅 - 파일 기반 라우팅 - dynamic route - Server Component 개념내일 할 것:메인 페이지 디자인 보고 컴포넌트 나누기 데이터 fetching 방법 더 찾아보기 선배한테 SSR 물어보기노션 닫는다. 유튜브 켠다. 알고리즘 영상 본다. Next.js 관련 영상 뜬다. "Next.js 13 정복하기" 북마크 했다. 안 본다. 자야지. 근데 걱정된다. 내일 팀장님이 진행 상황 물어보면 뭐라 하지. "레이아웃 잡고 있습니다" 하면 되려나. 일단 자자. 내일 일은 내일. 며칠 뒤 수요일. 프로젝트 3일 차. 메인 페이지 반 완성했다. 아직 데이터 연결 안 했다. 하드코딩이다. 선배가 코드리뷰 남겼다. "여기 Client Component로 할 필요 없어요. Server Component로 바꾸세요." 아... 맞다. 버튼 없는데 "use client" 썼다. 습관적으로 썼다. React 하듯이. 수정한다. 또 리뷰 왔다. "Image 태그는 next/image 쓰세요." 아 그거 있었지. import Image from 'next/image'<Image src="/logo.png" alt="logo" width={200} height={100} />width, height 필수래. 모르고 안 썼다가 에러 났다. 수정 완료. 다시 올린다. 조금씩 이해 중 목요일. 오늘은 API 연결한다. fetch 써서 데이터 가져온다. async function getPosts() { const res = await fetch('https://api.example.com/posts') return res.json() }오... 된다. useEffect 없이 되네. 편하다. loading.tsx 만들었다. 로딩 화면 자동으로 나온다. error.tsx 만들었다. 에러 처리 자동. 신기하다. 이런 것도 되네. React에선 다 직접 만들었는데. 아직도 헷갈림 그래도 아직 모르는 거 많다. 캐싱이 어떻게 되는지. revalidate가 뭔지. generateStaticParams가 뭔지. 선배가 "공식 문서 보세요" 한다. 본다. 어렵다. 예제 코드 복사해서 쓴다. 이해는 나중에. 결론 결론 내린다. React vs Next.js 언제 쓰냐. 아직 모르겠다. 근데 조금은 알겠다.간단한 SPA → React SEO 필요 → Next.js 서버 로직 필요 → Next.js 빠른 프로토타입 → React이 정도? 맞는지 모르겠다. 선배한테 물어봐야지. 내일.어제도 오늘도 내일도, 모르는 건 당연하다. 일단 만든다. 에러 나면 고친다. 그게 배우는 거다.

노션에 '오늘 배운 것' 적다가 3일 만에 포기한 기록

노션에 '오늘 배운 것' 적다가 3일 만에 포기한 기록

노션에 '오늘 배운 것' 적다가 3일 만에 포기한 기록 시작은 거창했다 유튜브 봤다. "주니어 개발자 성장 루틴" 이런 거. 다들 노션에 TIL(Today I Learned) 쓰래. 그게 뭔지도 몰랐는데 검색했다. "오늘 배운 것 기록하기" 쉬워 보였다. 일요일 밤 11시. 노션 켰다. 템플릿 만들었다. ## 2024.01.15 월요일### 오늘 배운 것 - ### 어려웠던 점 - ### 내일 할 것 - 깔끔하다. 이쁘다. 이제 나도 성장하는 개발자다. 월요일부터 시작이다.1일차: 완벽했다 월요일. 출근했다. 오늘부터 다 기록한다. 점심시간에 메모장 켰다. 선배가 알려준 거 적었다. "useCallback은 함수를 메모이제이션" "의존성 배열 비어있으면 처음 한 번만" "근데 useEffect랑 뭐가 다르지" 모르는 건 나중에 찾아보기로. 일단 적었다. 퇴근 후. 집 와서 노션 켰다. ## 2024.01.15 월요일### 오늘 배운 것 - useCallback은 함수 메모이제이션하는 거 - 리렌더링 될 때 함수 재생성 방지 - 의존성 배열에 들어가는 값 바뀔 때만 함수 재생성됨### 어려웠던 점 - useCallback이랑 useMemo 차이를 아직 정확히 모르겠음 - 언제 써야 하는지도 애매함 - 선배 코드 보면 다 쓰던데 나는 언제 써야 할지### 내일 할 것 - useCallback 공식문서 읽기 - useMemo도 같이 공부 - 작은 예제 만들어보기뿌듯했다. 이거다. 이렇게 하면 된다. 저장했다. 잘 시간. 내일도 쓴다.2일차: 괜찮았다 화요일. 오늘도 기록한다. 아침에 에러 났다. "Cannot read property of undefined" 2시간 걸렸다. 옵셔널 체이닝 안 써서였다. 점심 먹으면서 메모했다. "옵셔널 체이닝 ?. 쓰기" 오후엔 PR 올렸다. 선배가 코멘트 남겼다. "변수명 좀 더 명확하게" 수정했다. data → userProfileData 이것도 기록. 퇴근. 집. 노션. ## 2024.01.16 화요일### 오늘 배운 것 - 옵셔널 체이닝 (?.) 사용법 - undefined나 null일 때 에러 안 나고 undefined 반환 - 변수명은 구체적으로 (data 말고 userProfileData)### 어려웠던 점 - 에러 원인 찾는데 2시간 걸림 - console.log 10번 찍었는데 비효율적인 거 같음 - 디버깅 잘하는 법 배워야 할 듯### 내일 할 것 - 크롬 개발자도구 디버깅 기능 공부 - breakpoint 사용법 익히기오늘도 썼다. 2일 연속이다. 습관 만들기 21일이래. 19일 남았다. 할 수 있다. 3일차: 멈췄다 수요일. 출근했다. 피곤했다. 전날 새벽 2시에 잤다. 넷플릭스 봤다. 회의 3개. 점심은 라면. 오후에 급한 버그 수정. 퇴근 9시. 집 왔다. 11시. 씻었다. 침대에 누웠다. 노션 켜야 하는데. 뭐 적지. 오늘 배운 거. 버그 고쳤는데. 뭐가 문제였더라. 기억 안 난다. 내일 쓰면 되지. 내일은 덜 피곤할 거다. 잤다.4일차: 안 켰다 목요일. 출근. 회의. 점심. 코딩. 퇴근. 노션 생각 안 났다. 아니다. 생각났다. 근데 안 켰다. 어차피 어제 안 썼는데. 오늘 쓰면 어제 거 비어있잖아. 어색하다. 내일 주말이니까. 주말에 몰아서 쓴다. 5일차: 죄책감 금요일. 저녁에 동기들 만났다. 맥주 마셨다. 한 친구가 말했다. "나 요즘 TIL 쓰는데 좋더라" 나도 쓴다고 했다. 거짓말이다. 3일 전부터 안 썼다. 집 와서 노션 켰다. 비어있는 날짜들. 1월 17일: 비어있음 1월 18일: 비어있음 1월 19일: 비어있음 채워야 하나. 기억 안 난다. 그냥 닫았다. 주말: 포기 토요일. 침대에 누워서 생각했다. 노션 채워야 하는데. 일주일 치 몰아서 쓸까. 근데 뭘 배웠더라. 기억이 안 난다. 월요일엔 뭐 했지. 화요일은. 수요일. 다 똑같다. 코드 짜고. 에러 고치고. PR 올리고. 매일 배우긴 하는데. 정리는 못 하겠다. 일요일. 유튜브 봤다. "생산성 높이는 10가지 방법" 댓글 봤다. "저도 TIL 3일 만에 포기했어요 ㅋㅋ" "저는 1주일 버텼습니다" "노션 템플릿만 10개 만들고 안 씁니다" 다들 그렇구나. 2주 후: 새 도전 월요일. 선배가 물었다. "TIL 쓰냐" 아니요. "나도 옛날에 썼는데" "3일 만에 관뒀다" 선배도 그랬구나. "억지로 쓰지 마" "진짜 중요한 것만 메모해" "나는 그냥 슬랙 나한테 DM 보낸다" 그 방법도 있네. 노션 다시 켰다. 템플릿 지웠다. 새로 만들었다. 간단하게. ## 기록 - 날짜 상관없이 배운 것만오늘은 이거 하나. "옵셔널 체이닝 ?. 쓰면 편하다" 끝. 내일은 또 모르겠다. 쓸 수도 있고. 안 쓸 수도 있고. 그냥 그렇다. 1개월 후: 지금 지금 노션 봤다. 1월 15일. 1월 16일. 그 뒤로 3개 정도 더. 총 5개 적혔다. 한 달에. 실패한 건가. 모르겠다. 근데 그 5개는. 진짜 중요한 것들이다. "async/await은 Promise 문법 설탕" "map은 새 배열 반환, forEach는 undefined" "git rebase는 조심히" 이건 지금도 기억한다. 실제로 쓴다. 매일 쓰는 게 중요한 게 아니었다. 기억에 남는 걸 쓰는 게 중요했다. 결론 TIL 3일 만에 포기했다. 부끄럽지 않다. 완벽한 기록보다. 남는 게 있으면 된다. 5개 적었다. 5개 남았다. 그걸로 된 거다. 노션은 아직 열려있다. 언젠가 또 쓸 수도 있다. 아닐 수도 있고.완벽한 기록은 없다. 남는 거 하나면 충분하다.

쿠버네티스? 도커? 선배들 대화가 외계어처럼 느껴질 때

쿠버네티스? 도커? 선배들 대화가 외계어처럼 느껴질 때

쿠버네티스? 도커? 선배들 대화가 외계어처럼 느껴질 때 회의실에서 오늘 전체 회의가 있었다. 팀장님이 말했다. "이번 프로젝트는 쿠버네티스로 배포할 겁니다." 선배 A가 고개를 끄덕였다. "그럼 도커 이미지부터 만들어야겠네요." 선배 B가 덧붙였다. "CI/CD 파이프라인도 새로 구축해야 할 것 같은데요." 팀장님이 웃었다. "그래, 젠킨스로 할까 깃랩 러너로 할까." 나는 고개를 끄덕였다. 아무것도 모른다.회의가 끝나고 자리로 돌아왔다. 메모장을 꺼냈다. 오늘 들은 단어를 적었다.쿠버네티스 도커 CI/CD 파이프라인 젠킨스 깃랩 러너6개다. 하루에 6개씩 모르는 단어가 생긴다. 일주일이면 30개. 한 달이면 120개. 도저히 못 따라간다. 점심시간 편의점 편의점에서 삼각김밥을 샀다. 테이블에 앉아서 먹으면서 폰을 꺼냈다. '쿠버네티스'를 검색했다. 위키백과가 나왔다. "컨테이너화된 애플리케이션의 자동 배포, 스케일링 등을 제공하는..." 뭔 소리야. 유튜브를 켰다. '쿠버네티스 10분 만에 이해하기' 재생했다. 3분 듣다가 껐다. 더 모르겠다.'도커'를 검색했다. 블로그가 나왔다. "도커는 컨테이너 기반의 오픈소스 가상화 플랫폼입니다." 컨테이너? 가상화? 또 모르는 단어가 2개 생겼다. 메모장에 추가했다.컨테이너 가상화이러다 끝이 없다. 삼각김밥을 다 먹었다. 20분 남았다. 인프런을 켰다. 어제 듣던 리액트 강의를 재생했다. 3분 듣다가 졸았다. 오후 3시 슬랙에 메시지가 왔다. 선배 A였다. "신입님, PR 확인 부탁드려요." 깃허브를 열었다. 코드가 빼곡하다. 파일이 15개. Dockerfile이 있다. docker-compose.yml도 있다. 뭔지 모르겠다. 일단 'Approve' 버튼을 눌렀다. 선배가 바로 답장했다. "감사합니다 ㅎㅎ" 나는 'ㅎㅎ'로 답했다. 죄책감이 든다.선배 B가 옆자리에서 말했다. "도커 컴포즈 진짜 편하지 않아요?" 선배 A가 답했다. "그니까요, 로컬 환경 구축이 진짜 빨라졌어요." 나는 모니터만 봤다. 대화에 끼고 싶다. 근데 뭐라고 말해야 할지 모른다. 그냥 고개만 끄덕였다. 퇴근 후 집에 왔다. 노트북을 켰다. 오늘 적어둔 단어들을 다시 봤다. 쿠버네티스부터 검색했다. 2시간 동안 글을 읽었다. 유튜브도 3개 봤다. 대충 이해했다. 컨테이너를 관리하는 도구. 여러 서버에 자동으로 배포. 그런데 왜 필요한지 모르겠다. 지금 우리 회사는 어떻게 배포하는지도 모른다. 도커를 검색했다. 1시간 반 동안 글을 읽었다. 설치도 해봤다. Docker Desktop을 깔았다. 실행했다. 튜토리얼을 따라했다. 에러가 났다. "Cannot connect to the Docker daemon." 구글링했다. 30분 동안 삽질했다. 해결했다. 다시 튜토리얼을 따라했다. "Hello from Docker!" 출력됐다. 기분이 좋았다. 10분 정도. 그리고 생각했다. 이게 뭐에 쓰는 건지 모르겠다. 일주일 후 선배들이 또 회의실에 모였다. 팀장님이 말했다. "쿠버네티스 배포 잘 됐죠?" 선배 A가 답했다. "네, 헬름 차트로 정리했습니다." 헬름? 메모장을 꺼냈다. '헬름'을 적었다. 선배 B가 말했다. "프로메테우스 모니터링도 붙였어요." 프로메테우스? '프로메테우스'도 적었다. 팀장님이 고개를 끄덕였다. "좋아요. 그라파나 대시보드는?" 그라파나? '그라파나'도 적었다. 3개가 또 생겼다. 지난주에 적었던 '쿠버네티스'를 아직도 제대로 모른다. 그런데 오늘 또 3개가 생겼다. 이거 평생 못 따라잡는다. 퇴근길 지하철 지하철에서 메모장을 봤다. 2주 동안 적은 단어가 47개다. 아는 건 5개 정도. 대충 아는 거까지 합쳐도 10개. 37개는 모른다. 검색해봤던 것도 있다. 쿠버네티스, 도커, CI/CD. 근데 다시 보니까 까먹었다. 결국 그냥 단어만 알고 있다. 무슨 뜻인지, 왜 쓰는지, 어떻게 쓰는지 모른다. 집에 가서 또 공부해야 하나. 근데 내일 또 새로운 단어가 나온다. 끝이 없다. 동기 단톡방 밤 11시에 동기 단톡방에 메시지를 보냈다. "너네 쿠버네티스 알아?" 3분 후에 답장이 왔다. "이름만 들어봤어." "그게 뭔데?" "왜 갑자기?" 나만 모르는 게 아니었다. 조금 안심됐다. 그런데 또 생각했다. 우리 다 같이 모르면 어쩌지. 선배들은 다 아는데. 우리는 언제 알게 되는 거지. 3개월 차 입사한 지 3개월이 지났다. 메모장에 적힌 단어가 200개를 넘었다. 이제 포기했다. 다 알 수 없다. 불가능하다. 그냥 필요할 때 검색한다. 그때그때. 선배들 대화는 여전히 외계어다. "istio 설정 좀 봐주세요." "argocd로 배포 자동화했어요." "redis 클러스터 구축했습니다." 고개만 끄덕인다. 그런데 신기한 게 있다. 가끔 아는 단어가 나온다. "도커 컨테이너 재시작해야 할 것 같아요." 아, 도커. 그거 알아. 작은 성취감이 든다. 진짜 작은 거. 그리고 또 모르는 단어가 나온다. "sidecar 패턴으로 구현할까요?" sidecar? 메모장을 꺼낸다. 끝이 없다. 정말 끝이 없다. 선배와의 대화 어제 선배 A가 물었다. "신입님, 요즘 뭐 공부해요?" 솔직하게 답했다. "선배님들 대화 따라가려고 메모하는데요, 너무 많아서..." 선배가 웃었다. "저도 그랬어요." "네?" "저도 신입 때 맨날 메모했어요. 쿠버네티스, 도커, 다 모르는 거." "그럼 언제 아셨어요?" "글쎄요. 딱히 언제부터인지 모르겠어요. 그냥 계속 듣다 보니까." "계속 듣다 보니까요?" "네. 처음엔 단어만 알고, 그다음엔 뭔지 알고, 그다음엔 왜 쓰는지 알고. 그렇게." "얼마나 걸렸어요?" "1년? 2년? 근데 지금도 모르는 거 많아요." 선배도 모른다. 조금 위로가 됐다. 오늘도 오늘도 회의가 있었다. "GraphQL subscriptions로 실시간 통신 구현할게요." GraphQL은 안다. 대충 안다. API 쿼리 언어. subscriptions는 모른다. 메모했다. "그럼 Apollo Client 설정도 바꿔야겠네요." Apollo Client도 들어봤다. 뭔지는 모른다. 메모했다. 회의가 끝났다. 오늘도 2개가 추가됐다. 자리로 돌아와서 검색했다. 30분 동안. 대충 알았다. 내일이면 까먹을 것이다. 그리고 또 검색할 것이다. 이게 내 일상이다. 8개월 차 지금 지금은 입사 8개월 차다. 메모장은 버렸다. 200개 넘어갈 때. 이제 그냥 필요할 때 검색한다. 선배들 대화는 여전히 외계어다. 50%는 모른다. 근데 괜찮다. 30%는 안다. 3개월 전엔 10%도 몰랐다. 조금씩 늘고 있다. 아주 조금씩. 쿠버네티스? 아직도 잘 모른다. 써본 적도 없다. 도커? 로컬에서 MySQL 띄울 때 쓴다. 그것만 안다. CI/CD? 우리 회사 배포 프로세스는 안다. 이론은 모른다. 근데 됐다. 지금은 이 정도면 된다. 나중에 또 배운다. 필요하면. 지금은 리액트나 제대로 하자. useEffect 의존성 배열부터 확실하게. 신입 후배가 오면 언젠가 신입 후배가 올 것이다. 그럼 나도 선배가 된다. 회의 때 이렇게 말할 것이다. "이번엔 도커로 배포할게요." 후배가 고개를 끄덕일 것이다. 아무것도 모르면서. 나도 그랬다. 지금도 그렇다. 그게 정상이다.메모장 200페이지 넘어갈 때 버렸다. 이제 필요할 때만 검색한다. 언젠간 나도 설명하는 선배가 될 거다.

PR 올릴 때마다 손이 떨리는 이유

PR 올릴 때마다 손이 떨리는 이유

오늘도 PR 올렸다 키보드 앞에 앉았다. 손가락이 떨린다. Create Pull Request 버튼이 초록색으로 빛난다. 클릭하면 끝이다. 그런데 못 누른다. 3일 동안 짠 코드다. 로그인 페이지 리팩토링. 선배가 "이거 좀 정리해봐" 했던 건데, 막상 열어보니 스파게티 코드였다. 일단 작동은 한다. 로컬에서 10번 테스트했다. 근데 확신이 안 선다. 뭔가 놓친 게 있을 것 같다.체크리스트를 본다 노션에 적어둔 체크리스트를 연다. 로컬 테스트 완료 콘솔 에러 없음 코드 주석 달기 커밋 메시지 확인 PR 템플릿 작성다 했다. 근데 또 본다. 3번째다. 테스트는 했다. 근데 엣지 케이스는? 내가 모르는 케이스가 있을 수도 있다. 콘솔 에러는 없었다. 근데 warning은 2개 있었다. 괜찮은 건가. 나중에 물어봐야지. 주석은 달았다. 근데 너무 많나. 선배가 "주석 달지 말고 코드로 설명해" 했던 게 기억난다. 3개 지웠다. 커밋 메시지는 "feat: refactor login page UI"다. 괜찮은 것 같다. 근데 refactor인가 fix인가. 또 헷갈린다. PR 템플릿은 채웠다. "변경 사항", "테스트 방법", "스크린샷" 다 넣었다. 근데 너무 길다. 줄였다. 또 너무 짧다. 다시 늘렸다. 손가락이 계속 떨린다.마우스를 올린다 버튼 위에 마우스를 올렸다. 클릭만 하면 된다. 근데 못 한다. 머릿속으로 시뮬레이션한다.PR 올린다 슬랙에 알림 간다 선배가 본다 코드리뷰가 달린다여기서 멈춘다. 코드리뷰가 뭐가 올라올까. "이거 왜 이렇게 짰어요?" 이런 거. "useEffect 여기서 쓸 필요 없는데?" 이런 거. "타입 좀 제대로 써요" 이런 거. 다 맞는 말이다. 근데 매번 들으면 심장이 쿵 내려앉는다. 내가 모른다는 걸 또 들키는 기분이다. 물 한 모금 마셨다. 손은 여전히 떨린다.클릭했다 에라 모르겠다. 눌렀다. 초록색 버튼이 회색으로 바뀐다. "Pull Request #247 created" 심장이 빨라진다. 이제 돌아갈 수 없다. 슬랙을 연다. #dev-frontend 채널에 알림이 떴다. "이신입 님이 PR을 올렸습니다: feat: refactor login page UI" 선배 3명이 온라인이다. 누가 먼저 볼까. 5분이 지났다. 아무도 안 본다. 10분이 지났다. 김선배가 PR에 들어왔다. 빨간 점이 보인다. 손에 땀이 난다. 15분 지났다. 아직 코멘트 없다. 코드를 보는 중인가. 20분 지났다. 드디어 알림이 왔다. "Comment on your PR: 수고했어요. 몇 가지 코멘트 남겼습니다." 들어가본다. 코멘트가 7개다. 첫 번째: "여기 useState 초기값이 null인데 타입 명시 안 하셨네요" 맞다. 놓쳤다. 두 번째: "이 부분 조건문 중복인 것 같은데 함수로 빼면 어떨까요" 아. 그렇게 하는 거구나. 세 번째: "console.log 지워주세요" 아. 이런. 네 번째부터는 안 봤다. 일단 고쳐야 한다. 고친다 코멘트 하나씩 확인한다. useState에 타입 추가했다. useState<string | null>(null) 이렇게. 조건문은 validateInput 함수로 뺐다. 3줄이 1줄이 됐다. 깔끔하다. console.log 3개 지웠다. 디버깅할 때 찍어둔 건데 까먹었다. 나머지 4개도 다 고쳤다. 커밋 메시지는 "fix: apply code review feedback" 푸시했다. 다시 떨린다. 또 볼 건데. 또 뭐가 나올까. 30분 지났다. 김선배가 approve 눌렀다. "LGTM. 고생했어요" Looks Good To Me. 처음 봤을 땐 뭔 뜻인지 몰랐다. merge 버튼이 활성화됐다. 눌렀다. "Pull Request successfully merged and closed" 끝났다. 가슴이 내려앉는다. 후련하다. 근데 또 복잡하다. 왜 떨렸을까 매번 이렇다. PR 올릴 때마다 손이 떨린다. 머지되고 나면 괜찮다. 근데 올리기 전이 제일 무섭다. 뭐가 무서운 걸까. 틀릴까 봐. 모르는 게 들킬까 봐. 또 혼날까 봐. 다 맞다. 근데 제일 큰 건 이거다. 내가 잘하는지 모르겠다. 3일 동안 짠 코드인데, 이게 맞는지 확신이 없다. 작동은 하는데 잘 짠 건지 모르겠다. 선배들은 보면 안다. 한눈에 본다. "여기 이렇게 하면 안 돼요" 딱 집어낸다. 나는 모른다. 10번 봐도 모른다. 그게 무섭다. 코드를 올린다는 건 내 실력을 보여주는 거다. 숨길 수가 없다. "이 정도밖에 못 해요" 말하는 거랑 같다. 그게 떨리는 이유다. 그래도 올린다 근데 올려야 한다. 안 올리면 일이 안 된다. 코드는 혼자 짜는 게 아니다. 리뷰받아야 배운다. 혼자 공부하는 것보다 10배 빠르다. 김선배 코멘트 보면서 배웠다. useState 타입 명시하는 거. 조건문 함수로 빼는 거. console.log 지우는 거. 다 당연한 거다. 근데 나는 몰랐다. 이렇게 하나씩 배운다. 3개월 전 내 PR이랑 지금 PR 비교하면 다르다. 코멘트가 15개에서 7개로 줄었다. 그래도 떨린다. 여전히 떨린다. 근데 괜찮다. 이게 배우는 과정이다. 손 떨리는 게 부끄러운 게 아니다. 안 올리는 게 부끄럽다. 내일도 PR 올릴 거다. 또 떨릴 거다. 그래도 올린다.오늘 PR 7개 코멘트. 다음엔 5개로 줄여보자.