Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

밤빵's 개발일지

[TIL]20240708 MVC패턴 본문

개발Article

[TIL]20240708 MVC패턴

최밤빵 2024. 7. 9. 01:21

스프링에 들어오니 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보다 더 어려워...ㅠㅠㅠ  자바를 똑바로 공부하지 않고 와서일까 어려워서 다시 볼까 싶은데 강의시간이 너무너무 방대하다. 하지만 열심히 해야지 어쩌겠어!!