[SpringBoot] 2024 게시판 만들기 Q&A ① - MVC패턴이란?

SihoonCho·2023년 2월 13일
0
post-thumbnail

※ 읽기에 앞서


본 시리즈는 작성자의 이해와 경험을 바탕으로 실습 위주의 설명을 제공하고자 작성되었습니다.
실습 중심의 이해를 목표로 작성되었기 때문에, 다소 과장되거나 생략된 부분이 있을 수 있습니다.
따라서, 이론적으로 미흡한 부분이 있을 수 있는 점에 유의하시고 양해 부탁드립니다.

또한, Spring Boot 기반의 Backend 개발에 중점을 두고 설명하고 있으므로,
Frontend와 관련된 내용은 별도의 참고자료를 검색/활용하실 것을 권장드립니다.


📌 SpringBoot


'[SpringBoot] 2024 MVC 패턴 기반의 게시판 만들기'를 시작하기에 앞서,
Spring Boot가 무엇인지, 왜 Spring Boot인지 간단하게 짚고 넘어가겠습니다.


📖 Spring


다음은, [Spring 공식 문서]에 기재된 Spring이라는 이름의 기원에 대한 내용입니다.

Spring Framework: The Origins of a Project and a Name

ENGINEERING | ROD JOHNSON | NOVEMBER 09, 2006


I am regularly asked about the origin of the name “Spring.”
...
Whatever happened next, the framework needed a name. In the book it was referred to as the “Interface21 framework” (at that point it used com.interface21 package names), but that was not a name to inspire a community. Fortunately Yann stepped up with a suggestion: “Spring”. His reasoning was association with nature (having noticed that I'd trekked to Everest Base Camp in 2000); and the fact that Spring represented a fresh start after the “winter” of traditional J2EE. We recognized the simplicity and elegance of this name, and quickly agreed on it.

해당 문서에 따르면, 2006년 11월 09일 엔지니어 ROD JOHNSON은
Spring이라는 이름이 지어진 기원에 대해 굉장히 합리적인 이유를 제시했습니다.

당시 J2EE(자바 엔터프라이즈 에디션)의 복잡함에 질려 있던 개발자들에게
간소화된 프레임워크를 통해 희망의 메시지를 담았다는 것입니다.

문서에서 해당 내용을 간단히 해석하여 정리하면 아래와 같습니다.
이름은 간결하지만, 그 속에 담긴 의미는 꽤나 낭만적입니다.

개발자들의 겨울은 끝났다.


📖 SpringBoot


실제로 Spring이 등장하며 개발이 쉬워졌습니다.
정말로 Spring을 통해 겨울은 지나가고 봄이 온 것 같습니다.

그러나 우리는 ...

"우리는 여전히 너무 춥다."

분명 봄이 왔지만, 우리는 여전히 꽃샘 추위가 너무 춥습니다.
이에 따라 Spring은 한 단계 더 발전하게 됩니다.
그렇게 나온 것이 바로 SpringBoot 입니다.


📖 Spring vs SpringBoot


그래서 결국 뭘 써야 하는가?

실무에서 우리는 기존 서비스의 유지보수와 신규 프로젝트의 최신 기술 적용을 위해
SpringSpring Boot 둘 다 할 줄 아는 것이 베스트입니다.

필자는, Spring을 먼저 공부한 후에 Spring Boot를 공부할 것을 권장합니다.
무엇이 편해졌고, 편해진 기능은 원래 어떻게 구현하는 것이었는지를 알아야
SpringSpring Boot 둘 다 할 줄 알 수 있기 때문입니다.

그러나 여러분의 시간을 아껴드리기 위해 결론을 말씀드리면,

  • 일반적으로 신규 프로젝트를 위해 Spring Boot를 선택하여 공부합니다.
  • 현실적으로 기존 프로젝트를 위해 Spring을 선택하여 공부합니다. (필요하다면)

📌 MVC 패턴


드디어 이야기의 본제로 넘어왔습니다.
본 시리즈의 핵심이라고도 할 수 있는 MVC 패턴이란 무엇일까요?


📖 이론적 정의


MDN(Mozila Developer Network) Web Docs의 정의에 따르면 다음과 같습니다.

MVC (모델-뷰-컨트롤러) 는 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴입니다. 소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 두고 있습니다. 이러한 "관심사 분리" 는 더나은 업무의 분리와 향상된 관리를 제공합니다. MVC 에 기반을 둔 몇 가지 다른 디자인 패턴으로 MVVM (모델-뷰-뷰모델), MVP (모델-뷰-프리젠터), MVW (모델-뷰-왓에버) 가 있습니다. - MDN Web Docs -

디자인 패턴이, 모델-뷰-컨트롤러로 나눈 등등 굉장한 말이 나오고 있습니다.
뭔가 업무적, 성능적으로 좋다는 말인 것 같습니다.

정의를 외우고 나니 문득 의문이 듭니다.

"그래서 결국 실제로 어떻게 하는데 그거?"


📖 실무적 정의


실무(실습)에서의 MVC패턴을 이해하기 위해서는 2가지만 알고 있으면 됩니다.

  • 디자인 패턴 = 프로젝트 구조
  • Model-View-Contoller는 세부적으로 총 5단계를 거친다

다음은 실제 SpringBoot를 통한 MVC 패턴을 기반으로한 간단한 패키지 구조입니다.

├── src
│   ├── main
│   │   ├── java
│   │   │   └── com.companyname.projectname
│   │   │       ├── post
│   │   │       │   ├── controller
│   │   │       │   │   └── PostController.java
│   │   │       │   ├── dto
│   │   │       │   │   ├── PostRequestDto.java
│   │   │       │   │   ├── PostResponseDto.java
│   │   │       │   │   ├── PostListResponseDto.java
│   │   │       │   │   ├── PostSaveRequestDto.java
│   │   │       │   │   └── PostUpdateRequestDto.java
│   │   │       │   ├── model
│   │   │       │   │   └── Post.java
│   │   │       │   ├── repository
│   │   │       │   │   └── PostRepository.java
│   │   │       │   └── service
│   │   │       │       └── PostService.java
│   │   │       └── ProjectNameApplication.java
│   │   └── resources
│   └── test

아, 벌써부터 머리가 막 어지럽고 인터넷 창을 닫고 싶어집니다.
여전히 아직 이해가 안 가는 부분이 있을 것입니다.
그리고 그 의문은 아마 아래와 같을 것입니다.

"아니, MVC는 3개인데 또 왜 갑자기 5단계가 돼?"
"View는 또 어디감?"

이에 대한 답을 최대한 간략하게 세 줄 요약하자면,

MVC 패턴은 프로젝트 구조를 큰 틀에서 세 부분으로 나눈 것인데,
실제로 개발을 할 때 이 세 부분은 세부적으로 5단계를 거친다.
View는 Backend와 Frontend의 역할이 분리되며 사라졌다.

간략하게 요약하면 그렇다는 것이고 여전히 이해가 안 가는 부분이 있을겁니다.
예컨데, View는 백엔드에서 처리하지 않게 되었다는 표현이 더 정확할 것입니다.

그렇다면 이번엔 실무적으로 접근해보면 어떨까요?
세 부분의 5단계를 여러분이 알고있는 내용으로 정리해보겠습니다.

  • Model: domain(model, entity), dto, repository 가 이에 해당합니다.
  • View: HTML, CSS, JavaScript 등이 이에 해당합니다.
  • Controller: service, controller가 이에 해당합니다.

📌 결론


갑자기 역류성 식도염이 생긴 것 같습니다. 위액이 막 역류하는 것 같습니다.
여러분의 불편한 소화현상을 돕기 위해 급히 개비스콘을 투약하겠습니다.

그러니까 즉, 최종적으로 정리하면 아래의 3개만 기억하면 됩니다.

MVC 패턴은 프로젝트 구조를 큰 틀에서 세 부분으로 나눈 것인데,
실제로 개발을 할 때 이 세 부분은 세부적으로 5단계를 거친다.
View는 Backend와 Frontend의 역할이 분리되며 사라졌다.

  • Model: domain(model, entity), dto, repository 가 이에 해당합니다.
  • View: HTML, CSS, JavaScript 등이 이에 해당합니다.
  • Controller: service, controller가 이에 해당합니다.
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com.companyname.projectname
│   │   │       ├── post
│   │   │       │   ├── controller
│   │   │       │   │   └── PostController.java
│   │   │       │   ├── dto
│   │   │       │   │   ├── PostRequestDto.java
│   │   │       │   │   ├── PostResponseDto.java
│   │   │       │   │   ├── PostListResponseDto.java
│   │   │       │   │   ├── PostSaveRequestDto.java
│   │   │       │   │   └── PostUpdateRequestDto.java
│   │   │       │   ├── model
│   │   │       │   │   └── Post.java
│   │   │       │   ├── repository
│   │   │       │   │   └── PostRepository.java
│   │   │       │   └── service
│   │   │       │       └── PostService.java
│   │   │       └── ProjectNameApplication.java
│   │   └── resources
│   └── test

부족한 이 글의 설명을 듣고 이해가 되셨다면 다행이지만, 이해가 안 되셨다면 어쩔 수 없습니다.
원래 "백문이 불여일견, 일단 맞다보면 잘 이해된다(?)."라는 말이 있습니다.
그냥 그런게 있나보다 하고 실습부터 때려박으면 이해가 될 겁니다.

본격적인 실습이 다음 글부터 시작됩니다. 일단 실습부터 해보면서
이번 글을 잘 되새기면 분명 깨달음이 찾아 올 것입니다.
그럼 다음 글에서 뵙겠습니다.



본 시리즈는 작성자의 이해와 경험을 바탕으로 실습 위주의 설명을 제공하고자 작성되었습니다.
실습 중심의 이해를 목표로 작성되었기 때문에, 다소 과장되거나 생략된 부분이 있을 수 있습니다.
따라서, 이론적으로 미흡한 부분이 있을 수 있는 점에 유의하시고 양해 부탁드립니다.

또한, Spring Boot 기반의 Backend 개발에 중점을 두고 설명하고 있으므로,
Frontend와 관련된 내용은 별도의 참고자료를 검색/활용하실 것을 권장드립니다.
profile
개발을 즐길 줄 아는 백엔드 개발자

1개의 댓글

comment-user-thumbnail
2023년 8월 12일

Spring boot를 다루면서 MVC 패턴인데 service, dto, controller 등 왜이리 많은지 궁금했는데 알려주셔서 감사합니다.

답글 달기