맨위로가기

자동 프로그래밍

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

자동 프로그래밍은 컴퓨터가 프로그래밍 작업을 돕도록 설계된 기술로, 초기에는 기계어 작성을 자동화하는 데서 시작되었다. 현대에는 코드 생성, 변환, 기술 생략 등을 통해 개발 생산성을 높이는 데 활용되며, 코드 변환, 소스 코드 생성, 로우코드 개발 플랫폼(LCDP) 등이 그 예시이다. 생성 프로그래밍은 소스 코드 작성을 자동화하여 프로그래머의 생산성을 향상시키는 프로그래밍 스타일이며, 소스 코드 생성은 문제 설명이나 템플릿을 기반으로 소스 코드를 생성하는 과정이다. 자동 프로그래밍은 보안 및 디버깅 문제와 같은 과제를 가지고 있으며, LCDP는 비전문가도 응용 소프트웨어를 쉽게 개발할 수 있도록 지원한다.

더 읽어볼만한 페이지

  • 프로그래밍 패러다임 - 지식 표현
    지식 표현은 컴퓨터가 인간의 지식을 이해하고 활용하도록 정보를 구조화하는 기술이며, 표현력과 추론 효율성의 균형, 불확실성 처리 등을 핵심 과제로 다양한 기법과 의미 웹 기술을 활용한다.
  • 프로그래밍 패러다임 - 의도적 프로그래밍
    의도적 프로그래밍은 프로그래머의 의도를 명확히 포착하고 활용하여 소프트웨어 개발 생산성을 향상시키기 위한 프로그래밍 패러다임으로, 트리 기반 저장소를 사용해 코드 의미 구조를 보존하고, WYSIWYG 환경에서 도메인 전문가와 협업하며, 코드 상세 수준 조절 및 자동 문서화를 통해 가독성과 유지보수성을 높이는 데 중점을 둔다.
자동 프로그래밍
개요
유형프로그래밍 패러다임
분야컴퓨터 과학
다른 명칭자동 코딩

2. 역사

자동 프로그래밍의 개념은 컴퓨터 프로그래밍의 역사와 함께 발전해왔다. 초기 유니백 프로그래머 밀드레드 코스는 자동 프로그래밍을 기계어 작성의 어려움을 해결하고, 테스트된 코드를 재사용하며, 프로그래밍 프로세스를 추상화하여 상위 수준 언어에 통합하는 과정으로 설명했다. 이를 통해 인터프리터, 어셈블러, 컴파일러 및 제너레이터 개발이 이루어졌다고 한다.[3]

자동 프로그래밍이라는 용어는 시대에 따라 그 의미가 다양하게 변화해 왔다. 데이비드 파나스의 연구에 따르면, 1940년대에는 천공 카드의 펀치 처리를 자동화하는 것을 의미했고, 이후 FORTRAN이나 ALGOL과 같은 고급 프로그래밍 언어로 작성된 프로그램의 변환을 가리키게 되었다. 초기 컴파일러 중에는 Autocode라고 명명된 것도 있었다. 파나스는 "자동 프로그래밍이란, 어느 시대나 그 당시 프로그래머가 사용할 수 있는 언어보다 더 고급 언어로 프로그래밍하는 것을 의미하는 완곡어법이었다"라고 결론지었다.[17]

2. 1. 초기 역사

초기 유니백 프로그래머 밀드레드 코스는 "기계어를 작성하는 것은 여러 번거로운 단계를 포함했습니다. 즉, 프로세스를 개별 명령어들로 분해하고, 모든 명령어에 특정 메모리 위치를 할당하고, I/O 버퍼를 관리하는 것이었습니다. ...(중략)... 프로그래밍을 하면서 우리는 프로세스를 검토하고 이러한 단계를 추상화하여 상위 수준 언어에 통합하는 방법을 생각하려고 노력했습니다. 이것은 인터프리터, 어셈블러, 컴파일러 및 제너레이터(즉, 다른 프로그램을 작동시키거나 생성하도록 설계된 프로그램) 개발로 이어졌으며, 이것이 바로 ''자동 프로그래밍''입니다."라고 설명한다.[3]

자동 프로그래밍이라는 용어는 그 의미가 다양하게 변화해 왔기 때문에 정의에 대해 명확한 합의가 이루어졌다고 말하기 어렵다. 데이비드 파나스는 공개된 연구 성과를 통해 "자동 프로그래밍"의 역사를 조사한 결과, 1940년대에는 천공 카드의 펀치 처리를 자동화하는 것을 의미했다고 한다. 이후, FORTRAN이나 ALGOL과 같은 고급 프로그래밍 언어로 작성된 프로그램의 변환을 가리키게 되었다. 실제로 초기의 컴파일러에는 Autocode라고 명명된 것이 있었다. 파나스는 "자동 프로그래밍이란, 어느 시대나 그 당시 프로그래머가 사용할 수 있는 언어보다 더 고급 언어로 프로그래밍하는 것을 의미하는 완곡어법이었다"라고 결론지었다.[17]

2. 2. 현대적 발전

현대의 자동 프로그래밍은 완전 자동 프로그램 생성이 아니라, 추상도가 높은 소스 코드를 기반으로 한 코드 생성, 변환 및 기술 생략과 같은 의미로 사용된다.

자동 프로그래밍의 예시는 다음과 같다.

구분내용
코드 변환
소스 코드 생성



데이비드 파나스는 "자동 프로그래밍"의 역사를 조사한 결과, 1940년대에는 천공 카드의 펀치 처리를 자동화하는 것을 의미했고, 이후 FORTRAN이나 ALGOL과 같은 고급 프로그래밍 언어로 작성된 프로그램의 변환을 가리키게 되었다고 한다. 초기의 컴파일러에는 Autocode라고 명명된 것도 있었다. 파나스는 "자동 프로그래밍이란, 어느 시대나 그 당시 프로그래머가 사용할 수 있는 언어보다 더 고급 언어로 프로그래밍하는 것을 의미하는 완곡어법이었다"라고 결론지었다.[17]

로우코드 개발 플랫폼(LCDP)은 프로그래머가 기존의 컴퓨터 프로그래밍 대신 그래픽 사용자 인터페이스와 구성을 통해 응용 소프트웨어를 만들 수 있는 환경을 제공하는 소프트웨어이다.

3. 생성 프로그래밍

초기 유니백 프로그래머였던 밀드레드 코스는 다음과 같이 설명한다. "기계어를 작성하는 것은 프로세스를 개별 명령어들로 분해하고, 모든 명령어에 특정 메모리 위치를 할당하고, I/O 버퍼를 관리하는 등 여러 번거로운 단계를 포함했습니다. 이러한 단계를 따라 수학적 루틴, 서브루틴 라이브러리, 정렬 프로그램을 구현한 후, 우리의 과제는 더 큰 프로그래밍 프로세스를 살펴보는 것이었습니다. 우리는 어떻게 테스트된 코드를 재사용하고 기계가 프로그래밍을 돕도록 할 수 있는지 이해해야 했습니다. 프로그래밍을 하면서 우리는 프로세스를 검토하고 이러한 단계를 추상화하여 상위 수준 언어에 통합하는 방법을 생각하려고 노력했습니다. 이것은 인터프리터, 어셈블러, 컴파일러 및 제너레이터(즉, 다른 프로그램을 작동시키거나 생성하도록 설계된 프로그램) 개발로 이어졌으며, 이것이 바로 ''자동 프로그래밍''입니다."[3]

'''생성 프로그래밍'''과 관련된 용어인 메타프로그래밍[4]은 자동화가 "의류, 자동차, 화학 제품 및 전자 제품과 같은 전통적인 상품의 생산"을 개선한 것처럼[6][7] "소프트웨어 구성 요소를 자동화된 방식으로 제조하도록" 프로그램을 작성할 수 있는 개념이다.[5]

생성 프로그래밍의 목표는 프로그래머의 생산성을 향상시키는 것이다.[8] 이는 종종 컴포넌트 기반 소프트웨어 공학과 같은 코드 재사용 주제와 관련이 있다.

'''생성적 프로그래밍'''(Generative programming영어)은 제네릭한 클래스, 프로토타입 기반, 템플릿, 관점, 코드 생성 등의 기법을 사용하여 소스 코드 작성을 자동화하고, 프로그래머의 생산성을 향상시키는 프로그래밍 스타일이다. 소프트웨어 컴포넌트 등의 코드 재사용 기법과도 연계하여 사용된다.

4. 소스 코드 생성

소스 코드 생성은 문제에 대한 설명[9] 또는 템플릿과 같은 온톨로지 모델을 기반으로 소스 코드를 생성하는 과정이며, 템플릿 프로세서통합 개발 환경(IDE)과 같은 프로그래밍 도구를 사용하여 수행된다.

상대적으로 단순한 규칙에 따라 소스 코드의 패턴을 대체하는 매크로 프로세서(예: C 전처리기)는 소스 코드 생성기의 단순한 형태이며, 소스 대 소스 코드 생성 도구도 존재한다.[11][12]

ChatGPT와 같은 거대 언어 모델은 자연어로 제공된 프로그램 설명으로부터 프로그램의 소스 코드를 생성할 수 있다.[13]

4. 1. 소스 코드 생성 도구 및 예시

Microsoft Visual Studio와 같은 통합 개발 환경(IDE)은 '스니펫(snippet)' 선택, '위저드'를 이용한 GUI 설계 등 발전된 소스 코드 생성 기능을 제공한다.[9] Windows Forms에서는 폼 디자이너를 사용하여 시각적으로 GUI 부품을 배치하거나 속성을 설정하면, 대응하는 C#이나 VB.NET 프로그램 코드가 자동 생성된다.

3차원 컴퓨터 그래픽스 통합 소프트웨어 및 그래픽스 엔진 중에는, 직관적인 조작으로 각종 시각 효과 노드를 연결하여 조합함으로써, 실시간 또는 비실시간 셰이더 프로그램을 자동 생성하는 '노드 에디터'라고 불리는 오서링 도구를 갖춘 것도 있다.

.NET 프레임워크 환경의 개발 도구인 [http://www.nconstruct.com/Default.aspx?PageId=0 NConstruct]는 C# 소스 코드를 생성한다. [http://www.mygenerationsoftware.com/portal/default.aspx MyGeneration]은 .NET 프레임워크용 소스 코드 생성기로, ORM 아키텍처용 코드를 생성한다.

최신 프로그래밍 언어는 [https://www.json4swift.com/ Json4Swift] (Swift) 및 [https://www.json2kotlin.com/ Json2Kotlin] (Kotlin)과 같은 도구에서 잘 지원된다.

COBOL 코드를 생성할 수 있는 프로그램은 다음과 같다.

프로그램명
DYL250/DYL260/DYL270/DYL280 시리즈[10]
Business Controls Corporation의 SB-5
KPMG의 PMM2170


5. 로우코드 개발 플랫폼 (LCDP)

로우코드 개발 플랫폼 (LCDP)은 프로그래머가 기존의 컴퓨터 프로그래밍 대신 그래픽 사용자 인터페이스와 구성을 통해 응용 소프트웨어를 만들 수 있는 환경을 제공하는 소프트웨어이다.

6. 자동 프로그래밍의 과제

자동 프로그래밍에는 저작권 문제뿐만 아니라 코드의 보안 및 디버깅 문제도 있어, 프로그래밍 엔지니어는 자동 프로그래밍을 사용할 때 이러한 문제에 깊은 관심을 가져야 한다.[18]

6. 1. 보안 및 디버깅

자동 프로그래밍에는 저작권 문제뿐만 아니라 코드의 보안 및 디버깅 문제도 있으며, 프로그래밍 엔지니어는 자동 프로그래밍을 사용할 때 보안 및 디버깅에 깊은 관심을 가져야 한다.[18]

6. 2. 완전 자동화의 어려움

현재까지 사람의 지시 없이 프로그램을 자동 생성하는 기술은 실용화되지 않았다. 즉, 현재의 자동 프로그래밍은 완전 자동 프로그램 생성이 아니라, 추상도가 높은 소스 코드를 기반으로 한 코드 생성·변환 및 기술의 생략과 동의어이다.[17]

참조

[1] 간행물 Automatic Inductive Programming http://www.evannai.i[...] ICML 2006 Tutorial 2006-06
[2] 간행물 Software Aspects of Strategic Defense Systems https://web.stanford[...] American Scientist 1985-11
[3] 문서 On Software, or the Persistence of Visual Knowledge Grey Room 18 2004
[4] 웹사이트 About Generative Programming https://scala-lms.gi[...]
[5] 서적 Towards Generative Programming 2005
[6] 웹사이트 Generative Programming: Concepts and Experiences (GPCE) http://www.sigplan.o[...]
[7] 문서 A conference of [[SIGPLAN]] on
[8] 문서 Paying Too Much for Custom Application Development http://edgewatertech[...] 2011-03
[9] 웹사이트 Application generator https://www.pcmag.co[...] PCmag.com
[10] 웹사이트 DYL-280 Command Syntax http://www.sysed.com[...] 2018-09-03
[11] 간행물 Source-to-source code translator: OpenMP C to CUDA https://www.research[...] High Performance Computing and Communications (HPCC), 2011 IEEE 13th International Conference on. IEEE 2011
[12] 간행물 The ROSE source-to-source compiler infrastructure https://www.research[...] Cetus users and compiler infrastructure workshop, in conjunction with PACT 2011
[13] 웹사이트 ChatGPT can write code. Now researchers say it's good at fixing bugs, too https://www.zdnet.co[...] 2023-01-26
[14] 간행물 Automatic Inductive Programming http://et.evannai.in[...] ICML 2006 Tutorial 2006-06
[15] 논문 Artificial Intelligence Impact On The Labour Force -- Searching For The Analytical Skills Of The Future Software Engineers https://arxiv.org/ab[...] 2023
[16] 웹사이트 Next-Generation Coding Tools Empower Developers with Agent-Style Interactions https://www.deeplear[...] 2024-04-15
[17] 간행물 Software Aspects of Strategic Defense Systems http://klabs.org/ric[...] American Scientist 1985-11
[18] 웹사이트 Generated Code Makes Overconfident Programmers, China's Autonomous Drone Carrier and more https://www.deeplear[...] 2023-11-30
[19] 간행물 Automatic Inductive Programming http://www.evannai.i[...] ICML 2006 Tutorial 2006-06
[20] 간행물 Software Aspects of Strategic Defense Systems http://web.stanford.[...] American Scientist 1985-11



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com