[Spring] 클린 스프링

Yuri·2025년 2월 10일

Spring

목록 보기
13/21

clean spring

  • spring 애플리케이션을 깨끗히 정리해보자!

architecture 정리

controller

🧹 정리 포인트: endpoint에 대한 명확한 입력과 출력 처리

  • 자원의 흐름이 명확한 Http method, RESTful API 설계
  • request 요청 검증(@Valid)과 response 데이터 변환에 집중
    • request의 목적에 따라 DTO 분리를 고려한다.
    • request의 명은 목적에 맞게 명명한다.
    • 이때 updateRequest, postRequest 등으로 모호하게 명명하지 않는다.
  • Swagger 또는 API 문서화 도구를 사용해 인터페이스를 명확히 정의

PUT /api/students
PATCH /api/students/name → 특정한 값을 변경하는 경우 명확하게 정의
PATCH /api/students

service

implements 구현체를 만드는 것은 회사마다 스타일이 다르다.

🧹 정리 포인트: 도메인의 책임과 역할에 집중된 정확한 비즈니스 로직 처리

  • 객체지향 원칙 준수하며, 단위 테스트가 가능하도록 개발
  • 자신의 도메인 repository만 DI함으로써 다른 도메인의 Service는 비즈니스 로직과 데이터 접근 캡슐화
    • 순환 참조는 서비스 목적 분리를 통해 충분히 해결 가능
  • 비즈니스 규칙을 검증하는 경우 공통 메서드나 클래스를 만들어 반복 코드를 줄임
  • 요구사항과 기획 내용이 정확히 투영될 수 있는 비즈니스 로직 작성

repository

🧹 정리 포인트: entity 객체와의 직접적인 연결로인 만큼 검증된 데이터로 명확한 데이터 흐름 처리
✔️ repository 에서는 예외처리 코드가 들어가서는 안된다.

  • 복잡한 데이터 처리 로직은 Serivce 계층에서 다루어야 하며, Repository 는 DB와 관련된 최소한의 책임만을 수행
  • 추상화된 데이터 접근 기능을 활용하여 데이터 소스나 데이터베이스가 변경되어도 쉽게 적용 가능

외부에 노출할 것이 아니라면 내부 로직에서 어떻게 의존성을 주입하든 상관없다!

✚ clean architecture

Property 정리

profile

  • local, 개발환경: application-dev.yml

  • 테스트(QA), 배포 전 release 환경 등

  • 운영: application-prod.xml

    • TRACE > DEBUG > INFO > WARN > ERROR
  • 개발 환경에 따른 속성 설정을 나눔으로써 애플리케이션의 다양한 실행 환경에 유연하게 대응

@Value

@ConfigurationProperties
@Value

Annotation Features 정리

@Caching

@Cacheable(key, value): 캐시 생성
@CacheEvict: 캐시 삭제

Redis 캐시 매니저

Spring Redis Templates

@Scheduled

Batch 시스템, 스케줄링 시스템, Job 관리도구

  • 주기적인 작업은 서버 리소스를 고려하여 적절한 간격 설정 필요
  • 서버가 여러대인 경우 (대용량 데이터, 가용성)

@Async

  • 비동기로 실행되는 작업 처리
  • CompletableFuture
  • 비동기의 특징 → 순서를 보장하지 않음

@EventListener

  • 컴포넌트 간 느슨한 결합과 이벤트 처리
  • 이벤트 구독 처리는 미리 검증된 데이터를 통해 간단하고 복잡하지 않는 로직으로 오버헤드 없이 처리하는게 좋음

Code

정적 팩토리 메서드 패턴

validatator

profile
안녕하세요 :)

0개의 댓글