Spring

Springboot 이론노트

wlals5855 2024. 10. 15. 17:17

 Spring/SpringBoot이론정리

  • 스프링을 사용한 데이터베이스 연결

✔️ build 도구

✅ 빌드 도구의 정의

소스코드에서 애플리케이션 생성을 자동화 하기 위한 프로그램

코드를 사용|실행 가능한 형태로 커파일, 코드 패키징, 코드 패키징, 테스트 실행 등을 포함

 

✅ 빌드 도구의 종류

Maven VS Gradle

  • Maven: 고정적이고 선형적인 단계의 모델을 기반
  • Gradle: 작업 의존성 크래프를 기반
  • 차이점(Gradle의 특징)
    • Maven에 비해 가독성이 높고 설정이 간단
    • 빌드와 테스트 속도가 더 빠름  

✔️Spring & SpringBoot 

  • 엔터프라이즈 애플리케이션: 대규모의 복잡한 데이터 관리
    > 위의 대비하기 위한 서버 성능, 안정성, 보안을 제공하는 도구 - 스프링

✅ 스프링부트

  • 빝드 구성을 단순화하는 그프링 부트 스타터를 제공
  • XML 설정을 하지 않고도 자바 코드로 작성이 가능
  • JAR를 이용하여 자바 옵션만으로 배포 가능

 

스프링과 스프링부트의 구성 차이

1) 구성의 차이

  • 스프링 코어 | 스프링 MVC에 있는 기능을 자동 로드 (수동 환경 구성 x)

2) 내장 WAS의 유무

  • 스프링 부트는 WAS를 자체적으로 가짐
  • jar 파일만 생성하면 별도로 WS를 설정하지 않아도 애플리케이션 실행이 가능

 제어의 역전

IoC(Inbersion of Control)

  • 프로그램의 제어흐름을 개발자가 아닌 '외부 컨테이너'에 위임하는 방식
  • 제어의 권한이 컨테이너에게 넘어가 객체의 생명주기를 컨테이너가 관리

전통적인 프로그래밍

  • 개발자가 객체의 생성부터 소멸까지를 직접 제어

✅ 의존성 주입

DI (Dependency Injection)

  • 제어의 역전을 구현하기 위해 사용하는 방법 '어떤 클래스가 다른 클래스에 의존한다.'
  • 객체 간의 결합도를 낮추고, 유연성과 재사용성을 높이며 코드이 테스트가 용이
  • 생성자 주입, 필드 주입, 세터 주입 등의 방식으로 이루어짐

 

✔️스프링 컨테이너 & 빈

✅ 스피링 컨테이너(Spring Container)

  • 애플리케이션 대에서 객체(빈)의 생명 주기와 설정을 관리
  • 애플리케이션 구성하는 빈들을 생성, 조립 관리
  • 제어의 역전(IoC)을 실현
  • 의존성 주입(DI)를 지원

 빈(Bean)

  • 스프링 컨테이너가 관리하는 객체를 의미
  • 개발자에 의해 명시적으로 정의 | 스프링에 의해 자동으로 감지되어 관리
    주로 서비스, 리포지토리, 컨트롤러 등의 역할을 수행하는 컴포넌트로 사용

빈의 경우 클래스 이름의 첫 글자를 소문자로 바꿔 관리

  • Book 클래스 - book 빈으로 저장되어 관리
  • BookStore 클래스 - bookStore 빈으로 저장되어 관리

빈 선언 방법

  • XML 파일 사용, 애너테이션 사용(@Component, @Service, @Repository 등)
     ,자바 설정 클래스에서 @Bean 애너테이션 사용

✅ 관점 지향 프로그래밍 (AOP: Aspect Oriented Programming)

  • 애플리케이션의 핵심 로직과 '공통적인 관심사'를 분리하여 관리하는 기법
  • 모듈화를 지향
    >로그, 보안, 트랜잭션 관리와 같은 '공통적인 관심사'를 핵심 비즈니스 로직과
    분리하여 유지보수성과 코드 가독성을 향상

✅ 이식 가능한 서비스 추상화 (PSA: Portable Service Abstraction)

  • 특정 기술에 의존하지 않고 다양한 환경에서도 동일하게 동작할 수 있는 스프링의 추상화
    EX) 어떤 기술을 사용하든 일관된 방식으로 DB에 접근하도록 인터페이스를 지원
  •  JDBC, JPA 등 어떠한 DB 접근 방식이든

✔️스프링 부트의  구조

클라이언트 - View - Controller -Service - Repository - 데이터베이스

 

 프레젠테이션(presentation) 계층

  • 컨틑롤러(Controller)
  • HTTP 요청을 받고 해당 요청을 비즈니스 계틍으로 전송하는 역할

 비즈니스(Business) 계층

  • 서비스(Service)
  • 모든 비즈니스 로직을 처리
  • 비즈니스 로직
    :서비스를 만들기 위한 로직, 웹 사이트에서 벌어지는 모든 작업

✅ 퍼시슨턴스 (Persistence 계층)

  • 리포지토리(Repository)
  • 모든 데이터 베이스 관려 로직을 처리
     > DB에 접근하는 DAO 객체르 사용 가능
  • DAO: 데이터베이스와 상호작용을 위한 객체