24.10.31(Spring)

jiiiiiiiArchive.·2024년 10월 31일

🤯지식주머니🤯

목록 보기
45/98
post-thumbnail

Spring Framework

  • Java 언어 기반의 오픈소스어플리케이션 프레임워크
  • 특히 엔터프라이즈급 어플리케이션을 개발할 때 널리 사용
  • 주요 목적은 개발자들이 복잡한 Java 어플리케이션을 보다 효율적으로 개발할 수 있도록 돕는 데 있음
  • 다양한 기능 제공
  • 핵심 : DI(Dependency Injection), AOP(Aspect-Oriented Programming)

핵심 개념

  • Dependency Injection(DI, 의존성 주입)
    • 객체 간 의존성을 어플리케이션 코드 내에서 직접 정의하지 않고 외부에서 주입받도록 하는 디자인 패턴
    • 이를 통해 객체 간 결합도 낮아져 코드가 더 유연하고 테스트하기 쉬워짐
    • 예시
      • A객체가 B객체에게 의존할 때 직접 B객체를 생성하지 않고 외부에서 주입함
      • B를 변경해도 A의 수정이 불필요함
      • @Autowired
  • Aspect-Oriented Programming(AOP, 관점 지향 프로그래밍)
    • 로깅, 트랜잭션 관리와 같은 여러 클래스에 공통으로 적용할 수 있는 기능을 분리하여 재사용할 수 있도록
    • 예시
      • 트랜잭션 처리는 다양한 비즈니스 로직에 걸쳐 일관되게 사용됨.
      • AOP를 통해 코드 중복 줄임
      • @Before, @After, @Arond

주요 모듈

  • Spring Core
    • DI와 IoC(제어의 역전) 제공 -> 어플리케이션의 기본적인 객체 관리 기능 지원
    • 어플리케이션에서 사용하는 다양한 객체의 생명주기와 관계 관리
  • Spring AOP
    • 관점 지향 프로그래밍 기능을 제공하여 로깅, 보안, 트랜잭션 관리 등 공통 관심 사항을 쉽게 구현
  • Spring MVC
    • 전통적인 MVC 아키텍처를 사용해 웹 어플리케이션 개발 지원
    • 유연한 컨트롤러, 유효성 검사, 폼 처리, 비동기 처리 등을 포함한 다양한 기능 제공
  • Spring Data
    • 데이터 접근 단순화
    • JPA, MongoDB, Redis 등 다양한 데이터베이스와의 통합 지원
    • SQL을 직접 작성하지 않고도 데이터베이스 작업 쉽게 진행 가능
  • Spring Security
    • 인증 및 권한 부여 관리 모듈
    • 어플리케이션 보안 강화
    • 사용자 인증, 권한 검증, 세션 관리 등을 편리하게 설정
  • Spring Boot
    • Spring 어플리케이션 개발을 빠르게 할 수 있도록 지원
    • 복잡한 XML 설저 ㅇ없이도 간단한 어노테이션과 기본 설정만으로 어플리케이션 실행 가능
    • 내장 Tomcat 서버를 통해 어플리케이션을 독립적으로 실행할 수 있어 배포 및 테스트 환경 구축 편리

주요 특징

  • 유연한 설정
    • XML, Java 어노테이션, 자바 설정 파일 등 다양한 방식으로 설정 가능
    • 어플리케이션 요구 사항에 맞게 유연하게 설정
  • POJO 기반 개발
    • Plain Old Java Object 기반으로 개발
    • 특정 프레임워크에 종속되지 않고 자유롭게 객체를 생산하고 조작 -> 유지보수성 향상
  • 풍부한 기능 제공
    • 트랜잭션 관리, 예외 처리, 메시징, 테스트 지원 등 다양한 엔터프라이즈급 기능 기본적으로 제공
    • 개발자는 비즈니스 로직에 집중
    • 보안 및 데이터베이스 접근 등의 부수적인 작업은 Spring의 지원을 받을 수 있음
  • 단위테스트의 용이성
    • DI를 통해 객체 간의 의존성 쉽게 주입
    • 테스트할 때 각 컴포넌트를 독립적으로 테스트하기 용이
    • JUnit과 같은 테스트 프레임워크와의 통합 지원

Spring Boot와의 관계

  • Spring Boot는 Spring Framework 위에서 동작
  • Spring 어플리케이션의 복잡한 설정 자동화
  • 빠르게 배포 가능
  • application.properties나 application.yml 파일을 통해 환경 설정을 간단하게 관리 가능

장/단점

  • 장점
    • 다양한 모듈로 구성되어있어 필요한 기능만 선택적으로 사용 가능
    • DI와 AOP를 통해 코드의 결합도 줄이고 유지보수성 높임
    • Spring Boot를 사용하여 복잡한 설정 없이 어플리케이션을 빠르게 개발 가능
    • 엔터프라이즈급 기능 지원하여 대규모 어플리케이션에 적합
  • 단점
    • 학습 곡선이 가팔라 초보자에게는 DI, AOP 등이 개념이 어려울 수 있음
    • 기능이 많아 불필요한 설정으로 인해 어플리케이션이 무거워질 수 있음
    • 프로젝트가 복잡해질수록 설정 파일이 많아질 수 있음

Spring MVC 패턴

구성 요소

  • Model(모델)
    • 데이터와 관련된 로직 처리
    • 비즈니스 로직과 데이터베이스 연동 담당
    • Service 클래스에서 비즈니스 로직 구현, Repository 클래스에서 데이터베이스 접근 담당
  • View(뷰)
    • 사용자에게 데이터를 보여주는 역할
    • 주로 HTML, JSP와 같은 템플릿 엔진을 사용하여 화면 구성
    • Spring에서는 컨트롤러가 전달한 데이터를 이용해 동적인 웹 페이지를 생성하여 사용자에게 보여줌
  • Controller(컨트롤러)
    • 사용자의 요청을 받고 그에 맞는 처리 수행 후 적절한 뷰와 모델 반환
    • URL 매핑을 통해 요청을 받음, @Controller 또는 @RestController 어노테이션으로 정의

주요 흐름

  • DispatcherServlet

    • 모든 요청은 DispatcherServlet으로 들어옴
    • Spring MVC에서 FrontController 역할
    • 어플리케이션의 모든 요청을 가로채고 적절한 컨트롤러로 전달
  • Controller

    • DispatcherServlet은 요청 URL에 따라 적합한 컨트롤러 호출
    • 컨트롤러는 요청을 처리하고 필요한 비즈니스 로직을 수행하도록 서비스 계층 호출
  • Model

    • 컨트롤러는 비즈니스 로직을 처리하기 위해 서비스와 레포지토리 계층을 통해 데이터베이스와 상호작용
    • 처리된 데이터는 Model 객체에 담겨 뷰로 전달
  • View

    • 컨트롤러는 결과 데이터를 Model에 담아 뷰 이름과 함께 반환
    • DispatcherServlet은 뷰 리졸버(View Resolver)를 통해 적절한 뷰를 찾아 렌더링
    • 최종적으로 사용자는 처리된 결과가 포함된 웹 페이지를 확인 가능

    주요 어노테이션

  • @Controller

    • 컨트롤러 클래스 정의
    • 클라이언트 요청 처리
  • @RequestMapping

    • 특정 URL 요청을 해당 메서드나 클래스에 매핑하기 위해 사용
    • @GetMapping, @PostMapping 등의 세부 매핑 어노테이션도 사용됨
  • @RequestParam

    • 요청 파라미터를 메서드의 매개변수로 받아올 때 사용
  • @ModelAttribute

    • 모델에 데이터를 바인딩할 때 사용
    • 주로 폼 데이터를 전달받아 객체에 바인딩할 때 활용
  • @ResponseBody

    • 메서드의 반환 값을 뷰가 아닌 HTTP 응답 본문으로 보냄
    • JSON이나 XML 데이터를 반환할 때 사용

Spring MVC 패턴의 장점

  • 유지보수 용이
    • 로직이 분리되어있어 각 컴포넌트를 쉽게 수정하거나 확장 가능
  • 테스트 편리
    • MVC 각 계층을 독립적으로 테스트 가능
  • 재사용성 증가
    • 컨트롤러, 서비스 ,레포지토리 등 각 계층의 코드가 독립적으로 재사용되기 용이

Spring의 중요 설정 파일 4가지

  • pom.xml
    • Maven에서 필요한 라이브러리를 관리하고 다운로드하는 설정 파일
  • web.xml
    • 서블릿 컨테이너에서 웹 요청을 처리하기 위한 웹 설정 파일
  • root-context.xml
    • 전역적으로 사용할 Spring 설정 파일
    • 공통으로 사용되는 빈(bean) 등록 시 사용
    • 데이터베이스 설정 등 어플리케이션 전반에 필요한 빈들의 주로 정의됨
  • servlet-context.xml
    • Spring MVC의 DispatcherServlet과 관련된 설정 파일
    • 서블릿 스코프에스 사용할 빈 등록
    • 주로 웹과 관련된 설정 정의
profile
이것저것 다 적는 기록장📚

0개의 댓글