Today
-
Yesterday
-
Total
-
  • Spring Boot(Kotlin) - Github Copilot 사용 후기 (Feat. Django에서는?)
    | 이모저모 2024. 3. 4. 05:27

    이전에 Flutter with Dart에서는 Github Copilot의 퍼포먼스가 굉장히 기대 이하였습니다.

     

    Flutter(Dart) - Github Copilot 사용 후기

    Github Copilot 1개월 Free Tier를 통해 Flutter 앱개발에 활용해보았습니다. 거두절미하고 평점을 매기자면... 2.8/5.0 정도입니다. 아쉬운 점 : 코드 스니펫 제안 Widget 프로퍼티 값 제안은 상황에 맞게 그

    meoru-tech.tistory.com

     

    그런데 1인 프로젝트를 개발하다 보니 할 일이 너무 많았고, 생산성의 향상이 절실해졌습니다.

    Copilot 체험판 무료 기간은 이미 지났지만.. 지푸라기라도 잡는 심정으로 구독 신청해서 Spring Boot 애플리케이션에 적용해보았습니다.

    이번에도 거두절미하고 제 점수는....!! 4.9/5.0 입니다 .. !!!

     

    다음은 Copilot이 적용된 일부 코드입니다.

    ct-auth 코드 일부

    첫번째 흰색 네모칸이 copilot이 자동으로 작성해준 예외처리 코드이고, 두번째 네모칸이 현재 제안된 코드 스니펫입니다.

    로직 설계 계획이 모두 끝나고 작성하는 도중에서야 코드 추천이 생성되던(그마저도 엉뚱한 코드, 에러 코드를 자주 내뱉던) Flutter에서와는 달리, 적당한 위치에 커서만 위치해놓으면 Copilot이 알아서 '아, 여긴 request에 대한 예외 처리가 들어갈 자리구나. 이런 예외처리는 어때?' 라고 말하듯 거의 정확한 코드를 추천해줍니다.

     

    즉, '로직 설계 - 코드 작성' 단계가 모두 skip됩니다.

    심지어 내가 생각하지도 못한 적절한 예외케이스를 제안해주기도 합니다. 굉장히 높은 정확성을 보여줍니다. Kotlin에서도 이런데, 아마 레퍼런스가 많은 Java에서는 최소한 비슷하거나 더 좋은 퍼포먼스를 보여주지 않을까 싶습니다.

    앞으로 Spring Boot 프로젝트에서는 Copilot을 놓지 못할 것 같습니다. 생산성 향상이 장난아니네요.

     

    다만, 다른 파일을 참조하여 코드를 제안하는 성능은 아직은 좀 아쉬움이 있습니다.

    즉, 테스트 작성이나, repository에서 Entity를 참조하는 부분 등은 정확도가 떨어지거나 엉뚱한 코드를 뱉는 일이 꽤 있습니다.

     

    여담으로, Django에서도 Github Copilot을 사용해봤지만 한 파일 내에서도 Spring Boot에서만큼 놀라운 성능을 보여주지는 않고 있습니다. Flutter보다 조금 나은 수준이라고 체감됩니다. 점수를 매기자면 3.0/5.0 정도.. 있어서 나쁠건 없지만 생산성이 크게 올라가지는 않는 느낌입니다.

     

    프레임워크마다 성능에 편차가 꽤 있네요. 얼른 더 성능이 올라가서, 모델과 성능 최적화, 테스트 작성 및 기능 추가에 더 집중할 수 있으면 좋겠습니다.

     


     

    (수정) 며칠 더 써보니, copilot이 project 코드를 학습할만한 소스가 어느정도 필요해야 성능이 나오는 것 같습니다.

    무에서 유를 창조하는 능력은 떨어지지만, 유에서 유를 창조하는, 즉 반복 업무를 줄여주는 능력이 뛰어나다고 느꼈습니다.

    현재 Django Project 내에 여러 App들이 있습니다. 한 App정도만 예외처리나 모델 작성 등에 좀 신경써서 직접 작성했습니다.

    이후, 다른 App들을 작성할 때 제가 미리 정의해둔 각 App의 url과, 처음에 작성한 App의 코드들을 학습해서 새로운 App에 잘 적용해주는 모습입니다.

    Django Project Copilot

    위 스크린샷에서, 노란색 박스가 직접 작성한 코드, 흰색 박스가 제 기존 코드 스타일에 맞춰서 Copilot이 자동으로 작성해준 코드들입니다.

    물론 100% 완전하게 만들어주지는 않지만, 80%수준으로는 코드를 완성해주는 것 같습니다. 그정도만으로도 생산성이 두 배 이상 증가한다고 체감했습니다. 다시 점수를 매기자면 4.5/5.0정도로 줄 수 있겠네요 ㅎㅎ

     

    결론

    아무래도 Java나 Kotlin은 정적 타입 언어이고, Spring이 프레임워크로써 비교적 구조에 더 Strict한 느낌이 있다 보니, 동적 타입 언어이고 비교적 구조가 자유로운 Python & Django보다는 Copilot의 성능이 조금 더 잘 나올 수는 있는 것 같습니다. 하지만, 프로젝트 내에 학습 소스가 충분히 주어지면, 그걸 활용해서 다른 코드들을 작성할 때 반복 업무를 줄여주는 성능은 프레임워크에 따라 크게 다르지 않다고 느꼈습니다.

     

    Flutter & Dart에 대한 사용기도 이후에 바뀔 지도 모르겠네요 ㅎㅎ 아직까지는 Flutter + Copilot은 크게 좋다고 느끼진 못하고 있습니다. 다만 Copilot이 거의 매일같이 업데이트가 발행되고 있다보니, 앞날을 기대해봐도 될 것 같습니다.

sangilyoon.dev@gmail.com