{"componentChunkName":"component---src-templates-blog-post-js","path":"/etc/코드-리뷰-체크리스트/","result":{"data":{"site":{"siteMetadata":{"title":"Bottlehs Tech Blog","description":"웹·앱·AI 개발자 전병훈(bottlehs)의 기술 블로그. AI·LLM, JavaScript·Vue, Spring Boot, 알고리즘, 블록체인 실무 가이드를 다룹니다","siteUrl":"https://www.bottlehs.dev","author":{"name":"Jeon Byung Hun","summary":"개발을 즐기는 bottlehs - Engineer, MS, AI, FE, BE, OS, IOT, Blockchain, 설계, 테스트"},"social":{"github":"bottlehs","codepen":"bottlehs"}}},"markdownRemark":{"id":"d3571e91-279b-5c8e-ac3b-98ebce09aaa7","excerpt":"코드 리뷰 체크리스트 코드 리뷰는 소프트웨어 품질을 보장하는 핵심 프로세스다. 체계적인 체크리스트를 사용하면 중요한 이슈를 놓치지 않고 일관된 리뷰를 수행할 수 있다. 이 글은 실무에서 바로 사용할 수 있는 코드 리뷰 체크리스트를 제공한다.…","html":"<p><img src=\"/assets/etc.png\" alt=\"코드 리뷰 체크리스트\" title=\"코드 리뷰 체크리스트\"></p>\n<p>코드 리뷰는 소프트웨어 품질을 보장하는 핵심 프로세스다. 체계적인 체크리스트를 사용하면 중요한 이슈를 놓치지 않고 일관된 리뷰를 수행할 수 있다. 이 글은 실무에서 바로 사용할 수 있는 코드 리뷰 체크리스트를 제공한다.</p>\n<h2 id=\"1-기능성-체크리스트\" style=\"position:relative;\"><a href=\"#1-%EA%B8%B0%EB%8A%A5%EC%84%B1-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8\" aria-label=\"1 기능성 체크리스트 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1. 기능성 체크리스트</h2>\n<h3 id=\"요구사항-충족\" style=\"position:relative;\"><a href=\"#%EC%9A%94%EA%B5%AC%EC%82%AC%ED%95%AD-%EC%B6%A9%EC%A1%B1\" aria-label=\"요구사항 충족 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>요구사항 충족</h3>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 요구사항을 정확히 구현했는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 엣지 케이스를 처리했는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 에러 케이스를 적절히 처리했는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 입력 검증이 충분한가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 출력 형식이 요구사항과 일치하는가?</li>\n</ul>\n<h3 id=\"로직-정확성\" style=\"position:relative;\"><a href=\"#%EB%A1%9C%EC%A7%81-%EC%A0%95%ED%99%95%EC%84%B1\" aria-label=\"로직 정확성 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>로직 정확성</h3>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 비즈니스 로직이 올바른가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 알고리즘이 효율적인가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 조건문이 모든 경우를 커버하는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 반복문이 무한 루프에 빠지지 않는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 예외 처리가 적절한가?</li>\n</ul>\n<h3 id=\"테스트\" style=\"position:relative;\"><a href=\"#%ED%85%8C%EC%8A%A4%ED%8A%B8\" aria-label=\"테스트 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>테스트</h3>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 단위 테스트가 작성되었는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 테스트 커버리지가 충분한가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 엣지 케이스 테스트가 있는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 테스트가 실제로 통과하는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 통합 테스트가 필요한가?</li>\n</ul>\n<h2 id=\"2-코드-품질-체크리스트\" style=\"position:relative;\"><a href=\"#2-%EC%BD%94%EB%93%9C-%ED%92%88%EC%A7%88-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8\" aria-label=\"2 코드 품질 체크리스트 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2. 코드 품질 체크리스트</h2>\n<h3 id=\"가독성\" style=\"position:relative;\"><a href=\"#%EA%B0%80%EB%8F%85%EC%84%B1\" aria-label=\"가독성 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>가독성</h3>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 변수명이 명확하고 의미 있는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 함수명이 기능을 잘 설명하는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 주석이 필요한가? (너무 많거나 적지 않은가?)</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 코드 구조가 명확한가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 매직 넘버가 상수로 정의되었는가?</li>\n</ul>\n<p><strong>나쁜 예시</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">function</span> <span class=\"token function\">calc</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">a<span class=\"token punctuation\">,</span> b<span class=\"token punctuation\">,</span> c</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> a <span class=\"token operator\">*</span> <span class=\"token number\">1.1</span> <span class=\"token operator\">+</span> b <span class=\"token operator\">*</span> <span class=\"token number\">0.9</span> <span class=\"token operator\">-</span> c <span class=\"token operator\">*</span> <span class=\"token number\">0.05</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p><strong>좋은 예시</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> <span class=\"token constant\">TAX_RATE</span> <span class=\"token operator\">=</span> <span class=\"token number\">1.1</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> <span class=\"token constant\">DISCOUNT_RATE</span> <span class=\"token operator\">=</span> <span class=\"token number\">0.9</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> <span class=\"token constant\">SERVICE_FEE_RATE</span> <span class=\"token operator\">=</span> <span class=\"token number\">0.05</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">calculateTotalPrice</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">basePrice<span class=\"token punctuation\">,</span> discount<span class=\"token punctuation\">,</span> serviceFee</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> basePrice <span class=\"token operator\">*</span> <span class=\"token constant\">TAX_RATE</span> <span class=\"token operator\">+</span> discount <span class=\"token operator\">*</span> <span class=\"token constant\">DISCOUNT_RATE</span> <span class=\"token operator\">-</span> serviceFee <span class=\"token operator\">*</span> <span class=\"token constant\">SERVICE_FEE_RATE</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"복잡도\" style=\"position:relative;\"><a href=\"#%EB%B3%B5%EC%9E%A1%EB%8F%84\" aria-label=\"복잡도 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>복잡도</h3>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 함수가 너무 길지 않은가? (일반적으로 50줄 이하)</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 순환 복잡도가 적절한가? (10 이하 권장)</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 중첩이 너무 깊지 않은가? (3-4단계 이하)</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 단일 책임 원칙을 따르는가?</li>\n</ul>\n<h3 id=\"중복-코드\" style=\"position:relative;\"><a href=\"#%EC%A4%91%EB%B3%B5-%EC%BD%94%EB%93%9C\" aria-label=\"중복 코드 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>중복 코드</h3>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 중복된 코드가 있는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 공통 함수로 추출할 수 있는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 유사한 패턴이 반복되는가?</li>\n</ul>\n<h2 id=\"3-성능-체크리스트\" style=\"position:relative;\"><a href=\"#3-%EC%84%B1%EB%8A%A5-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8\" aria-label=\"3 성능 체크리스트 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3. 성능 체크리스트</h2>\n<h3 id=\"알고리즘-효율성\" style=\"position:relative;\"><a href=\"#%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%ED%9A%A8%EC%9C%A8%EC%84%B1\" aria-label=\"알고리즘 효율성 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>알고리즘 효율성</h3>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 시간 복잡도가 적절한가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 불필요한 반복이 있는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 캐싱을 활용할 수 있는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 데이터베이스 쿼리가 최적화되었는가?</li>\n</ul>\n<h3 id=\"리소스-사용\" style=\"position:relative;\"><a href=\"#%EB%A6%AC%EC%86%8C%EC%8A%A4-%EC%82%AC%EC%9A%A9\" aria-label=\"리소스 사용 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>리소스 사용</h3>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 메모리 누수가 없는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 파일/스트림이 제대로 닫히는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 연결 풀링을 사용하는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 불필요한 리소스 로딩이 없는가?</li>\n</ul>\n<h3 id=\"데이터베이스\" style=\"position:relative;\"><a href=\"#%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4\" aria-label=\"데이터베이스 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>데이터베이스</h3>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> N+1 쿼리 문제가 없는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 인덱스가 적절히 사용되는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 대량 데이터 처리가 효율적인가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 트랜잭션이 적절히 사용되는가?</li>\n</ul>\n<p><strong>N+1 쿼리 문제 예시</strong></p>\n<p><strong>나쁜 예시</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">// N+1 쿼리 문제</span>\n<span class=\"token keyword\">const</span> users <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> <span class=\"token function\">getUsers</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">const</span> user <span class=\"token keyword\">of</span> users<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  user<span class=\"token punctuation\">.</span>profile <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> <span class=\"token function\">getProfile</span><span class=\"token punctuation\">(</span>user<span class=\"token punctuation\">.</span>id<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 각 사용자마다 쿼리 실행</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p><strong>좋은 예시</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">// JOIN 또는 배치 쿼리 사용</span>\n<span class=\"token keyword\">const</span> users <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> <span class=\"token function\">getUsersWithProfiles</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 한 번의 쿼리</span></code></pre></div>\n<h2 id=\"4-보안-체크리스트\" style=\"position:relative;\"><a href=\"#4-%EB%B3%B4%EC%95%88-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8\" aria-label=\"4 보안 체크리스트 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4. 보안 체크리스트</h2>\n<h3 id=\"입력-검증\" style=\"position:relative;\"><a href=\"#%EC%9E%85%EB%A0%A5-%EA%B2%80%EC%A6%9D\" aria-label=\"입력 검증 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>입력 검증</h3>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 사용자 입력을 검증하는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> SQL 인젝션을 방지하는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> XSS 공격을 방지하는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> CSRF 보호가 있는가?</li>\n</ul>\n<h3 id=\"인증-및-권한\" style=\"position:relative;\"><a href=\"#%EC%9D%B8%EC%A6%9D-%EB%B0%8F-%EA%B6%8C%ED%95%9C\" aria-label=\"인증 및 권한 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>인증 및 권한</h3>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 인증이 제대로 구현되었는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 권한 검사가 충분한가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 세션 관리가 안전한가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 토큰이 안전하게 저장되는가?</li>\n</ul>\n<h3 id=\"민감한-정보\" style=\"position:relative;\"><a href=\"#%EB%AF%BC%EA%B0%90%ED%95%9C-%EC%A0%95%EB%B3%B4\" aria-label=\"민감한 정보 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>민감한 정보</h3>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 비밀번호가 평문으로 저장되지 않는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> API 키가 하드코딩되지 않는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 로그에 민감한 정보가 포함되지 않는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 환경 변수를 사용하는가?</li>\n</ul>\n<p><strong>나쁜 예시</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> apiKey <span class=\"token operator\">=</span> <span class=\"token string\">\"sk_live_1234567890\"</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 하드코딩</span></code></pre></div>\n<p><strong>좋은 예시</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> apiKey <span class=\"token operator\">=</span> process<span class=\"token punctuation\">.</span>env<span class=\"token punctuation\">.</span><span class=\"token constant\">API_KEY</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 환경 변수 사용</span></code></pre></div>\n<h3 id=\"의존성\" style=\"position:relative;\"><a href=\"#%EC%9D%98%EC%A1%B4%EC%84%B1\" aria-label=\"의존성 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>의존성</h3>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 사용 중인 라이브러리에 알려진 취약점이 없는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 의존성이 최신 버전인가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 불필요한 의존성이 없는가?</li>\n</ul>\n<h2 id=\"5-아키텍처-및-설계-체크리스트\" style=\"position:relative;\"><a href=\"#5-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EB%B0%8F-%EC%84%A4%EA%B3%84-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8\" aria-label=\"5 아키텍처 및 설계 체크리스트 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5. 아키텍처 및 설계 체크리스트</h2>\n<h3 id=\"설계-원칙\" style=\"position:relative;\"><a href=\"#%EC%84%A4%EA%B3%84-%EC%9B%90%EC%B9%99\" aria-label=\"설계 원칙 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>설계 원칙</h3>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> SOLID 원칙을 따르는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> DRY (Don’t Repeat Yourself) 원칙을 따르는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> KISS (Keep It Simple, Stupid) 원칙을 따르는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 관심사의 분리가 잘 되어 있는가?</li>\n</ul>\n<h3 id=\"의존성-1\" style=\"position:relative;\"><a href=\"#%EC%9D%98%EC%A1%B4%EC%84%B1-1\" aria-label=\"의존성 1 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>의존성</h3>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 모듈 간 결합도가 낮은가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 의존성 주입이 적절히 사용되는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 순환 의존성이 없는가?</li>\n</ul>\n<h3 id=\"확장성\" style=\"position:relative;\"><a href=\"#%ED%99%95%EC%9E%A5%EC%84%B1\" aria-label=\"확장성 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>확장성</h3>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 새로운 기능 추가가 쉬운가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 변경에 유연한가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 확장 가능한 구조인가?</li>\n</ul>\n<h2 id=\"6-프론트엔드-특화-체크리스트\" style=\"position:relative;\"><a href=\"#6-%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C-%ED%8A%B9%ED%99%94-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8\" aria-label=\"6 프론트엔드 특화 체크리스트 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6. 프론트엔드 특화 체크리스트</h2>\n<h3 id=\"접근성\" style=\"position:relative;\"><a href=\"#%EC%A0%91%EA%B7%BC%EC%84%B1\" aria-label=\"접근성 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>접근성</h3>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 시맨틱 HTML을 사용하는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> ARIA 속성이 적절히 사용되는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 키보드 네비게이션이 가능한가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 색상 대비가 충분한가?</li>\n</ul>\n<h3 id=\"성능\" style=\"position:relative;\"><a href=\"#%EC%84%B1%EB%8A%A5\" aria-label=\"성능 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>성능</h3>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 이미지가 최적화되었는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 번들 크기가 적절한가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 불필요한 리렌더링이 없는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 코드 스플리팅이 적용되었는가?</li>\n</ul>\n<h3 id=\"사용자-경험\" style=\"position:relative;\"><a href=\"#%EC%82%AC%EC%9A%A9%EC%9E%90-%EA%B2%BD%ED%97%98\" aria-label=\"사용자 경험 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>사용자 경험</h3>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 로딩 상태를 표시하는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 에러 메시지가 사용자 친화적인가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 반응형 디자인이 적용되었는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 모바일에서 잘 작동하는가?</li>\n</ul>\n<h2 id=\"7-백엔드-특화-체크리스트\" style=\"position:relative;\"><a href=\"#7-%EB%B0%B1%EC%97%94%EB%93%9C-%ED%8A%B9%ED%99%94-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8\" aria-label=\"7 백엔드 특화 체크리스트 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>7. 백엔드 특화 체크리스트</h2>\n<h3 id=\"api-설계\" style=\"position:relative;\"><a href=\"#api-%EC%84%A4%EA%B3%84\" aria-label=\"api 설계 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>API 설계</h3>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> RESTful 원칙을 따르는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 적절한 HTTP 메서드를 사용하는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 상태 코드가 올바른가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> API 버전 관리가 되어 있는가?</li>\n</ul>\n<h3 id=\"에러-처리\" style=\"position:relative;\"><a href=\"#%EC%97%90%EB%9F%AC-%EC%B2%98%EB%A6%AC\" aria-label=\"에러 처리 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>에러 처리</h3>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 일관된 에러 응답 형식을 사용하는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 적절한 에러 로깅이 있는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 사용자에게 노출되는 에러 메시지가 적절한가?</li>\n</ul>\n<h3 id=\"로깅\" style=\"position:relative;\"><a href=\"#%EB%A1%9C%EA%B9%85\" aria-label=\"로깅 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>로깅</h3>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 적절한 로그 레벨을 사용하는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 로그에 충분한 컨텍스트가 있는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 민감한 정보가 로그에 포함되지 않는가?</li>\n</ul>\n<h2 id=\"8-코드-리뷰-프로세스\" style=\"position:relative;\"><a href=\"#8-%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4\" aria-label=\"8 코드 리뷰 프로세스 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>8. 코드 리뷰 프로세스</h2>\n<h3 id=\"리뷰-전-체크\" style=\"position:relative;\"><a href=\"#%EB%A6%AC%EB%B7%B0-%EC%A0%84-%EC%B2%B4%ED%81%AC\" aria-label=\"리뷰 전 체크 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>리뷰 전 체크</h3>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 로컬에서 테스트했는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 린터/포매터를 실행했는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 테스트가 모두 통과하는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 문서를 업데이트했는가?</li>\n</ul>\n<h3 id=\"리뷰-작성-시\" style=\"position:relative;\"><a href=\"#%EB%A6%AC%EB%B7%B0-%EC%9E%91%EC%84%B1-%EC%8B%9C\" aria-label=\"리뷰 작성 시 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>리뷰 작성 시</h3>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 구체적이고 명확한 피드백을 제공하는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 개선 방안을 제시하는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 긍정적인 피드백도 포함하는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 우선순위를 명시하는가?</li>\n</ul>\n<h3 id=\"리뷰-후\" style=\"position:relative;\"><a href=\"#%EB%A6%AC%EB%B7%B0-%ED%9B%84\" aria-label=\"리뷰 후 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>리뷰 후</h3>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 피드백에 대해 논의했는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 개선 사항을 적용했는가?</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 재리뷰가 필요한가?</li>\n</ul>\n<h2 id=\"9-자동화-도구\" style=\"position:relative;\"><a href=\"#9-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC\" aria-label=\"9 자동화 도구 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>9. 자동화 도구</h2>\n<h3 id=\"정적-분석\" style=\"position:relative;\"><a href=\"#%EC%A0%95%EC%A0%81-%EB%B6%84%EC%84%9D\" aria-label=\"정적 분석 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>정적 분석</h3>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> ESLint / TSLint 설정</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> Prettier 포맷팅</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> SonarQube 코드 품질 분석</li>\n</ul>\n<h3 id=\"테스트-1\" style=\"position:relative;\"><a href=\"#%ED%85%8C%EC%8A%A4%ED%8A%B8-1\" aria-label=\"테스트 1 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>테스트</h3>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 자동화된 단위 테스트</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 통합 테스트</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> E2E 테스트</li>\n</ul>\n<h3 id=\"보안\" style=\"position:relative;\"><a href=\"#%EB%B3%B4%EC%95%88\" aria-label=\"보안 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>보안</h3>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> Snyk 취약점 스캔</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> OWASP Dependency Check</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> npm audit</li>\n</ul>\n<h2 id=\"faq\" style=\"position:relative;\"><a href=\"#faq\" aria-label=\"faq permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>FAQ</h2>\n<p><strong>Q: 모든 체크리스트를 매번 확인해야 하나요?</strong><br>\nA: 프로젝트와 변경 사항의 중요도에 따라 우선순위를 정해 집중적으로 리뷰한다. 자동화 도구로 처리할 수 있는 항목은 CI/CD에 통합한다.</p>\n<p><strong>Q: 코드 리뷰에 얼마나 시간을 할애해야 하나요?</strong><br>\nA: 변경 사항의 복잡도에 따라 다르지만, 일반적으로 30분-2시간 정도가 적절하다. 작은 변경은 빠르게, 큰 변경은 더 자세히 리뷰한다.</p>\n<p><strong>Q: 리뷰어가 여러 명인 경우 어떻게 하나요?</strong><br>\nA: 각 리뷰어가 다른 관점에서 리뷰하도록 역할을 분담한다. 예를 들어, 한 명은 기능성, 다른 한 명은 보안에 집중한다.</p>\n<p><strong>Q: 모든 피드백을 반영해야 하나요?</strong><br>\nA: 필수적인 이슈는 반드시 반영하고, 스타일이나 선호도 문제는 팀과 논의하여 결정한다. 리뷰어와 작성자가 대화를 통해 합의하는 것이 중요하다.</p>\n<p><strong>Q: 자동화 도구로 대체할 수 있나요?</strong><br>\nA: 일부 항목(포맷팅, 린팅, 보안 스캔)은 자동화할 수 있지만, 비즈니스 로직, 설계, 사용자 경험 등은 사람이 리뷰해야 한다.</p>\n<p><strong>Q: 코드 리뷰가 너무 오래 걸리는 경우?</strong><br>\nA: 큰 변경은 작은 단위로 나누어 PR을 분리한다. 점진적 리뷰가 더 효과적이다. 또한 리뷰 시간을 제한하고, 자동화 도구를 활용해 반복적인 작업을 줄인다.</p>\n<h2 id=\"코드-리뷰-역량을-프로젝트에-활용\" style=\"position:relative;\"><a href=\"#%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%97%AD%EB%9F%89%EC%9D%84-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EC%97%90-%ED%99%9C%EC%9A%A9\" aria-label=\"코드 리뷰 역량을 프로젝트에 활용 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>코드 리뷰 역량을 프로젝트에 활용</h2>\n<p>체계적인 코드 리뷰 프로세스를 구축했다면, 다양한 프로젝트에서 그 경험을 활용해보자. <a href=\"https://bluebutton.kr/\">블루버튼</a> 같은 플랫폼에서 코드 품질 개선, 레거시 코드 리팩토링, 팀 코드 리뷰 프로세스 구축 등이 필요한 프로젝트를 찾을 수 있다. 특히 대규모 프로젝트, 오픈소스 기여, 팀 협업이 중요한 프로젝트에서 이 글의 체크리스트를 바로 적용할 수 있다.</p>","tableOfContents":"<ul>\n<li>\n<p><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#1-%EA%B8%B0%EB%8A%A5%EC%84%B1-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8\">1. 기능성 체크리스트</a></p>\n<ul>\n<li><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%EC%9A%94%EA%B5%AC%EC%82%AC%ED%95%AD-%EC%B6%A9%EC%A1%B1\">요구사항 충족</a></li>\n<li><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%EB%A1%9C%EC%A7%81-%EC%A0%95%ED%99%95%EC%84%B1\">로직 정확성</a></li>\n<li><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%ED%85%8C%EC%8A%A4%ED%8A%B8\">테스트</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#2-%EC%BD%94%EB%93%9C-%ED%92%88%EC%A7%88-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8\">2. 코드 품질 체크리스트</a></p>\n<ul>\n<li><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%EA%B0%80%EB%8F%85%EC%84%B1\">가독성</a></li>\n<li><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%EB%B3%B5%EC%9E%A1%EB%8F%84\">복잡도</a></li>\n<li><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%EC%A4%91%EB%B3%B5-%EC%BD%94%EB%93%9C\">중복 코드</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#3-%EC%84%B1%EB%8A%A5-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8\">3. 성능 체크리스트</a></p>\n<ul>\n<li><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%ED%9A%A8%EC%9C%A8%EC%84%B1\">알고리즘 효율성</a></li>\n<li><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%EB%A6%AC%EC%86%8C%EC%8A%A4-%EC%82%AC%EC%9A%A9\">리소스 사용</a></li>\n<li><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4\">데이터베이스</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#4-%EB%B3%B4%EC%95%88-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8\">4. 보안 체크리스트</a></p>\n<ul>\n<li><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%EC%9E%85%EB%A0%A5-%EA%B2%80%EC%A6%9D\">입력 검증</a></li>\n<li><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%EC%9D%B8%EC%A6%9D-%EB%B0%8F-%EA%B6%8C%ED%95%9C\">인증 및 권한</a></li>\n<li><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%EB%AF%BC%EA%B0%90%ED%95%9C-%EC%A0%95%EB%B3%B4\">민감한 정보</a></li>\n<li><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%EC%9D%98%EC%A1%B4%EC%84%B1\">의존성</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#5-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EB%B0%8F-%EC%84%A4%EA%B3%84-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8\">5. 아키텍처 및 설계 체크리스트</a></p>\n<ul>\n<li><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%EC%84%A4%EA%B3%84-%EC%9B%90%EC%B9%99\">설계 원칙</a></li>\n<li><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%EC%9D%98%EC%A1%B4%EC%84%B1-1\">의존성</a></li>\n<li><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%ED%99%95%EC%9E%A5%EC%84%B1\">확장성</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#6-%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C-%ED%8A%B9%ED%99%94-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8\">6. 프론트엔드 특화 체크리스트</a></p>\n<ul>\n<li><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%EC%A0%91%EA%B7%BC%EC%84%B1\">접근성</a></li>\n<li><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%EC%84%B1%EB%8A%A5\">성능</a></li>\n<li><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%EC%82%AC%EC%9A%A9%EC%9E%90-%EA%B2%BD%ED%97%98\">사용자 경험</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#7-%EB%B0%B1%EC%97%94%EB%93%9C-%ED%8A%B9%ED%99%94-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8\">7. 백엔드 특화 체크리스트</a></p>\n<ul>\n<li><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#api-%EC%84%A4%EA%B3%84\">API 설계</a></li>\n<li><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%EC%97%90%EB%9F%AC-%EC%B2%98%EB%A6%AC\">에러 처리</a></li>\n<li><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%EB%A1%9C%EA%B9%85\">로깅</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#8-%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4\">8. 코드 리뷰 프로세스</a></p>\n<ul>\n<li><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%EB%A6%AC%EB%B7%B0-%EC%A0%84-%EC%B2%B4%ED%81%AC\">리뷰 전 체크</a></li>\n<li><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%EB%A6%AC%EB%B7%B0-%EC%9E%91%EC%84%B1-%EC%8B%9C\">리뷰 작성 시</a></li>\n<li><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%EB%A6%AC%EB%B7%B0-%ED%9B%84\">리뷰 후</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#9-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC\">9. 자동화 도구</a></p>\n<ul>\n<li><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%EC%A0%95%EC%A0%81-%EB%B6%84%EC%84%9D\">정적 분석</a></li>\n<li><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%ED%85%8C%EC%8A%A4%ED%8A%B8-1\">테스트</a></li>\n<li><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%EB%B3%B4%EC%95%88\">보안</a></li>\n</ul>\n</li>\n<li><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#faq\">FAQ</a></li>\n<li><a href=\"/etc/%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8/#%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0-%EC%97%AD%EB%9F%89%EC%9D%84-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EC%97%90-%ED%99%9C%EC%9A%A9\">코드 리뷰 역량을 프로젝트에 활용</a></li>\n</ul>","wordCount":{"words":708},"fields":{"slug":"/etc/코드-리뷰-체크리스트/","image":null,"faq":[{"question":"모든 체크리스트를 매번 확인해야 하나요?","answer":"프로젝트와 변경 사항의 중요도에 따라 우선순위를 정해 집중적으로 리뷰한다. 자동화 도구로 처리할 수 있는 항목은 CI/CD에 통합한다."},{"question":"코드 리뷰에 얼마나 시간을 할애해야 하나요?","answer":"변경 사항의 복잡도에 따라 다르지만, 일반적으로 30분-2시간 정도가 적절하다. 작은 변경은 빠르게, 큰 변경은 더 자세히 리뷰한다."},{"question":"리뷰어가 여러 명인 경우 어떻게 하나요?","answer":"각 리뷰어가 다른 관점에서 리뷰하도록 역할을 분담한다. 예를 들어, 한 명은 기능성, 다른 한 명은 보안에 집중한다."},{"question":"모든 피드백을 반영해야 하나요?","answer":"필수적인 이슈는 반드시 반영하고, 스타일이나 선호도 문제는 팀과 논의하여 결정한다. 리뷰어와 작성자가 대화를 통해 합의하는 것이 중요하다."},{"question":"자동화 도구로 대체할 수 있나요?","answer":"일부 항목(포맷팅, 린팅, 보안 스캔)은 자동화할 수 있지만, 비즈니스 로직, 설계, 사용자 경험 등은 사람이 리뷰해야 한다."},{"question":"코드 리뷰가 너무 오래 걸리는 경우?","answer":"큰 변경은 작은 단위로 나누어 PR을 분리한다. 점진적 리뷰가 더 효과적이다. 또한 리뷰 시간을 제한하고, 자동화 도구를 활용해 반복적인 작업을 줄인다."}]},"frontmatter":{"title":"코드 리뷰 체크리스트 - 품질 보장을 위한 필수 항목","date":"2025년 12월 23일","dateISO":"2025-12-23T06:25:00.000Z","updatedISO":null,"category":"etc","description":"효과적인 코드 리뷰를 위한 완전한 체크리스트다. 기능, 성능, 보안, 가독성 등 모든 측면을 검토할 수 있는 실무 중심의 체크리스트를 제공한다.","tags":["코드 리뷰","코드 품질","개발 프로세스","품질 보장","베스트 프랙티스","코드 검토"]}}},"pageContext":{"slug":"/etc/코드-리뷰-체크리스트/","previous":{"fields":{"slug":"/etc/REST-API-테스트-도구-완전-가이드/"},"frontmatter":{"title":"REST API 테스트 도구 완전 가이드 - Postman vs Insomnia vs Thunder Client 실전 비교","tags":["REST API","API 테스트","Postman","Insomnia","Thunder Client","API 개발","백엔드 개발"]}},"next":{"fields":{"slug":"/etc/개발-환경-설정-자동화-도구-모음/"},"frontmatter":{"title":"개발 환경 설정 자동화 도구 모음 - Docker, Vagrant, Dev Containers 완전 가이드","tags":["Docker","Vagrant","Dev Containers","개발 환경","자동화","DevOps","컨테이너"]}}}},"staticQueryHashes":["213619243","3262363727"]}