멋쟁이 사자처럼

[멋사 백엔드 부트캠프] 게시판 기능 구현

sunm2n 2025. 7. 11. 23:53

일단 열심히 개발중에 API를 가져다 쓰는 부분에서 엔티티가 중복되는 경우가 많아 폴더 구조를 긴급 수정하게 되었다.

 

 

다음과 같이 공통기능은 common을 넣고 module에는 각 기능별로 entity, repository, service를 web에는 controller와 dto를 넣기로 했다.

 

ERD

 

우선 내가 구현한 게시판, 댓글 기능쪽의 ERD 설계도이다.

 

공감수 테이블은 처음 ERD를 설계할 때 생각을 못했는데 인스타그램 좋아요처럼 토글로 만들려면 공감을 이미 눌렀는지에 대한 정보를 저장할 테이블을 별도로 만들어야 한다는 사실을 망각했다. 그래서 뒤늦게 추가하였다.

 

Board.java (1)
Board.java (2)

 

여기서 먼저 유저 정보가 바뀌더라도 게시글에는 따로 영향을 주지 않게 하려고 board 테이블에도 별도로 저장하도록 설계하였다.

 

여기서 @Builder.Default 이 어노테이션을 쓴 이유는 처음에는 그냥 실행시켰더니 초기값이 무시되고 null로 초기화가 되었다.

 

다음 어노테이션을 써야 빌더가 호출될 때 초기값이 적용되도록 보장해준다.

 

BoardEmpathy.java

 

수정일이야 애초에 토글 형식이기 때문에 전혀 필요가 없었고 생성일도 뺄까 했지만 우선은 있으면 나중에 데이터를 조회할 때 더 좋지 않을까 해서 우선은 만들었다.

 

Repository.java

 

위에가 BoardRepository 이고 아래가 BoardEmpathyRepository 이다.

 

BoardService.java (1)
BoardService.java (2)

 

우선 조회 수 증가는 DB에만 증가하도록 하였고 엘라스틱 서치를 구현하게 되면 그쪽도 별도로 증가 시켜줘야 해서 추후에 엘라스틱 서치가 구현이 완료되면 추가할 예정이다.

BoardService.java (3)
BoardService.java (4)

공감버튼은 토글로 구현하기 위해 다음과 같이 구현을 했다.

BoardService.java (5)

 

기존 수업에서는 Setter로 구현하였지만 나는 Builder로 구현하였다.

 

 

 

 

 

 

우선 아직 다른 기능쪽에서 구현이 안된 것들이 있어서 내가 당장 테스트 할 수 있고 추후 security나 프론트가 완성 되었을 때 연결할 수 있는 수준까지 우선 구현을 해보았다.

 

 

Dto를 구성할 때도 ERP에서 그렸던 순서대로 작성하였다.

 

 

 

느낀점

일단 우리팀이 다른 팀들보다도 ERP나 설계 부분에서 많은 시간을 쏟았음에도 공감을 눌렀는지 확인하는 테이블을 빼먹는 등의 실수가 나왔다. 아직 경험이 부족하여 떠올리지 못한거 같지만 한편으로는 조금만 더 작동하는 흐름을 잘 고려했더라면 충분히 고려했을 만한 사항이라고 본다. 

 

사실 게시판 기능쪽은 실습을 해봤던 거라 구현 난이도 자체는 어렵지 않았다.

 

물론 아직 엘라스틱 서치와 AI를 가져다가 붙여야 하기 때문에 어려운 것을 하나도 안해서 비교적 쉽다고 느꼈을 수도 있다.

 

암튼 이번 기회를 통해 설계과정에서 전체적인 프로그램이 어떤 식으로 동작하는지 조금 더 생각해봐야겠다는 생각이 들었다.