밤빵's 개발일지
[TIL]20240708 MVC패턴 본문
스프링에 들어오니 JAVA보다 더 어려운 내용들이 한 무더기다... 입문인데 이렇다고...? 클래스 하나가지고 다 해결하던 java에서 이제 여러가지 클래스들이 생겨나면서 강의를 들으면서 머리가 하얘지지만,나만 어려운거 아닐거야.... MVC패턴에 대해 정리하면서 강의 들은게 맞나? 싶을정도로 어렵게 느껴졌다.
▶ Spring MVC
Spring MVC(Model-View-Controller) 패턴은 웹 애플리케이션 개발에서 사용되는 주요 디자인 패턴 중 하나이다.
이 패턴은 애플리 케이션의 비즈니스 로직, 프레젠테이션 로직, 요청/응답 처리 로직을 분리해서 개발과 유지보수를 용이하게 만든다.
▶ Model
→ 역할 : 테이터와 비즈니스 로직을 처리하고, 애플리케이션의 상태를 관리한다. 서비스 계층에서 비즈니스 로직을 수행하고, 레포지토리 계층에서 데이터 베이스와 상호작용한다.
→ 구성요소
Entity: 데이터베이스 테이블과 매핑되는 클래스.
Repository: 데이터 액세스를 담당하는 인터페이스.
Service: 비즈니스 로직을 처리하는 클래스.
→ 장점 : 비즈니스 로직을 모듈화하여, 재사용성과 유지보수가 뛰어나다.
▶ 모듈화 한다...?
비즈니스 로직을 잘게 나누어서 각각 독립적인 '모듈'로 만들어 관리하는 것을 말한다. 각 모듈은 특정한 작업만을 수행하도록 작성되어있다.
도서관 관리 시스템을 예시로 들면,
모든 기능이 한 클래스나 파일에 전부 작성되어있다고 가정하고, 책 대출 기능을 구현하는 코드가 회원 관리 코드와 뒤섞인다면 대출과 관련된 로직을 수정할 때 회원 관리 로직이 잘못 건드려진 가능성이 커진다. 코드가 복잡해지고 오류가 발생할 확률이 높아져 유지보수가 어려워진다.
모듈화가 된 경우
→ 도서관 관리 시스템의 기능들을 각각의 모듈(클래스나 파일)로 분리할 수 있다.
회원 관리 모듈: 회원 등록, 수정, 삭제, 조회 기능을 담당
도서 관리 모듈: 도서 등록, 수정, 삭제, 조회 기능을 담당
대출 관리 모듈: 책 대출 및 반납과 관련된 모든 로직을 처리
검색 모듈: 책을 제목, 저자 등으로 검색하는 기능을 처리
이렇게 모듈화 하면 각 모듈은 자기 역할만 수행하게 되서 코드가 훨씬 더 명확해지고 이해하기 쉬워진다.
▷ 모듈화의 장점
→ 재사용성 : '회원 관리 모듈' 은 다른 시스템에서도 쉽게 사용할 수 있다. 만약 다른 프로젝트에서 회원 관리가 필요하다면 이 모듈을 그대로 가져와서 사용할 수 있다.
→ 유지보수성 : 만약 대출 관련 로직에 문제가 있다면 '대출관리모듈'만 수정하면 된다. 다른 모듈에는 영향을 미치지 않으니 안정성이 높아진다.
→ 확장성 : 새로운 기능을 추가하고 싶을 때, 기존의 코드를 많이 수정하지 않고도 새로운 모듈을 만들어 추가할 수 있다.
▷ 모듈화의 예시 코드
public class MemberService {
public void registerMember(String name) {
// 회원 등록 로직
}
public void deleteMember(int memberId) {
// 회원 삭제 로직
}
}
public class BookService {
public void addBook(String title, String author) {
// 도서 등록 로직
}
public void removeBook(int bookId) {
// 도서 삭제 로직
}
}
public class LoanService {
public void loanBook(int memberId, int bookId) {
// 대출 로직
}
public void returnBook(int loanId) {
// 반납 로직
}
}
→ 각 클래스가 별도의 파일로 분리되어 있다. 각각의 서비스 ( 회원관리, 도서관리, 대출관리)가 독립적으로 관리되어 유지보수와 확장이 용이해진다.
▶ View
→ 역할 : 이름처럼 사용자에게 데이터를 보여주는 역할을 한다.
→ 구성요소 : JSP, Thymeleaf, FreeMarker 등 템플릿 엔진과 HTML, CSS, JavaScript 등의 정적 자원😵💫
- 템플릿 엔진 : SP, Thymeleaf, FreeMarker 등은 HTML과 같은 정적 파일을 동적으로 생성할 수 있게 도와준다.
- 정적 자원 : HTML, CSS, JavaScript 파일 등은 사용자가 보는 화면을 구성하는 데 사용된다.
→ 장점 : UI와 비즈니스 로직을 분리해서 유지보수를 쉽게 한다.
프론트와 백엔드의 역할을 명확히 구분할 수 있다.
UI의 변화가 비즈니스 로직에 영향을 미치지 않기 때문에 유지보수가 용이하다.
▶ Controller
→ 역할 : 사용자의 요청을 받아 모델과 뷰를 조합해서 응답을 생성한다. 사용자 요청을 처리하고, 필요한 데이터를 서비스 계층에서 가져와서 뷰에 전달하는 역할을 한다.
→ 구성요소 : @Controller 또는 @RestController 어노테이션을 사용하는 클래스이다. 클라이언트의 요청을 처리하고, JSON응답을 반환하는 메서드를 포함한다.
→ 장점 : 요청과 응답을 명확히 분리하고, 테스트하기 쉽다. 비즈니스 로직을 서비스계층에 위임해서 책임을 분리할 수 있다. 코드가 더 간결해지고 유지보수가 용이해진다 .
▷ 요청 매핑 어노테이션( @RequestMapping, @GetMapping, @PostMapping 등 )
클라이언트의 요청 URL과 HTTP 메서드를 처리할 메서드와 연결한다.
▶ MVC 흐름의 단계
1. 사용자 요청 : 사용자가 브라우저에서 특정 URL을 요청한다.
2. DispatcherServlet : 스프링의 중앙 프론트 컨트롤러로 모든 요청을 받아 해당 요청을 처리할 컨트롤러로 전달한다.
3. Controller : 요청을 처리하는 메서드를 호출하고, 필요한 데이터를 서비스 계층을 통해 가져온다.
4. Service : 비즈니스 로직을 수행하고, 필요한 경우 데이터베이스와 상호작용해서 데이터를 가져오거나 변경한다.
5. Repository : 데이터베이스와의 직접적인 상호작용을 담당하고, CRUD 작업을 수행한다.
6. Model : 컨트롤러가 뷰에 전달할 데이터를 담고 있는 객체.
7. View : 최정적으로 사용자에게 응답을 보여주는 역할을 하고, 템플릿 엔진을 사용해서 화면을 렌더링 한다.
8. 응답 : 생성된 뷰가 사용자에게 반환되고, 사용자는 브라우저에서 결과를 확인한다.
▷순서 : 사용자 요청 → DispatcherServlet → Controller → Service → Repository → Model → View → 응답
😵💫 오늘의 회고
이름이 예뻐서 마음에 들었는데, java보다 더 어려워...ㅠㅠㅠ 자바를 똑바로 공부하지 않고 와서일까 어려워서 다시 볼까 싶은데 강의시간이 너무너무 방대하다. 하지만 열심히 해야지 어쩌겠어!!
'개발Article' 카테고리의 다른 글
[TIL]20240710 Controller를 이해해보자! (0) | 2024.07.12 |
---|---|
[TIL]20240709 DispatcherServlet..? (0) | 2024.07.11 |
[WIL]20240707 Spring은 너무 팍팍해... (0) | 2024.07.07 |
[TIL]20240706 드디어 람다를 이해할 수 있나..?! (0) | 2024.07.07 |
[TIL]20240705 @Autowired (0) | 2024.07.06 |