스프링은 확장에 강하다. 대신 초기 설계를 대충하면 고통도 같이 확장된다
업무 용어로 풀면 이겁니다.
왜 Spring은 확장에 강한가
- IoC / DI
→ 결합도 낮추기 쉬움 - 레이어드 구조
→ 기능 추가가 물리적으로 가능 - 풍부한 생태계
→ 보안, 트랜잭션, 배치, 메시징 다 있음
즉, “붙이는 것” 은 정말 쉽습니다.
그런데 고통도 같이 커지는 이유
1. 경계 없는 서비스
- Service가 비대해짐
- 유스케이스 단위가 아니라 테이블 단위 서비스
- 변경 영향도 예측 불가
👉 기능 하나 추가 = 전체 리그레션 공포
2. 엔티티 남용
- JPA 엔티티 = DTO = API 모델
- 양방향 연관관계 + 지연로딩 지옥
- 작은 요구사항에 쿼리 폭발
👉 성능 이슈가 설계 부채로 전환됨
3. 설정과 추상화의 과잉
- 인터페이스를 위한 인터페이스
- 전략 패턴 남발
- 실제로 교체 안 함
👉 확장을 대비했지만,
확장보다 유지보수가 더 어려워짐
4. “일단 돌아가게”
- 트랜잭션 범위 대충
- 예외 정책 없음
- 상태 관리 산만
👉 트래픽 늘면 바로 임계점 도달
그래서 Spring 잘 쓰는 팀의 기준
한 줄로 정리됩니다.
확장 포인트만 설계하고, 나머지는 단순하게 둔다
실무 체크리스트로 보면:
- 서비스는 유스케이스 기준
- 엔티티는 도메인 내부 전용
- API 모델 분리
- 트랜잭션 경계 명확
- “나중에 확장”이라는 말 금지
유스케이스는 정책의 흐름이고,
엔터티는 상태의 진실이고,
DB는 현실의 비용이다.
설계는 이 셋의 타협을 문서화하는 일이다.
LIST
'Spring & Backend' 카테고리의 다른 글
| 운영에서 살아남는 스프링 앱은 로그와 메트릭이 먼저다 (0) | 2026.02.02 |
|---|---|
| 빈 라이프사이클을 모르면 버그는 ‘느낌’으로만 잡는다 (0) | 2026.02.02 |
| 스케일은 트래픽이 아니라 상태 관리에서 갈린다 (0) | 2026.02.02 |
| 백엔드는 보이지 않지만, 모든 장애는 거기서 시작한다 (0) | 2026.02.02 |
| 설정이 적은 코드가 아니라 의도가 분명한 코드가 좋은 스프링 코드다 (0) | 2026.02.02 |
