프로젝트 리팩터링 - 기능추가

꾸준하게 달리기~·2023년 6월 8일
0
post-thumbnail

프로젝트 리팩터링

일단, 리팩터링으로
Member에 point, grade 필드를 만들어
활동을 하면 (게시글을 작성한다거나, 댓글을 단다면)
점수에 따른 등급을 정해줄 예정이다.

근데 grade는 String이 나을까 아니면 enum이 나을까?

enum은 값이 제한된 값의 집합을 나타내는 데 사용되는 데이터 유형, 즉 enum이 낫다.

구현하기 전에, 이전에 프로젝트 했던 내용과 조금 다른점을 발견했다.
원래 generated 패키지의 mapstruct impl 클래스 파일들은 따로 저장되었는데,
원래의 build 패키지가 아니라 갑자기 src 패키지에 저장되더라. 이유를 보니까,

프로젝트시엔 gradle로 빌드했는데, 리팩터링할때는 intellij 에서 빌드했더라.

그럼 어떻게 해결했을까?
쉽게쉽게, 빌드 툴을 그래들로 바꿔주었다.

그렇게 해주니 빌드시 원래 익숙한 경로대로 mapstruct impl클래스들 생성해주더라

즉, 내가 어디에서 빌드했느냐에 따라서, impl 소스파일 경로도 바뀔 수 있다 (인텔리제이는 src안에서, gradle은 따로 build 경로 생성)

이제, 각설하고, 계획했던 내용은 어떻게 구현하지?

일단, 점수 + 요인은 board나 comment 가서 create 매서드에서, getMember, setPoint 이런식으로 추가해주었다.
1. Member에 Integer point와 Grade(Enum) grade 변수로 지정
2. 게시글작성(boardService의 createBoard)이나 댓글 작성시, point 더해짐 (스크린샷)

  1. 그렇게 했더니, create 할때 당시는 각각 해당 보드나 커멘트에 할당된 멤버가 없어서, 널포인트 에러남. 그렇다면?
    (자세한 에러는, create 매서드 자체에서 member을 할당해주는게 아니라, 컨트롤러에서 @Param으로 받아온 memberId에서 할당해주므로, service로직에서는 member를 일단 정할 수 없어서 nullpoint 예외가 나온것이다.)

  2. 위 상황을 해결하기 위해, boardService, commentService가 아닌 memberService 자체에서 board, comment를 만든 후 가지고있는 List(보드리스트, 커멘트리스트)의 크기에 따라 점수를 지급하는 로직을 memberService에서 작성했다.

  1. 이후 컨트롤러에 patchGrade 매서드 작성 했다.
  1. 이후에, 서버를 돌려 member한명이 해당하는 점수를 만들어내면, enum 형태의 Grade에 원하는 값이 잘 할당되는것을 확인할 수 있었다.
profile
반갑습니다~! 좋은하루 보내세요 :)

0개의 댓글