온보딩 problem7 리팩토링

MINJU·2022년 12월 14일
0
post-thumbnail

문제 7

지난 PR 셀프 리뷰

지금 보면, 항상 셀프 리뷰의 내용은 비슷한듯?? 싶다

이 문제에서 나름 고민을 많이 했던 기억이 있는데, 최종 코드 보면 그래도 그 고민이 녹아있는 것 같아서 (내 생각일 수도 ^____^..) 뿌듯하기도 허다아 :)

아쉬운 부분은 커밋 로그!
이 부분을 중점으로 리팩토링 해봐야겠다.

그리고 당시 구현할 때, 뒤늦게 예외를 발견해서 많이 헤맸던 기억이 있는데 테스트 코드를 작성하는 방법을 익혔기 때문에!
테스트 코드를 기반으로 예외를 최대한 커버하도록 구현해보고자한다.


기능 정의

[ 기능 정의 ]
- [ ] 사용자 아이디 user 입력 받기
- [ ] 친구 관계 정보 friends 입력 받기
- [ ] 방문 기록 visitors 입력 받기
- [ ] 각 사용자들의 user와 함께 아는 친구의 수 구하기 
- [ ] user 타임라인에 방문한 친구 구하기
- [ ] 해당 친구가 몇 번 방문했는지 구하기
- [ ] 각 친구의 점수 구하기
- [ ] 추천 점수 높은 순으로 최대 다섯 명 뽑기
- [ ] 이름순으로 정렬해서 return하기

[ 예외 ]
- [ ] 사용자 아이디 user 길이가 1 미만 30 초과인 경우
- [ ] 사용자 아이디 user가 알파벳 소문자로만 구성되어있지 않은 경우
- [ ] 친구 관계 정보 friends 의 개수가 1 미만 10,000 초과인경우
- [ ] friends의 각 원소가 길이가 2인 리스트가 아닌 경우

구현

아~ ~ 힘들었다😂

1. Repository 도입

기존에 주어지던 user, friends, vistors를 밖에서 받아오게 해주고, 그 값을 하나하나 다 검증해야했기 때문에 이 과정에서 시간이 정말 많이 걸렸다.

전체 User를 확인하면서 각 점수를 구해야하기 때문에, User를 저장하고 있는 컬렉션이 필요했고

이를 스프링과 동일하게 Repository로 구현하자 싶어서 Repository를 도입하게 되었고

최대한 기존 값을 변경하지 않도록 만들면서.. 그러면서도 내가 찾는 값이 그대로 반환되게 구현하기 위해 진짜 꽤나 공을 들였다. (완벽하진 않다 ㅠ 지금은 진짜 너무 힘을 쏟아서 머리가 안돌아가니까 부족한 부분 정리를 좀 해야겠다.)

기존 MVC 구조에서 -> MVCS 까지 구현하는 습관을 들였는데 -> 이젠 Repository도 도입했음에..
그게 잘 짜여진 코드인지 여부는 막론하고 일단 칭찬을 해주고 싶다😂

혼자서라도 Spring Boot 열심히 공부한 보람이 조금 있는 것 같다 흑흑

그래도 처음 도입하는 구조인만큼 어려운 점이 많았으니까 이제 다음 미션 연습할 때 더 확실히 도입해보도록 노력해야겠다.

일단 내가 갖고 가고자 하는 구조는
domain 안에 모델 넣고 레포지토리 넣기!!

함 해봐야지..
못할게 뭐있나!

2. 에러 출력 로직 변경

기존 IllegalArgumentException의 메세지는 모두 "[ERROR]"로 시작되게 구현했는데,
생각해보니까 outputView에 에러메세지 출력 로직을 구현한만큼 해당 "[ERROR]"를 outputView 프린트 함수에서만 사용하면 되지 않나???는 생각이 문득 들었다.

그 생각에 따라 구현을 완료하니까 (조금이나마) 코드가 줄어든 느낌 !

나름 만족스럽다 :)



구현하면서 정말 고민이 많았는데 정신없이 구현하고나니까 이제 생각할 힘도 없어지는 것 같다 🙂..

그래도 몰입하고 그 결과로서 돌아가는 코드를 보는 것이 가장 기분 좋기는 하다 으하하

구조는 잡았으니까 더 나은 코드를 위해 더 노력해봐야지으아아


고민을 하고 찾아가면서 구현하는 것에는 자신이 있지만, 그 과정을 제한시간안에ㅠㅠ 하는 것은 아직 무섭기 때문에 나 혼자서라도 우선순위를 좀 정해야겠다.

  1. 기능 정의
  2. 스켈레톤 설계
  3. 도메인(모델) 짜기 -> 해당 모델이 해야하는 일과 , 알아야하는 정보를 정리
  4. 각 스켈레톤이 서로 어떤 관계를 가지는지 정리 (최대한 MVCS 패턴의 의도 살려서!)
  5. 구현하고
  6. (테스트 하면 너무너무너무 좋은데 ㅠ ㅠ 시간 땜에 일단 살짝은 넘기고)
  7. 문서 수정하고
  8. 최종 코드 완성한 후
  9. 매직넘버, 라인정리, 요구사항 불충족한거있는지 정리..

하는게 맞을 것 같다
아아어ㅏ아아앙
어렵다!

근데 잘하고 싶다
😥😥

내 고민의 과정을 함께하고, 그 안에서 더 다양한 의견을 받으며 딥하게 몰입하고 성장하고 싶다

아아아

0개의 댓글