34DAYS) Spring Framework 기본(1) - Spring Framework 특징

nacSeo (낙서)·2022년 12월 6일
0

◉ 학습목표

1. Spring Framework의 기본적인 개념과 필요성을 이해할 수 있다.
2. Spring Framework의 특징에 대해 이해할 수 있다.
  1. Spring Framework

⦿ 학습내용

☞ Framework

✔︎ 소프트웨어의 구체적인 부분에 해당되는 설계와 구현을 재사용 가능하게, 일련의 협업화된 형태로 클래스들을 제공하는 것
✔︎ 기본적으로 프로그래밍을 하기 위한 어떠한 이나 구조

☞ Framework 장∙단점

✔︎ 장점

  • 효율적인 코드 작성
  • 정해진 규약이 있어 애플리케이션을 효율적으로 관리
    (개발자가 애플리케이션의 핵심 로직을 개발하는 데에 집중 ⭕️)

✔︎ 단점

  • 사용하고자 하는 Framework에 대한 학습 필요
  • 자유롭고 유연한 개발이 어려움

☞ Library

✔︎ 애플리케이션을 개발하는 데 사용되는 일련의 데이터프로그래밍 코드
✔︎ 애플리케이션을 개발할 때 필요한 기능을 미리 구현해놓은 집합체

☞ Framework 🆚 Library

✔︎ Framework는 뼈대, Library는 부품
✔︎ 한번 정해진 Framework는 교체하기 어려우나, Library는 쉽게 교체 가능하고 필요한 Library를 선택적으로 사용
✔︎ 애플리케이션에 대한 제어권 차이 🌟

  • Framework
    • 개발자가 작성한 코드를 사용해서 Framework이 애플리케이션 흐름 구현
    • 애플리케이션 흐름의 주도권Framework에 있음
  • Library
    • 개발자가 짜놓은 코드 내에서 필요한 기능이 있으면, 해당 라이브러리를 호출하여 사용
    • 애플리케이션 흐름의 주도권개발자에게 있음

☞ Spring Framework

✔︎ 장점

  • POJO (Plan Old Java Object) 기반의 구성
  • DI (Dependency Injection) 지원
  • AOP (Aspect Oriented Programming, 관점 지향 프로그래밍) 지원
  • Java 언어 사용으로 얻는 장점

✔︎ 학습 목적

  • 객체 지향 설계 원칙에 잘 맞는 재사용확장이 가능한 애플리케이션 개발 스킬 향상
  • 보다 나은 성능과 서비스의 안전성이 필요한 복잡한 기업용 엔터프라이즈 시스템을 제대로 구축할 수 있는 능력 보유 가능

※ 기업용 엔터프라이즈 시스템

  • 기업의 업무(기업 자체 조직의 업무, 고객을 위한 서비스 등)를 처리해주는 시스템
  • 대량의 사용자 요청을 처리해야 하기 때문에, 서버의 자원 효율성, 보안성, 시스템의 안정성이나 확장성을 충분히 고려해 시스템을 구축

✔︎ 등장 배경

  • Spring Framework가 도입되기 전에는 JSP나 Servlet 기술을 사용한 Model1, Model2 아키텍처를 기반으로 해서 Java 웹 애플리케이션 제작 (매우 복잡!!! 🤯)
  • Spring MVC 방식이 도입됨으로써 Java 웹 애플리케이션 제작 방식의 획기적인 변화 (편리해지고 간결해졌으나, 기본 설정 잡는 게 불편 🥲)
  • Spring MVC 설정의 복잡함과 어려움 극복을 위해 Spring Boot 탄생 😇
  1. Spring Framework 특징

⦿ 학습내용

☞ POJO (Plain Old Java Object)

✔︎ POJO

  • 순수한 자바 객체를 의미

✔︎ POJO Programming

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

✔︎ Java 외 다른 기술이나 규약에 얽매이지 ❌ , 특정 환경에 종속적 ❌
✔︎ POJO Programming의 필요성

  • 특정 환경이나 기술에 종속적이지 않으면, 재사용이 가능하고 확장 가능한 유연한 코드 작성 가능
  • 저수준 레벨의 기술과 환경에 종속적인 코드를 애플리케이션 코드에서 제거함으로써 코드가 깔끔해짐
  • 코드가 깔끔해지기 때문에 디버깅도 상대적 쉬움
  • 특정 기술이나 환경에 종속적이지 않아 테스트 역시 단순해짐
  • 객체지향적인 설계를 제한없이 적용 가능 🌟

☞ POJO와 Spring Framework의 관계

✔︎ Spring 삼각형 (Spring Triangle)
✔︎ Sping Framework는 POJO 프로그래밍을 지향하기 위해 IOC/DI, AOP, PSA 기술 제공
✔︎ POJO 프로그래밍을 효과적으로 적용시키기 위해서는 특정 기술에 대한 지식보다는, JDK의 API에 대한 지식과 객체지향적인 사고 방식과 설계를 위한 훈련이 우선시 🌟

☞ 객체 지향 설계 원칙 (SOLID)

✔︎ SRP (Single Responsibility Principle)

  • 한 클래스는 하나의 책임만 가져야 함

✔︎ OCP (Open / Closed Principle)

  • 소프트웨어 요소는 확장에 열려 있으나, 변경에는 닫혀 있어야 함

✔︎ LSP (Liskov Substitution Principle)

  • 리스코프 치환 원칙
  • 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 함

✔︎ ISP (Interface Segregation Principle)

  • 인터페이스 분리 원칙
  • 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 나음

✔︎ DIP (Dependency Inversion Principle)

  • 의존관계 역전 법칙
  • 프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안 됨
  • 의존성 주입과 관련

☞ IOC (Inversion Of Control)

✔︎ 제어의 역전
✔︎ 애플리케이션 흐름의 주도권이 뒤바뀐 것
✔︎ 애플리케이션 흐름의 주도권이 사용자에게 있지 않고, Framework이나 서블릿 컨테이너 등 외부에 있는 것

☞ DI (Dependency Injection)

✔︎ 의존성 주입
✔︎ 클래스 내부에서 new를 사용해 참조할 클래스를 직접 생성하지 않고, 생성자 등을 통해 외부에서 다른 클래스의 객체를 전달 받음
✔︎ 클래스 간의 강한 결합을 느슨한 결합으로 만들어 줌
✔︎ 강한 결합 (Tight Coupling)

  • new 키워드를 통해 객체를 생성할 때의 클래스 간 관계

✔︎ 느슨한 결합 (Loose Coupling)

  • 어떤 클래스가 인터페이스 같이 일반화된 구성 요소에 의존하고 있을 때의 클래스 간 관계

☞ AOP (Aspect Oriented Programming)

✔︎ 관심 지향 프로그래밍
✔︎ 애플리케이션의 핵심 업무 로직에서 공통 기능 로직들을 분리하는 것
✔︎ 공통 관심 사항 (Cross-cutting Concern)

  • 비즈니스 로직을 제외한 공통 기능들에 대한 관심사
  • 로깅, 보안, 트랜젝션, 모니터링, 트레이싱 등

✔︎ 핵심 관심 사항 (Core Concern)

  • 비즈니스 로직 즉, 애플리케이션의 주목적을 달성하기 위한 핵심로직에 대한 관심사

✔︎ AOP 사용 시 이점

  • 코드의 간결성 유지
  • 객체 지향 원칙에 맞는 코드 구현
  • 코드의 재사용

☞ PSA (Portable Service Abstraction)

✔︎ 추상화 (Abstraction)

  • 어떤 클래스의 본질적인 특성만을 추출해서 일반화하는 것

✔︎ PSA (일관된 서비스 추상화)

  • 클라이언트가 추상화된 상위 클래스에서 일관되게 바라보며 하위 클래스의 기능을 사용하게 하는 것
  • 애플리케이션이 특정 서비스를 이용할 때, 서비스의 기능을 접근하는 방식 자체를 일관되게 유지하면서 기술 자체를 유연하게 사용할 수 있도록 하는 것

✔︎ PSA 필요성

  • 어떤 서비스를 이용하기 위한 접근 방식을 일관되게 유지함으로써, 애플리케이션에서 사용하는 기술이 변경되더라도 최소한의 변경만으로 변경된 요구 사항을 반영하기 위함

◉ 느낀 점

☞ 대망의 Spring에 발을 디뎠다. 시작부터 방대하고 이해하기 어려운 Spirng Framework의 특징들을 접하면서 열심히 이해해보려 노력했던 것 같다. 아직 내가 다 이해한 것도 아니고, 이해했다고 생각한 부분도 옳게 이해했는 지 자신이 없다. 그러나 Spirng 관련해서 공부하는 기간이 한 달 이상 잡혀있는 만큼 수차례 반복하고, 실시간 세션에서 크루님들의 말씀을 들어가며 이해하려 노력하는 자세가 중요할 것 같다. 쫄지말고 해내가자.

◉ 내일의 키워드

∙ Spring Framework 모듈 구성
∙ Spring Boot
profile
백엔드 개발자 김창하입니다 🙇‍♂️

0개의 댓글