아하
생활

생활꿀팁

탈퇴한 사용자
탈퇴한 사용자

스프링 MVC 질문 드립니다.

스프링 처음인데 지금까지 제가 controller에 대부분의 처리 로직을 작성했었는데요... 작업하면서 service에 비즈니스 로직을 작성해야 한다는 걸 알게 되었어요.... service에 어디서부터 어디까지 로직을 다루어야 할지 몰라서 이렇게 질문드립니다.
예를 들어 게시판 구현하려고 할 때 controller에서 파라미터 정보를 받아서 service 쪽에 모든 파라미터 정보를 넘겨서 처리를 해야 하나요 아니면 파일 존재여부 처럼 간단한 건 controller에서 처리해도 되나요?

    55글자 더 채워주세요.
    3개의 답변이 있어요!
    • 반듯한거북이278
      반듯한거북이278

      안녕하세요.

      말씀하신것이 맞습니다. MVC에서 M이 model인데요, spring framework에서는 service가 그 역할을 합니다.

      그래서 데이터 관련 비즈니스로직들은 모두 service에 들어 있는 것이 좋습니다.

      하지만 일부는 controller에 들어있는 것이 좋을수도 있고, 혹은 view까지 올라가는 게 좋을수도 있습니다. 이런 걸 architecture설계라고 하는데요, 이 부분은 나중에 공부해 보시기 권하구요,

      다시 질문으로 돌아가면 파일 존재여부는 명확하게 service이 역할이니 model에 해당하는 service로 옮겨주시는 것이 좋겠습니다.

      다만 지금 연습하시는 것이고 이후의 재사용 가능성이 없다면 일단 지금은 기능 구현으로 마무리 하시는 것도 좋아 보입니다.

    • 안녕하세요.

      controller에서는 데이터의 처리, service에서는 로직처리를 한다고 생각하시면 됩니다.

      controller에서 필수값 체크 및 데이터 폼에 맞는지 여부를 확인하고

      service에서는 처리하고자 하는 로직을 처리하시면 됩니다.

      하지만 validation을 controller에서 처리하다 보면 복잡하기 때문에 이를 도와주는 bean-validation의 라이브러리가 존재합니다.

      간단한 예시입니다.

      @NotNull // null 값 입력 불가 private File file; @Email(message = "Email 형식이 아닙니다.") // email 패턴 체크, error message 출력 private String email; @Min(value = 1, message = "Age should not be less than 1") @Max(value = 30, message = "Age should not be greater than 30") private int number; // 숫자의 경우

      이외에도 다양한 validation 어노테이션이 존재합니다.

      아래 링크에 설치방법 및 사용방법에 대한 링크를 참조하시면 됩니다.

      https://meetup.toast.com/posts/223

      https://www.baeldung.com/spring-boot-bean-validation

      확인하시고 추가적인 질문있으시면 남겨주세요.

    • 코딩 디자인 패턴마다 다른데,

      굳이 컨트롤러에 쓰지 말란 법은 없습니다.

      하지만 MVC라는 패턴을 만든 이유를 생각해보면,

      기본 처리 흐름은 서비스의 구현단에서 작업하고,

      이를 후처리할 필요가 있는 경우 컨트롤러에서 작업하는 게 좋습니다.

      예를 들어 어떤 데이터를 insert, update, delete 한다고 하면

      기본적인 CRUD에 관련한 구현은 서비스 구현단에서 하고, 이를 조작하거나 주요 결과를 반영할 수있는 변수의 삽입, 가공은 컨트롤러에서 하는 게 되겠죠.