11월 15일

Yullgiii·2023년 11월 15일
0
post-thumbnail

스프링에서의 관심사 분리

1. 관심사 분리란? 🚀

관심사 분리(Separation of Concerns, SoC)란 하나의 소프트웨어 시스템을 관심사 별로 나누는 설계 원칙이다. 이 원칙에 따르면, 각각의 관심사는 독립적으로 동작하고 변경되어야 한다. 이렇게 하면 코드의 응집도가 높아지고, 결합도가 낮아져 유지보수가 용이해진다.

2. 스프링에서의 관심사 분리 🚀

스프링 프레임워크는 IoC(Inversion of Control, 제어의 역전)와 DI(Dependency Injection, 의존성 주입)를 통해 관심사를 분리한다.

  • Service Layer: 비즈니스 로직을 처리한다. 다른 계층과의 데이터 전달을 위해 DTO를 사용할 수 있다.
  • Repository Layer: 데이터베이스와의 연동 작업을 담당한다.
  • Controller Layer: 사용자의 요청을 받아 적절한 비즈니스 로직을 호출하고, 그 결과를 사용자에게 전달한다.
@Controller
public class SomeController {

    private final SomeService someService;

    public SomeController(SomeService someService) {
        this.someService = someService;
    }

    @GetMapping("/some")
    public String getSome(Model model) {
        SomeDto someDto = someService.getSome();
        model.addAttribute("some", someDto);
        return "some";
    }
}

@Service
public class SomeService {

    private final SomeRepository someRepository;

    public SomeService(SomeRepository someRepository) {
        this.someRepository = someRepository;
    }

    public SomeDto getSome() {
        SomeEntity someEntity = someRepository.findById(1L).orElseThrow();
        return new SomeDto(someEntity);
    }
}

@Repository
public interface SomeRepository extends JpaRepository<SomeEntity, Long> {}

위 예제에서는 각 계층(Controller, Service, Repository)이 자신의 관심사만을 담당하고 있다. Controller는 사용자의 요청을 받아 처리하고, 그 결과를 전달하는 역할만 수행한다. Service는 비즈니스 로직을 처리하고, Repository는 데이터베이스와의 연동 작업을 담당한다. 이처럼 각 계층이 자신의 관심사만을 담당하도록 함으로써, 각 계층의 독립성을 보장하고 코드의 유지보수를 용이하게 한다.

3. 회고 🚀

오늘의 학습을 통해 스프링에서의 관심사 분리에 대해 다시금 생각해 볼 수 있었다. 각 계층이 자신의 관심사만을 담당하도록 함으로써, 코드의 응집도를 높이고, 결합도를 낮추는 것이 얼마나 중요한지를 깨달았다. 이를 통해 코드의 유지보수성을 높일 수 있음을 알게 됐다. 앞으로도 이런 원칙을 잊지 않고, 더 품질 좋은 코드를 작성하고자 한다.

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글