[ Spring ] Spring의 디자인 패턴과 아키텍처

2025. 7. 14. 22:49·Spring

디자인 패턴과 아키텍처

소프트웨어 아키텍처

정의

소프트웨어 시스템의 기본 구조와 시스템을 만드는 분야

소프트웨어의 뼈대나 고수준의 기반을 담당함

소프트웨어 아키텍처 패턴 예시

  • MVC 패턴
  • layered 패턴
  • event-bus 패턴
  • p2p 패턴
  • interpreter 패턴
  • pipe-filter 패턴

소프트웨어 디자인 패턴

주어진 상황에서 일반적으로 발생하는 문제에 대한 재사용 가능한 솔루션

여러 상황에서 사용할 수 있는 문제 해결법이나 템플릿을 의미함

소프트웨어 디자인 패턴의 예시

  • 싱글톤 패턴
  • 팩토리 메서드 패턴
  • 추상 팩토리

 


 

Spring의 아키텍처 패턴 : MVC

servlet

Java 웹서버에서 동적 컨텐츠를 제공하는 기술

  • 특정 HTTP 메서드를 처리 가능
  • 서블릿을 관리하는 서블릿 컨테이너 (톰캣, 제티 등)이 존재
  • 특정 URL을 매핑하여 처리
  • 생명주기 (init - service - destroy)를 갖는다

MVC

Model - View - Controller로 구분하는 아키텍처

  • Model : 데이터 상태 관리 및 비즈니스 로직 처리
    • @Service, @Repository, DTO
  • View : 데이터 출력 및 UI 관리
    • Thymeleaf, JSP (Java Server Page), HTML, React 등
  • Controller : 요청 처리 및 View와 Model의 중간다리 역할
    • @Controller, @RestController

MVC 종류

  • mvc1 : controller와 view를 JSP로 처리
  • mvc2 : controller는 servlet이 처리하고, view는 JSP가 처리자인 패턴과 아키텍처

Spring MVC 아키텍처 흐름

  1. DispatcherServlet이 HandlerMapping을 통해 요청을 처리하는 Handler(컨트롤러)와 interceptor 목록을 갖는 HandlerExecutorChain을 생성
  2. DispatcherServlet이 Handler를 실행하기 위해 HandlerExecutorChain에서 HandlerAdaptor를 가져옴
  3. HandlerAdaptor를 통해 Handler를 실행하고, 결과물인 ModelAndView를 가져옴
  4. DispatcherServlet은 ModelAndView를 통해 view name을 얻고, 이를 ViewResolver에 전달하여 view를 얻어서 view.render()를 통해 뷰를 실행'

 


 

Spring의 디자인 패턴 : 싱글톤

Java의 싱글톤 패턴

Java의 싱글톤 패턴은 객체를 하나만 생성하고, 최초 생성 이후 접근자를 통해 최초 생성된 객체를 리턴함

객체의 중복 생성을 방지하기에 메모리 낭비를 줄일 수 있음

class Practice {
    Practice practice = new Practice();
    
    private Practice(){}
    
    public static Practice getInstance(){
    	return this.practice;
    }
}

단점

  • 내부 속성 변경과 초기화가 어려움
  • 싱글톤 패턴 구현을 위한 추가 코드가 필요함
  • private 생성자를 사용하기에 상속 등을 사용하기 어려움

Spring의 싱글톤 패턴

Spring의 스프링 컨테이너는 싱글턴 패턴을 수동으로 적용하지 않아도 객체를 싱글톤으로 관리한다.

따라서 싱글톤 패턴의 단점을 상쇄시킬 수 있다.

 

다만, Spring의 싱글톤은 모든 스레드가 동일한 객체를 공유하므로 객체 상태가 stateful하면 안된다

만약 싱글톤인 객체가 상태를 가져야 한다면, ThreadLocal 등을 통해 스레드에 종속되는 값을 갖도록 해야 한다.

'Spring' 카테고리의 다른 글

[ Spring Boot ] JPA 연관 관계 매핑  (1) 2025.08.26
[ Spring Boot ] 스트리밍 서비스에서 Buffer Pool로 ByteBuffer 관리  (6) 2025.07.29
[ Spring Boot ] 웹소켓 통신에서 메모리 누수 제어  (3) 2025.07.21
[Spring Boot] Spring Boot 설정 파일 분리 : submodule  (0) 2025.03.31
'Spring' 카테고리의 다른 글
  • [ Spring Boot ] JPA 연관 관계 매핑
  • [ Spring Boot ] 스트리밍 서비스에서 Buffer Pool로 ByteBuffer 관리
  • [ Spring Boot ] 웹소켓 통신에서 메모리 누수 제어
  • [Spring Boot] Spring Boot 설정 파일 분리 : submodule
코드래곤
코드래곤
코드래곤 님의 블로그 입니다.
  • 코드래곤
    코드래곤 님의 블로그
    코드래곤
  • 전체
    오늘
    어제
    • 분류 전체보기 (61)
      • 알고리즘 (3)
        • 그리디 (1)
        • 그래프 (2)
      • 시스템 설계 (6)
      • CS 및 기본 개념 (17)
      • Docker (5)
      • Spring (23)
        • 백준 서비스 구현하기 (1)
        • 기초 개념 (14)
        • MSA (2)
        • JPA (1)
      • Dart (3)
      • Flutter (1)
      • Kubernetes (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
코드래곤
[ Spring ] Spring의 디자인 패턴과 아키텍처
상단으로

티스토리툴바