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

[FEAT] 문의하기 이메일 및 구글 스프레드시트 요청 구현 #851

Open
zeus6768 opened this issue Oct 22, 2024 · 9 comments
Open
Assignees
Labels
BE 백엔드 FE 프론트엔드 feature 기능 추가

Comments

@zeus6768
Copy link
Contributor

📌 어떤 기능인가요?

현재 프론트엔드에서만 문의하기 기능이 구현되어 있는데, 스프레드시트에 요청할 때 CORS 관련 설정 문제로 완료 여부를 알 수 없습니다.

📜 작업 상세 내용

  • 코드잽 공식 메일로 문의 본문 전송
  • 스프레드시트로 문의 본문 전송

⏳ 예상 소요 시간 (예상 해결 날짜)

24시간

@zeus6768 zeus6768 added feature 기능 추가 BE 백엔드 labels Oct 22, 2024
@zeus6768 zeus6768 self-assigned this Nov 7, 2024
@zeus6768 zeus6768 added this to the 7차 스프린트 💭 milestone Nov 7, 2024
@zeus6768
Copy link
Contributor Author

zeus6768 commented Nov 16, 2024

기능 명세

  • 구글 스프레드시트에 문의 내용을 저장 요청한다.
  • 저장이 완료되면 상태 코드를 받아 반환한다.
  • (하면좋고 아님말고) 비동기로 처리한다.

현재

프론트엔드에서 다음과 같이 api를 요청해 엑셀에 문의 데이터를 저장한다.

const sendData = () => {
  const URL = process.env.GOOGLE_URL || '';

  return fetch(URL, {
    method: 'POST',
    mode: 'no-cors',
    body: JSON.stringify({ message, email, name, memberId }),
    headers: {
      'Content-Type': 'application/json',
    },
  });
};

구현

문의 형식 검증

문의 내용은 최대 10,000 글자까지 입력할 수 있습니다.

  • 너무 적게 입력하면 충분한 정보가 아닐 가능성이 높기 때문에 20자 이상 입력하게 했다.
  • 굳이 너무 많이 입력할 필요가 없고, 저장 공간은 아껴야 하는 리소스이므로 최대 10,000자로 제한했다.

@zeus6768
Copy link
Contributor Author

zeus6768 commented Nov 16, 2024

고민 적어놓기

모듈 분리

  • 문의하기 기능을 위해 템플릿, 소스코드 등의 주요 도메인 관련 빈이 모두 로드되어야 하는 게 어색하다고 생각해요.
  • 그래서 별도의 모듈로 분리하고 싶어요.
    • 별도의 모듈로 분리한다면, 빌드와 배포 과정이 어떻게 변화할지 생각해야 해요.

#907 로 갈음.

외부 API 사용

RestClient 재사용 가능성

OAuth 로그인에서도 RestClient를 사용할 수 있을 것 같아요.

RestClient.Builder와 관련 설정을 분리할 것을 고민해볼 필요가 있어요.

근데 지금 생각으로는, OAuth의 RestClient와 문의하기의 RestClient는 공통된 설정이 없을 것 같아요.

그래서 굳이 공통 로직을 추출할 필요가 있나 싶네요.

Google Apps Script의 문제점

문제1. API 예외 처리의 어려움

문의하기 요청을 보내면 VOC 구글 sheets에 행을 추가해요.

이때 voc sheets와 연결된 구글 Apps Script를 사용해요.

스크린샷 2024-11-16 오후 12 13 34

그런데 구글 apps script api에서 어떤 예외가 발생하고 어떤 형식으로 메시지를 주는지 알려주는 문서를 아직 찾지 못했어요.

문제2. 자격 증명 문제

현재 누구든 해당 url로 post 요청을 보내면 voc 스프레드시트에 데이터를 추가할 수 있어요.

스크린샷 2024-11-16 오후 12 23 17

HTTP Client에서 요청을 보낼 때 자격 증명을 추가해서 검증할 수 있게 개선해야 해요.

또는, 문의하기 내용을 자체 DB에 저장하는 방식으로 변경한다면 괜찮아요.

그래서 추후 관리자 기능을 만들 때, 문의하기를 해당 기능에 포함시켜서 개발해야 한다고 생각해요.

@zeus6768
Copy link
Contributor Author

zeus6768 commented Nov 16, 2024

오류 발견

테스트에서 다음과 같이 request 의 문의 내용을 20자 미만으로 입력하면 오류가 발생해요
스크린샷 2024-11-16 오전 11 31 40

그런데, 한글 인코딩이 제대로 되지 않아요. 디버그에 문제가 있으므로 해결해야 할듯.
스크린샷 2024-11-16 오전 11 32 56

@zeus6768
Copy link
Contributor Author

개선 사항

현재 회원가입 시 아이디 길이의 최솟값을 제약이 없어요.

0글자 이상이면 회원가입을 할 수 있어요.

스크린샷 2024-11-17 오후 10 32 20

문의하기 요청을 할 때 해당 이름을 dto에 함께 전달하는데, 여기서도 동일한 검증을 하고 있어요.

아이디 길이의 최솟값을 검증하도록 개선하면 좋겠어요.

@zeus6768
Copy link
Contributor Author

zeus6768 commented Nov 23, 2024

실제 API 테스트

구글 Sheet로 실제 요청

테스트용 sheet를 생성했어요.

스크린샷 2024-11-23 오전 9 46 16

웹 앱 스크립트를 작성했어요.

스크린샷 2024-11-23 오전 9 46 37

다음의 테스트 코드를 실행해 실제 API를 실행했어요.

스크린샷 2024-11-23 오전 9 47 24

결과는 다음과 같았어요. 상태코드 302로 성공했어요.

스크린샷 2024-11-23 오전 9 48 09

@Hain-tain Hain-tain self-assigned this Dec 11, 2024
@Hain-tain Hain-tain added the FE 프론트엔드 label Dec 11, 2024
@zeus6768
Copy link
Contributor Author

스크럼 헤인 의견

[ㅎㅇ] 문의하기에서 문의 내용이 20자 미만인 경우 400을 주고 있는데, 개인적으로 20자 이내로도 충분히 문의가 올 수 있다고 생각합니다! 그래서 최소 글자 수 제한을 없애는 것은 어떨까요?

@zangsu
Copy link
Contributor

zangsu commented Dec 18, 2024

근데 지금 생각으로는, OAuth의 RestClient와 문의하기의 RestClient는 공통된 설정이 없을 것 같아요.

동의합니다! 지금 당장 드는 생각으로는 공통된 코드가 존재하더라도 가짜 중복이라고 생각이 들어요! 얼마든지 한 곳에서만 수정이 될 수가 있기 때문에요!

@zangsu
Copy link
Contributor

zangsu commented Dec 18, 2024

최소 글자 수 제한을 없애는 것은 어떨까요?

저는 특정 리뷰에서 (특히 우테코 LMS...) 정성 피드백을 위해 20자 이상 입력해야 할 때 꽤나 힘들었어요.
그보다 적은 수의 글자만으로도 충분히 제 의도가 전달되는데 굳이 글자 수를 더 늘리기 위해 고민을 해야 했거든요.

제 생각엔 문의하기의 난이도를 어떻게 정하냐도 전략일 것 같아요.
최대한 마음대로 보낼 수 있도록 해서 모든 피드백을 받아볼지, 글자 수를 어느 정도로 지정해서 최소한의 정성을 들인 피드백만 걸러서 받을지 사이의??

저는 아직은 최대한으로 피드백을 받아보고 싶은 마음이 더 커서 최소 글자 없애는 쪽에 더 마음이 기우네요~

@zeus6768
Copy link
Contributor Author

  • 내용 최소 글자 10글자로 수정
  • 201 → 200으로 옴

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
BE 백엔드 FE 프론트엔드 feature 기능 추가
Projects
Status: Todo
Development

No branches or pull requests

3 participants