MakeFrog / TechTalk

AI 면접관과 함께하는 개발자 면접 준비
46 stars 14 forks source link

[공통] 엔티티, 매소드등 네이밍 관련 협의 #25

Closed suneogkwon closed 7 months ago

suneogkwon commented 9 months ago

🤝 논의사항

원할한 협업을 위해 서비스에서 사용되는 네이밍, 매소드 컨벤션은 협의를 통해 통일해야할 것 같습니다.


📝 상세 내용


🚀 기대 효과

원할한 커뮤니케이션, 코드의 일관성, 유지보수 향상 등 좋은건 다 있는 것 같습니다.


👷 참가자

@Xim-ya @suneogkwon


💬 기타

노션에 작성하는건 어떠신가요?? 아니면 깃헙에도 노션같이 공동 작성할 수 있는게 있나요??


Xim-ya commented 9 months ago

적절한 타이밍에 이슈 열어주신 것 같네요! 변수명 이게 참 어려운데... 저는 최근에 '너무 친절한 변수명(?)을 적지 말자'라는 생각을 가지고 있어서 명확하게 적는것 보다도 간결하게 적는 것을 선호하긴 합니다 ㅎㅎㅎ. 이번주 정기미팅 때 같이 야이갸 해보시죠!

+++ 문서의 양이 많지 않기 때문에 다른 툴을 사용하지 않고 깃허브 이슈에 comment로 정리해도 좋을 것 같습니다!

마크다운 테이블을 이용하면 깔끔하게 정리할 수 있을 것 같아요 :) (혹시 나중에 좀 정리해야되는 문서가 많아지면 그때 notion을 이용하시죠!)

Xim-ya commented 9 months ago

스크린샷 2023-12-25 오후 6 53 26

순억님 직군 리스트와 면접 카테고리과 관련한 데이터 베이스를 작성해주셨는데, IT 직군 리스트와 면접 카테고리는 변경되는 경우가 거의 없기 때문에 json 또는 자체 enum값으로 클라이언트에서 상수값으로 관리하기로 했었어요! 그래서 데이터베이스에서 데이터를 불러올 필요가 없을 것 같습니다.

그리고 면접 카테고리 id 네이밍 관련해서 의견드리고 싶은게 있습니다. 작성해주신 각각의 카테고리 id값은 많이 축약되어 있어서 처음 데이터 필드값을 확인하는 사람들을 조금 헷갈릴 수 있을 것 같아요.

아래와 같이 한번 제안드려봅니다.

주제 id
컴퓨터공학(CS) cs
프레임워크 framework
컴퓨터 언어 language

참고로 저희 카테고리도 종류도 한번 이야기 해봐야 합니다! 예를들어서 flutter/dart 또는 iOS-swift처럼 한 묶음으로 면접 질문이 구성되어 있는 면접 주제들이나, 프론트엔드 공통 면접 질문 또는 백엔드 공통 면접 질문 처럼 직군의 공통 질문들도 어떻게 구성해야될지 논의해야 될 것 같네요.

Xim-ya commented 9 months ago

저번에 문답 model 네이밍에 대해서 이야기 했었는데 정확하게 결론이 나지 않은 것 같아서 다시 공유드립니다.

주제 기존 변경
문답 Question Qna
질문 question question
답변 리스트 (모범 답변) answers answers

저번에 잠깐 이야기 했었는데 어떻게 결론이 났는지 기억이 안나네요🤔

suneogkwon commented 9 months ago

https://github.com/MakeFrog/TechTalk/issues/25#issuecomment-1868903636

면접주제를 옮기다보니 직군이랑 면접 카테고리도 같이 옮긴 것 같네요. 적용해놓겠습니다.

그리고 면접 카테고리 id 네이밍 관련해서 의견드리고 싶은게 있습니다. 작성해주신 각각의 카테고리 id값은 많이 축약되어 있어서 처음 데이터 필드값을 확인하는 사람들을 조금 헷갈릴 수 있을 것 같아요.

저도 많이 축약되어있다고 생각했는데 같은 생각이셨군요. 제안해주신 표대로 적용해놓겠습니다.

suneogkwon commented 9 months ago

https://github.com/MakeFrog/TechTalk/issues/25#issuecomment-1868910450

기존 Question model에 질문과 모범답안이 같이 있는데 네이밍이 Question이라 어색하다해서 Qna로 변경하기로했던것으로 기억합니다. Qna로 변경하면서 기존 Qna로 쓰이던 '질문과 질문에 해당하는 유저의 응답'을 어떻게 할까 얘기하다가 끝났는데 아래의 방식은 어떠신가요? 모범답변을 Question model에서 분리해야할지말지는 잘 모르겠습니다.

주제 기존 변경
문답 Qna Qna + UserAnswer
질문 question Qna
답변 리스트 (모범 답변) answers Qna에 포함
Xim-ya commented 9 months ago

어 이해가 잘 안되는데, 혹시 collection-doc 구조나 class model로 설명해주실 수 있으신가요?

'질문에 해당하는 유저의 응답'을 구분해야된다면 아래와 같이 변경해볼 수 있을 것 같아요.

주제 기존
문답 qna
질문 question
답변 리스트 (모범 답변) idealAnswers
질문에 대한 유저의 댑변 userAnswer

근데 모범 답변 리스트와 질문에 대한 유저의 답변 데이터를 구분해야되는 부분이 있나요?

suneogkwon commented 9 months ago
/// 면접 질문 및 모범답변
class TopicQnaEntity {
  final String id;
  final String question;
  final List<String> answers;
...
}

/// 유저 응답
class AnswerChatMessageEntity extends ChatMessageEntity {
  final AnswerState answerState;
  final String qnaId;
...
}

/// 면접 질문 및 모범답변 + 유저 응답
class ChatQnaEntity {
  final String id; // 질문 Id
  final TopicQnaEntity question;
  final AnswerChatMessageEntity? answer; // 유저 응답
...
}

이러한 구조로 생각하고있습니다.

근데 모범 답변 리스트와 질문에 대한 유저의 답변 데이터를 구분해야되는 부분이 있나요?

여쭤보신 의도에 맞는 대답일지는 모르겠으나, 질문과 모범답변은 1:1의 관계를 가지고, 질문 및 모범답변과 유저 답변은 1:n의 관계라 분리하는게 맞다고 생각합니다. 또, 학습탭에서는 질문과 모범답변만 사용되므로 유저 답변은 필요하지 않습니다.

Xim-ya commented 9 months ago

친절한 설명 감사합니다! 이해했습니다.

/// 면접 질문 및 모범답변 + 유저 응답
class ChatQnaEntity {
  final String id; // 질문 Id
  final TopicQnaEntity question;
  final AnswerState answerState; // <-- 답변 상태 
  // final AnswerChatMessageEntity? answer; // 유저 응답
...
}

학습 탭에서 유저의 답변 데이터가 필요하지 않다면, ChatQnaEntity는 [AnswerChatMessageEntity] 대신 [AnswerState] enum 필드로 대체해도 될 것 같습니다!

suneogkwon commented 9 months ago

학습탭에서는 질문, 모범답변만 필요하기에 TopicQnaEntity으로도 충분할 것 같습니다. 이러한 구조에 동의하신다면 고민해야할게 ChatQnaEntity의 네이밍입니다. Qna는 '질문 및 모범답변'이라는 의미로 쓰이고 있기때문에,, '질문 및 모범답변' + '유저 답변' 각각의 class(Qna, UserAnswer)로 따로 관리를 해야할지(Record 이용) 아니면 이 둘을 의미하는 하나의 class(Qna + UserAnswer)를 만들거나 해야할 것 같습니다.

Xim-ya commented 9 months ago

제가 잘못 이해했네요. 저는 해당 ChatQnaEntity가 채팅면접 > 문답 탭에서 사용되는줄 알았습니다. 그럼 ChatQnaEntity가 어디서 사용되는지 알 수 있을까요?

만약 채팅 메세지 데이터로 사용된다면, (기존 SentMessageEntity)

class ChatQnaEntity extends MessageEntity {
  final AnswerState answerState;
  final String questionId;
}

기존 필드값을 변경할 필요가 없지 않나요? 유저가 질문에 대한 답변에 대한 채팅 메세지entity에는 TopicQnaEntity가 필요 없을 것 같아서요.

suneogkwon commented 9 months ago

제가 잘못 이해했네요. 저는 해당 ChatQnaEntity가 채팅면접 > 문답 탭에서 사용되는줄 알았습니다.

말씀하신 채탱의 문답탭이랑 오답노트탭에서 사용됩니다.

TopicQna는 '면접 질문 및 모범답변'으로 채팅, 학습, 오답노트 등 서비스 전반에 사용되는 엔티티, UserAnswer(임시)는 'TopicQna에 대한 유저의 답변'으로 채팅, 오답노트 등에서 사용되는 엔티티, TopicQna + UserAnswer(현 ChatQna)는 위 두 엔티티를 합친 엔티티로 채팅, 오답노트 등에서 사용되는 엔티티입니다.

Xim-ya commented 9 months ago

정리해주시면 내용을 표로 요약하면 아래와 같을 것 같네요!

주제 기존 변경(제안) 섹션
문답 TopicQna Qna 채팅, 학습, 오답노트 등
유저의 답변 UserAnswer - 채팅(문답), 오답노트
문답 + 유저의 답변 TopicQna + UserAnswer WrongQna 채팅(문답) , 오답노트

근데 저는 아직 유저의 답변 UserAnswer 엔티티가 왜 채팅 문답 탭에 필요한지 의문입니다. 제가 잠깐 정리를 해봤는데 코드를 참고해주시겠어요?

'전 섹션'에서 사용되는 qna 엔티티

class Qna {
final String id
final String question; 
final List<String> idealAnswer; 
}

// 면접 주제필드는 사용되는 곳이 없을 것 같아서 일단 생략했습니다.

'채팅 문답탭'에서 사용되는 qna 엔티티

class InterviewQna extends Qna {  
  final AnswerState state;  

  InterviewQna(super.id, super.question, super.idealAnswer, this.state);  
}

'오답노트'에서 사용되는 qna 엔티티

class WrongQna extends Qna {  
  List<UserAnswer> userAnswerHistory;  

  WrongQna(super.id, super.question, super.idealAnswer, this.userReplyHistory);  
}

'오답노트'에서 사용되는 유저 응답 엔티티 (채팅 섹션 X)

// 임시
class UserAnswer {  
  final String chatRoomId;  
  final String messageId;
  final String date;
  final DateTime date;
}

이야기가 길어질 것 같으면 내일 미팅 때 다시 이야기해보시죠! 제가 이해를 못하고 있는 부분이 있는 것 같네요😂

Xim-ya commented 9 months ago

앱에서 사용되는 유저 정보 엔티티 및 모델 관련해서 네이밍 제안드립니다!

주제 기존 변경
유저정보 UserDataModel UserModel

엔티티 및 모델 클래스 자체가 data라는 의미를 이미 담고 있기 때문에 data라는 워딩을 생략해도 될 것 같다는 생각이 듭니다.