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: 백엔드 서버와 크롤러 서버 간의 통신 기능을 구현 #69

Open
wants to merge 20 commits into
base: main
Choose a base branch
from

Conversation

boyekim
Copy link
Member

@boyekim boyekim commented Feb 9, 2025

작업 내용

우선, SeatStorage를 Map으로 자료구조 변경했습니다.
키값은 subjectId를 의도했어요.
그리고 백엔드 서버와 크롤러 서버 간의 통신 기능을 구현했습니다.

백엔드 서버 -> 크롤러 서버

백엔드 서버는 크롤러 서버에게 받을 정보를 알려줍니다.
크롤러 서버에 알려줄 정보는 교양과목이랑 핀 과목을 우선 구현했어요.

  1. 교양과목은 관담 기준 top 20 이므로 달라지지 않을 거에요. 따라서 TopNonMajorStorage 에 저장해두는 api를 구현했어요. 이곳에는 subjectId만 저장해요. 한번만 실행되면 됩니다. Map 자료구조를 사용하고 있어서, 여러번 호출한다고 데이터가 중복으로 쌓이진 않을 것 같아요.
  2. 그리고 이 교양 과목을 전달하는 api도 구현했는데요, 이 아이도 굳이 여러번 실행할 필요가 없어서(교양 top20은 이미 관담 기간이 끝났으므로 변하지 않으니까요) 스케줄링을 걸지 않았어요. 이때 restClient를 사용합니다. 이 restClient는 CrawlerClient에 구현되어있어요.
    • 여기에서 잘 전달이 되었다는 응답을 확인하기 위해 "SUCCESS" 를 반환해주셨으면 좋겠어요. 그렇게 구현해 두었습니다~!
  3. 그리고 pin 과목을 조회하여 우선순위를 매긴 후 크롤러 서버에 전송하는 것도 구현했어요. 활성 사용자를 기반으로 pin을 조회해요.
    • 이거는 @Scheduled 어노테이션을 사용하여서 api는 없구요, 1분 주기로 걸어놨는데 이게 과연 적절할지 합의가 필요해요.
    • 그리고 우선순위를 매기는거요, 3파트로 나누어서 좌석 많아서 우선순위 높은게 1로, 우선순위 낮은걸 3으로 보냈어요.. 이거 괜찮나요?

크롤러 서버 -> 백엔드 서버

크롤러 서버는 백엔드 서버에 받은 정보를 기준으로 SSE로 여석을 계속 내려줍니다.
SseClientService클래스에서 HttpURLConnection를 통해 받는데요... 정말 처음 구현해보는거라 같이 꼼꼼히 봐주시면 정말 감사하겠어요....🥹🥹🥹🐥🐥 이 요청을 받으려면 따로 @Component 등록하는 과정이 필요해서 SseClientSetting이란 클래스를 만들었어요
이거 정말 처음 사용해보고 구현해보는거라서 좀 불안하네요

public class PinRemainSeat {

    private Long subjectId;
    private int remainSeats;
}

이런 식으로 응답을 받아서요, SeatStorage를 id 기반으로 계속 업뎃 해주는 걸 의도하고 구현했어요. 이런식으로 응답 주시면 감사하겠습니당.
코드 잘짰는지 모르겠어요...ㅠㅜ 아직 테스트가 없어서요...ㅜㅜㅜ 그런데 이거 연결이 끊어질수도 있잖아요...? 백엔드 서버에서 주기적으로 요청을 보내야하는걸까요..? 이 지점을 아직 잘 모르겠네요...ㅜㅜㅜ

고민 지점과 리뷰 포인트

  • 네이밍이 전체적으로 구려요. 추천 적극적으로 받습니다ㅜㅜ... 기능 구현이 너무 급해서 네이밍 신경 하나도 못썼어요ㅜㅜ...
  • SSE 연결이 끊어질 수도 있잖아요, 그거에 대한 핸들링이 필요한지, 어떻게 해야하는지... 알아봐야할 것 같아요... 백엔드 서버에서 핸들링 필요한 지점이겠죠??
  • pin과목 조회해서 크롤러 서버에 요청 보내는거 1분 괜찮을까요??

@boyekim boyekim requested a review from 3Juhwan February 9, 2025 18:06
@boyekim boyekim self-assigned this Feb 9, 2025
@boyekim boyekim linked an issue Feb 9, 2025 that may be closed by this pull request
@boyekim boyekim changed the title feat: 백엔드 서버와 크롤러 서버 간의 통신 기능을 구현한다. feat: 백엔드 서버와 크롤러 서버 간의 통신 기능을 구현 Feb 9, 2025
Copy link

github-actions bot commented Feb 9, 2025

Test Results

59 tests   59 ✅  6s ⏱️
17 suites   0 💤
17 files     0 ❌

Results for commit 290c641.

♻️ This comment has been updated with latest results.

@boyekim
Copy link
Member Author

boyekim commented Feb 10, 2025

로직 수정했습니다.
1분마다 크롤러 서버에 SSE 연결을 요청하는 api콜을 하고, SseClientService의 getSseData()를 호출하여 SSE 응답을 받는 로직을 의도했습니다~!
그리고 retry를 통해 연결이 제대로 되지 않아 예외가 생길 때 1초마다 다시 시도해보는 로직을 5번 시도해보는 설정도 했는데요..
한번 봐주세요..ㅜ.ㅜ

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.

크롤러에 데이터를 요청한다.
2 participants