AI Code Assistant 주저리주저리
개요
내가 진짜 공부하고 싶은 부분 아니면 요즘 코드 대부분을 AI가 짜준다. 내가 코드를 직접 짜는 경우는 겨우 없고 짠 것을 검토만 하는 식이다. 근데 이게 막상 코드를 검토할때는 다 이해하고 맞지맞지 하지만 막상 남이 와서 물어보면 해당 부분의 코드를 쭉 내리며 헤매고, 또 그 코드를 이해하기 위해서 cmd를 누르고 사용된 함수를 모두 다시 읽어봐야 하는 상황이 일상이 되었다.
그래서 어느 순간부터 코드 관리에 큰 초점을 두고 ai를 사용한다.
나는 어느 방식으로 ai를 활용해 코드를 짜는지 간략히 풀어보겠다.
변경 사항마다 문서를 만들어두기
가장 먼저 일정 사이즈 이상의 change를 만들 때마다 무저간 문서를 같이 생성해달라는 거다. 무엇이 바뀌었고, 왜 바뀌었고, 어떤 영향이 있는지 정리한 짧은 markdown 한 장씩.
생각보다 효과가 큰데, 매번 ai에게 예전 코드들을 참고하라고 하지 않아도 되고 나중에 비슷한 방식의 수정이 필요할때 해당 md를 함께 첨부해서 다음 md 파일 참고해서 해당 변화를 지금 파일에도 적용해달라하면 아주 잘해준다.
또 이런 변화들이나 차이점을 시간 순서에 따라 날짜별로 정리 해 놓으면 코드의 히스토리를 따라가는데 많은 도움이 된다.
사실상 프로젝트의 메모리를 외부화하는 셈이다.
내부 라이브러리나 안 유명한 함수 쓰기
LLM은 교내에서 쓰는 작은 내부 라이브러리나 유명하지 못한 라이브러리들을 잘 쓰지 못하는데. 무식하게 매번 할때매다 문서 전부나 링크하나 띡 보낼수도 없고 상당히 귀찮아진다.
그래서 프로젝트 폴더 안에 별도 문서 디렉토리를 만든다.
- 라이브러리 공식 문서가 웹에 있으면 → 큰 섹션 별로 싹다 긁어서 ai가 잘 이해할수 있게 md로 정리해달라 하고
- PDF 같은 다른 포맷이면 → 그것도 통째로 던진 다음 같은 일을 시킨다. (만약 사진이나 뭐 잡다한게 많으면 따로 잘 md로 할수 있게 조치를 치해야 겠다.)
- 이걸로도 충분하지만 섹션별로 쪼개달라 하고 이걸 한눈에 볼수 있는 index도 md로 만들어 달라한다. 이러면 필요한 문서를 좀더 잘 찾을수 있다.
그리고 작업할 때 “이 기능 추가해줘” 하면서 관련된 md 문서를 같이 참고하라고 명시해준다. (인간 RAG 느낌) 또한 섹션 별로 markdown 파일을 쪼개니까 토큰도 적게 먹고 더 정확한거 같다.
작은 프로젝트들만 하니까 자동화된 RAG 시스템 안 써도, 어떤 작업에 어떤 문서가 필요한지는 내가 제일 잘 아니까 수동으로 끼워넣는데 스케일 커지면 자동화 시키면 좋을거 같다.
모듈화 하기
코드 짜달라고 할 때마다 최대한 모듈화 시켜달라 한다.
이유는 단순하다. 나중에 어떤 한 부분을 수정하고 싶을 때, 파일이 1000줄짜리 거대한 덩어리면?
- AI가 그걸 전부 읽고 작업해야 한다
- 시간도 오래 걸리고, 토큰도 많이 먹고
- 무엇보다 수정하지 말아야 할 곳까지 건드리는 경우가 많았다. (e.g. 왜 모델 구조를 크게 바꾸면 이러한 경우에는 이 평가지표가 좋다거나, dataset을 좀 변형해서 넣으면 좋다고 지멋대로 바꿀까?)
그래서 처음부터 기능 단위로 잘게 나누고, 각 파일이 하나의 책임만 갖도록 구성하라고 한다. 그래야 나중에 이 파일만 수정해줘라고 편하게 쓸수 있긴한데 파일이 너무 많아져서 결국 나중가면 또 하나의 큰 파일이 되는데 어떻게 관리할지는 좀더 고민해 봐야할거 같다.
느낀점 및 주저리 주저리
지금까지 ai를 큰 생각없이 쓰고 있었는데 내가 어떻게 쓰고 있는지 생각하며 글을 쓰다보니 보완할수 있는 부분이 있음을 자각할수 있었다. 또한 사람들과 공유하면서 어떻게 하면 ai를 잘쓸수 있을지 알게 되었다.