본문 바로가기

TIL(Today I Learned)

TIL-230918('행동대장' 코드리팩토링 - 폴더구조 변경)

📝오늘 공부한 것

  • 실전프로젝트 - '행동대장' 코드리팩토링(폴더 구조 변경)
  • 자바의 정석 스터디 - ch6 객체지향 프로그래밍1

 

📌코드 리팩토링 - 폴더 구조 변경

프로젝트를 시작할 때 팀원들끼리 폴더구조, 코드 컨벤션, Git 컨벤션 등을 회의를 통해 결정했다. 프로젝트를 진행하면서 잘 지키려고 노력을 하였다. 그런데 내가 다른 사람들의 코드를 봤을 때나, 다른 사람들이 내 코드를 봤을 때, 바로 이해가 되지 않은 것을 보면 잘 지켜지지 않은 것 같다. 특히, 패키지 이름이나 메서드 이름은 코드를 보지 않고는 어떤 기능인지 파악하기 어려운 것들도 많았다. 이러한 이유로 코드의 가독성을 높이고, 유지보수성을 향상시키기 위해서 전체적인 코드 리팩토링을 진행하기로 하였다.
내 코드들 뿐만 아니라 다른 팀원들의 코드도 바꿔야 하기 때문에 Organization의 프로젝트를 Git clone 한 뒤 코드를 변경하기로 했다.

 

⛔문제점① : 명확하지 않은 이름(폴더명, 패키지명, 클래스명)

  • auth라는 이름의 패키지는 '인증' 또는 '인가'의 약어로, 이것만 봤을 때 구체적인 기능을 파악하기 어려울 수 있다.

💯해결  

  • 회원가입, 로그인 등의 사용자 관련 코드가 있다는 것을 직관적으로 이해하기 쉽도록 auth -> user로 패키지 이름을 변경하였다.
  • UserController를 LoginController, SignUpController로 분리하여 클래스의 역할을 명확하게 구분하였다.
    또한, UserService를 LoginService, SignUpService로 분리하였다.

 

 

  •  PostGetController는 우리 사이트의 메인페이지이자 모든 post를 조회하는 페이지이다. 클래스 이름만 봤을 때는 게시글을 조회하는 클래스인가? 그렇다면 왜 PostController에 작성하지 않았지?라는 생각이 들 수 있다고 생각했다. 나는 이렇게 이름을 지은 이유에 대해서 팀원분에게 들었기 때문에 알 수 있었지만, 다른 사람이 딱 봤을 때 바로 어떤 기능인지 이해하기 어렵다고 생각했다.

💯해결  

  • 기존의 'PostGetController' 클래스의 이름은 해당 클래스가 어떤 기능을 하는지 명확하지 않아 혼동을 줄 수 있다. 사이트의 메인페이지 관련 기능임을 바로 알 수 있도록 MainPageController로 변경하였다.

 

 

⛔문제점② : 폴더 안에 너무 많은 파일들이 들어있음.

  •  지금은 dto안에 너무 많은 파일들이 들어있다. 특히 같은 기능에 대한 request와 response가 둘 다 있을 경우 이름이 비슷해서 코드를 찾기 어렵게 만든다.

 

💯해결

  • 각 dto 클래스를 request와 response에 따라 구분하기 위해 request와 response패키지를 만들어 클래스를 그룹화하였다.

 

⛔문제점③ : 폴더구조의 불일치 & 불필요한 폴더

  • entity 패키지에 entity가 아닌 UserRoleEnum이 포함되어 있어 구조가 일치하지 않는다.
  • AgreeController와 DoneController는 게시글이 해결되었거나 그 게시글에 동의할 때 유저가 누르는 '좋아요 버튼'의 기능이다. 이 기능은 게시글과 관련된 기능임에도 불구하고 PostController에 포함시키지 않고, 따로 만들었다.
  • exception패키지가 이미 존재하는데도 advice패키지를 따로 만들어서 CustomExceptionHandler클래스를 넣었다.

 

💯해결

  • type패키지를 만들어 코드의 일관성을 유지하고, entity패키지에서 userRoleEnum을 이동하였다.
  • post와 관련된 기능을 한 번에 찾기 쉽도록 PostController와 통합을 시켰다. agree와 done의 코드가 많지 않고 기능도 적었다. 우리 프로젝트는 규모가 작기 때문에 중복된 코드를 제거하고 구조를 단순화시키는 것이 더 효율적이라고 생각했다.
  • advice 대신 handler로 패키지 이름을 변경하였고, exception패키지의 하위 패키지로 이동하여 구조를 정리했다.

 

 

느낀 점🤔

오늘의 리팩토링을 통해서 코드구조의 통일성이 증가한 것 같다. 앞으로는 명확하고 직관적인 이름을 사용하여 코드의 가독성을 향상할 것이다.

 

개선할 점💪🏻

폴더구조를 정리하다 보니 중복된 코드들도 많고 필요 없는 파일들도 많아 보였다. 또한, 다른 팀원들이 작성한 클래스명들도 코드를 보지 않고 어떤 기능인지 파악하기 어려웠다. 앞으로의 리팩토링에서는 코드의 목적을 한눈에 알 수 있도록 이름을 수정하고, 비슷한 기능을 하는 코드들을 통합할 것이다. 이러한 리팩토링을 통해 프로젝트를 더욱 효율적으로 관리할 것이다.