소프트웨어 개발을 업으로 삼고 오랜동안 일하며 느끼는 것 중의 하나는 빠른 IDE 의 발전속도이다.

처음으로 IDE 라는 개념을 접하게 된 것은 Borland 사의 Turbo-C IDE 였으며 이후 Vim, MS 의 Visual Studio, Eclipse, IntelliJ 와 VSCode 등의 IDE 도구들을 써왔으며, 그 도구들의 기능 중 가장 큰 발전이 있었다고 느끼는 부분은 바로 Code Assist 기능이다.

 
대표적으로 Visual Studio 의 Intelli Sense, JetBrains 의 IDE (IntelliJ IDEA, PyCharm, WebStorm 같은) 의 Code Completion, Eclipse 의 Code Assist, Sublime 같은 Text Editor 의 Auto-Completion 기능들이 이러한 Code Assist 기능이며, 요즘은 이러한 Code Assist 기능 없이는 개발 생산성이 떨어지는것은 물론이고 개발이 불가하다고 느끼는 개발자들도 많을 것이라 생각한다.
 
 
OOP 언어라면 보통 Object 에 "." 을 찍으면 IDE 에서 자동으로 해당 Object 의 Class 및 현재 Code 의 Context 를 분석하여 사용 가능한 Method 및 Attribute 등을 위 화면처럼 Popup 으로 알려준다. 그리고 이렇게 추천된 목록에서 Enter 나 Tab 을 누르는것 만으로 오타 없는 정확한 Keyword, Method, Attribute Name 이 입력된다.
 
만약 이런 Code Assist 기능이 없이 Notepad 에서 수백개의 Class, 수천개의 Method 와 수만 라인의 코드를 개발해 나아가야 한다고 생각하면 정말 Hell 일 것이다.
 
아래는 Code Completion 기능의 예시 이다. 변수, 코드의 일부만 입력 하더라도 현재 Context 에서 입력 가능한 Attribute, Method 나 Keyword 등의 추천이 실시간으로 표시 되며 이 또한 Enter 나 Tab 을 누르는것 만으로 오타 없고 Context 에 맞는 오류 없는(물론 컴파일 오류이지 런타임 오류가 없다는건 아니다) 코드를 입력할 수 있다. 이 얼마나 생산적이고 개발자의 시간과 노력을 아껴주는 일인가!?
 
 
 
요즘 이러한 Code Assist 기능은 기본 기능만으로도 완벽하다고 느꼈었지만 여기에서 만족하지 못한 업체나 개인들이 IDE 의 Plugin 개발을 통해 특정 Framework 을 사용 시 더 생산성있게 코딩할 수 있도록 하거나 심지어 Variable 이나 Attribute, JPA Repository Method 의 Naming 을 자동으로 Assist 해주는 기능, Design Pattern 을 코딩에 쉽게 적용할 수 있는 플러그인 등을 개발하여 배포하고 있으며, 개발자는 점점 이러한 Code Asssist 기능에 의존해 가는 추세이다.
 
 

◼︎ AI Code Assist 가 나왔다!

이러한 Code Assist 기능들의 눈부신 발전에 '이제 더 나올만한 Assist 기능이 있을까?' 하고있던 중 또 지금으로서는 "끝판왕" 이라고 할만한 Assist 기능이 나왔다. 바로 AI Code Assist 이다.
 
기존의 Code Assist 기능이 현재 Code 의 Context 와 전체 프로젝트 내 소스코드 및 리소스의 Indexing 을 통해 사용 가능한 Method 나 Rule 기반의 Code Snippet 을 추천해 주었다면, AI Code Assist 기능(주로 IDE 의 Plugin 형태)은 이러한 보조 외에 현재 코드의 Context 를 이해하고 "앞으로 개발 될 것 같은 코드를 미리 예측" 하여 "코드 조각 또는 장문의 코드를 생성하여 추천" 해준다.
 
위 코드의 경우 나는 mongoTemplate 까지만 쳤는데 나머지 코드들은 AI Code Assist 기능 (Github Copilot) 이 알아서 추천해준 경우이다. Method 의 Name 이나 변수명, 내 프로젝트의 코드들의 패턴, Gihub 의 무수한 코드들을 학습한 AI 가 '응 너 지금 이런 코드를 만들려고 하는거지?' 하며 코드를 추천해주는 것이다. 그런데 이러한 코드는 정말 말도 안되게 내가 하려던 의도의 코드인 경우가 많다.
 
만약 내가 개발하려는 의도의 코드가 아니더라도 내가 생각한 코드를 만들어 가는 도중에 추천 코드는 계속 변경되고 다시 추천된다. 나도 결정하거나 생각하지 못한 부분의 코드까지도 미리 완성하여 실시간으로 추천해주는 기능을 겪어보면 "와.. 이제 개발자 필요없네" 라는 말이 절로 나온다.
 
이러한 코드 추천은 나의 프로젝트와 현재 Code 의 Context , Github 의 코드 학습을 통해서 자동 생성되는것 뿐만이 아니다. 아래 예시를 보자.
 
위 코드에서 나는 // 이후의 주석만 한줄 만들었다. 주석을 심지어 한글로 썼다. 그리고 Enter 를 치자 그 아래로 저런 코드가 만들어진다.
난 처음 이런 기능이 실행 되었을 때 '미쳤다..' 라는 말이 나왔다.
 
반대로 코드를 분석하여 주석을 (그것도 한글로!) 달아주는 기능도 된다
위 코드에서 나는 // account 까지만 입력했다. 그런데 그 뒤 문장인 "컬렉션의 변경사항을 감지하여 로그를 출력한다." 라는 주석을 알아서 생성해준다!
 
정말 감탄스러운 기능이다. 주석을 코드로 만들어주고 코드를 해석하여 주석을 만들어 주며, 내가 개발중인 코드의 의도를 파악하여 코드의 남은 부분을 완성해주는 AI Code Assist 는 정말 충격적이다.
 
 

◼︎ 얼마나 효과적일까?

 
위의 간단한 몇가지 예시 만으로도 그 효과는 굳이 말로 설명하지 않아도 알 수 있을것이라 생각한다. 코드 개발의 진행을 분석하여 의도를 추론하고 깔끔한 형태의 코드로 귀신 같이 내가 만들려고 하던 나머지 부분을 미리 작성하여 추천해주는 기능은 최소 0.5 명 이상의 도움을 나에게 주어 나의 개발 생산성을 높여준다.
 
주석을 미리 작성하고 그 주석에 맞는 코드를 개발해 나아간다면 직접 코딩하는 분량은 매우 적어지고 나머지는 AI 가 코딩 해주도록 가능하므로 요구사항과 설계에 맞는 코드를 작성하는데 도움을 주어 코드의 품질을 높일 수 있다.
 
작성된 코드를 해석하여 주석을 생성해주는 기능을 활용하면 저렴한 비용과 시간을 투자해 코드의 가독성과 유지보수성을 높일 수 있다.
 
이러한 효과 외에도 다양한 오픈소스를 학습한 AI 가 추천해주는 코드로 개발자의 기술 도메인이 약한 부분의 코드를 작성할 때 Learning Curve 를 상당히 단축시킬 수 있다.
 
믿을 수 없겠지만 위의 코드에서 내가 한 것이라고는 파일 이름이 고차함수_테스트.kt 라는 Kotlin 파일을 만들고 "Int 를 받아서 .." 정도 까지를 써주고 shifter 라는 변수를 선언하는 정도의 타이핑만 했을 뿐 나머지는 대부분 추천하는 Code Completion 을 "선택" 한 것 뿐이다.
 

◼︎ Github Copilot

현재 가장 많은 개발자들이 사용하는 AI Code Assist Plugin 은 Github Copilot 이다.
ChatGPT 가 올해 2월 경 부터 급격히 인기를 얻으면서 GPT-3 모델을 활용한 Code 와 주석 Generate 를 해주는 Copilot 이 더욱 인기를 얻고 있는것 같다.
 
이후 글 부터 틈나는대로 개발자를 위한 Copilot 기능 활용 예시와 기회가 된다면 다른 Plugin 들도 사용해가며 글을 이어나아가 보겠다.
또한 개발자를 위한 나른 AI Tool 들이 있다면 사용해보고 글을 올려볼 생각이다.
 
 
 
 
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

두서 없이 말하는 사람, 일 처리가 매끄럽지 않은 사람, 같은 시간 공부를 해도 머릿속에 남는게 적은 사람, 집중력이 떨어져서 욕먹는 사람 들 대부분의 공통점 중 하나가 주변이 어수선 하다는 것이다.

정리를 하면 좋은것은 안다 단순히 기분이 상쾌해지기 때문일까? 그러한 긍정적인 효과도 있겠지만 더 중요한것들을 이 정리정돈 이라는 행동의 결과로 얻을 수 있다.

당장 내가 자주가는 온라인 서점 사이트에서 “정리” 라는 키워드로 “자기계발” 분야에서 검색되어 나오는 책의 권수만 해도 2023.07.10 기준으로 238 권이나 된다.

시중에 자기계발서에 이렇게 많은 “정리” 와 관련한 책들이 있는 이유가 무엇일까? 이유는 정리는 자기계발에 매우 큰 영향을 끼치며 정리를 하여 무엇인가를 얻기 위한 목적이 있기 때문이다. 단순히 상쾌함 만을 느끼기 위한 기분전환 효과나 정리 자체로 느낄 수 있는 성취감 이상의 것이 있다.

 

정리의 목적

정리라는 단어는 “주변 정리” Arrangement, “문서 정리”, “노트 정리” 등과 같은 Organization, “창고 정리” Clearance, “사업 정리” Liquidation, “채무 정리” Settlement 등과 같이 여러 의미로 쓰인다.

‘우리나라 말은 왜이리 단순해?’ 라고 느낄 수도 있으나 사실 다른 영어단어들 속에서도 공통점이 있다. 바로 “깨끗한 상태로 만든다” 라는 의미를 포함하고 있다는 것이다.

깨끗한 상태로 만드는것이 왜 중요할까? 깨끗한 상태로 만드는 것은 “효율성” 과 관계가 있다. 본질적이지 않은 것들을 치워 깨끗한 상태로 만들면 우리는 본질에 집중할 수 있기 때문이며, 이때 다른것에 에너지를 낭비하지 않기 때문에 같은 에너지로 정리되지 않은 속에 있는 사람들 보다 더 효율적으로 핵심 가치를 얻어낼 수 있기 때문이다.

공부하려고 할 때 주변이 정리되어 있으면 공부하는 것에만 집중할 수 있게 되어 효율적으로 공부가 가능하고, 문서정리가 잘 되어있으면 어떤 문서 내용을 찾으려 하거나 빠르게 내용의 핵심을 파악해야 할 때 관련 없는 문서나 주변 내용을 보느라 시간을 허비하지 않아도 된다.

노트정리 리뷰를 통해 핵심 내용을 중심으로 뇌에 강한 연상력을 불러일으켜 망각곡선을 늦추어 공부한 내용을 오랜 동안 기억할 수 있게도 할 수 있으며, 수익성이 낮은 사업정리를 통해 핵심 사업에 더 집중할 수 있도록 한다.

이렇게 정리라는 행동한정된 노력으로 최대한의 효과를 내기 위한 목적을 이루기 위한 과정의 수단이며, 집중하기 어려운 상황에서 주변을 깨끗이 정리하여 본질을 정확히 대면하기 위한 강력한 도구이다.

반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

 Stable Diffusion 이 무엇인지는 대부분 알기 때문에 이 글을 보고 계신다고 생각하니, 일단 Stable Diffusion 에 대한 소개는 건너뛰고 가보겠습니다. 이 부분은 나중에 아주 자세히 글을 한번 올려보겠습니다.

 

Colab 은 무엇인가

 Google Colab은 구글이 제공하는 클라우드 기반의 무료 Jupyter Notebook 환경입니다. 주로 파이썬 라이브러리를 사용하여 데이터 분석 및 머신러닝 모델링 등 다양한 작업을 할 수 있습니다.

사용자가 자신의 브라우저에서 코드를 실행하고 실행 결과를 확인할 있으며 사용자는 Google Drive에 데이터를 업로드하고, 해당 데이터를 Colab에서 로드하여 분석에 활용할 수 있습니다. 또한, Colab은 GPU나 TPU와 같은 하드웨어 가속기를 제공하여, 대용량 데이터셋의 학습을 더 빠르게 처리할 수 있습니다.

또한 Colab 의 Notebook 은 마크다운과 코드 셀 등 다양한 셀 유형을 지원하며, 코드 셀에서는 파이썬 코드를 실행할 수 있고, 다양한 라이브러리와 모듈이 많이 설치되어있습니다.

중요한것은 이러한 환경이 무료로 제공되며, 구글 계정으로 로그인만 하면 바로 사용할 수 있습니다. 이래서 Google Colab 은 저처럼 가난한 GPU 서버 없는 사용자가 AI Model 을 테스트 하거나 하기에 Google신이 내려준 축복같은 선물이라고 보면 되겠습니다.

 

어떻게 Colab 에 설치해야 하나

 네 Colab 에 "설치" 한다는 개념은 사실 딱 맞는 개념은 아니고요, Colab 에 Jupyter 노트북을 만들어서 그 노트북에서 Shell Script 및 Python Script를 실행시켜 필요한 File 들을 VM 에 설치하게 하고 (VM 은 Command Shell 로 접근이 안됩니다) Python 으로 개발된 Web UI 가 실행되어 Browser 로 Web UI 서버를 접근하게 하는 형태입니다.

 일단은 아래 URL 로 접근해봅니다.

https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Online-Services

Web UI 를 개발한 AUTOMATIC1111 이라는 개발자의 Github 내의 Wiki 인데, 여기에 보면 Google Colab, Paperspace, SageMaker 용 Jupyter 노트북용 스크립트들의 Link 가 있습니다

이 중 밑줄의 camenduru 라는 사람의 노트북을 써보기로 하겠습니다. camenduru 의 Github README 아랫쪽으로 스크롤 하다보면 아래와 같은 Link 들이 있습니다.

여러 Model 들이 preset 된 Jupyter script 들이 있는데요,

이중 저걸 설치해보겠습니다. 

링크를 클릭하면 CIVITAI (AI 생성 모델 과 모델로 부터 생성한 이미지들을 공유하는 사이트) 나 Huggin Face 커뮤니티 사이트(딥러닝 모델 및 데이터셋 공유 커뮤니티)로 연결 되니 대략 어떤 모델인지를 확인해볼 수 있습니다.

대략 확인했으면, 파란색 Link 가 아닌 좌측의 "stable" 이라고 되어있는 이미지 버튼을 누릅니다.

그러면, 실제 Colab 용 Jupyter 노트북으로 이동합니다. 저 노트북을 공유한 사람의 노트북인것이죠.

그리고 저 박스 안의 "Drive로 복사" 버튼을 눌러 나의 Google Drive 로 복사를 해줍니다. 

그러면 이제 복사가 완료되었을 것이고 바로 나의 Colab 으로 오게 됩니다.

 

이제 이 노트북을 실행시킬 VM 을 연결해주는 작업을 합니다. 아래 처럼 화면 우측 상단의 "연결" 을 눌러봅니다.

아래 처럼 할당된 리소스가 나오거나, 만약 연결한적이 없다면 런타임 유형을 선택하라고 나오는데 여기에서 "GPU" 를 선택하시면 됩니다.

만약 런타임 유형 선택 화면이 안나오면, 화면 하단의 "런타임 유형 변경" 을 누르시면 됩니다.

이제 Script 의 좌측 Play 버튼을 눌러서 실행시키면 됩니다

 

설치 후 첫 실행

 좀전에 실행시킨 스크립트창 하단에 보면 아래와 같은데 보일겁니다.

저 링크들이 Colab 에서 실행된 Web UI 서버로 접근할 수 있는 URL 입니다. 이중 클릭 해서 접속 되는 URL 로 들어가보시면 됩니다

접속이 잘 되었다면, 

prompt 란에 대략 내가 생성하고 싶은 이미지의 키워드들을 떠올려 넣어보시고, 필요하다면 바로 아래의 Nagative Prompt 에도 포함되면 안되는 요소의 키워드들을 넣어봅니다. 

그리고 저 빨간색 Generate 버튼을 누르면 시간이 흘러 image 가 생성 되고,  

하단의 Save 버튼을 누르면, 파일 이름이 그 밑의 목록에 추가 되고 "Download" 버튼을 통해 해당 이미지를 다운로드 받을 수 있습니다.

만약 Batch 로 생성(다음에 더 설명 예정입니다)하거나 하여 여러 이미지가 나왔다면 "Zip" 을 선택하여 모든 이미지들을 Zip 으로 묶어 다운로드 받을 수도 있습니다.

 

결론

 집에 사양 좋은 Windows Notebook 이 있어서 (NVIDIA 칩 GPU 있는) Local 에서 설치해서 사용하려 했으나 역시나 요구사양대로 4GB 이상의 VRAM 이 아닌 1GB 의 VRAM 노트북이라 실행이 불가했기에 Colab 에서 설치하고 실행하는 방법만 우선 올려봅니다.

 앞으로 여러 모델을 활용하고 다양한 파라미터들을 조작해서 내가 원하는 이미지들에 최대한 근접한 이미지를 만들어가는 방법도 올려보겠습니다. 

 또 다른 기술들과 접목을 하거나 유튜버들이 이야기하는 돈벌기 부업이 정말 되는지도 검증해보고, 다른 Generative AI 서비스나 도구들도 사용해보면서 다양한 컨텐츠를 만들어볼까 생각합니다. 응원 플리즈~

... 

그나저나 camenduru 의 README 를 보다보니 좀 암울한 얘기가 있네요.. 조만간 Stable Diffusion Web UI 사용이 Colab 에서 불가능할수도 있겠네요. Colab 팀이 Stable Diffusion Web UI 를 사람들이 너무 많이 돌려서 GPU 가 터질것 같은데 팀에 예산이 없어.. 조만간 뭔가 조치가 취해질 수 있다는 얘기네요.. 

반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,