Showing Posts From

복붙의

코드 복붙의 유혹: 스택오버플로우와의 싸움

코드 복붙의 유혹: 스택오버플로우와의 싸움

코드 복붙의 유혹: 스택오버플로우와의 싸움 오전 10시, 에러와의 조우 출근했다. 어제 짠 코드가 안 돌아간다. 빌드 에러 메시지가 터미널을 가득 채웠다. 빨간 글씨 50줄. 읽어봤자 모른다. "Cannot read property of undefined" 어쩌고. 일단 구글에 에러 메시지 복사. 엔터. 첫 번째 링크. 스택오버플로우. 당연하지.질문은 2019년. 답변은 초록 체크. 좋아요 847개. 믿을 만하다. 분명. 코드 블록을 드래그했다. Ctrl+C. 내 에디터로 왔다. Ctrl+V. 3초. 파일 저장. npm run dev. "이번엔 되겠지." 10시 5분, 새로운 에러 안 된다. 아까와 다른 에러. "Module not found." 당황했다. 뭐가 문젠데. 다시 스택오버플로우. 새 탭. 검색. 또 답변 찾았다. 이번엔 2020년 거. 좋아요 623개. npm install some-package --save터미널에 붙여넣었다. 엔터. 패키지 설치 중. 로딩 바가 천천히 움직인다. "이제 되겠지."10시 15분, 무한 루프 또 에러. 이번엔 "Dependency conflict." 뭔 소리야. 검색. 스택오버플로우. 복붙. 에러. 검색. 복붙. 에러. 30분이 지났다. 원래 코드가 뭐였는지 기억이 안 난다. 복붙을 5번 했나 6번 했나. 에디터에 주석 처리된 코드가 10개 쌓였다. 다 스택오버플로우에서 가져온 거다. "아... 이러면 안 되는데." 알고 있다. 이해하고 써야 한다는 거. 하지만 일단 돌아가게 해야 한다. 급하다. 왜 이러는 걸까 내가 나쁜 개발자인가. 아니다. 다들 그런다. 선배도 그랬을 거다. 분명. 스택오버플로우는 마약이다. 달콤한 마약. 문제가 생기면 일단 거기로 간다. 구글 검색하면 첫 번째 링크가 거기다. 어쩔 수 없다. 답변은 친절하다. 코드 블록도 예쁘게 정리되어 있다. 복사하기 버튼도 있다. "Use this code, it works." 그 말이 날 유혹한다.복붙의 3단계 1단계: 희망. "이 코드면 되겠네." 복붙. 실행. 2단계: 혼란. "어? 왜 안 돼?" 다시 검색. 또 복붙. 3단계: 절망. "뭐가 뭔지 모르겠다." 코드가 엉망. 처음부터 다시. 매번 이렇다. 그래도 또 한다. 내일도 할 거다. 오늘의 기록 오후 2시. 점심 먹고 왔다. 선배가 내 화면을 봤다. "이거 왜 이렇게 짰어?" "스택오버플로우에서..." "그거 코드 버전 안 맞아. 우리 프로젝트는 React 18인데 저건 16 코드야." 몰랐다. 복붙할 때 버전은 안 봤다. 좋아요 개수만 봤다. "다음부턴 날짜 확인하고, 답변 읽어봐. 코드만 보지 말고." "네..." 알고 있었다. 진짜로. 하지만 안 했다. 왜 읽지 않는가 시간이 없어서? 아니다. 귀찮아서? 솔직히 맞다. 하지만 진짜 이유는 다르다. 읽어도 모른다. "This happens because of closure scope blah blah..." 무슨 말인지 모른다. 클로저? 스코프? 들어는 봤다. 하지만 설명을 읽으면 머리가 아프다. 코드를 보는 게 편하다. 코드는 일단 작동한다. 작동하면 됐다. 이해는... 나중에. 나중이 안 온다는 걸 알면서도. 선배들의 흔적 우리 회사 코드베이스를 보다가 발견했다. 주석. // From Stack Overflow // https://stackoverflow.com/questions/...선배도 복붙했다. 링크까지 남겼다. 웃겼다. 그리고 안심됐다. 나만 그런 게 아니구나. 복붙 고수의 경지 팀장님이 말했다. "스택오버플로우 쓰는 건 괜찮아. 프로들도 다 써. 근데 아는 게 중요해." "뭘 알아야 하는데요?" "왜 이 코드가 작동하는지. 내 상황에 맞는지. 부작용은 없는지." "..." "그냥 복붙은 주니어. 이해하고 수정하면 시니어." 명언이다. 메모장에 적었다. 실천은 못 하겠지만. 오후 4시, 또 복붙 또 에러가 났다. 이번엔 useEffect 관련. 검색했다. 스택오버플로우 열었다. 답변을 읽기 시작했다. 5줄 읽었다. "아... 모르겠다." 스크롤 내렸다. 코드 블록까지. 드래그. 복사. 붙여넣기. 저장. 실행. 됐다. "역시." 뿌듯했다. 3초간. 죄책감의 무게 퇴근 전. 오늘 짠 코드를 봤다. 내가 이해하는 줄은 30%. 나머지는 스택오버플로우 거다. 커밋 메시지 쓰려는데 손가락이 안 움직인다. "Fix: update component logic" 거짓말이다. 내가 고친 게 아니다. 복붙했다. 하지만 푸시했다. 어쩔 수 없다. 내일 PR 올리면 선배가 볼 거다. 코드리뷰 들어올 거다. "이 부분 왜 이렇게 짰어요?" 대답 못 한다. 복붙이라고 말 못 한다. "제가... 찾아보고 적용했습니다." 거짓말 반 진실 반. 동기의 고백 저녁. 동기 단톡방. "야 너네 스택오버플로우 얼마나 써?" "매일. 하루 10번?" "나 20번." "나 코드 80%가 거기서 온 거 같은데 ㅋㅋ" 다들 그렇다. 안심됐다. "근데 이거 면접 때 들키면 어떡해?" "모르면 되지 뭐." "맞네 ㅋㅋ" 웃었다. 씁쓸했다. 복붙의 순간들 이번 주에 복붙한 것들. 월요일: axios interceptor 코드. 화요일: custom hook 3개. 수요일: 날짜 포맷 함수. 목요일: 에러 핸들링 로직. 금요일: 오늘. useEffect cleanup. 매일이다. 하루도 빠짐없다. "이러다 성장하나?" 의문이 든다. 하지만 내일도 할 거다. 읽어보려는 시도 오늘 저녁. 다짐했다. "오늘은 답변을 끝까지 읽어보자." 스택오버플로우 열었다. 질문 하나 골랐다. 답변을 읽기 시작했다. "The reason this works is because JavaScript's event loop..." 이벤트 루프? 뭐지. 새 탭 열었다. 이벤트 루프 검색. MDN 문서 나왔다. 영어로 빼곡하다. "Callstack, task queue, microtask..." 머리 아프다. 탭 닫았다. 다시 스택오버플로우. 코드 블록으로 스크롤. 복붙. "내일 읽어야지." 선배의 조언 점심시간. 선배가 말했다. "신입 때 나도 그랬어. 복붙만 했지." "그럼 어떻게 벗어났어요?" "안 벗어났어. 지금도 해." "예?" "대신 이제는 알고 해. 이게 왜 작동하는지." "어떻게요?" "복붙하고 나서 한 줄씩 읽어봐. 모르는 거 나오면 검색. 천천히." "시간 오래 걸리지 않아요?" "응. 근데 나중엔 빨라져. 같은 패턴 보이거든." 고개 끄덕였다. 실천할 수 있을까. 모르겠다. 복붙의 미래 5년 뒤 나는 어떨까. 여전히 복붙하고 있을까. 아니면 코드를 이해하고 있을까. 상상이 안 된다. 지금은 그냥 살아남는 게 목표다. 복붙이라도 해서 일단 작동하게 만드는 거. 그게 지금 내 전부다. 퇴근길 생각 9시 퇴근. 지하철에서 생각했다. "오늘 뭘 배웠지?" 솔직히 모르겠다. 코드는 짰다. 10개 파일. 하지만 내 코드가 아니다. 짜깁기다. "이게 맞나?" 질문이 맴돈다. 하지만 내일도 출근한다. 또 복붙한다. 내일의 다짐 내일은 다르게 해보자. 복붙하되 읽어보자. 한 줄이라도. 모르는 용어 나오면 메모하자. 퇴근 후 검색하자. 천천히 성장하자. ... 이렇게 다짐한 게 이번 주만 세 번째다. 하지만 내일은 다를 거다. 분명.오늘도 복붙. 내일도 복붙. 언젠간 이해할 거다. 아마.