221115 클릭 같은 select-option / 평점 구하기

샨티(shanti)·2022년 11월 15일
0

하루를 마무리 하기 전, 오늘 있었던 일들을 잔잔히 되짚어봅니다.
성공과 실패의 모든 요소에서 '배울 점'을 찾아내어 기록하고,
더 성장하는 내일의 나를 위해 'action plan'을 세웁니다.

오늘은 두 가지 부분에서 고통을 받았다. 아직 고통받고 있는(ㅎㅎ) 평점 구하기는 해결하지 못한 부분이라 꼭 내일 안으로 해결이 되었으면 하는 마음으로 간절히 기도(ㅋㅋㅋㅋ) 중이다.

좀 지쳐서 웃자고 한 소리고..ㅎ

우선 select-option부터!

드롭박스는 사실 change 이벤트였어!!

동료가 오늘 두 번 정도 select-option 테스트가 잘 통과했냐고 물어오는데 별 할 말이 없었다.
우선 option에 한해서는 테스트가 잘 통과하기도 했고.. 근데 이상하리만큼 동료의 테스트가 통과하지 않기에 나도 들여다보려 했는데 원인을 파악하기 쉽지 않더라.

그러다가 머리를 싸맨 동료에게 3기 동료분이 오셔서 이런 저런 얘기를 해주셨는데. 가만보니 드롭박스를 구현하는 select-option은 onClick이 아니라 onChange로 이벤트를 받아오는 것이었다.

읭..........?! 아!!!?

갑자기 머리가 띵-했다.
UI 측면에서는, 즉 우리 눈에 보이는 드롭박스는 오른쪽에 작게 있는 화살표를 클릭해서 그 안에 들어있는 옵션을 보는 방식으로 작동한다.
하지만 그건 말 그대로 보여지는 모습일 뿐.
그래서 이 친구의 본질, 그리고 작동 원리는 무엇인가? 클릭 이벤트가 아니라 change 이벤트였던 것이다.

아..................
갑자기 지난 주 아샬님의 특강 속에서 '눈에 보이는 것에 끌려가지 말란' 이야기가 번뜩 떠올랐다.

물론 같은 맥락의 이야기는 아니지만 너무나도 쉽게, 그 테스트 코드 한 줄 만드는 데 있어서도 눈에 보이는, 구현되는 모습에 속아 click 이벤트를 테스트하는 코드를 짜놓고 바꿀 생각을 하지 못했던 것이다.

요즘은 이렇게 새삼 새로운 사실, 그리고 마치 등잔밑이 어둡다는 속담이 현실이 된 것 같은 상황을 마주하면 '와!! 이렇게도 배우는구나~' 하면서 한편으론 스윽 스쳐가는 event가 될까봐 불안한 마음도 있다.

머릿속에 오-래 남기려면 어떻게 해야할까?
밥 먹듯 반복하면 될까? 아니면 이런 상황을 자주 접하면 될까?
코딩도장도 마찬가지고... 요즘 꽂혀있는 부분이긴 하다.
'와 됐다~' 하고 넘기지 않는 것. 좀 오랫동안 머릿속에 남기고 싶기에 어떻게 하면 좋을까... 싶다.

우선 오늘과 같이 select-option에 대한 테스트코드 오류는 처음 겪는 일이니 얼마동안은 기억에 강렬히 남아있겠지! 중요한 건 test 코드 역시 눈에 보이는 대로, 또는 예전에 했던 방식을 무지성으로 가지고와서 짜면 안된다는 점이니 이 부분에 유의하자.


평점이 높은 장소 TOP 3 정보 가져오기

아직 머리를 싸매고 있는 부분이다.
구현하려는 서비스 내용 중에 TOP 3가 있는데 요지는 이렇다.

아이와 갈만한 장소에 대해 사용자들이 5점 만점의 별점을 매기는데, 평점이 가장 높은 장소 3개를 TOP 3로 보여주고 이 장소들 관련 Youtube 영상을 리스트로 보여주는 영역이다.


기획서 기준으로 이런 모습.
근데 TOP 3 장소를 가져오려고 백엔드를 구현하려니 갑자기 로직이 확- 복잡해지면서 지금의 모델 설계로는 도저히 답이 나오는 것 같지 않았다.

Place 라는 entity가 평점을 가지고 있는 것도 방법이 되겠으나, 유저들이 작성하는 리뷰는 매 번 달라지고(추가가 되거나 혹은 삭제가 되거나) 그렇게 달라진 리뷰에 의해 평점이 영향을 받으니 과연 Place라는 entity가 평점이라는 요소를 가지고 있는게 적절한가? 하는 의문이 들었다.

결론적으론 적절하지 않다는 생각이 들었다.
정적인 entity에 굉장히 동적인 요소가 들어있는 느낌이랄까.
그렇다고 지금 있는 UserReviewRepository, PlaceRepository에서 자료를 가져와 여러 방면으로 엮어보자니 뭔가 레벨 5짜리 코딩테스트를 푸는 기분이랄까 ㅡㅡㅋ

우선 entity 요소 추가는 분명하게 짚고 넘어가고 싶어서 메가오버플로우에 질문을 남겼는데 아샬님이 답변을 주신 부분이 있어서 우선 PlaceRate을 별도로 만들어 Top3라는 문제를 따로 관리해보려 한다.

PlaceId와 rate만 들어가도록 하는데, 역시 리뷰 신규생성/수정/삭제 시에 rate가 다시 계산되어야 할 것이다.
이 방법으로 완성을 한 후에 redis 등 더 나은 방법, 개선방향을 고민하라고 하시는데 아직은 모르는 내용이라 어떤 부분에서 확연히 개선되는지는 잘 모르겠으나...

말씀해주신 내용 대로 오늘 내일 중에 구현이 완료되었으면 좋겠다.ㅎㅎ

난이도가 높지 않다고 생각했던 부분에서 갑자기 턱- 하고 막히니 좀 난감했는데. 어쨌든 질문하길 너무 잘 했다는 생각이 든다.

항상 고속도로 뻥- 뚫린것만큼 매끄럽게 흘러갈수는 없으니. 오늘 내일 머리를 쥐어짜며 요 산을 넘어가보자. 개발을 하며 종종 느끼는건데..간단해보이는 기능 중에서 꽤 복잡한 로직을 요구하는 것들이 있다. 새삼 그 기능들을 새롭게 보게되는 것 같다. ㅎㅎ

이번엔.. TOP 3가 그런 존재다....ㅋㅋㅋㅋ.
잘 해보자 탑뜨리!!!!!

profile
가벼운 사진, 그렇지 못한 글

0개의 댓글