내 코드에 악플 달아줘

"이 코드 누가 짰어?"
git blame을 쳐보면 범인은 6개월 전의 나인 경우가 많습니다. 우리는 과거의 나, 혹은 전임자가 남기고 간 레거시 코드(Legacy Code)와 매일 사투를 벌입니다.
돌아가긴 하는데 건드리기 무서운 코드, 복잡도가 너무 높아 읽기만 해도 머리가 아픈 코드. 이것을 수정하는 리팩토링(Refactoring)은 엄청난 정신적 에너지가 드는 일입니다. 그래서 우리는 종종 "일단 돌아가니까 두자"라며 기술 부채(Tech Debt)를 쌓습니다.
하지만 AI가 있다면 이야기가 달라집니다. AI는 지치지 않고, 감정이 상하지도 않으며, 무엇보다 패턴 인식의 천재입니다. 3부에서는 AI에게 내 코드를 잔혹하게 비판(Criticize)받고, 이를 통해 우아한 클린 코드로 다시 태어나는 'AI 주도 리팩토링' 기술을 소개합니다.
1. "고쳐줘"가 아니라 "비판해줘(Criticize)"
많은 개발자가 AI에게 "이 코드 리팩토링 해줘"라고 부탁합니다. 그러면 AI는 변수명 몇 개를 바꾸거나 주석을 달아주는 소극적인 태도를 보입니다. AI는 기본적으로 사용자의 코드를 존중하도록 튜닝되어 있기 때문입니다.
진짜 문제를 찾고 싶다면, AI의 공격성을 깨워야 합니다.
🔥 '악플러' 페르소나 프롬프트
Role: 너는 Google의 수석 엔지니어이자 코드 리뷰어다. 가독성 낮고 비효율적인 코드를 보면 참지 못하는 성격이다.
이렇게 요청하면 AI는 "이 3중 중첩 반복문은 끔찍합니다", "변수명 temp는 아무런 의미를 담고 있지 않습니다"와 같이 구체적인 피드백을 쏟아냅니다. 이 피드백을 읽는 것만으로도 개발자는 성장합니다.
2. 성능 최적화: O(N^2)을 O(N)으로
우리가 무심코 작성한 코드 중에는 성능 지뢰가 숨어 있습니다. 특히 데이터가 적을 땐 모르다가 트래픽이 몰리면 터지는 이중 반복문(Nested Loop)이 대표적입니다.
❌ Before: 무심코 짠 코드
# user_ids 목록에 있는 유저들의 상세 정보를 db_users에서 찾아 리스트로 만듦
result = []
for uid in user_ids: # N번 반복
for user in db_users: # M번 반복 (최악의 경우 N*M)
if uid == user['id']:
result.append(user)이 코드를 AI에게 던지며 "시간 복잡도를 분석하고, O(N)으로 최적화해 줘"라고 요청해 보세요.
✅ After: AI가 최적화한 코드
# AI의 설명: db_users를 딕셔너리(Hash Map)로 변환하여 조회 속도를 O(1)로 줄였습니다.
user_map = {user['id']: user for user in db_users} # O(M)
result = [user_map[uid] for uid in user_ids if uid in user_map] # O(N)AI는 단순히 코드를 바꾸는 게 아니라, "왜 이 코드가 더 빠른지(Hash Map 조회는 O(1))"를 설명해 줍니다. 이는 알고리즘 공부와 실무 최적화를 동시에 잡는 최고의 방법입니다.
3. 인지 부하 줄이기: '화살표형 코드' 펴기
if 문이 3단 이상 중첩된 코드를 보면 개발자의 뇌는 과부하가 걸립니다. 이를 '화살표형 코드(Arrow Code)'라고 부릅니다.
AI는 이런 구조를 보호 구문(Guard Clauses)이나 함수 추출(Extract Method)을 통해 평평하게 펴는 데 아주 능숙합니다.
📝 리팩토링 프롬프트
"이 함수의 Nesting Depth(중첩 깊이)가 너무 깊어서 읽기 힘들어. Early Return(조기 리턴) 패턴을 사용해서 중첩을 제거하고, 로직을 평탄화(Flatten) 해줘."
AI는 복잡한 if-else 블록을 뜯어내어, 예외 상황을 먼저 return 시키고 핵심 로직만 남기는 깔끔한 구조로 바꿔줄 것입니다.
4. 이름 짓기 지옥에서 탈출하기
컴퓨터 과학에서 가장 어려운 일 두 가지는 '캐시 무효화'와 '이름 짓기(Naming)'라는 농담이 있습니다. 변수명, 함수명을 짓느라 모니터를 멍하니 바라보는 시간이 생각보다 깁니다.
이럴 때 AI를 '네이밍 컨설턴트'로 활용하세요.
"이 함수는 사용자들의 결제 내역 중 환불된 건만 필터링해서 총액을 계산하는 로직이야. 현재 함수명이 calc()인데, 이 함수의 의도를 명확히 드러내는 이름 3가지를 추천해 줘. (Verb-Noun 형식을 따를 것)"
AI의 추천:
여러분은 이 중에서 가장 마음에 드는 것을 고르기만 하면 됩니다.
마치며: 리팩토링은 '이벤트'가 아니라 '일상'이다
과거에 리팩토링은 큰맘 먹고 날 잡아서 하는 '대공사'였습니다. 하지만 AI와 함께라면, 코드를 작성하는 매 순간이 리팩토링입니다.
기능을 구현하고 나서 커밋하기 전에 딱 10초만 투자하세요. AI에게 코드를 붙여넣고 한 마디만 하면 됩니다.
"이 코드, 더 깔끔하게 만들 수 있어?"
이 작은 습관이 당신을 '그냥 개발자'에서 '장인 정신을 가진 엔지니어'로 만들어 줄 것입니다.
[Next Step]
코드가 깔끔해졌다고 버그가 없을까요? 천만의 말씀입니다. 다음 4부에서는 알 수 없는 에러 로그를 AI에게 던져 원인을 찾고, AI가 내 코드를 공격하는 테스트 코드(Test Case)를 짜게 만드는 역발상 전략을 다룹니다.