320x100
320x100

코드 작성보다 리뷰가 중요해지는 변화

과거에는 프로그래밍 언어의 생산성을 주로 얼마나 쉽게 코드를 작성할 수 있는가로 평가했음

 

AI 코딩 에이전트가 몇 초만에 수백 줄의 문법적으로 유효한 코드를 만들 수 있게 되면서 사람이 직접 코드를 입력하는 속도의 중요성은 낮아짐

 

대신 사람이 맡아야하는 작업이 코드의 리뷰, 검증, 정리, 유지보수와 시스템 아키텍처, 서비스 경계, 프로덕션 안전성 및 신뢰성 확보로 이동함

 

AI는 많은 코드를 생산할 수 있지만 전체 시스템의 컨텍스트는 제한적으로 볼 수 있기 때문에 인간의 감독이 계속 필요함

 

AI를 개발팀의 새로운 구성원으로 보면 중요한 것은 AI 자체의 생성 속도보다 사람과 AI가 함께 작업하기 좋은 개발 환경임

 

 

 

 

 

Go가 처음 겨냥했던 것은 소프트웨어 엔지니어링

프로그래밍은 코드를 작성해 문제를 해결하는 활동이지만,

소프트웨어 엔지니어링은 여러 사람이 협력해 시간이 지나도 계속 발전할 시스템을 설계하고 구현하는 활동이며 프로그래밍은 그 일부임

 

이를 위해 언어뿐 아니라 개발 생명주기 전체를 지원하는 플랫폼이 필요함

팀 전체가 동일한 방식으로 코드를 구조화, 포맷, 테스트 하도록 만드는 단순하고 일관된 설계

오래된 코드가 계속 동작하도록 하는 강력한 호환성 보장

팀 규모에 맞게 확장되는 전역 의존성 관리 체계

개발 과정에 통합된 보안 도구

 

원래 인간 개발팀을 위해 만들어진 이 특성이 AI가 개발팀에 참여하면서 더욱 중요해졌다고봄

 

 

 

 

 

Go는 언어가 아니라 통합된 개발 플랫폼

Go는 처음부터 개발 생명주기 전체를 지원하는 end-to-end 도구 체계를 함께 제공함

gofmt 포매터, 기본 테스트 프레임워크, Go Modules 기반 의존성 관리, 보안 도구, 광범위한 표준 라이브러리

외부 프레임워크와 도구의 조합에 크게 의존하지 않아 프로젝트마다 개발 환경이 달라지는 정도가 줄어듦

 

AI 에이전트 역시 인간과 비슷하게 짧고 명확한 검증 루프가 필요함

정확도가 낮아지는 동시에 토큰 사용량도 증가함

Go에서는 표준 도구들을 반복적으로 실행해 결과를 즉시 확인하고 수정할 수 있음

 

Go 개발자 대부분이 동일한 핵심도구를 사용하기 때문에 런타임, IDE, 패키지 생태계가 비교적 일관되게 움직임

표준 라이브러리가 프로젝트 별 코드 구조의 차이를 줄이고 

반복적으로 예측 가능한 관용구를 만들기 때문에 인간과 AI 모두 코드를 이해하기 쉬움

 

 

 

 

 

읽기 쉬운 코드가 AI 시대에는 더 중요함

Go는 처음부터 쓰기 편한 문법보다 읽기 쉬운 코드를 우선시함

gofmt가 하나의 표준 포맷을 강제하고 복잡한 추상화 방법을 의도적으로 제한하기 때문에 작성자가 달라도 코드 형태가 비슷해짐

 

AI 개발에서는 이 특성이 더 중요해짐

코드를 생성하는 속도가 높아질수록 병목은 생성에서 검증으로 이동함

같은 논리를 표현하는 방법이 지나치게 많으면 AI가 서로 다른 스타일과 문법을 섞어 생성할 가능성이 커짐

사람은 코드가 무엇을 하려는지 파악하는데 더 많은 시간을 써야함

 

Go처럼 문법과 구조가 예측 가능하면 사람이 AI 코드에서 존재하지 않는 API 호출, 논리 오류, 보안 취약점을 더 빠르게 발견할 수 있음

 

 

 

 

 

정적 타입과 빠른 컴파일을 검증 루프로 활용

Go의 정적 타입 시스템은 AI 생성 코드에 대한 자동 안전망 역할을 함

LLM은 여러 파일을 넘나드는 구조나 타입 관계에서 오류를 만들 수 있으며 존재하지 않는 속성이나 메서드를 생성할 수도 있음

 

동적 타입 언어에서는 이런 문제가 잘 드러나지 않으나, Go에서는 컴파일 단계에서 거부됨 (존재하지 않는 메서드, 잘못된 타입 전달, 초기화되지 않은 변수 등)

 

Go는 컴파일 속도가 빠르기 때문에 AI가 코드를 생성하고 컴파일하고 오류를 확인하고 다시 수정하는 자기 교정 루프를 빠르게 반복할 수 있음

 

 

 

 

 

표준 라이브러리와 공급만 보안

Go compatibility promise는 오래된 코드가 새 툴체인에서도 계속 동작하는 것을 중요하게 다룸

운영 측면에서는 Go 프로그램이 시스템 의존성이 없는 단일 정적 바이너리로 컴파일 될 수 있음

Go 컴파일러의 크로스 컴파일을 통해 복잡한 빌드 시스템 없이 여러 운영체제와 아키텍처용 바이너리를 만들 수 있음

 

 

 

 

 

gopls, gofix, modernizer로 코드베이스를 지속적으로 정리

Go는 코드베이스를 자동으로 리팩터링하고 현대화하기 위한 결정론적 도구를 제공함

modernizer는 오래된 코드 패턴을 최신 관용구와 언어 기능으로 결정론적으로 변환함

 

동일한 도구가 생태계 전반에서 사용되기 때문에 라이브러리, 오픈소스, 서드파티 코드까지 비슷한 형태로 최신화 할 수 있음 

 

AI 에이전트 역시 이를 이용해 직접 리팩터링 로직을 만들어내는 대신 패키지 구조 변경, 의존성 관리, 기술 부채 정리 작업을 표준화된 방식으로 수행할 수 있음

 

 

 

 

 

프로덕션 데이터까지 연결되는 최적화 루프

Go 런타임에는 기본 프로파일링과 실행 추적 기능이 포함되어 있어 부하 상황에서 애플리케이션이 어떻게 동작하는지 확인할 수 있음

컴파일러는 PGO를 지원해 실제 프로덕션 프로파일을 바탕으로 최적화된 바이너리를 생성할 수 있음

이를 AI가 관리하는 배포 파이프라인과 결합하면 프로덕션 데이터 > 컴파일러 > 최적화된 새 바이너리로 이어지는 폐쇄형 최적화 루프를 구성할 수 있음

 

 

 

 

 

AI 시대에는 언어 선택이 오히려 더 중요해짐

AI가 코드 생성을 담당할수록 소프트웨어 엔지니어링의 병목은 작성 속도가 아니라 리뷰, 검증, 장기 유지보수 능력이 됨

느슨한 프로토타이핑이나 암묵적이고 영리한 표현을 우선했던 설계보다

예측 가능성과 일관성을 제공하는 언어가 대량의 AI 생성 코드를 관리하는데 유리함

 

 

 

 

 

 

 

Reference

https://news.hada.io/topic?id=32427

 

Go 언어가 AI 기반 소프트웨어 엔지니어링에 이상적인 이유 | GeekNews

AI가 코드를 대량 생성하면서 개발의 병목이 코드 작성에서 리뷰/검증/유지보수로 이동하고 있으며, 이 변화가 프로그래밍 언어를 평가하는 기준도 바꾸고 있음 Go는 처음부터 개인의 코드 작성

news.hada.io

 

300x250
728x90