들어가기 전에
이 글은 전편과 이어집니다! 혹시 전편을 보지 않으셨다면 [우테코][DevLog] IntelliJ 플러그인 개발 일지 1을 먼저 읽어주시면 감사하겠습니다!
그리고 DevLog를 사용해보고 싶으신 분들은 여기를 클릭해주세요!
그럼 시작하겠습니다🔥
5. AI를 이용한 바이브 코딩을 통해 뭘 배웠어?
저는 인텔리제이 플러그인을 어떻게 만들어야 할지 몰랐지만, AI를 통해 코틀린의 필수 문법과 플러그인이 제공하는 api를 학습할 수 있었습니다. 그리고 저는 프로젝트를 할 때, 내가 생각한 기능을 실제로 구현할 수 있는지와 정말 필요한지를 항상 고민합니다. 그렇기에 이런 부분에서 저는 AI를 적극적으로 사용하여 프로토타입을 만들고, 가능한 부분과 실제로 필요한 부분을 빠르게 피드백 하여 보다 더 완성도 있는 결과물을 만들어 낼 수 있었습니다.
하지만 단점이 명확했습니다. 뻔하긴 하지만, 이해하는 코드보다 이해하지 못하는 코드가 훨씬 더 많았기에 시간이 지날수록 소위 말하는 스파게티 코드가 되어갔습니다. 혼자 개발하는 것이라면 상관 없겠지만, 여러 사람이 장기적으로 사용해야하는 프로젝트라면 이 코드는 아무도 손을 대지 못하는 코드일 것 입니다.
이렇게 AI를 통해 처음부터 끝까지 완성해보면서 AI를 어디까지 어떻게 사용해야 생산성이 올라가는지 나름의 기준과 깨달음을 얻을 수 있었습니다. AI는 프로토타입을 만들거나 아예 모르는 것을 간단하게 경험할때는 좋은 도구이자 멘토가 됩니다. 하지만 AI에게 내가 모르는 것을 계속 맡기다 보면 위 설명처럼 스파게티 코드가 되어버릴 것입니다. 따라서 보다 좋은 코드를 만들기 위해선 내가 알고 있는 것을 AI에게 시켜야 합니다. 코드 수백줄을 몇 분만에 입력하고 사용자에게 결과물을 보여줍니다. 이렇게 AI는 정말 타자가 빠릅니다(?). AI를 새로운 코드를 만들게 하고 그걸 확인하걸 사람이 하는게 아니라, 내 머릿속에 있는 코드를 AI에게 타자로 쳐달라고 해야합니다. 그렇게 되면 AI가 나오는 코드는 내가 아는 코드이기 때문에, AI가 생성했지만 관리가 가능한 생산성을 만들어 낼 수 있습니다.
AI를 이용해 플러그인 완성을 했기 때문에, 저는 이제 직접 개발을 하기로 했습니다. 아래는 조금은 단편적일 수도 있지만, 직접 개발하면서 만났던 느꼈던 점과 기억에 남는 에러를 정리해보았습니다.
6. 직접 개발하면서 무엇을 느꼈어? - 기능 개발
코딩을 한 시간보다 플러그인 구조 이해와 테스트 코드 설계 시간이 정말 오래 걸렸습니다. 그래서 실제 개발한 시간의 비율을 생각해보면 화면 째려보기 55%, 코딩하기 45%로 실제로 코딩한 시간은 생각보다 적었습니다. 특히 메모 생성 기능을 만들 때, 인텔리제이의 에디터를 직접 가져와 통합 테스트를 할 수 있었습니다. 이렇게 하다보니 또 새롭게 알아야 할 지식이 생기고 어떻게 하면 좋은 테스트 코드를 만들 수 있을지 고민을 계속 하다 보니 시간은 가고 개발 진도는 나가지 않았습니다.
그래서 저는 좋은 테스트 코드를 짜는 것을 과감히 포기했습니다. 많이 고민하면 좋은 결과를 만들어낼 수 있을 것입니다. 하지만 시간과 체력은 유한합니다. 어느정도 고민을 했으면 생각에 확정을 짓고 행동을 하면서 그 고민이 맞았는지 틀렸는지를 알게 됩니다. 철저히 배우는 입장에서는 좋은 코드를 지향하기 위해 고민하되, 너무 생각 속에 얽매이면 행동에서 얻는 경험을 하지 못한다는 것을 알았습니다.
7. 직접 개발하면서 어떤 오류를 만났어? - 기능 개발
가장 기억에 남는 오류는 기능과 화면을 모두 개발하고 통합 테스트를 할 때 나타난 "Note 저장 불가 문제"였습니다. 인텔리제이 플러그인 프레임워크에서는 데이터를 저장할 때, PersistentStateComponent를 이용해서 만든 레포지토리에 저장합니다. 플러그인 프레임워크는 정보를 xml 형태로 저장하고, 플러그인이 실행되면 이를 메모리로 띄워 관리해 플러그인이 적절한 타이밍에 xml로 저장합니다. 이때 필요한게 state라는 필드입니다. 정보를 불러올 땐 loadState() 라는 메서드를 이용해 xml 데이터를 메모리로 가져와 state를 저장합니다. 그리고 state에 변경이 일어나면 플러그인은 데이터가 변경되었다고 판단하고 추후에 xml에 변경사항을 저장합니다.
저의 문제는 플러그인이 데이터가 변경됨을 감지하지 못해서 일어났던 문제였습니다. 제가 만든 updateNote()의 기본 로직은, 사용자가 노트 내용을 바꾸면 내용이 수정된 Note 객체를 NoteState로 변환해 state에 바로 덮어 씌우는 방식이었습니다. 이때 state는 객체가 아예 새로 바뀌어 변경이 되었는지 감지를 못하게 되었고, 그렇기 때문에 변경 사항이 저장되지 않았던 거였습니다. 저는 이를 해결하기 위해 중간에 NoteStorageState라는 data 클래스를 만들어 필드로 NoteState를 받도록 했습니다. 이렇게 구현을 하면 NoteState를 완전히 덮어 씌워도 NoteStorageState 객체는 사라지지 않아 state가 변경됨을 감지할 수 있게 됩니다. 저는 이 부분이 기존에 사용했던 MySql과 많이 달라 기억에 남는 오류였습니다.
8. 직접 개발하면서 어떤게 아쉬웠어? - 화면 개발
이번 프로젝트를 하면서 3주라는 시간이 정말 빠르게 흘러갔던 것 같습니다. 그리고 부족한 시간에서 저는 플러그인 ui 개발이 가장 아쉬웠습니다. 기능 개발을 완료하니 화면을 완전히 개발하기에 시간이 부족했습니다. 그래서 저는 화면 개발을 처음부터 다시 하는 것이 아니라, 기존에 AI를 이용해 만들었던 화면의 코드를 가져와 리팩토링하는 식으로 화면 개발을 진행했습니다. AI가 짠 코드는 생각보다 많이 처참했습니다. 한 코드 파일에 천 줄이 넘는 코드가 있어 이를 리팩토링하고 저의 서비스에 다시 맞게 연결하는 것이 정말 어려웠습니다. 시간의 부족으로 서비스를 연결하는 것은 모두 성공했지만, 그 코드를 완벽히 이해하고 효율적으로 리팩토링하는 것에는 실패했습니다. 이런 실패는 아쉬움이 많이 남습니다. 그래도 지금까지는 항상 시작부터 설계하며 코드를 만들어기만 했었는데, 처음으로 이미 있는 코드를 리팩토링 해보며 좋은 경험을 하게 되었습니다.
9. 3주 간의 오픈미션, 그리고 6주간의 프리코스를 마무리 하면서
이번 프리코스를 하면서 돌아보면 아쉬웠던 부분들도 많았습니다. 하지만 스스로 그리고 스터디와 커뮤니티를 하면서 배웠던 점도 많았고, 이 시간이 의미 있었냐고 물어본다면 여지없이 그렇다라고 말할 것입니다. 미션을 하면서 좋은 코드에 대해 고민하며 테스트 짜는 습관을 만들었고, 오픈미션에서 완벽한 TDD는 아니었지만 테스트 코드를 먼저 짠 뒤 개발하는 습관이 자연스럽게 드러났습니다. 프리코스에서 만들었던 좋은 습관은 아마 시간이 지나도 저의 고유한 개발 습관으로 남아있을 것 같습니다. 그리고 이렇게 습관을 만드는 방법을 배우게 되어, 이제 새로운 습관을 만들고 싶을 때 어떻게 해야할지도 알게된 것 같습니다.
그리고 매주 감상문과 회고를 적으면서 글을 쓰는 시간을 가지다 보니 예전보다 글쓰는 실력이 많이 늘었습니다. 물론 지금도 많이 부족한 글쓰기 실력이지만, 이번 프리코스를 하면서 앞으로도 글을 꾸준히 쓰면 더 좋은 개발 일지와 생각을 적을 수 있을 거란 자신감을 만들 수 있었습니다.
마지막으로 프리코스에서 배웠던 것은 나와 시간을 관리하는 방법이었습니다. 저는 6주동안 대학교 수업과 중간고사, 그리고 프로젝트와 우테코 프리코스 미션, 프리코스 스터디를 병행했습니다. 너무 바쁜 시간을 보내다 보니 어느 순간 '내가 지금 하고 있는 일들을 모두 제대로 하고 있나?'라는 생각이 들었습니다. 일주일에 2-3번은 밤을 새고, 수업에서는 졸고 할 일이 밀려 결국 또 밤을 새고.. 이런 과정 속에서 학교에서 꼭 들어야하는 특강도 잊어 못갈 뻔 했었습니다. 이런 혼돈을 지속적으로 경험하다 보니, 할 일과 일정을 잘 정리해 관리하고자 불렛저널이라는 것을 쓰기 시작했습니다. 불렛저널을 쓰면서 할 일에 치여살면서 오늘 할 일을 내일로 미루는 것이 아니라, 계획한 일을 모두 끝내는 경험을 했습니다. 누군가에겐 정말 당연한 일 일수도 있지만, 저에게는 인생 처음 이었습니다. 그리고 어쩌면 이렇게 바쁘지 않았더라면 오히려 이런 값진 경험을 하지 못했을 것 같습니다.
10. 이제 뭐 할거야?
DevLog 마켓 플레이스 등록
저는 우선 이번 오픈미션에서 만든 인텔리제이 플러그인을 마켓플레이스에 등록할 것입니다. 사실 이미 했어요ㅎㅎ

과정이 많이 어려울 줄 알았는데, 다 만들어진 것을 등록해 신청하는 것은 생각보다 간단했습니다. 승인일까지는 영업일 기준 2일 정도 소요가 된다고 하여 아마 다음주 중에 결과가 나올 것 같습니다! 등록 후에는 별거 아니긴 하지만, 소소하게 홍보까지 해볼 생각입니다!
학교 기말 고사..
우테코가 끝나니 바로 기말고사 기간이 되었습니다. 이제 중요한 일도 이번주에 모두 끝나니 종강때 까지 기말고사와 과제에 집중할 계획입니다.
2차 코테 준비
종강을 하고 나면 다시 한 번 우테코 코테 준비를 할 계획입니다. 결과가 나오지 않은 상황에서 준비를 하는게 정말 먹먹한 상황이지만, 그래도 그 시간동안 다시 한 번 재정비를 해볼 계획입니다.
끝
이렇게 프리코스가 모두 끝났습니다..~ 그 결과가 어떻게 될진 모르겠지만, 이번 과정을 통해 많은 것을 얻어간 시간이 되었던 것 같아요☺️ 아무튼! 6주동안 프리코스에 참여하셨던 분들 정말 수고 많으셨습니다!