3.SW개발/AI코딩과실무전략

1편. 그럴듯한 AI 코드의 함정 – 돌아가기만 하면 끝일까?

쿼드큐브 2025. 11. 7. 16:57
반응형
반응형

1편. 그럴듯한 AI 코드의 함정 – 돌아가기만 하면 끝일까?

 

📚 목차
1. 실행되는 코드, 정말 정답일까?
2. AI는 문법은 맞춰도 맥락은 모른다
3. 실무 착각 사례: 존재하지 않는 API 문제
4. AI 코드, 실무에서 어떻게 검증해야 할까?
✔ 마무리 - 돌아가는 것보다 중요한 것들

 

그럴듯한 AI 코드의 함정을 보여주는 이미지
그럴듯한 AI 코드의 함정을 보여주는 이미지

요즘은 AI가 코드도 짜주고 설명도 해주니, "그냥 복붙하면 되지 않나?"라는 말이 자연스럽게 나옵니다.


실제로 AI가 만든 코드는 겉보기에 자연스럽고 완성도 있어 보입니다.
하지만 그렇게 보이는 코드 안에 치명적인 문제가 숨어 있는 경우가 적지 않습니다.

AI는 문법적으로 맞는 코드를 생성할 수는 있지만, 그 코드가 어떤 맥락에서, 어떤 목적을 가지고 사용되는지는 이해하지 못합니다.


이 글에서는 실행은 되지만 실무에서는 쓸 수 없는 코드의 문제를 예시와 함께 살펴보고, AI 코드에 대한 검토와 판단의 기준을 함께 정리합니다.

 

1. 실행되는 코드, 정말 정답일까?

아래는 ChatGPT에 입력한 프롬프트입니다

“사용자 로그인을 처리하는 Python 코드를 짜줘.
아이디와 비밀번호를 확인해서 맞으면 ‘로그인 성공’을, 틀리면 ‘로그인 실패’를 출력해 줘.”

 

AI는 다음과 같은 코드를 생성했습니다

# 사용자 계정 정보 (예시)
USER_ID = "testuser"
USER_PASSWORD = "password123"

# 사용자 입력 받기
input_id = input("아이디를 입력하세요: ")
input_password = input("비밀번호를 입력하세요: ")

# 로그인 확인
if input_id == USER_ID and input_password == USER_PASSWORD:
    print("로그인 성공")
else:
    print("로그인 실패")

언뜻 보기엔 요구사항을 잘 반영한 완성된 코드처럼 보입니다. 실행도 문제없이 됩니다.

그러나 이 코드에는 매우 심각한 문제가 있습니다.

 

🔷 무엇이 문제인가?

이 코드는 실행은 되지만 절대로 실무에 사용할 수 없는 구조입니다.

🔹 사용자 계정 정보가 코드에 하드코딩되어 있어 보안상 매우 위험합니다.
🔹 비밀번호를 암호화하지 않고 평문으로 비교하고 있습니다.
🔹 입력값 검증이 빠져 있어, 악의적인 입력에 취약합니다.

 

이처럼 AI가 만든 코드는 기능적으로는 만족할 수 있지만, 보안, 유효성 검사, 환경 조건 같은 실무 기준은 전혀 반영되지 않은 상태입니다.

AI는 결과만 보여줄 뿐, 그 코드가 실제 환경에서 어떤 책임을 져야 하는지는 고려하지 않습니다.

 

2. AI는 문법은 맞춰도 맥락은 모른다

AI가 생성하는 코드는 대부분 이전에 많이 쓰였던 코드 패턴을 기반으로 만들어집니다.

그래서 문법적으로는 맞고, 겉보기에 그럴듯해 보입니다.


하지만 그 코드가 어떤 상황에서, 어떤 데이터를 다루고, 무엇을 의도했는지는 AI가 알지 못합니다.

 

다음은 초보 개발자들이 자주 겪는 오류입니다

num = input("숫자를 입력하세요: ")
if num > 10:
    print("10보다 큽니다.")
else:
    print("10 이하입니다.")

겉보기에는 문제가 없어 보이지만, 이 코드는 실행하면 TypeError가 발생합니다.

input()은 항상 문자열을 반환하는데, 문자열과 숫자는 비교할 수 없기 때문입니다.


실제로 의도한 동작을 하려면 아래처럼 수정해야 합니다:

 

num = int(input("숫자를 입력하세요: "))

 

🔷 코드 형태만 보고 넘어가면 생기는 문제

AI는 사용자의 의도를 표면적인 문장이나 예시로부터 추론할 뿐입니다.
그래서 동작 원리나 타입 처리까지 제대로 고려하지 못할 때가 많습니다.


결과적으로 다음과 같은 문제가 생길 수 있습니다:
🔹 실행하면 에러가 나는 코드
🔹 겉으로는 정상 동작하지만, 내부 로직이 의도와 어긋나는 코드
🔹 실제 환경에선 동작하지 않거나 비정상적인 동작을 유발하는 구조

 

이처럼, AI가 만든 코드는 문법은 맞지만 의미나 맥락이 빠져 있는 경우가 많기 때문에, 코드를 그대로 신뢰하기보다는 한 번 더 검토하고 확인하는 습관이 필요합니다.

반응형

 

3. 실무 착각 사례: 존재하지 않는 API 문제

한 스타트업의 프론트엔드 개발자는 이메일 알림 기능을 빠르게 구현해야 했습니다.

시간이 부족했던 그는 ChatGPT에 다음과 같이 요청했습니다

“JavaScript에서 이메일을 보내는 코드 예시를 보여줘.”

 

AI는 아래와 같은 코드를 반환했습니다.

Email.send({
  to: "user@example.com",
  subject: "알림",
  body: "메일 내용"
});

 

코드는 문법적으로도 깔끔했고, 마치 일반적인 라이브러리의 API처럼 자연스러웠습니다.

개발자는 별다른 의심 없이 이 구조를 참고해 백엔드 담당자에게 전달했고, 실제 기능도 이 형식에 맞춰 구현되었습니다


하지만 문제는 기능이 배포된 후 발생했습니다.

 

기능은 배포됐고, 클라이언트는 이메일 발송 요청을 정상적으로 보냈습니다.

하지만 내부 로그를 통해 확인된 문제는 다음과 같았습니다.
🔹 수백 건의 이메일이 발송되지 않고 서버 큐에 쌓여 있었고,
🔹 프론트엔드에서는 200 OK 응답만 받고 있었기 때문에, 오류는 감지되지 않았습니다


결국 알림을 받아야 할 사용자들은 메일을 받지 못했고, 서비스 신뢰성에도 문제가 생겼습니다.

 

이처럼 AI는 존재하지 않는 API나 라이브러리 이름을 그럴듯하게 생성할 수 있습니다. 실무에서는 이 점을 반드시 염두에 두어야 합니다.

 

4. AI 코드, 실무에서 어떻게 검증해야 할까?

🔷 AI 코드 검증을 위한 핵심 질문

AI 코드 사용 전, 다음과 같은 질문을 통해 최소한의 검증 단계를 거쳐야 합니다:
🔹 이 코드는 내가 사용하는 개발 환경과 언어 버전에 적합한가요?
🔹 보안상 취약점이 존재할 가능성은 없나요?
🔹 예외 상황에 대한 적절한 예외 처리 로직이 포함되어 있나요?
🔹 사용된 API, 클래스, 함수는 실제로 존재하며 문서화되어 있나요?

 

🔷 실무에서 유용한 코드 검토 체크리스트

🔹 데이터 타입 확인: 입력값과 반환값의 타입이 예상과 일치하는지 점검합니다.
🔹 입력값 검증: 사용자 입력을 무조건 신뢰하지 않고, 필수 검증 절차가 포함되어 있는지 확인합니다.
🔹 환경 의존성 점검: 특정 프레임워크나 라이브러리에 과도하게 의존하고 있지 않은지 점검합니다.
🔹 실행 테스트 수행: 로컬 환경 또는 테스트 환경에서 실제로 코드를 실행해 보고 문제가 없는지 검증합니다.

 

이러한 점검은 AI와 협업하는 개발자에게 반드시 필요한 비판적 사고의 영역입니다. AI는 코드 조각을 제시할 수는 있어도, 그것이 진짜로 "실무에서 원하는 기능"인지는 인간이 판단해야 합니다.

 

✔ 마무리 - 돌아가는 것보다 중요한 것들

AI가 생성하는 코드는 빠르고 편리합니다.
실행도 잘 되고, 얼핏 보면 정답처럼 보일 수 있습니다.


하지만 실무에서 요구하는 건 단순히 “돌아가는 코드”가 아닙니다.

🔹 보안적으로 안전한가?
🔹 운영 환경에 맞는가?
🔹 문제 발생 시 책임질 수 있는 구조인가?


이런 기준을 판단하고 적용하는 건 오직 사람의 역할입니다.

AI는 ‘가능성 있는 코드’를 보여줄 뿐이고, 그걸 ‘쓸 수 있는 코드’로 만드는 건 개발자의 책임입니다.

 

※ 게시된 글 및 이미지 중 일부는 AI 도구의 도움을 받아 생성되거나 다듬어졌습니다.
반응형

 

 

 

반응형