[Java/Spring] postory 프로젝트 트러블슈팅🚀 및 회고
2025. 4. 11. 17:47

🚀 트러블슈팅

1. 순환참조 (Circular Dependency)

🔍 원인

A 서비스에서 B 서비스의 기능이 필요할 때, B 서비스의 인터페이스를 참조하는 방식을 사용함

그러나 B 서비스 역시 A 서비스의 기능을 사용하는 구조였음

두 서비스가 서로를 참조하면서 순환 참조(Circular Reference) 문제가 발생

🤗 해결 과정

서비스 간 직접 참조 대신 Repository를 직접 참조하는 방식으로 변경.

즉, AService에서 BService를 사용하지 않고, BRepository를 직접 호출하여 필요한 데이터를 가져오도록 함.

🪬결과

애플리케이션 실행 시 발생하던 BeanCurrentlyInCreationException 예외 해결.

💫 순환참조 문제를 방지하기 위해서, 계층 간의 명확한 책임 분리가 필요함...


2.  `isPublic` 필드 인식 불가 및 JSON 매핑 오류

문제 상황

; 기존에 isPublic을 인식하지 못해서 isPostPublic으로 수정하였으나 여전히 인식하지 못함

(true를 입력해도 false로 응답)

🔍 원인

`isPublic`이라는 컬럼명을 테이블에 사용했는데, MySQL에서는 public이 예약어로 지정되어 있어 충돌이 발생함

SQL 파서가 해당 이름을 예약어로 인식하면서 구문 오류(Syntax Error)를 발생시킴

🤗 해결 과정

1. 예약어 충돌 문제

  • user 엔티티의 `isPublic`을 `isUserPublic`으로, post 엔티티의 `isPublic`을 `isPostPublic`으로 변경
  • DB의 테이블 명도 똑같이 변경

2. Jackson 네이밍 명시

필드에 `@JsonProperty("isPostPublic")`을 적용하여 요청(request)과 응답(response)에서 동일한 필드명이 맵핑되도록 함

@JsonProperty("isPostPublic")
private boolean isPostPublic;

🪬결과

 

; `isPostPublic : true` 로 입력하면 `true`로 응답!

  • 요청과 응답 모두에서 isPostPublic 필드가 정확히 매핑되어 데이터가 정상적으로 저장 및 반환됨
  • 예약어 충돌 문제도 함께 해결되어 안정적인 DB 연동과 직렬화가 가능해짐

🔖 회고

이번 프로젝트에서 가장 인상깊었던 부분은 PR을 통해 코드리뷰를 나눴던 시간이었습니다. 각자의 코드를 존중하며 본인 코드처럼 의견을 나누어준 팀원들 덕분에 어느때보다 든든한 프로젝트였습니다. 또한 오류를 디버깅하는 과정을 통해 전체적인 흐름이나 시스템 구조를 익힐 수 있었던게 큰 도움이 되었습니다.

 

LIST