울음참고 개발공부
728x90

 

 


SRP : Single Responsibility Principle
하나의 클래스(모듈)는 하나의 역할을 가져야 한다.

 

 

[ 배경 ]

 

개발을 하며 컨트롤러에는 로직을 두지않고 비즈니스 로직은 서비스단에서 처리한다고 알고 있었다.

하지만 나는 평소 "비즈니스 로직"에 대해 깊게 생각하지 않고 로직은 서비스단에 모두 넘겨서 사용하고 있었는데,

이번에 바이브 코딩 중에 책임 분리 원칙을 지켜달라는 요청을 했음에도 컨트롤러에 로직을 남겨둔 것을 발견했다. 

 

그에 따라 개념을 좀 더 정리하려 한다! 

 

 

비즈니스 로직이 아닌 것 

아래는 구현 로직
- DB에 저장한다 (Repository)
- HTTP 요청/응답 처리 (Controller)
- 화면에 보여준다 (View / UI)
- JSON 파싱, DTO 변환

 

 

[ 내용 ]

 

* 컨트롤러에 남아있는 코드 

    @PostMapping(value = "/with-ppt", consumes = "multipart/form-data")
    public ResponseEntity<String> generateWithPpt(
            @RequestParam("type") String type,
            @RequestParam("content") String content,
            @RequestPart("file") MultipartFile file) throws IOException {
        fileDto fileDto = new FileDto(
                file.getOriginalFilename() != null ? file.getOriginalFilename() : "",
                file.getBytes());
        return ResponseEntity.ok(generateService.generateWithPpt(type, content, fileDto));
    }

 

 

여기서 서비스단으로 바로 파일객체를 넘기지않고 fileDto로 넘기는 이유가 뭘까? 

 

HTTP 요청 데이터(MultipartFile)를 도메인에서 사용하는 객체로 변화하는 작업은 비즈니스 로직이 아니기 때문이다.

컨트롤러에서는 웹 타입(MultipartFile)을 받고, 도메인/애플리케이션에서 쓸 수 있는 *순수한 타입(DTO)으로 변환하여 비즈니스로직으로 넘겨준다.

이것이 컨트롤러의 책임!! 

 

*DTO 는 순수 Java 객체

 

MultipartFile 의 특징
- spring-web 모듈에 속한 타입
- HTTP 요청이 있어야 존재
- 웹 프레임워크에 강하게 결합됨

 

 

[ 결론 ]

 

컨트롤러 -> DTO 변환

서비스 -> DTO 받아서 비즈니스 로직 처리

=> 웹과 비즈니스가 완전히 분리됨 !

 

 


 

바이브 코딩을 하면서...  그래도 개발자로서 동작하는 것에 그치지않고 왜 이렇게 짰는지? 의심하고 정리하고..........배우고......해야겠..........지............? 안해도되나........... 이제 그것도 걍 알아서 다해주나........... 내가 설정잘못해놔서 그런가............. 암튼......더 배우자.......................................... 

728x90
profile

울음참고 개발공부

@메각이

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!