LLM 활용: 코딩 해보기
1. LLM 기반 코딩의 동향
- LLM을 활용한 코딩 작업은 전 세계적으로 빠르게 진화하고 있으며,
- 소프트웨어 개발 프로세스 전반에 걸쳐 혁신적인 변화를 가져오고 있음
1.1 🌍 글로벌 동향
- 코딩의 민주화와 ‘빌더’로의 전환
- AI 도구의 발전으로 인해 비전문가도 자연어를 통해 소프트웨어를 개발할 수 있게 됨
- 이러한 변화는 개발자의 역할을 전통적인 코더에서 ‘빌더’로 확장 중
- 바이브 코딩과 AI 에이전트의 부상
- Cursor 등의 AI 기반 개발 도구
- 자연어 명령을 통해 하루에 약 10억 줄의 코드를 생성
- ‘바이브 코딩’이라는 새로운 코딩 방식을 제시하고 있음
- Amazon의 ‘Kiro’ 프로젝트
- AI 에이전트를 활용하여 실시간으로 코드를 생성
- 시각적 입력을 통해 개발을 지원하는 도구로 주목받음
- 바이브 코딩(Vibe Coding)
- “음악이나 분위기(Vibe)를 느끼면서 코딩하는 행위”를 비공식적으로 일컫는 말
- 딱딱하고 지루할 수 있는 코딩 작업에 “개인이 좋아하는 음악을 듣거나, 편안한 분위기를 조성”하여 “몰입도를 높이고 즐거움을 더하는 방식”을 의미함
- 핵심은 즐겁게 코딩하자! 정도로 이해할 수 있음
- 예시
- 신나는 음악을 들으면서 리듬에 맞춰 코드를 작성하는 행위
- 잔잔한 음악이나 자연의 소리를 들으며 집중력을 높이는 행위
- 좋아하는 향을 피우거나 편안한 조명 아래에서 코딩하는 환경
- 동료들과 함께 좋아하는 음악을 공유하며 자유로운 분위기에서 코딩하는 모습
- AI 에이전트
- 인공지능을 사용하여 사용자를 대신하여 특정 목표를 달성하거나 작업을 수행하는 자율적인 소프트웨어 시스템
- 사람의 직접적인 개입없이 주변 환경을 인식하고, 정보를 처리하며, 학습을 통해 스스로 판단하고 행동할 수 있음
- 쉽게 표현하면 스스로 생각하고 행동하는 똑똑한 비서 정도로 이해할 수 있음
- 다양한 분야에서 인간의 업무를 보조하거나 자동화하여 효율성을 높이는 데 활용될 수 있음
- 주요 특징
- 자율성: 외부 지시 없이 스스로 목표를 설정하고 실행
- 지각 능력: 센서, 데이터 입력 등을 통해 주변 환경을 인식
- 추론 및 계획: 인식한 정보를 바탕으로 논리적으로 추론하고 행동 계획을 수립
- 행동 능력: 계획에 따라 실제 행동을 수행 (예: 이메일 보내기, 정보 검색, 로봇 제어 등)
- 학습 능력: 경험이나 피드백을 통해 성능을 점진적으로 개선
- 목표 지향성: 특정 목표를 달성하기 위해 행동
- 예시
- 가상 비서: 사용자의 일정 관리, 이메일 작성, 회의 예약 등을 수행
- 자율 주행 자동차: 센서를 통해 주변 환경을 인식하고 스스로 운전
- 로봇 청소기: 집 안의 구조를 파악하고 스스로 청소 작업을 수행
- 고객 지원 챗봇 (Advanced): 단순 답변뿐 아니라 고객의 문제를 이해하고 해결하기 위한 능동적인 행동 수행
- 주식 거래 AI: 시장 상황을 분석하여 자동으로 주식 매매 실행
- Cursor 등의 AI 기반 개발 도구
- 대형 기술 기업들의 AI 코딩 도구 개발
- 대형 기술 기업 중심으로 AI를 활용하여 개발 프로세스를 혁신하려는 노력이 진행 중
- 예시
- Apple: Anthropic과 협력하여 Xcode에 Claude Sonnet 모델을 통합한 AI 코딩 도구를 개발 중
- 코드 작성, 편집, 테스트 자동화 등이 목적
- Apple: Anthropic과 협력하여 Xcode에 Claude Sonnet 모델을 통합한 AI 코딩 도구를 개발 중
1.2 🇰🇷 국내 동향: LLM 활용 코딩의 현재와 미래
- 국가 주도의 LLM 개발
- 한국 정부는 OpenAI의 ChatGPT에 필적하는 대규모 언어 모델 개발을 목표로 국가 자원을 동원 중
- 이러한 노력은 국내 AI 기술력을 강화하고, 글로벌 경쟁에서 입지를 확보하려는 전략의 일환
- 산업 현장에서의 LLM 활용 확대
- 기업 중심으로 LLM을 활용하여 코드 리뷰 자동화, 문서화, 테스트 자동화 등 다양한 분야에서 생산성 향상 시도 중
- 예: LLM 기반 도구를 도입하여 개발 속도 향상, 코드 품질 개선에 활용
- 기업 중심으로 LLM을 활용하여 코드 리뷰 자동화, 문서화, 테스트 자동화 등 다양한 분야에서 생산성 향상 시도 중
- 교육 분야에서의 LLM 통합
- 교육 기관을 중심으로 LLM을 활용한 코딩 교육 도입
- 학생들이 AI 도구를 활용하여 문제를 해결하고,
- 창의적인 프로젝트를 수행할 수 있도록 지원
- 이러한 접근은 학생들의 비판적 사고와 문제 해결 능력을 향상시키는 데 기여
- 교육 기관을 중심으로 LLM을 활용한 코딩 교육 도입
1.3 🔍 요약
구분 | 주요 내용 | |
---|---|---|
글로벌 동향 | 개발자의 역할 변화, ‘바이브 코딩’의 부상, 대형 기술 기업들의 AI 코딩 도구 개발 | |
국내 동향 | 국가 주도의 LLM 개발, 산업 현장에서의 LLM 활용 확대, 교육 분야에서의 LLM 통합 |
- LLM을 활용한 코딩은 개발자의 역할을 재정의하고, 소프트웨어 개발의 효율성과 창의성을 향상시키는 데 기여
- 앞으로도 이러한 추세는 지속될 것으로 예상되며, 국내외에서의 적극적인 대응과 전략이 필요함
2. LLM을 활용한 코딩작업의 효과
- 생산성 향상 및 개발 속도 증진
- 코드 자동 완성 및 제안
- LLM은 문맥을 이해하고 다음에 올 가능성이 높은 코드를 정확하게 예측하여
- 개발자의 타이핑 시간을 줄이고 코드 작성 속도를 크게 향상시킴
- 코드 스니펫 생성
- 간단한 설명이나 주석만으로 LLM은 해당 기능을 구현하는 코드 스니펫을 자동으로 생성함
- 이는 반복적인 코딩 작업을 줄이고 핵심 로직 개발에 집중할 수 있도록 지원함
- 보일러플레이트 코드 자동 생성
- 프로젝트 설정, 함수 정의, 기본적인 클래스 구조 등 반복적인 보일러플레이트 코드를 자동으로 생성함
- 초기 개발 단계를 빠르게 진행할 수 있도록 지원함
- 코드 자동 완성 및 제안
- 코드 품질 향상 및 오류 감소
- 문법 및 스타일 오류 자동 수정
- LLM은 코드 문법 오류나 스타일 가이드라인 위반을 실시간으로 감지하고
- 수정 제안을 제공하여
- 코드의 일관성과 가독성을 높임
- 잠재적 버그 식별
- LLM은 코드 패턴을 분석하여
- 잠재적인 논리적 오류나 보안 취약점을 미리 경고해 줌으로써
- 코드의 안정성 향상에 기여
- 최적화된 코드 제안
- LLM은 코드의 효율성을 분석하여
- 더 나은 알고리즘이나 구현 방식을 제안함으로써
- 성능 개선에 도움을 줄 수 있음
- 문법 및 스타일 오류 자동 수정
- 학습 및 접근성 향상
- 새로운 프로그래밍 언어 및 기술 학습 지원
- LLM은 특정 언어나 기술에 대한 질문에 답변하고 관련 코드 예시를 제공하여
- 개발자가 새로운 기술을 더 빠르고 쉽게 학습할 수 있도록 지원
- 코딩 초보자의 진입 장벽 완화
- LLM은 기본적인 코딩 개념 설명, 오류 해결 지원 등을 통해
- 코딩 초보자가 프로그래밍에 더 쉽게 접근하고 학습 곡선을 완만하게 만드는 데 기여함
- 장애를 가진 개발자 지원
- 음성 명령-코드 변환, 텍스트 기반 코딩 보조 기능 등을 통해 신체적 제약이 있는 개발자의 코딩 접근성을 향상시킬 수 있음
- 새로운 프로그래밍 언어 및 기술 학습 지원
- 협업 및 커뮤니케이션 개선
- 코드 설명 및 문서 자동 생성
- LLM은 작성된 코드에 대한 설명을 자동으로 생성하거나 주석 작성을 도와
- 코드의 이해도를 높이고 협업 효율성을 증진시킴
- 자연어 기반 코드 검색
- 개발자는 자연어 질문을 통해 원하는 코드를 쉽게 검색하고 이해할 수 있어
- 코드베이스 관리 및 유지보수 효율성을 높임
- 기술적 논의 지원
- 복잡한 기술적 문제에 대해 LLM과 자연어로 논의하고 아이디어를 구체화하는 과정을 통해 문제 해결 능력을 향상시킬 수 있음
- 코드 설명 및 문서 자동 생성
- 창의성 및 혁신 촉진
- 새로운 아이디어 발상 지원
- LLM은 다양한 코드 패턴과 기술적 지식을 바탕으로
- 개발자가 미처 생각하지 못했던 새로운 아이디어나 해결 방안을 제시할 수 있음
- 실험적인 프로토타입 개발 가속화
- LLM을 활용하여 아이디어를 빠르게 코드로 구현하고 테스트함으로써
- 혁신적인 프로덕트 개발 주기를 단축할 수 있음
- 새로운 아이디어 발상 지원
- LLM을 활용한 코딩 작업은 단순한 코드 자동 완성을 넘어 개발 생산성 향상, 코드 품질 개선, 학습 용이성 증대, 협업 효율성 증진, 그리고 창의적인 개발 환경 조성에 크게 기여함
3. LLM을 코딩 작업에 적용할 때 주의해야 할 점
거대 언어 모델(LLM)은 코딩 작업에 혁신적인 도움을 줄 수 있지만, 맹목적으로 신뢰하고 의존하기보다는 다음과 같은 주의 사항과 단점을 명확히 인지하고 사용하는 것이 중요함
- 생성된 코드의 정확성 검증 필수
- LLM이 생성한 코드는 완벽하지 않을 수 있으며
- 문법적으로는 옳을지라도 논리적인 오류나 버그를 포함할 수 있음
- 반드시 사람이 직접 코드를 검토하고 테스트하여 정확성을 확인해야 함
- 보안 취약점 가능성
- LLM이 생성한 코드에 보안 취약점이 포함될 수 있음
- 특히 사용자 입력을 처리하거나 시스템과 상호작용하는 부분의 코드는 더욱 주의 깊게 검토하고 보안 테스트를 거쳐야 함
- 맥락 이해 부족으로 인한 오해 가능성
- LLM은 완벽하게 개발자의 의도를 파악하지 못할 수 있음
- 부정확하거나 모호한 프롬프트는 예상치 못한 또는 잘못된 코드를 생성할 수 있으므로, 명확하고 구체적인 지시를 제공해야 함
- 최신 정보 부족 가능성
- LLM의 학습 데이터는 특정 시점까지의 정보를 기반으로 하므로, 최신 라이브러리, 프레임워크, 또는 기술 트렌드를 반영하지 못할 수 있음
- 생성된 코드가 최신 기술 스택과 호환되는지 확인해야 함
- 저작권 및 라이선스 문제
- LLM이 학습 데이터에서 가져온 코드가 특정 라이선스를 따를 수 있
- 생성된 코드를 사용할 때 저작권 및 라이선스 문제를 확인하고 준수해야 함
- 과도한 의존성 경계
- LLM에 지나치게 의존하면 개발자의 문제 해결 능력과 코딩 실력이 저하될 수 있음
- LLM은 보조 도구로 활용하고, 핵심적인 코딩 능력은 스스로 유지하고 발전시켜야 함
- 개인 정보 및 민감 정보 노출 주의
- 코드를 생성하거나 수정하는 과정에서 개인 정보나 민감 정보가 프롬프트에 포함되지 않도록 주의해야 함
- LLM 플랫폼의 데이터 처리 및 보안 정책을 확인하는 것도 중요함
- 프롬프트 엔지니어링의 중요성
- 효과적인 코드를 얻기 위해서는 명확하고 구체적인 프롬프트를 작성하는 능력이 중요함
- 프롬프트 작성 방식에 따라 결과물의 품질이 크게 달라질 수 있음
- 생성된 코드의 정확성 검증 필수
4. LLM 활용 코딩 작업의 단점
LLM은 코딩 작업을 효율화하고 새로운 가능성을 열어주는 강력한 도구이지만, 그 한계와 주의사항을 명확히 인식하고 인간 개발자의 비판적인 사고와 검증 과정을 통해 안전하고 효과적으로 활용해야 함
- 완벽한 이해 부족
- LLM은 인간 개발자와 같은 깊이 있는 문제 이해 능력, 추상화 능력, 창의적인 문제 해결 능력이 부족할 수 있음
- 복잡하거나 새로운 유형의 문제에 대한 해결책을 제시하는 데 한계가 있을 수 있음
- 장기적인 설계 및 아키텍처 능력 부족
- LLM은 개별적인 코드 스니펫 생성이나 간단한 기능 구현에 유용하지만
- 복잡한 시스템의 전체적인 아키텍처를 설계하거나
- 장기적인 관점에서 코드베이스를 관리하는 능력은 부족함
- 특정 도메인 또는 전문 지식 부족
- LLM은 광범위한 데이터를 학습했지만
- 특정 산업 분야나 전문적인 영역에 대한 깊이 있는 이해가 부족할 수 있음
- 해당 분야의 특성을 고려한 코드를 생성하는 데 어려움을 겪을 수 있음
- 코드 리팩토링 및 유지보수 어려움
- LLM이 생성한 코드는 일관성이 떨어지거나 가독성이 낮을 수 있음
- 나중에 사람이 리팩토링하거나 유지보수하는 데 어려움을 초래할 수 있음
- 설명 가능성 부족
- LLM이 특정 코드를 생성한 이유나 작동 원리를 명확하게 설명하기 어려울 수 있음
- 이는 코드의 신뢰성을 낮추고 디버깅 과정을 어렵게 만들 수 있음
- 환각(Hallucination) 발생 가능성
- 때로는 사실이 아닌 코드를 생성하거나
- 존재하지 않는 함수 또는 라이브러리를 언급할 수 있음
- 성능 및 비용 문제
- 복잡한 코드를 생성하거나 긴 컨텍스트를 처리하는 경우
- LLM의 응답 속도가 느려지거나
- API 사용 비용이 증가할 수 있음
- 복잡한 코드를 생성하거나 긴 컨텍스트를 처리하는 경우
- 윤리적 문제
- 악의적인 목적으로 사용될 수 있는 코드를 생성하거나
- 편향된 데이터를 학습하여 불공정한 결과를 초래할 수 있음
- 완벽한 이해 부족
5. 실습
- 예제 1
- 두 개의 파라미터를 입력받아 문자열로 출력하는 Flask 코드를 작성해 줘
- 예제 2
다음 코드를 설명해 줘
def residual_block(x, filters, pooling=False): residual = x x = layers.Conv2D(filters, 3, activation='relu', padding='same')(x) x = layers.Conv2D(filters, 3, activation='relu', padding='same')(x) if pooling: x = layers.MaxPooling2D(2, padding='same')(x) residual = layers.Conv2D(filters, 1, stride=2)(residual) elif filters ~= residual.shape[-1]: residual = layers.Conv2D(filters, 1)(residual) x = layers.add([x, residual]) return x
- 예제 3
다음 코드를 위한 독스트링을 작성해 줘
import requests from requests.adapters import HTTPAdapter from requests.exceptions import ConnectionError github_adapter = HTTPAdapter(max_retries=3) session = requests.Session() session.mount('https://api.github.com', github_adapter) try: session.get('https://api.github.com') except ConnectionError as ce: print(ce)
예제 4: 직접 실행해 보기
- 숫자 맞추기 게임 만들기
- 프롬프트: 파이썬으로 숫자 맞추기 게임을 만들거야. 1~100까지 무작위 숫자를 생성하고 내가 숫자를 입력하면 무작위 숫자랑 비교해서 숫자가 큰지, 작은지 알려줘. 숫자를 맞추면 몇 회 만에 맞췄는지 알려주고 게임을 종료해
- 컴퓨터의 외부 및 내부 IP 확인
- 프롬프트 1: 파이썬으로 컴퓨터의 내부 IP를 확인하는 코드를 작성해줘
- 프롬프트 2: 파이썬으로 컴퓨터의 외부 IP를 확인하는 코드를 작성해줘
- 작동하지 않는 경우: 제시한 코드는 작동하지 않아. 외부 IP를 확인하는 다른 코드를 작성해줘
- 프롬프트 3: 파이썬으로 컴퓨터의 내부 및 외부 IP를 한 번에 확인하는 코드를 작성해줘
- 텍스트를 음성으로 변환하기
- 프롬프트 1: 파이썬을 이용해서 한글 텍스트를 한글 음성으로 변환하는 코드를 작성해줘. API가 아닌 무료로 사용할 수 있는 라이브러리를 사용하도록 해.
- 프롬프트 2: 파이썬으로 gtts를 사용해서 한글 텍스트를 음성으로 변환하는 예제코드를 작성해줘
- QR 코드 생성기
- 프롬프트 1: 파이썬으로 QR 코드를 생성하는 코드를 작성해줘
- 프롬프트 2: 파이썬으로 QR 코드를 생성하는 코드를 작성해줘. 이미지 파일이 저장되는 위치를 QR_Code_Generator 폴더에 저장되도록 작성해줘.
- 프롬프트 3: QR_Code_Generator 폴더의 ‘qrdata.txt’ 파일에 저장된 데이터들을 QR 코드로 만들어줘.
- 컴퓨터 정보 확인
- 프롬프트 1: 파이썬으로 CPU, RAM, 네트워크의 사용량을 1초마다 출력하는 프로그램을 작성해줘.
- 프롬프트 2: 파이썬으로 간단한 GUI를 이용해서 CPU, RAM 사용량을 1초마다 표시하는 프로그램을 작성해줘.