Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Be/feature/#460 ai 통신 socket 통신 서버 측 리팩토링 and 테스트 코드 작성 #465

Conversation

HeoJiye
Copy link
Collaborator

@HeoJiye HeoJiye commented Jan 15, 2024

reslove #460

변경 사항

  • AI 파트 Nest 서버 측 리팩토링
  • AI 파트 Nest 서버 측 testcode 작성
    • chatbot 쪽 (생성형 ai, stream 조작 등 로직)
    • socket 쪽 (server와 client 간의 socket 통신 로직)

고민과 해결 과정

1️⃣ AI 파트 Nest 서버 측 리팩토링

기존 구조

  • AI api, Stream, Socket 통신 관련 로직들이 event 폴더에 모두 모여있음
src/events
- clova-studio.ts
- create-dto-helper.ts
- events.gateway.ts
- event.module.ts
- stream.ts
- types.ts
- ws-exception.filter.ts

수정한 구조

  • AI api 관련 로직과 socket 통신 관련 로직을 분리 (src/chatbot, src/socket)
  • 추후 Clova에서 ChatGPT로 변경이 용이하게 공통 interface를 만들어놓고 바꿔끼면 되도록 작성
  • socket쪽은 SocketService와 SocketGateway를 분리해서 비즈니스 로직과 이벤트 게이트웨이 로직을 분리함
src/chatbot
- clova-studio
   - clova-studio.service.ts
   - ...
- chatbot.interface.ts

src/socket
- socket.service.ts
- socket.gateway.ts

🎯 리팩토링 목표

  • 작은 기능 단위로 단위 테스트를 작성할 수 있도록
  • 추후에 ChatGPT등 다른 API로 옮겨가기 쉽도록
  • socket 관련 로직과 ai api 관련 로직이 잘 분리되어 있도록

2️⃣ AI 파트 Nest 서버 측 테스트 코드 작성

  • chatbot 쪽은 작은 로직을 가지고 있는 함수들 단위로 테스트 코드를 작성함.
- src/chatbot/clova-studio/clova-studio.servie.spec.ts
- src/chatbot/clova-studio/message/message.spec.ts
- src/chatbot/clova-studio/stream/stream.spec.ts

단순히 input, output을 비교하는 수준의 단위 테스트

  • socket 쪽은 server와 client 간의 통신 로직을 검사하는 테스트 코드를 작성함.
- src/socket/socket.service.spec.ts

client가 메세지를 보내면, 일어나야 하는 일들 등의 상호작용 과정에서 일어나야 하는 일들을 테스트
⚠ 완전 e2e 수준의 test를 src/socket/socket.gateway.spec.ts에 추후에 작성할 예정

(선택) 테스트 결과

image

아래 부분을 신경쓰면서 리팩토링함. (새 파일에 새로 작성)
- 작은 기능 단위로 단위 테스트를 작성할 수 있도록
- 추후에 ChatGPT등 다른 API로 옮겨가기 쉽도록
- socket 관련 로직과 ai api 관련 로직이 잘 분리되어 있도록
- 외부에서 사용할 함수들을 index.ts에서 export 하도록 표시를 해줘서 내부 함수들을 내부에서 테스트할 수 있게끔 수정함.
- socket 관련 로직에서 service와 gateway를 분리하기로 함.
아래 부분을 신경쓰면서 리팩토링함. (새 파일에 새로 작성)
- 작은 기능 단위로 단위 테스트를 작성할 수 있도록
- 추후에 ChatGPT등 다른 API로 옮겨가기 쉽도록
- socket 관련 로직과 ai api 관련 로직이 잘 분리되어 있도록
- 외부에서 사용할 함수들을 index.ts에서 export 하도록 표시를 해줘서 내부 함수들을 내부에서 테스트할 수 있게끔 수정함.
@HeoJiye
Copy link
Collaborator Author

HeoJiye commented Jan 17, 2024

@kimyu0218
⚠리팩토링 과정에서 src/chat/dto/create-chatting-message.dto.ts에 함수 하나를 수정했는데, 그래서 chat.service.spec.ts에서 지금 오류가 나!
유정이가 다른 PR에 댓글로 테스트 코드 수정한다 그래서 일단 안 건드렸는데, 이거 수정 필요할 것 같아!

@HeoJiye HeoJiye marked this pull request as ready for review January 17, 2024 09:44
Copy link
Collaborator Author

@HeoJiye HeoJiye left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗨

  • 테스트 문구, input output이 어때야하는지 분명하게 수정해보기
  • mocks 파일 구조 유정이랑 통일하기

Copy link
Collaborator

@kimyu0218 kimyu0218 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 👍

backend/was/src/common/constants/errors.ts Show resolved Hide resolved
backend/was/src/common/mocks/clova-studio.ts Outdated Show resolved Hide resolved
backend/was/src/socket/socket.service.spec.ts Outdated Show resolved Hide resolved
backend/was/src/socket/socket.service.spec.ts Show resolved Hide resolved
Copy link
Collaborator

@Doosies Doosies left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 👍 👍 확실히 한곳에 모여 있을 때보다 나눠두니까 이 함수들이 어떤 역할을 하는지 보기 쉬워졌어

@HeoJiye HeoJiye merged commit 0efdf01 into dev Jan 18, 2024
1 check failed
@HeoJiye HeoJiye deleted the BE/feature/#460-AI-통신-Socket-통신-서버-측-테스트-코드-작성-and-예외-처리 branch January 18, 2024 08:08
@HeoJiye HeoJiye mentioned this pull request Feb 17, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

✅ FEATURE: AI 채팅 Socket 통신 서버 측 테스트 코드 작성 + 예외 처리
3 participants