| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- 프로그래머스제일작은수
- java map 저장
- 비전공자sqld
- java list 출력
- 격파르타후기
- java알고리즘문제풀이
- 인터프린터언어
- java기본자료형
- java map
- javaJRE
- 격파르타장점
- 컴파일
- 격파르타합격후기
- java list 저장
- 항해15기
- java 자료구조 활용
- 프로그래머스
- sqld자격증합격
- java map 출력
- java set 출력
- java set 저장
- 노베이스부트캠프
- 작은수제거하기
- 코딩부트캠프후기
- java알고리즘
- java최솟값구하기
- java참조자료형
- 항해99후기
- javaJVM
- 격파르타비전공자
- Today
- Total
코딩과 결혼합니다
230918 - 코드 리팩토링(폴더 구조 변경하기) 본문
파일 구조나 코드 컨벤션에 대해 팀원과 정확히 정하지 않고 협업을 진행했더니 동일한 기능을 하는 클래스임에도 불구하고 다양한 이름이나 폴더구조를 가지고 있었다.
코드를 좀 더 나은 방향으로 다시 짜보려 했더니 나조차도 통일되지 않은 파일구조 때문에 코드를 찾아 가는데 어려움을 겪게 되었다. 일관된 파일 구조와 명명 규칙은 코드의 가독성과 유지 보수 성을 향상시키며, 팀원들 간의 협업을 원활하게 만들어 줌으로 개선해야 할 필요성을 느끼게 되었다.
문제 : 통일감이 떨어지는 파일구조
- dto 폴더 따로 request(혹은 response) Dto 따로 이랬다 저랬다 한다.
- sse 폴더가 왜 alarm안에?라는 혼돈을 준다. 내가 짜놓은 폴더 구조의 룰을 어기고 있다.
- 어떤 클래스들은 패키지 없이 그대로 드러나있다.
- 필요 없는 파일도 존재했다.



해결 : 모든 파일 구조를 통일감 있게 바꾸고 필요 없는 파일은 지우기
- dto 패키지 안에 request와 response 패키지를 만든다.
- 따로 domain으로 빼든 지, 아니면 확장성을 고려하여 global 폴더에 추가할지 고민하였지만 현재는 알람에서만 쓰이는 sse로 alarm의 controller와 service 패키지로 파일을 옮기기로 하였다.
- alarm의 타입 클래스들을 type이라는 하나의 폴더에 넣는다.
- 필요 없는 파일이나 클래스들은 지워주었다.



개선할 점 : SSE 폴더 안에 있던 클래스의 이름이 NotificationController로 어떠한 역할을 하는지 직관적으로 알 수 없어서 위의 AlarmController와 혼동을 줄 수 있을 것 같다. 클래스 명과 같은 부분도 세심하게 확인한 다음에 수정이 필요해 보인다.
✔️ 결과 : 파일구조가 통일되며 어떤 코드가 어디에 있는지 확실히 알아보기가 쉬워졌다.



다음은 다른 팀원이 짠 폴더를 수정하였다. 내가 짠 코드가 아니기에 어떠한 기능들이 있는지 파악한 후 진행하였다.
문제 : user라는 하나의 도메인에 너무 다양한 클래스들이 들어가 있어서 이게 어떤 기능들이 모여있는 파일인지 어떤 연관이 있는지 파악이 어렵다.


해결
1. social은 소셜로그인 관련 파일로 따로 분리하였다.
2. ToPost는 게시물 관련하여 조회에 필요한 dto 파일을 만들어 놓은 것이다.
post 조회만을 위한 클래스이기 때문에 굳이 user 쪽에 있을 필요가 있나? 싶어서 좀 더 관련이 많은 post 쪽에
포함하기로 하였다.
3. MessageResponeDto의 경우에는 한 곳에서만 쓰이는 게 아닌 전체적으로 쓰이는 dto이기 때문에 global로 옮겼다.
➡️ ToPost 파일은 bye bye~



4. user의 all 파일 또한 없애고 하위 폴더들이 user폴더 바로 아래에 위치하도록 하였다.
5. 다음으로 사용자 관련 기능과, 인증 및 권한 부여 기능을 분리해 주었다.
6. 중복되는 MessageResponeDto 클래스를 삭제하였다.



7. 중복되는 파일명을 변경하였다. scrap -> scraping 유저 쪽에서 쓰이던 scrap은 대한민국의 인구 순 도시 목록을
스크래핑하는 기능을 구현한 클래스이기 때문이다. 그리고 scraping 폴더는 일반적인 웹 스크래핑 작업을 정의하는
것이기 때문에 user domain이 아닌 전역 또는 공통 유틸리티와 같은 패키지로 이동하는 게 적절해 보였다.
8. FavoriteLocation domain을 따로 분리하는 것이 좋지 않을까 싶었지만 특정 사용자와 연관되어 있기도 하고,
다른 기능들이 추가될 가능성은 없기 때문에 굳이 나누지 않기로 하였다.


일단은 파일 구조만 바꾸었는데 사실 클래스 명도 직관적으로 어떠한 기능을 하는지 알아보기 어려운 것들도 있고, 통일성도 부족하다. 클래스명도 전체적으로 수정 후 그다음에는 너무 많은 기능이 있는 클래스를 분리하거나, 어떤 로직을 가지고 있는지 파악하기 어려운 코드들을 수정해보고자 한다. 더하여 domain이 너무 많아서 관련된 domain끼리 합쳐볼 수 있을 것 같다.
'코딩과 매일매일♥ > Seoulvival' 카테고리의 다른 글
| 232025 - 코드리팩토링 (Alarm) (0) | 2023.09.25 |
|---|---|
| 230920 - 코드 리팩토링(클래스명 변경하기 + 도메인 줄이기) (0) | 2023.09.20 |
| 230906 - @Transactional을 걸어도 더티체킹이 안돼! (0) | 2023.09.06 |
| 230902 - (코드리팩토링) api 6개를 3개로 합치기!! (0) | 2023.09.02 |
| 230901 - Spring 의 BufferedImage로 S3 이미지 리사이징하기 (0) | 2023.09.01 |