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

[#6] 3.02 주식차트 정보 기능 구현 #32

Merged
merged 17 commits into from
Nov 7, 2024

Conversation

sieunie
Copy link
Collaborator

@sieunie sieunie commented Nov 6, 2024

✅ 주요 작업

  • 외부 API 사용에 필요한 access token 발급 로직 구현
  • 외부 socket 사용에 필요한 socket connection token 발급 로직 구현
  • 초기 화면 렌더링에 필요한 차트 정보와 현재 지수 조회 API 구현
  • 5분마다 차트를 갱신해 클라이언트에게 socket으로 전달하는 로직 구현
  • 외부 socket에서 실시간 지수를 가져와 클라이언트에게 socket으로 전달하는 로직 구현

💭 고민과 해결과정

  • 나스닥 지수를 가져오는 외부 socket이 존재하지 않아, 국내 지수 4가지를 조회하도록 함. (코스닥, 코스피, 코스피200, KSQ150)
  • 기존에는 5초마다 서버에서 외부 API를 가져오도록 구현하려했지만, 한국투자 API에 실시간 웹소켓이 존재해 해당 소켓을 사용해 구현함.
  • eslint 타입 버그가 발생해, 외부 API response마다 interface를 적용해 해결함.
  • API 명세를 원활히 하기 위해, dto 레이어를 사용해 구체적으로 데이터를 명시함.

오류때매 package-lock.json 지웠다가 다시 만들었더니 delete 양이 장난아니네요... 죄송합니당

@sieunie sieunie requested review from uuuo3o and jinddings November 6, 2024 09:07
@sieunie sieunie self-assigned this Nov 6, 2024
@sieunie sieunie linked an issue Nov 6, 2024 that may be closed by this pull request

@Cron('*/5 9-16 * * 1-5')
async cronStockIndexLists() {
const stockLists = await Promise.all([
Copy link
Collaborator

@uuuo3o uuuo3o Nov 6, 2024

Choose a reason for hiding this comment

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

🟡 여기 Promise.all로 한번에 비동기 처리하면 서버가 처음 켜졌을 때 기준으로 Access Token을 1분 이내로 4번 호출해서 403 에러 발생하지 않나요?
저는 403 에러 발생해서 다른 방식으로 수정했거든요.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

맞습니다ㅠㅠ 처음 켜지고 호출하면 에러 나더라고요. 진님께서 말씀하신 DB에 저장하는 방식으로 진행하면 이 부분 문제 없어지지 않을까요?

Copy link
Collaborator

Choose a reason for hiding this comment

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

DB에 저장하는 방식으로 해도 최초 access token 발급을 이런 로직으로 하려고 하면 문제가 생길 것 같긴 해요..

'Content-Type': 'application/json; charset=UTF-8',
},
body: JSON.stringify({
grant_type: 'client_credentials',
Copy link
Collaborator

Choose a reason for hiding this comment

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

🟢 저희 코드가 상당히 비슷할 거라 이런 grant_type을 상수로 한번에 관리하는 건 어떨까요?! 지난 학습 스프린트 때 멘토님께서 이런 매직 넘버는 상수로 관리하는게 좋다고 하셨거든요.


// interfaces

interface AccessTokenInterface {
Copy link
Collaborator

Choose a reason for hiding this comment

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

🟢 이후에 이런 interface 어디서 관리하실 건가요?
저도 지금 service 계층에 그냥 두고 사용 중인데 나중에 분리가 필요하지 않을까 싶어서 질문드립니다.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

앜 인터페이스 아마 각 도메인에 interface 디렉터리 두고 관리할 것 같아요! 추가로 파일 분리하면 자꾸 린트 오류 떠서 규칙도 수정해야할 것 같슴니당 참고자료

@sieunie sieunie merged commit a190aa7 into back/main Nov 7, 2024
2 checks passed
@uuuo3o uuuo3o added BE 백엔드 SOCKET Socket 구현 labels Nov 8, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
BE 백엔드 SOCKET Socket 구현
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[BE] 3.02 주식 차트 정보 기능 구현
3 participants