• 티스토리 홈
  • 프로필사진
    imaginaring
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
imaginaring
  • 프로필사진
    imaginaring
    • 분류 전체보기 (66)
      • 프로그래밍 (30)
        • 알고리즘 자료구조 (0)
        • 문제풀이 (0)
        • 기록 (3)
        • Java (4)
        • 스프링, JPA, MyBatis (11)
        • JS, 리액트 등 웹 프론트 (11)
        • 파이썬 (1)
      • DB (1)
        • MySQL (1)
      • 네트워크 (6)
        • AWS (2)
        • NCP (0)
        • 클라우드 공통 (2)
        • 네트워크 (2)
      • OS (9)
        • 리눅스 (8)
        • 윈도우 (1)
      • 게임엔진 (4)
        • 유니티 (0)
        • 언리얼 (4)
        • 그래픽스 (0)
      • 프로젝트 관리 (0)
        • Git & SVN (0)
      • 사이드 프로젝트 (0)
        • 외주 (0)
        • 아이디어 (0)
        • 기록 (0)
      • 프로젝트 (0)
      • 자격증 (15)
        • 리눅스마스터 (14)
        • SQLD (1)
        • 정보처리기사 (0)
        • 네트워크관리사 (0)
        • CCNA (0)
        • AWS SAA (0)
        • NCP (0)
      • 생활수학 (0)
      • 일상 (1)
        • 여행 (0)
        • 바이크 (0)
        • 기타 (1)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • 스프링 MVC
        2024년 12월 26일
        • imaginaring
        • 작성자
        • 2024.12.26.:43

        스프링 프레임워크는 웹 어플리케이션 개발에 필요한 기능들을 모두 담은 spring-webmvc 모듈을 제공하는데,

        이걸 스프링 웹 프레임워크라고 한다

         

        MVC패턴

        • 앱 구조를 크게 세분활 (모델, 뷰, 컨트롤러)하여 각 역활을 수행하도록 패턴으로 만든 것

        구성요소

        • DispatcherServlet : 스프링 MVC의 핵심 역활을 하는 프론트 컨트롤러
          • 모든 HTTP 요청을 받아서 처리, 컨트롤러와 뷰를 연결
          • 서블릿 : HTTP 요청과 응답을 처리하는 자바 클래스
        • HandlerMapping : 요청 URL과 적절한 컨트롤러를 매핑
          • ex) /users 요청이 오면 UserController 를 호출하도록 설정 
        • Controller - 사용자 요청을 처리, 모델 데이터를 뷰에 전달
          • 주로 @Controller, @RestController를 사용
        • Model : 뷰에 데이터를 전달하기 위해 사용
          • Model, ModelMap, ModelAndView 객체를 통해 데이터 설정 가능
        • View : 사용자에게 데이터를 렌더링하여 응답
          • JSP, Thymeleaf, Freemaker 등 다양한 템플릿 엔진을 지원
        • View Resolver : 컨트롤러가 반환한 뷰 이름을 실제 뷰로 변환
          • ex) return "home" => /WEB-INF/view/home.jsp 로 매핑

         

         

        MVC 아키텍처 동작순서

        1. 클라에서 전송된 모든 HTTP요청 메시지는 가장 먼저 디스패처 서블릿이 받아 처리
        2. 디스패처 서블릿은 HTTP 요청 메시지의 요청 라인과 헤더를 파악한 후 어떤 컨트롤러 클래스의 메소드로 전달할지 HanderMapping을 사용하여 확인한다
        3. 디스패처 서블릿은 사용자 요청을 처리하기에 적합한 컨트롤러에 HTTP 요청 메시지를 전달하기 위해 전달역활을 하는 핸들러어댑터에 전달한다
        4. 핸들러어댑터는 해당 컨트롤러에 클라이언트 요청을 전달
        5. 컨트롤러는 서비스 기능을 구현한 @Service, @Component, @Repository 스프링 빈들의 메소드를 호출하여 비즈니스 로직을 수행 => 결과는 다시 컨트롤러에게 전달되고, 컨트롤러는 이 데이터를 어떤 뷰로 전달할지 결정
        6. 핸들러어댑터는 처리할 뷰와 뷰에 매핑할 데이터를 ModelAndView 객체에 포함하여 디스패처서블릿에 전달
        7. 디스패처서블릿은 처리할 뷰 정보를 ViewResolver에서 확인
        8. ViewResolver은 View에 데이터를 전달하고 View는 데이터를 HTML 등 적합한 포맷으로 변환 => 변환한 데이터를 디스패처 서블릿으로 전달
        9. 디스패처 서블릿은 최종적으로 변환된 데이터를 클라이언트에 전달

         

        처리과정 요약 ..

        1. 클라이언트가 HTTP 요청을 보냄.
        2. DispatcherServlet이 요청을 가로챔.
        3. HandlerMapping이 URL을 기반으로 적절한 컨트롤러를 찾음.
        4. 컨트롤러가 요청을 처리하고, 필요한 데이터를 생성.
        5. 컨트롤러가 Model과 함께 뷰 이름을 반환.
        6. ViewResolver가 뷰 이름에 해당하는 템플릿을 찾아 렌더링.
        7. 최종 HTML 응답을 클라이언트에게 반환.

         

        주요 어노테이션

        • @Controller
          • 클래스를 컨트롤러로 지정.
          • HTTP 요청을 처리하고 뷰를 반환.
        • @RestController
          • @Controller와 @ResponseBody가 결합된 형태.
          • JSON이나 XML 형태의 데이터를 직접 반환.
        • @RequestMapping
          • URL 요청을 메서드나 클래스에 매핑.
          • HTTP 메서드(GET, POST 등)를 지정하여 다양한 요청 처리.
        • @GetMapping / @PostMapping / @PutMapping / @DeleteMapping
          • HTTP 메서드별로 요청을 처리하는 매핑.
        • @PathVariable
          • URL 경로에서 값을 추출하여 메서드 파라미터로 전달.
        • @RequestParam
          • 요청 파라미터를 메서드 파라미터로 전달.
        • @ModelAttribute
          • 폼 데이터를 객체로 바인딩.
        • @ResponseBody
          • 데이터를 직접 HTTP 응답으로 반환.

         

        예시. 컨트롤러 정의

        @Controller
        @RequestMapping("/users")
        public class UserController {
        
            @GetMapping("/{id}")
            public String getUser(@PathVariable("id") Long id, Model model) {
                // 비즈니스 로직 처리 (예: DB에서 사용자 정보 가져오기)
                User user = userService.getUserById(id);
                model.addAttribute("user", user); // 모델에 데이터 추가
                return "userDetail"; // 뷰 이름 반환
            }
        }

         

        동기식 요청 처리 모델에 기반, 실시간 데이터 스트리밍 같은 비동식 처리에 한계

        => 비동기 처리와 리액티브 프로그래밍이 필요한 경우 WebFlux 사용

         

         

        etc. 서블릿

        import java.io.IOException;
        import javax.servlet.ServletException;
        import javax.servlet.annotation.WebServlet;
        import javax.servlet.http.HttpServlet;
        import javax.servlet.http.HttpServletRequest;
        import javax.servlet.http.HttpServletResponse;
        
        @WebServlet("/hello") // URL 매핑
        public class HelloServlet extends HttpServlet {
        
            @Override
            protected void doGet(HttpServletRequest request, HttpServletResponse response)
                    throws ServletException, IOException {
                response.setContentType("text/html");
                response.getWriter().println("<h1>Hello, Servlet!</h1>");
            }
        }

         

        서블릿과 JSP

        • 서블릿
          • 자바 코드로 직접 요청과 응답 처리
          • 복잡한 HTML 생성 코드 포함 시 가독성 떨어짐
          • 논리 처리가 중심
        • JSP (Java Server Pages)
          • HTML 내 자바 코드 삽입, 동적 페이지 생성
          • 내부적으로 서블릿으로 변환되어 실행됨
          • 화면 렌더링이 중심

        '프로그래밍 > 스프링, JPA, MyBatis' 카테고리의 다른 글

        레이어드 아키텍처  (0) 2024.12.26
        MyBatis vs JPA  (2) 2024.12.26
        Bean 스코프  (1) 2024.12.26
        Mock  (0) 2024.12.24
        AOP 관계지향  (0) 2024.12.24
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바