Java Spring

[웹 애플리케이션 개발] - 내 코드 feedback (+계속 추가)

pearl.k 2023. 8. 30. 14:44

프로젝트에서 내가 맡은 기능은 Note (게시글 작성) 기능이다. 단순한 CRUD 기능을 포함하여 우리 팀이 추가한 특징인 "매일 바뀌는 키워드"까지 적용하여 기능을 만들어야 한다.

지난 8월 한 달간, 완전 기본 기능을 구현한 코드 ver.1 & 기본 테스트 코드를 작성해서 돌려보았다. 에러 없이 잘 돌아가게 만들기는 했지만, 내 코드가 좋은 코드인가? 라는 질문에는 자신있게 대답할 수 없어서 초안 코드를 피드백하는 기록을 남기고자 한다.

초안은 그동안 배운 Java 프로그래밍 지식과 구글링을 통해 완성되었다. 그래서 좋은 개발자의 클린 코드와는 다른 부분이 많았고 그 부분을 피드백 하여 더 좋은 코드로 업그레이드하고자 한다.

 

1. Builder 패턴으로 객체 생성하기

@Builder 어노테이션을 사용하여 빌더 패턴 방식으로 개체를 생성할 수 있다. 빌더 패턴을 사용하면 객체를 유연하고 직관적으로 생성할 수 이씩 때문에 개발자들이 애용하는 디자인 패턴이다.

특히 장점은, 빌더 패턴을 사용했을 때 어느 필드에 어떤 값이 들어가는지 명시적으로 파악할 수 있다는 것이다. 어느 필드에 어떤 값이 매칭되는지 바로 보이기 때문에 객체 생성 코드의 가독성을 높이고, 협업에서 코드를 파악하기에도 좋다. 

따라서 빌더 패턴으로 객체를 생성하는 코드를 짰어야 하는데, 내가 짠 코드는 이를 사용하지 않고, 완전 Java 문법의 기본적인 방법으로 객체 생성, 필드 주입을 했다. 이 점을 고쳐서 좀 더 클린하고 중복이 없는 코드로 만들어야 할 것이다.

아래는 빌더 패턴을 사용한 객체 생성의 예시이다.

@Builder
public Article(String title, String content){
	this.title = title;
    	this.content = content;
}

 

 

2. Entity를 DB와 연결(매핑) 하는 과정에서 실수

Entity를 DB에 있는 table과 매핑할 때, 기본키(PK) 오류를 간과했다. collection 테이블에는 고유 기본키(PK)가 없고, 다른 테이블에서 가져온 FK를 PK처럼 사용하고 있었는데, Entity를 매핑할 때 여기서 문제가 생겼다.

그래서 collection 테이블의 스키마를 전부 재설정했다. 기존의 PK이자 FK 였던 attribute 들을 모두 FK로만 설정해주고, 객체가 생성 될 때마다 자동으로 PK가 생성될 수 있게 테이블 구조를 바꿔주었다.

MySQL의 ALTER 문을 이용해서 기존 PK, FK constraints를 모두 삭제 -> 새로운 attribute 추가 -> PK로 설정 -> FK 재선언

이 순서대로 진행해주었다.

 

3. Note 작성을 위한  API 코드 개선하기

현재 NoteRequest (DTO)와 NoteController, NoteService의 기능 분담과 의존성 관계가 명확하지 않다. 각 클래스가 담당하는 기능, 의존성 주입을 명확하게 정의하고 이에 맞춰 코드를 개선해야 한다.

즉, 단일 책임 원칙(SRP)를 제대로 지키지 않은 것인데, 역시 이론 공부(https://pearlb1ue.tistory.com/34)와 실전에서 해보는 것 사이에는 큰 차이가 있음을 느꼈다.

개선 후, 테스트 코드도 수정하여 잘 돌아가는지 확인해야 한다.

 

++ 이후 발생하는 피드백이나 문제 상황들을 추가할 예정이다