주의! 아래 글을 Github Copilot 이 베타테스트를 하던 무렵에 쓰여진 글입니다.
Github Copilot 사용 방법은 https://docs.github.com/ko/copilot/quickstart 을 참조해주세요.
베타테스트 시절의 사용기라 하더라도 후기는 그럭저럭 참고하실만 할 것 같습니다.

 

Github Copilot 은 VSCode 혹은 IntelliJ 에서 코드를 자동으로 작성하도록 도와주는 AI 도구입니다.

추천해주는 코드들은 Github 에 공개되어 있는 코드 기반의 결과물이라 GPL 라이선스 코드가 들어갈 수 있다는 논란이 있습니다.

그럼에도 대체 Copilot 이란 놈은 어떤 녀석인지 호기심이 발동하여 설치해보았습니다.

 

0. Copilot 신청 및 설치

Copilot Homepage (https://copilot.github.com/) 에서 SignUp 을  클릭 후,

아래 화면에서 github 로그인, 약관 동의를 하고, 한동안 잊고 있으면, Copilot 을 설치하라는 메일이 옵니다.

 

https://copilot.github.com/
SignUp > github 로그인 후 동의 화면
마지막 화면

 

저도 언제 신청을 했었는지 완전히 잊어버렸기 때문에 얼마나 대기시간이 필요한지는 잘 모르겠습니다.

못해도 2~3 달 정도는 걸리지 않았나 싶습니다.

 

Github Copilot 메일

 

이런 메일을 받고난 뒤, Install  GitHub Copilot 을 클릭하면, https://github.com/github/copilot-docs  으로 이동합니다.

 

https://github.com/github/copilot-docs  

 

참고로 저는 IntelliJ - Kotlin 사용자로, Plug-in 설치 이후, Github 로그인을 해주면, Plug-in 을 활성화 할 수 있습니다.

 

아래는 10분사용기 입니다.

 

1-0. 의도

스트링 파일명에 바로 텍스트를 덧붙이는 함수를 만드려고 했습니다.

 

1-1. 타이핑한 코드

fun String.append2File(s:String)

 

1-2. 결과 - 추천해준 코드

 

 

2-0. 의도

위 코드는 약간 아쉬웠습니다. appendln() 같은 느낌이 필요했습니다.

그래서, 스트링의 마지막을 보고 개행문자가 아니면 개행문자를 추가하려고 했습니다.

 

2-1. 타이핑한 코드

fun String.append2File(s:String){
    s.last()
    val file = File(this)
    file.appendText(s)
}

 

2-2. 결과 -  추천해준 코드

 

 

3. 마치며

append2File() 을 만들때는 그래도 뭐랄까 함수명을 잘 정한건가 싶다는 생각이 들었는데,

한편으로는 last() 를 사용하는 경우에, 개행문자를 추가하는 코드들이 많아서 일지도 모르겠다는 생각이 들기는 합니다.

심지어 코드에 오류가 있음에도 불구하고, s.last() 를 타이핑하고 나서는 마치 제 생각을 읽고 있는 것 같아서 많이 당황했습니다.

 

 

4. 덧붙임

4-1. 주석 부분도 추천해줍니다.

4-2. 주석을 잘 써놓으면, data class 그냥 만들어 줍니다.

아래 그림은 주석을 써놓은 뒤, "data class Human"  을 타이핑하자 추천해준 코드

 

4-3. 코딩을 글쓰기에 비유하자면, 글에서 기-승-전-결 이 있는 글을 쓴다고 하면,

기-승 정도를 타이핑하면, 전-결 에 해당하는 코드를 추천해줍니다.

 

 

'Software Develop' 카테고리의 다른 글

CSV (Comma-Seperated values) 파일  (0) 2021.07.16
Github Badge - 깃헙 뱃지, 그리고, SVG  (0) 2020.10.20
Code Kata  (0) 2020.04.23

어느 날, 일련의 데이터를 간단한 텍스트 파일로 저장하려고 알아보다 보니, CSV 란 녀석이 있다는 것을 알게 되었습니다.

근본이 없는 인간인지라 DB 로 저장할까 하다가, 얼마 되지도 않는 데이터를 DB 까지 쓰는 건 좀 그렇다 싶어서,

'간단한 방법들은 무엇이 있을까?' 하고 찾아보다 보니, CSV 라는 녀석이 있었습니다.

 

1. CSV 란?

 

CSV는 C-Comma, S-Seperated, V-Values or Variables 를 뜻하는 말로,

데이터를 Comma( , )  로 구분해서 사용하는 파일입니다.

흔히 구분자 - Delimiter - 를 Comma ( , )  로 사용하는 것입니다.

일부에선 Comma ( " , " ) 대신 Tab ( "\t" ) 을 사용하거나, 스페이스 ( " " ) 를 사용하기도 해서, Character-Seperated Values 라고 불리기도 합니다.

보통 MS-Excel 이나 맥의 Numbers 같은 스프레드 시트 프로그램에서 불러들여 읽고 쓸수 있습니다.

 

'일련의 데이터' 를 저장한다고 했는데, <번호>, <이름>, <점수> 와 같은 간단한 정보 50개 정도였습니다.

그 예제는 아래와 같습니다. 보시다시피, 한 줄이 하나의 레코드를 의미합니다.

 

1,홍길동,50
2,임꺽정,60
3,김삿갓,100

 

여기서, 한 가지 의문이 생길 수 있습니다.

만약, 구분자로 Comma( " , " ) 를 사용한다면, 데이터 안에 Comma( " , " ) 는 어떻게 표시하지?

- 이 때는 따옴표 ( " \" " )를 사용합니다. 예제는 아래와 같습니다.

 

1,"홍,길동",50
2,임꺽정,60
3,김삿갓,100

 

위와 같은 사례만 보아도, CSV 포맷이 데이터 오염에 취약한 편이라고 할 수 있겠습니다.

그럼에도, 이 파일 포맷이 여전히 애용되는 이유는 데이터의 크기가 작기 때문입니다.

그리고, 입력되는 데이터가 명확하다면, (예를 들어, 데이터 안에 CRLF, Comma( " , " ), Quote ( " \" " ) 가 없다면,)

Parser 를 구현하는 것은 매우 간단, 단순하여, 굳이 잘 만들어진 Library 를 찾지 않아도 됩니다.

 

 

2. 실사용

 

(1) JAVA Library

 

- Apache Commons CSV : https://commons.apache.org/proper/commons-csv/

- OpenCSV : http://opencsv.sourceforge.net/

- Super CSV : http://super-csv.github.io/super-csv/

 

뭐랄까 'Open' 이란 키워드가 붙어있으면, 더 믿음직해보여서 일단 한 번 사용해봤고,

github 에서 검색해서 나온 결과값으로 생각보다 괜찮아 보여서 사용해봤는데,

이 조그만 스펙을 가지고도 예외처리와 사용법을 익히다 보니,

의외로 라이브러리를 잘 안 찾게 되어, 뭐랄까 추천하기는 살짝 애매합니다.

그냥 프로젝트 스펙에 맞춰 적당한 방법 혹은 라이브러리를 사용하시는 것이 무난하리라 봅니다.

 

 

(2) CSV Editor

 

본래 목적은 Excel 같은 파일에서도 조금 쉽게 편집해서 데이터를 추가한 뒤,

이 파일을 코드로 별도의 작업을 하려던 것이었는데, 의외로 MS Excel 은 한글을 가져오는데 약간의 문제가 있었습니다.

그리고, MS Excel 은 csv 확장자 파일의 기본 구분자(seperator)가 탭("\t") 이기 때문에, 별도의 작업을 해주어야 했습니다.

뭐랄까 살짝 귀찮아지는...

 

그런 측면에서, 개발툴에서 제공하는 플러그인을 이용하는 것은 괜찮은 방법입니다.

 

intelliJ IDEA CSV Plugin 화면

 

intelliJ IDEA CSV Plugin 사용 화면 : Text Editor 옆에 탭으로 Table Editor 가 추가되어 있어 사용하기 편리, 행마다 다른 글씨색은 덤

 

 

3. 마치며

 

별도의 CSV 스펙으로 '#' 을 주석으로 처리합니다.

 

현재는 '#' 을 주석처리하는 코드를 만들기가 귀찮아서, Apache Commons CSV 를 사용하고 있습니다. ㅎㅇ -_-;;

 

 

 

'Software Develop' 카테고리의 다른 글

GitHub Copilot 신청 및 사용 후기  (0) 2021.11.01
Github Badge - 깃헙 뱃지, 그리고, SVG  (0) 2020.10.20
Code Kata  (0) 2020.04.23

 

어느 한가한 날 오후 github 을 보다보니 README.md 파일에 예쁜 뱃지들이 보였습니다.

출처 : github Facebook SDK README.mdown

 

'build : passing, maven central : 8.1.0 저런 단추들은 어디서 만들 수 있는 것일까?' 하는 궁금증이 생겼습니다.

검색을 하다 보니, 가장 쉬운 방법 중 하나는 shields.io 를 사용하는 방법이었습니다.

사이트의 설명대로 아래 형식으로 링크를 걸어주면 간단한 이미지가 나옵니다.

https://img.shields.io/badge/<LABEL>-<MESSAGE>-<COLOR>

예를 들어, 위 그림과 같은 뱃지를 만들고 싶다면, 아래 코드와 같이 url 을 생성해서 만들면 됩니다.

https://img.shields.io/badge/build-passing-green 
https://img.shields.io/badge/maven central-8.1.0-green

 

 

이젠, README.md 파일에는 아래와 같은 코드 형식으로 넣어주면 됩니다.

![](https://img.shields.io/badge/build-passing-green)
![](https://img.shields.io/badge/maven central-8.1.0-green)

 

 

shields.io 를 둘러보다 보니 github 관련 기능들이 많이 있습니다.

이를 테면, github 에서 last-commit 같은 경우 입니다.

https://img.shields.io/github/last-commit/:user/:repo

출처 : https://shields.io/category/activity

 

그런데, 막상 원래 궁금했었던 Facebook SDK README.mdown 파일은 아래와 같은 url 로 이미지를 만들고 있었습니다.

![Build Status](https://travis-ci.org/facebook/facebook-android-sdk.svg?branch=master)

 

그래서, SVG 가 무엇인지 궁금해 졌습니다.

SVG, 스케일러블 벡터 그래픽스(Scalable Vector Graphics, SVG)는 2차원 벡터 그래픽을 표현하기 위한 XML 기반의 파일 형식으로, 1999년 W3C(World Wide Web Consortium)의 주도하에 개발된 오픈 표준의 벡터 그래픽 파일 형식입니다.

SVG 형식의 이미지와 그 작동은 XML 텍스트 파일들로 정의 되어 검색화·목록화·스크립트화가 가능하며 필요하다면 압축도 가능합니다. (출처 : WikiPedia)

 

간단히 설명하면, xml 로 그림을 그리는 표준 방식입니다.

이를 테면, Rect x=10 y=10 width = 100 height = 100, 이런 식으로 써놓으면, (10,10) 좌표에 너비=100, 높이=100 인 사각형을 그대로 그려주는 것입니다.

예제 코드는 아래와 같습니다.

<svg xmlns="http://www.w3.org/2000/svg" >
	<rect x="10" y="10" width="100" height="100"/>
</svg>

<rect x="10" y="10" width="100" height-"100"/>

 

위 Facebook SDK 예제에서 나온 이미지(travis-ci.org/facebook/facebook-android-sdk.svg?branch=master) 를 받아보면, 아래 코드와 같습니다. (실제 더 긴 코드이지만, 중요한 부분만 골라봤습니다.)

<svg>
  <rect rx="3" width="90" height="20" fill="#555"/>
  <rect rx="3" x="37" width="53" height="20" fill="#4c1"/>
  <g fill="#fff" text-anchor="middle" font-size="11">
    <text x="19.5" y="14">build</text>
    <text x="62.5" y="14">passing</text>
  </g>
</svg>


이렇게 필요한 텍스트와 칼라 값들만 입력해주면, 적당한 모양의 그림을 만들어 줄 수 있는 이미지를 만들어 줄 수 있습니다. shields.io 에서 생성된 파일 역시 비슷합니다.

 

참고한 사이트


Github Facebook Android SDK : https://github.com/facebook/facebook-android-sdk
Shield IO : https://shields.io
Shield IO 사용법 : https://velog.io/@loakick/Shield-IO-%EC%82%AC%EC%9A%A9%EB%B2%95-iojyndy4pi

W3C SVG : www.w3.org/Graphics/SVG/
SVG Tutorial : tutorials.jenkov.com/svg/index.html
생활 코딩 SVG : https://opentutorials.org/course/2418/13666

 

 

 

'Software Develop' 카테고리의 다른 글

GitHub Copilot 신청 및 사용 후기  (0) 2021.11.01
CSV (Comma-Seperated values) 파일  (0) 2021.07.16
Code Kata  (0) 2020.04.23

Software Develop

Code Kata

2020. 4. 23. 16:46

 

클린 코더(The Clean Coder, 단순기술자에서 진정한 소프트웨어 장인이 되기까지) - 6장 연습 을 읽다가...

Kata - 품새, 형 - 이라는 말이 나와서 간단한 글을 남겨 둡니다.

 

이를 테면, 카타는 준비 운동 같은 것입니다.

태권도에서도 품새같은 걸 연습하듯이, ('클린 코더'에서 역자는 Kata 를 품새로 번역을 했습니다.)

뭔가 코딩을 하기 전에 잠시 연습삼아 해보는 코딩을 말하는 것입니다.

저자는 매일 정해진 코딩을 하는 듯 한데, 찾아보니 https://www.codewars.com/ 에 적당한 연습 문제들이 꽤 있는 것 같습니다.

 

첫 Kotlin Kata 는 아래였습니다.

fun multiply(x: double, y: double) => x * y

잘 실행되도록 고치라는 것인데, 생각보다 대단치 않은 함정들이 있습니다.

(컴파일 후 나오는 어떤 에러메시지를 참조하지 않고, 단순히 에디터로 풀어보는 것도 괜찮습니다. ㅋㅋ)

 

저자는 마치 운동을 하기전, 준비 운동도 하고, 운동을 마친 후, 몸 풀기? 마무리 운동을 하는 것처럼 Kata 를 한 번씩 해보라는 정도입니다.

어떤 운동을 하기 전에 이런 준비/마무리 운동을 하는 것은 부상을 예방하거나 근육에 무리를 덜 가게 한다던가 하는 연구 결과들이 있을 듯 하지만, 코드 카타는 솔직히 그런 연구 결과들이 나오기는 어려운 녀석임에는 틀림없습니다.

코딩을 하기 전에 연습문제 하나 풀었다고 버그의 갯수가 줄어든다던가 혹은 만드는 시간이 줄어들었다던가 하는 것들은 측정하기 어려운 일일 것입니다. (S/W 개발 분야가 대부분 측정하기 힘든 것들 투성이이긴 합니다. ㅋ)

 

하지만, 간혹 Best Practice 나 남들이 풀어놓은 것들을 보다 보면, 평소에 내가 잘 모르던 api 들을 알게 될 수도 있고, 이런 식으로 코딩을 할 수도 있구나 하고 얻게 되는 것들도 있습니다.

그리고, 비록, 코딩하는데 도움이 될지/아닐지, 좋아/나빠 를 똑 부러지게 이야기하기는 어렵지만, 좋은것 같다? 나쁘지는 않다 정도

며칠 혹은 몇주간 매일 연습삼아 하나씩 해본 뒤, 괜찮다고 생각되면 습관처럼 계속 해보는 것이 좋을 것 같습니다.

 

P.S. 카타는 알고리즘 문제처럼 빠르거나 최적의 해결안을 내놓는 것을 목적으로 한다기 보다는 단순한 코드를 지향(?)한다고 볼 수 있습니다. 그래서, 몸 풀기용 문제로 어려운 문제보다는 쉽게 풀 수 있는 문제들이 많습니다.