[꼼꼼한 개발자] 꼼코더
43. [개발일지] - [피파 온라인 4 프로젝트] - 08. 최고 티어 조회 기능 개발 후 느낀점 (혼종 클래스, 서비스 분류, 타임리프, DTO, 디버깅, log) 본문
43. [개발일지] - [피파 온라인 4 프로젝트] - 08. 최고 티어 조회 기능 개발 후 느낀점 (혼종 클래스, 서비스 분류, 타임리프, DTO, 디버깅, log)
꼼코더 2023. 5. 18. 01:16🚀 서비스 분류
먼저 서비스 분류다.
맨 처음에 UserSerivce 한 곳에만 개발을 했어도 별 문제가 없었다.
하지만 이제 메타 데이터, 데이터 매칭 등
여러 가지 성격을 가진 기능들이 나타나니 나의 코드는 혼잡해졌었다.
보이는가?
- 닉네임으로 유저 정보 조회
- 고유 식별자로 유저 정보 조회
- 유저의 데이터 매칭 전 경기별 최고 티어 정보 리스트 조회
- 유저 데이터와 피파 데이터 매칭(경기 종류, 티어)
- 유저의 데이터 매칭 후 경기별 최고 티어의 데이터 정보 조회
위 모든 기능이 UserSerivce 한 곳에 작성했었다.
메서드만 7개니 구현체 코드는 안 보여줘도 얼마나 복잡한지 알 거라 믿는다.
👀 어떻게 분류할 거야?
아무튼 이러한 복잡한 코드 구성은 [개발, 수정, 리뷰]등을 하기에 최악이었다.
그렇게 분류 방법을 고민하다 엄청난 걸 놓쳤단 걸 깨달았다.. 바로..(아래 사진 참고)
그렇다.. 넥슨에서 친절하게 알려줬었다..
나는 [유저정보 + 메타정보]를 합친 '혼종 서비스 클래스'를 만들고 있었던 거였다.
이 것을 일찍 알지 못했다면 + 매치, 랭커 정보 등.. 어우 생각만 해도 끔찍하다
더 보기 좋은 코드, 유지보수 하기 좋은 코드는 무엇일까?를 끊임없이 고민하는 것이 중요하다.
🥐 DTO의 필요성
개발을 마치고 바로 화면을 출력했었다.
하지만 '공식경기'만 출력되고 있었다.
그렇게 나는 수정작업을 하였고 컨트롤러에 전달값을 수정 > 화면 타임리프 문법 수정
이렇게 2가지 과정을 거치고 수정하고 있었다.
그러던 도중 또 문득 이런 생각이 들었다.
"2가지 코드 수정 작업을 1가지로 줄일 수 있을 거 같은데??"
그렇게 찾아본 결과.. 내가 DTO를 사용하지 않고 있었고..
지금까지 필요성을 모르고 사용하던 나는 이때 DTO의 필요성을 알았다.
DTO 객체로 변환하여 전달하면 내가 필요한 정보들만 추출하여 사용할 수 있었다..
그렇게 (컨틀롤러에서 값 전달) usertear.getTear(); 에서 -> userTearHistoryDTOList 객체를 전달하는 방법으로 수정하였다.
📇 타임리프의 주소 출력.
화면에서 객체의 주소가 출력되고 있었다.
그렇다.. 나는 객체 리스트를 보냈지만 객체 리스트 추출방법을 몰랐었다.
그렇게 검색 후 생각보다 빠르게 해결하였다.
그나저나 처음에 객체 주소 자체가 출력되어 재밌긴(?) 했다..😅
<tbody>
<div th:each="match : ${userMatchHistory}">
<p th:text="${match.getMatchType()} + ' 최고 티어 :' + ${match.getDivision()}"></p>
<!-- 나머지 필드들도 출력 가능 -->
</div>
</tbody>
🐞 디버깅, Log
백엔드 기능들을 개발하다 보면 메서드들이 서로를 호출하여 결과를 전달하고 하는 경우가 많다.
하지만 최종 결과에 에러 혹은 값이 null이 나오게 되면
'도대체 어느 메서드에서 문제이지?'하며 원인을 찾지 못 하고 많고 많은 메소드에 혼란을 겪는다.
그렇게 나는 고민을 하였고 내가 그동안 알고는 있었지만 기피했던 '디버깅' 기능을 사용해 봤다.
이럴 수가.. 아래와 같이 변수, 메서드의 반환 값이 정상적으로 들어오는지 확인이 가능했다. (진작 사용할걸..)
하지만 디버깅 후 또 다시 (실행 시) 로그를 확인하고 싶지 않아서(동작추가)
로그에 출력하는 방법을 찾아보고 실행에 옮겼다.
결과는 매우 만족했다.. 아래와 같이 '앱 실행 시 내가 원하는 데이터의 값을 확인할 수 있었고'
'비어있거나 내가 원하는 결과가 보이지 않을 때 코드 수정에도 매우 많은 도움이 되었다'. 앞으로 많이 이용해야겠다.
그런데 지금 작성하면서 또 드는 생각이..
"내가 사소한 기능 하나하나 테스트를 작성했으면 어땠을까?" 하는 생각이 들기도 한다..
또 "너무 시간을 많이 소요할까?"라는 생각도 들어 정답은 모르겠다..
그래도 테스트 작성은 피할 수 없으니 추후 도전해 봐야겠다.!
🧹 초간단 요약정리
1. DTO를 쓰니 추출하고자 하는 정보가 변경되어도 코드 수정작업이 줄어들어 좋았다.
2. 메서드의 특성에 맞게 클래스를 잘 분류하자
3. 로그를 작성하는 습관을 잘 기르자
4. 테스트 작성 타이밍도 잘 생각해 보자.
5. 모르면 검색 후 해결하는 것 스스로 매우 잘했다.