My Melody Is Cute Spring Framework 기본
본문 바로가기

개발공부🌷/Spring

Spring Framework 기본

 

프로그래밍 상에서의 Framwork는 기본적으로 프로그래밍을 하기 위한 어떤 틀이나 구조를 제공

 

Framework는 개발자가 애플리케이션의 핵심 로직을 개발하는것에 집중할 수 있도록 해준다

 

Library는 애플리케이션 흐름의 주도권이 개발자에게 있는 반면,

Framework는 애플리케이션 흐름의 주도권이 Framework에 있다

 

Framework는 종류가 다양하다

 Spring Framework의 장점

POJO 기반

DI지원

AOP 관점지향

JAVA언어 사용 - 정접타입언어 타입 강제 ,여러사람이 함께 작업시 수정용이

 

초기에 서블릿 기술 사용하다가 MVC가 나오고 MVC의 어려움이 개선된 스프링부트가 탄생

 

 

스프링프레임워크의 특징

1. POJO (Plain Old Java Object)

 

순수한 java 객체

POJO 프로그래밍 : 순수 java객체가 다른 기술이나 환경에 종속되지않도록 하기위한 프로그래밍

 

특정 환경이나 기술에 종속적이지 않으면 재사용 가능, 확장가능한 유연한 코드 작성가능

저수준 레벨의 기술과 환경에 종속적인 코드를 제거함으로 코드가 깔끔해진다

코드가 깔끔해지면 디버깅하기도 쉽다

특정기술이나 환경에 종속적이지 않기 때문에 테스트역시 단순해진다

객체지향적인 설계를 제한 없이 적용할 수 있다

 

JDK의 API지식과 객체지향적인 사고방식과 설계가 필요

객체지향 설계 원칙 :: IT Village (tistory.com)

 

2. IoC(Inversion of Control)

 

애플리케이션의 흐름의 주도권이 뒤바뀐 것 , 제어의 역전

 

2-1. DI(Dependency Injection)

의존성 주입

IoC 개념을 구체화 시킨 것

 

의존성 주입이란?

A클래스가 B클래스의 기능을 사용할 때 A클래스는 B클래스에 의존한다

딸이 아빠에게 도와달라고 말했을때 딸은 아빠에게 의지(의존)한다

 

클래스 다이어그램(클래스들의 관계 표현) 온라인 드로잉 소프트웨어 (visual-paradigm.com)

 

 

클래스간의 의존관계 성립

사용하고자 하는 클래스의 객체를 생성해서 참조하게 되면 의존관계가 성립된다

 

의존성 주입

MenuController 생성자로 MenuService 의 객체를 전달받는다

생성자를 통해서 어떤 클래스의 객체를 전달받는 것 = 의존성 주입

 

생성자의 파라미터로 객체를 전달하는것을

외부에서 객체를 주입한다라고 표현

 

 

객체를 주입해주는 외부는 CafeClient클래스가 MenuController의 생성자 파라미터로

menuService를 전달하고 있어서 외부가 된다

 

왜 필요할까?

코드 내부에서 new 키워드를 사용하면 강하게 결합 되어지게 된다

느슨한 의존성주입

인터페이스를 사용한다

MenuController 가 MenuService 라는 클래스를 직접적으로 의존하는 게 아니라 클래스 이름은 같지만 인터페이스 를 의존

 

new 키워드를 없애려면 Config 클래스에 정의해둔 객체를 Spring의 도움으로 다른클래스에게 제공

-> Spring이 의존객체들을 주입해준다

 

3. AOP(Aspect Oriented Programming)

 

관심지향프로그래밍

공통관심사항

 

핵심업무 로직에서 로깅이나 보안,트랜잭션 같은 공통기능로직분리하는것

 

 

왜 분리하는걸까?

 

코드의 간결성

객체지향설계원칙에 맞는 구현

코드의 재사용

 

트랜잭션 All or Nothing

커밋(commit) 작업이 성공시 데이터베이스에 반영

롤백(rollback) 하나라도 실패하면 성공한 작업들을 수행 이전상태로 되돌림

 

@Transactional 애노테이션 정보를 활용해 AOP 기능 적용

 

4. PSA(Portable Service Abstraction)

일관된 서비스 추상화

 

추상화된 상위 클래스를 일관되게 바라보며 하위 클래스의 기능을 사용하는 것 -> 일관된 서비스 추상화의 기본 개념

(어떤 클래스의 기능을 사용하는 측이 클라이언트)

JdbcConnector 인터페이스를 통해 간접적으로 연결 되어( 느슨한 결합 ) Connection 객체를 얻는 것

일관된 방식을 (getConnection()메서드) 사용해서 서비스의 기능을 사용함

 

서비스의 기능에 접근하는 방식을 일관되게 유지하면서 기술을 유연하게 사용할수 있게 하는것 PSA

요구사항 변경에 유연하게 대처할 수 있다

트랜잭션 서비스, 메일서비스, Spring Data서비스...

 

 

시스템 아키텍처

시스템의 전체적인 구성을 큰 그림으로 표현한것

 

웹애플리케이션 아키텍처

계층형 아키텍처

 

API계층 클라이언트의 요청을 받아들이는 계층

서비스계층 API계층에서 전달받은 요청을 도메인의 요구사항에 맞게 비즈니스적으로 처리하는 계층

데이터액세스계층 비즈니스계층에서 처리된 데이터를 데이터저장소에 저장하기위한 계층

 

Spring Boot란?

스프링프레임워크를 기반으로 빠르고 간단하게 개발할 수 있게 해주는 도구

 

XML기반의 복잡한 설계방식 지양

의존 라이브러리의 자동관리

애플리케이션 설정의 자동구성(애너테이션추가)

프로덕션급 애플리케이션의 손쉬운 빌드

내장된 WAS를 통한 손쉬운 배포(java -jar <jar 파일명>.jar 명령어로 실행)

 

'개발공부🌷 > Spring' 카테고리의 다른 글

Spring framework AOP  (0) 2023.11.17
Spring Framework DI 2  (0) 2023.11.17
Spring Framework DI  (0) 2023.11.15