2022/01/25 한번에 끝내는 Spring 완.전.판 초격차 패키지-1

김석진·2022년 1월 25일
0

자바,그리고 스프링,스프링부트

Java: 객체지향적 프로그래밍 언어

  • 스프링의 근간이 되는 언어
  • 스프링은 자바 뿐 아니라 코틀린, 그루비로도 사용할 수 있다.but 자바로 진행한다고 한다.
  • 스프링 자체도 거의 대부분 자바로 만들어져 있다.

Spring Framework: 기업용 애플리케이션을 만드는 사용 가능한 오프소스 프레임워크

  • 자바를 이용해서 어플리케이션을 쓰기위해 활용하는 프레임워크

    자바,서블릿,J2EE >>>>>>> 스프링 프레임워크

  • 스프링 내에는 동일한 역할을 하는 다양한 기능이 있으며, 그중에서 적합한 툴을 선택할 수 있어야한다.

Spring boot: 스프링 기반으로 자주 사용되는 설정으로 손쉽게 개발할 수 있게 하는 상위 프레임워크

  • 스프링(각종 도구가 있는 템플릿)보다 한층 더 편리한 프레임워크
  • 웹 어플리케이션(톰켓 등) 서버 내장
  • 자동 설정, 설정 표준화
  • 하지만 원한다면 모두 마음대로 설정할 수 있다.

스프링 프레임워크 핵심기술

  • Core(DI,Ioc)
  • AOP(Aspect Oriented Programming):관점적 프로그래밍
  • Validation,Data binding
  • Resource : 외부 자원들에 접근하는데 사용하는 API들을 설명
  • SpEL : 주로 설정값들을 외부에서 주입을 받을 때 활용
  • Null-Safety: 자바 프로그래밍에서는 Null을 관리하는게 중요하다. 하지만 많이 어렵다. 이것을 조금더 스프링프레임워크는 안전하게 처리하게 도와준다.
  • 디자인철학
    • 모든 기능에서 다양한 가능성(다양한 모듈)을 사용 가능, 심지어 외부 모듈을 활용가능
      • 너무 높은 자유도 어떤 점에선느 스프링을 어렵게하는 요소
  • 유연하게 계속 추가 개발을 하고 있는 프레임워크
  • 이전 버전과 강력한 호환성 ( 너무많은 레거시 때문에 코드의 복잡성이 높아지긴함)
  • API 디자인을 섬세하게 노력함(스프링 코드 자체가 하나의 좋은 참고 소스다)
  • 높은 코드 품질을 유지하려 함
    • 스프링 프로젝트 github는 아주 좋은 참고 소스이다.

Ioc(Inversion of Control), DI (Dependency Injection)

Bean이란?

  • 자바에서의 javaBean
    • 데이터를 저장하기 위한 구조체로 자바 빈 규약이라는 것을 따르는 구조체
    • private 프로퍼티와 getter/setter로만 데이터를 접근한다.
  • 스프링에서의 Bean
    • 스프링 IoC 컨테이너에 의해 생성되고 관리되는 객체
    • 자바에서처럼 new Object(); 로 생성하지 않는다
    • 각각의 Bean들 끼리는 서로를 편리하게 의존(사용)할 수 있음

스프링 컨테이너 개요

ApplicationContext 인터페이스를 통해 제공되는 스프링 컨테이너는 Bean 객체의 생성 및 Bean들의 조립(상호 의존성 관리)을 담당한다.

  • Bean 의 등록
    • 과거에는 xml로 따로 관리하여 Bean등록(매우 불편했다)
      • @Bean, @Controller, @Service (요즘에는 애노테이션으로 등록가능)
  • Bean 등록 시 정보
    • Class 경로
    • Bean의 이름
      • 기본적으로 원 Class 이름에서 첫 문자만 소문자로 변경 -> accountService,userDao
      • 원하는 경우 변경 가능
    • Scope : Bean을 생성하는 규칙
      • singleton: 컨테이너에 단일로 생성
      • prototype: 작업 시 마다 Bean을 새로 생성하고 싶을 경우
      • request: http 요청 마다 새롭게 Bean을 생성하고 싶은 경우
  • Bean LifeCycle callback
    • callback: 어떤 이벤트가 발생하는 경우 호출되는 메소드
    • lifecycle callback
      • Bean을 생성하고 초기화하고 파괴하는 등 특정 시점에 호출되도록 정의된 함수
    • 주로 많이 사용되는 콜백
      • @PostConstruct: 빈 생성 시점에 필요한 작업을 수행
      • @PreDestroy : 빈 파괴(주로 어플리케이션 종료)시점에 필요한 작업을 수행

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

관점 지향? 이게 뭘까.. 공통적인 부분을 Spring이 도와서 처리해준다라고 생각하면 편하다라고 설명하셨다.

  • 특정한 함수 호출 전이나 후에 뭔가 공통적인 처리가 필요하다면 -> AOP를 사용한다.
    • 로깅
    • 트랜잭션
    • 인증

실무에서는 AOP를 적극적으로 사용하지않는다라고 하셨다
이유) AOP를 사용하면 코드가 복잡해 보일 수도 있고 코드를 어렵게 보이게 할 수 있다. 그래서 필요한 케이스에서만 사용하면된다고 하셨다.

  • OOP(?) 로 처리하기에는 다소 까다로운 부분을 AOP라는 처리방식을 도입하여 손쉽게 공통 기능을 추가/수정/삭제 할 수 있도록 한다.

AOP의 기본 개념들

Aspect

여러 클래스나 기능들에 공통적으로 AOP를 넣어줘야하는 케이스에 대해서 특정하나의 주제 라고 생각하면된다고 하셨다 이것들을 모아둔것을 Aspect라고 한다.
여러 클래스나 기능에 걸쳐서 있는 관심사, 그리고 그것들을 모듈화함
AOP중에서 가장많이 활용되는 부분은 @Transaction(트랜잭션 관리)기능

Advice

조언, AOP에서 실제로 적용하는 기능(로깅,트랜잭션,인증 등)을 뜻함

Join point(연결 가능 지점)

모듈화된 특정 기능이 실행될 수 있는 연결 포인트

PointCut

Join point 중에서 해당 Aspect를 적용할 대상을 뽑을 조건식

Target Object

Advice가 적용될 대상 오브젝트

AOP Proxy

대상 오브젝트에 Aspect를 적용하는 경우 Advice를 덧붙이기 위해 하는 작업을 AOP Proxy(프록시, 덧씌워줌)라고 한다.
주로 CGLIB(Code Generation Library,실행중에 실시간으로 코드를 생성하는 라이브러리)프록시를 사용하여 프록싱 처리를 함

Weaving

Advice를 비지니스 로직 코드에 삽입하는 것을 말함

AOP를 제대로 사용하기 위해서 AspectJ라는 라이브러리를 사용한다.

기본적으로 제공하는 Spring AOP로는 다양한 기법(Pointcut 등)을 AOP를 사용할 수없다.

profile
주니어 개발자 되고싶어요

0개의 댓글

관련 채용 정보