백엔드기술/스프링프레임워크

ChatGPT 로 Spring Boot 프로젝트 뚝딱 만들기

RevFactory 2023. 2. 24. 01:28

ChatGPT 잘 활용하고 계신가요?

오늘은 ChatGPT 를 이용하여, Spring Boot 프로젝트를 한번 뚝딱 만들어보려고 해요.

샘플에서는 Spring Boot와 코틀린으로 작성된 도서 관리 서비스 프로젝트를 만들꺼예요.

 

단계별로 따라하기만 해보세요. 어떻게 활용할 수 있을지 감이 오실겁니다.

자 그럼 한번 해보실까요?

 

0️⃣ 준비 단계 : Spring Boot 프로젝트 생성

아래 사이트에서 Spring Boot 프로젝트를 생성합니다.

https://start.spring.io/

 

 

1️⃣ 단계 : API 설계하기

만들고자 하는 API 를 먼저 설계합니다.

제가 구글 엑셀에 미리 샘플을 만들어 두었어요.

https://docs.google.com/spreadsheets/d/1jjumPWpmNbc_wXUaUrd_wvwqoZ7xGHpieHYTTJvtStU/edit?usp=sharing

 

엑셀은 표로 되어 있기 때문에 ChatGPT 에게 공유할 수 있도록 텍스트로 변환해야 합니다.

엑셀을 CSV로 다운로드 해서 메모장으로 열면 데이터는 준비가 끝납니다.

 

 

 

2️⃣ 단계 : API 데이터로 질문 시작하기

이제 질문을 해볼까요?

한글 질문들은 모두 구글 번역을 하신 뒤 영문으로 질문해주세요.

https://translate.google.co.kr/

 

I am trying to create a book management service with Kotlin and Spring Boot.
Design a domain based on the information below.

Domain,Controller,Method,URL,Parameter,Body(json),Comment,Role
Book,BookController,POST,/books,,"id, isbn, title, author, introduce, tags",도서 추가,ROLE_MANAGER
Book,BookController,GET,/books,,,전체 도서 조회,ROLE_USER
Book,BookController,GET,/books/search,searchKeyword,,도서 검색,ROLE_USER
Book,BookController,GET,/books/{bookId},,,도서 조회,ROLE_USER
Book,BookController,PUT,/books/{bookId},,"isbn, title, author, introduce, tags",도서 수정,ROLE_MANAGER
Book,BookController,DELETE,/books/{bookId},,,도서 삭제,ROLE_MANAGER
BookCategory,BookCategoryController,POST,/categories,,"id, categoryName",카테고리 추가,ROLE_MANAGER
BookCategory,BookCategoryController,GET,/categories,,,전체 카테고리 조회,ROLE_USER
BookCategory,BookCategoryController,GET,/categories/{categoryId},,,카테고리 조회,ROLE_USER
BookCategory,BookCategoryController,PUT,/categories/{categoryId},,,카테고리 수정,ROLE_MANAGER
BookCategory,BookCategoryController,DELETE,/categories/{categoryId},,,카테고리 삭제,ROLE_MANAGER
BookCategory,BookCategoryController,POST,/categories/{categoryId}/books,,bookId,카테고리에 책 추가,ROLE_MANAGER
BookCategory,BookCategoryController,GET,/categories/{categoryId}/books,,,카테고리의 책 조회,ROLE_USER
BookCategory,BookCategoryController,DELETE,/categories/{categoryId}/books/{bookId},,,카테고리의 책 제외,ROLE_MANAGER

 

쉬프트+엔터를 눌러서 아까 열어둔 메모장의 내용도 복사-붙여넣기 하고 질문을 하세요.

ChatGPT가 내가 알려준 정보를 토대로 도메인 정보를 잘 정리해서 알려줍니다.

 

 

3️⃣ 단계 : ChatGPT로 Entity 코드 작성하기

이제부터 ChatGPT 에게 코드 작성을 요청할텐데요.

요청 순서는 Entity -> Repository -> Service -> Controller 순으로 하는 것을 권장합니다.

또한 한번의 질문에 너무 많은 답변은 중간에 코드가 잘려서 나오기 때문에 하나씩 차근차근 물어보세요.

 

자 이제 질문을 해볼까요?

"Spring Data JPA 를 사용합니다. Book Entity 코드를 작성해주세요."

 

그리고,

"BookCategory Entity 코드를 작성해주세요."

 

준비 단계에서 만들어 둔 Spring Boot 프로젝트에 Entity 코드를 옮겨주세요.

import 구문이 없었다면 IDE 기능을 이용해서 하나씩 import를 추가하시면 됩니다.

 

참고로 Spring Boot 3.x 부터 jpa 쪽 패키지들이 jakarta 로 변경 되었어요.

https://revf.tistory.com/260

 

 

4️⃣ 단계 : ChatGPT로 Repository, Service, Controller 코드 작성하기

아래와 같이 하나씩 질문을 통해 코드를 요청해주세요.

 

질문 : "BookRepository 코드를 작성해주세요."
질문 : "BookCategoryRepository 코드를 작성해주세요."
질문 : "BookService 코드를 작성해주세요."
질문 : "BookCategoryService 코드를 작성해주세요."
질문 : "BookController 코드를 작성해주세요."
질문 : "BookCategoryController 코드를 작성해주세요."

 

ChatGPT는 코드를 제공해주는 것 뿐만 아니라 코드에 대한 설명도 해주고 있으니까 생성된 코드가 잘 이해가 안간다면 설명을 참고해보시면 도움이 됩니다.

 

 

ChatGPT는 답변이 매번 달라지기 때문에 혹시나 제대로 된 코드가 생성이 안되었을 수도 있어요. 혹시 그렇다면 New Chat 버튼을 눌러서 다시 시작해보시는 것을 권장 드려요.

아니면 에러 메세지를 ChatGPT에게 알려주고 해결 방법을 알려 달라고 하는 방법도 있어요.

 

 

5️⃣ 단계 : 프로젝트 실행

여기까지 작성된 코드를 내 프로젝트로 잘 옮겨왔다면 이제 프로젝트를 실행해볼까요?

로그가 주르륵 올라가고 짠 8080 포트에 프로젝트가 잘 올라왔습니다. 👋👋👋

로그를 잘 보시면 아래쪽에 이런 로그도 하나 찍혀있을꺼예요.

 

Using generated security password: 6088a545-686d-4ad9-8b92-12245ea2a816

 

이것은 Spring Security 를 추가했기 때문에 초기 설정으로 임시 패스워드를 알려주고 있는 겁니다. 이 패스워드는 "프로젝트를 실행할 때마다 바뀐다"는 점 참고해주세요.

 

이제 브라우저를 열고 전체 도서를 조회하는 API 를 호출해볼까요?

https://localhost:8080/books

 

처음에는 해당 API 를 호출 할 수 없는 권한이 현재 없기 때문에 기본으로 설정되어 있는 로그인 페이지가 열릴 겁니다.

- username 에는 "user"

- password 에는 위 로그에 찍혔던 password 를 복사-붙여넣기 해주세요.

 

자 그럼 이제 /books API 를 정상적으로 확인 할 수 있습니다. 👋👋👋

 

 

6️⃣ 단계 : Security 설정하기

아래와 같이 질문해볼까요?

"spring security 설정 코드를 작성해주세요."

 

여기부터는 ChatGPT 의 한계를 확인하실 수 있는데요.

아마도 에러가 나는 코드를 작성해줬을 가능성이 높습니다.

 

이는 Spring Boot 버전이 올라가면서 Spring Security 설정이 변경되어서 발생하는 문제입니다.

예를 들어, WebSecurityConfigurerAdapter 을 상속 받던 방식에서 Bean 선언 방식으로 변경이 되면서, WebSecurityConfigurerAdapter 가 Deprecated 되었다가 Spring Boot 3부터는 아예 삭제되었습니다.

ChatGPT 는 최신 버전 정보를 학습하고 있지 않기 때문에 예전 버전의 설정을 알려주고 이러한 사실을 모르는 상태라고 이해하시면 됩니다.

 

질문을 이렇게 다시 해보세요.

"spring security 설정 코드를 Bean 선언 방식으로 다시 작성해주세요.
WebSecurityConfigurerAdapter 와 WebSecurityConfigurerAdapter는 상속받지 않는 설정으로 작성해주세요."

 

그럼에도 동작하지 않는 코드가 나온다면 Spring 버젼을 낮춰서 다시 보시거나, Security 의 최신 버전 문서나 예제를 찾아보고 직접 코드를 수정해주세요.

 

여기까지 ChatGPT 가 생성해준 코드로 제가 만든 프로젝트는 아래 Github 에서 올려두었으니 참고바랍니다.

https://github.com/revfactory/book-manager

 

아참, 테스트 코드Readme 도 작성해 달라고 해야겠네요!

 

 

#️⃣ 마무리

자, ChatGPT가 작성해 준 코드로 프로젝트 만들어보니 어떠신가요?

저는 좀 더 응용해보면 이것 저것 활용해보기 좋을 것 같단 생각이 들었습니다.

특히, 잘 안되면 대화를 통해 어느 정도 정답에 가까워지기도 하는 것 같구요.

 

ChatGPT 가 대단한 건, 아무거나 막 던져도 군소리 없이 빠르게 답변해주는 게 아닐까 합니다.

이를테면 오늘은 Kotlin + Spring Boot 였지만, 다음엔 Django 가 될 수도 있고, node express 가 될 수 있겠죠?

 

아무쪼록 도움이 되셨으면 좋겠고, 기회가 되면 다음에는 프론트 편으로 찾아뵐께요~!