본문 바로가기
카테고리 없음

AI 기반 코딩도움 후기 (ChatGPT, 문제해결, 사용기)

by 열정 토끼 2025. 11. 21.

ChatGPT에게 코딩 과제 도움을 요청해 실제로 과제를 해결하고 학습에 활용한 체험담을 공유합니다. 과제 유형을 정하는 과정, 질문을 설계하는 방법, AI가 제시한 코드의 신뢰도 검증 절차, 디버깅 사례, 학습으로서의 장단점, 교수·학교 규정과의 충돌 가능성까지 실제 경험을 바탕으로 사실 중심으로 적었습니다. 초보자도 따라 할 수 있도록 구체적인 프롬프트 예시와 오류 확인 방법, 안전하게 활용하는 팁을 포함해 실전에서 바로 적용 가능한 내용을 담았습니다.

AI 기반 코딩 관련 사진

초기 접근과 질문(프롬프트) 설계

처음 과제를 맡았을 때 나는 문제 설명서를 그대로 복사해서 ChatGPT에게 붙여 넣는 방식으로 시작하지 않았다. 문제의 핵심 요구사항과 입력·출력의 형식, 시간·공간 복잡도 제한, 허용된 라이브러리 등 과제의 조건을 먼저 내가 직접 요약했다. 이유는 두 가지다. 하나는 원문을 무작정 붙여 넣으면 AI가 핵심을 과도하게 확장하거나 불필요한 구현을 포함할 가능성이 있기 때문이고, 다른 하나는 내가 직접 요약하는 과정 자체가 문제 이해도를 높여주는 학습 행위였기 때문이다. 실제로 ChatGPT에게 최초로 보낸 요청은 다음과 같은 형태였다. "문제: 정수 배열이 주어졌을 때, 연속 부분합의 최댓값을 구하되 O(n) 시간복잡도로 해결하시오. 입력은 첫 줄에 N, 둘째 줄에 배열. 출력은 최대 부분합. 파이썬으로 간단하고 주석 포함하여 작성해 줘. 또한 시간복잡도와 핵심 아이디어를 3 문장으로 정리해 줘." 이처럼 요구사항(언어, 복잡도, 출력형식 등)을 명확히 적으면 AI가 산출하는 코드가 수업의 채점 기준과 맞을 확률이 높아진다. 프롬프트 설계에서 또 한 가지 중요한 점은 '단계적 요청'이었다. 나는 처음에 전체 설루션을 한 번에 달라고 하지 않고, 먼저 알고리즘 개요와 의사코드(pseudocode)를 요청했다. 그 응답을 검토한 뒤 세부 구현을 요청하고, 마지막으로 테스트 케이스를 만들어 달라 했다. 이렇게 단계적으로 진행하면 AI가 제안한 접근법의 논리적 타당성을 검증할 기회를 갖게 되고, 단순 복붙형 답변을 방지할 수 있다. 예를 들어 의사코드 단계에서 "이 방법은 음수만으로 이루어진 경우에도 정상 작동하는가?" 같은 확인 질문을 던지면 AI는 경계 케이스를 설명하거나 알고리즘을 보완해 주었다. 또한 입력 데이터의 예시와 내가 시도해 본 초안 코드를 함께 제공하면 AI의 답변 품질이 크게 향상되었다. 내가 작성해 본 잘못된 구현을 포함해 "이 코드에서 왜 틀렸는지 지적해 주고, 수정된 코드를 제시해 줘"라고 요청하면 AI는 구체적 라인으로 문제를 지적하고 개선안을 제시했다. 이때 주의할 점은 과제 규정상 외부 도움(예: AI 사용)이 금지되어 있는지 여부였다. 나는 먼저 수업 규정과 교수님의 허용 범위를 확인했고, 가능하면 AI의 도움을 '학습 보조'로 명시해 스스로 이해한 부분을 코드에 주석으로 달아 제출했다. 마지막으로 프롬프트 설계 팁을 정리하면, 요구사항을 간결·명확히, 단계적으로 요청, 내가 시도한 코드와 테스트케이스를 함께 제공, 그리고 교수 규정과 윤리 기준을 사전에 확인하는 것이 효과적이었다.

문제 해결 과정과 디버깅 사례

실제로 ChatGPT가 제시한 코드에는 대체로 기본적인 로직은 올바르게 구현되어 있었지만, 항상 바로 통과되는 것은 아니었다. 가장 빈번한 오류 유형은 경곗값 처리 누락, 입력 형식 오해, 그리고 복잡도 오판이었다. 예를 들어 한 과제에서 입력이 큰 정수 리스트를 한 줄에 쭉 주는 형식이었는데, AI가 공백 분리 대신 쉼표 분리로 파싱 하는 코드를 제시해 채점시스템에서 WA(Wrong Answer)를 받았다. 이 경우 해결 방법은 두 가지였다: 내가 제출 전에 로컬에서 제공된 샘플 입력으로 직접 테스트를 돌려보고 에러를 캡처해 AI에게 그 결과와 에러 메시지를 제공하는 것이다. AI는 에러 로그를 바탕으로 파싱 로직을 수정해 주었고, 그 수정안을 다시 내 환경에서 재검증해 최종적으로 채점 통과를 얻었다. 또 다른 사례는 성능 문제였다. 어떤 문제에서는 입력 크기가 10^6에 달할 수 있었는데, AI가 제안한 직관적이지만 O(n^2) 알고리즘은 시간초과를 초래했다. 이때 핵심은 "AI의 제안이 왜 느린가"를 묻고 개선 방향(예: 슬라이딩 윈도, 투 포인터, 분할정복 등)을 요청하는 것이었다. AI는 비효율적 부분을 찾는 방법, 메모리 사용을 줄이는 팁, 그리고 개선된 O(n) 혹은 O(n log n) 알고리즘의 아이디어를 제시했다. 내가 그중 하나를 선택해 의사코드로 먼저 검토를 요청했고, 그 의사코드를 바탕으로 AI에게 최적화된 파이썬 구현을 다시 작성하게 했다. 이 반복 과정에서 중요한 점은 AI에 전적으로 의존하지 않고, 제안된 변경의 시간복잡도와 메모리 영향 등을 스스로 계산·검증하는 습관이었다. 디버깅 과정에서 테스트 자동화도 함께 활용했다. AI에게 유효한 테스트 케이스(정상 케이스, 경계 케이스, 무작위 대규모 케이스)를 생성해 달라고 요청하고, 생성된 케이스로 로컬에서 유닛 테스트를 돌려 코드의 안정성을 검증했다. AI가 생성한 테스트 중 몇 개는 실제로 채점 환경을 잘 반영해 숨겨진 버그를 찾아내기도 했다. 마지막으로, 코드 리뷰 관점에서 AI에게 "이 코드의 시간복잡도, 공간복잡도, 그리고 개선 여지가 있는 부분을 5가지로 정리해 줘"라고 요청하면 품질이 더 좋아졌다. 이 모든 과정에서 핵심은 AI의 출력을 비판적으로 검토하고, 실제 실행 결과로 검증한 다음 최종 제출용 코드를 작성하는 절차를 철저히 지키는 것이었다.

학습 효과, 윤리적 고려와 실무적 팁

ChatGPT를 코딩 과제에 활용하면서 얻은 가장 큰 학습 효과는 '문제 분해 능력'과 '디버깅 전략 습득'이었다. AI가 전체 설루션 대신 의사코드와 단계별 설명을 제시할 때, 나는 자연스럽게 문제를 작은 단위로 나누는 연습을 하게 되었고, 이는 이후 유사 문제를 스스로 풀 때 큰 도움이 되었다. 또한 AI와의 Q&A를 통해 흔히 보이는 실수 유형(인덱스 오버플로우, off-by-one 오류, 입력 파싱 실수 등)을 빠르게 학습하고 재사용 가능한 검사 리스트를 만들 수 있었다. 반면 단점으로는 과도한 의존성 위험이 있다. AI가 바로 동작하는 코드를 제공하면 초보자는 내부 동작 원리를 건너뛰기 쉽고, 이는 장기적 실력 향상에 해가 될 수 있다. 따라서 나는 항상 '이 코드를 왜 이렇게 작성했는가'를 스스로 설명할 수 있을 때만 제출하도록 스스로 규칙을 세웠다. 윤리적·규정적 측면도 무시할 수 없다. 학교나 교수마다 외부 도움 허용 범위가 다르니 사전에 확인해야 한다. 허용되는 범위라 하더라도 제출 시에는 어떤 부분을 AI 도움으로 얻었는지 주석이나 피드백 파일로 명시하는 것이 투명성 측면에서 바람직하다. 실무에서는 AI로 생성한 코드의 라이선스 문제, 외부에 전송되는 코드·데이터의 민감성(예: 개인정보 포함 여부) 등을 고려해야 한다. 또한 보안 취약점(예: SQL 인젝션 방지, 입력 검증)의 경우 AI가 권장한 방식이 항상 최선이 아닐 수 있으므로 보안 검토를 반드시 병행해야 한다. 실무적 팁을 정리하면 다음과 같다. 첫째, AI에게 초안·의사코드·테스트케이스 생성을 맡기고, 실제 구현과 검증은 직접 수행하라. 둘째, AI가 제시한 코드를 바로 붙여 넣기 전에 최소한의 정적 분석 및 로컬 실행으로 동작을 확인하라. 셋째, 학습 목적으로 사용한다면 AI가 제시한 해결법을 자신의 말로 요약해 보고, 그 요약을 AI에게 다시 검증시키는 '설명-검증' 루프를 활용하라. 넷째, 민감한 자료는 가공 또는 요약한 뒤 제공하고, 규정상 문제 될 소지가 있으면 사용을 자제하라.

결론

ChatGPT는 코딩 과제 해결에서 유용한 도우미지만, 최종 책임은 사람에게 있습니다. 단계적 프롬프트, 로컬 검증, 테스트 자동화, 윤리 규정 준수를 병행하면 학습과 과제 해결 모두에서 큰 효과를 볼 수 있습니다. 지금 당장 간단한 문제 하나를 골라 의사코드부터 AI에 요청해 보고, 나온 의사코드를 직접 구현해 보세요—비판적 검토가 학습의 핵심입니다.