Framework 와 Spring 개념 및 특징

Yeppi's 개발 일기·2022년 6월 5일
0

Spring&SpringBoot

목록 보기
1/16
post-thumbnail
post-custom-banner

1. Framework

1) 프레임워크 개념

사전적 의미

  • 뼈대, 체계

산출물

  • 산출물 사용
    개발 시 설계도를 만들고 → 운영팀에게 코드 + 설계도를 넘김
  • 산출물 종류
    클래스 다이어그램 시퀀스 다이그램 등 UML, 데이터 테이블 등등
  • 산출물 필요 이유
    ⇒ 유지보수 인력이 바뀌더라도 산출물을 보고 동일한 유지보수가 가능
  • 현실적인 문제
    → 사람들이 산출물을 안봄…?(시간이 없어서)
    → 내가 가진 지식 및 노하우를 기반으로, 감으로 시스템을 유지보수/관리

프레임워크 사용 이유

  • 위와 같은 상황 시 문제점이 발생
    • 감으로 하다보면, 원래의 형태가 아닌 시간이 지날 수록 전혀 다른 형태가 되어있음
      → 이게 바로 현실…
  • 근본적인 문제 해결 방법 = 프레임워크 사용
    • 각 형태의 규격을 정해줌 → 개발자는 살만 덧붙이면 됨
    • 개발자는 뼈대를 건드릴 수 없고, 살만 건드릴 수 있음
      ⇒ 소프트웨어 관점에서 봤을 때 이런 뼈대를 아키텍처라고 함 (= 와꾸 잡기(?))
  • 프레임워크를 사용하면?
    동일한 아키텍처를 가지고 있기 때문에, 어떤 개발자가 유지보수를 해도 아주 쉽게 해결 가능



❤️ 프레임워크 역할은? 아키텍처 제공 ❤️

  • 프레임워크 = 아키텍처(architecture)
  • 아키텍처
    각 서비스 또는 플랫폼에 따른 설계

  • 어플리케이션을 개발할 때, 아키텍처에 해당하는 뼈대를 제공함

Solution vs Framework

  • Solution → 완제품, 돈주고 구매, 뼈+살
  • Framework → 반제품, 뼈만


2) 프레임워크 장점

  1. 빠른 구현 시간
  1. 관리 용이성 증가
    • 소스의 양이 아주 많이 줄어듬
    • 관리 시간 감소
  1. 개발자 역량 획일화
    • 10년차와 신입의 코드가 동일
  1. 검증된 아키텍처의 재사용 및 일관성 유지


3) Java 기반의 프레임워크

  • 종류가 아주 많음
  • 대부분 오픈 소스
    • 라이센스에 제약을 두지 않는 소스 코드
  • 처리 영역별로 3가지 분류

Presentation

UI, 화면 관련

프레임워크 종류

  1. Struts

    • 지금 망함
  1. Spring MVC

    • MVC(Model View Controller) 아키텍처 제공하는 UI Layer 프레임워크
    • Spring 프레임워크에 포함

Business

비즈니스 로직

프레임워크 종류

  1. Spring IoCSpring AOP

    • EJB의 복잡하고, 메모리 무겁고, 유지보수 힘든 문제 극복
    • IoC 와 AOP 모듈을 이용하여 Spirng 컨테이너에서 동작하는 엔터프라이즈 비즈니스 컴포넌트를 개발 가능

Persistence

영속화(영구적으로 저장), DB

프레임워크 종류

  1. Hibernate 에서 파생된 JPA

    • ORM(Object Relation Mapping) 프레임워크 → SQL 자동으로 제너레이션, 자체적으로 생성
    • JPA 는 모든 ORM의 자바 표준 API
  1. ibatis 에서 파생된 Mybatis

    • SQL 명령어를 자바 개발자가 작성해야함

👉 둘 다 자바코드 한줄로 DB 연동을 처리 = 간편



4) 프레임워크 구조

뼈 + 살 + 메타 데이터

  • 애플리케이션 개발시 프레임워크를 사용하여 개발
  • 뼈대 부분
    프레임워크 코어 → jar
  • 덧붙이는 살 부분
    확장 모듈 → 비즈니스 로직
  • 뼈와 살을 연결하는 부분
    메타 데이터 → XML 환경 설정 파일


2. Spring

1) 개념

  • 20년동안, 최고의 자바 엔터프라이즈 어플리케이션 개발 자리를 차지하고 있음
  • 스프링 프레임워크 구성 → 20여가지 모듈들은 스프링 핵심 기능 제공(DI, APO 등)
  • 단일 아키텍처(모놀리스 형태). 마이크로 서비스 아키텍처로 변환 중
  • 여러 모듈 중 스프링 부트, 스프링 클라우드, 스프링 데이터, 스프링 배치, 스프링 시큐리티에 중점


2) 특징

1. 경량 lightweight

  • .jar 파일들이 매우 용량이 적음
  • 빠르다, 가볍다

2. POJO 형태의 객체를 이용하여 어플리케이션 개발 및 운영

3. IoC (Inversion of Control)

4. AOP (Aspect Oriented Programming)

5. 컨테이너 (Container) ❗

  • 가장 핵심

6. Framework

7. 느슨한 결합

  • 유연성과 코드의 재사용성 상승
  • 모듈화 관련
  • Spirng 은 모듈화가 되어 있음
    • 대부분의 프레임워크는 jar 파일로 구성
    • Spirng 은 여러개의 jar 파일로 구성

jar 파일을 각 모듈의 개념이라고 생각해도 됨

8. 테스트 용이성

  • 공통적인 아키텍처를 가지고 있으므로

9. 기능별로 라이브러리를 제공하여 패키지로 제공



3) POJO

개념

내 마음대로 만드는 클래스

  • Plain Old Java Object
    → 평범한 옛날 자바 객체

  • 기본적인 자바 클래스

  • 스프링 프레임워크는 POJO 를 기반으로 애플리케이션을 운용

  • 자바 기술은 POJO 전/후로 나뉨

    • 전 → Applet, Servlet/JSP, EJB
    • 후 → Spring, Mybatis, JPA, Hibernate
  • POJO가 아닌 대표적인 예
    ex. 상속을 받는 servlet 클래스

스프링 삼각형

1. 의존 관계 주입

2. PSA

  • 내가 만든 클래스가 얼마나 추상적으로 잘 작성했는 가
  • 내가 만든 인터페이스가 다른 곳에서 잘 활용할 수 있는가
  • 기능 변경 시, 핵심 기능은 건드리지 않고 추상화된 부분만 재사용할 수 있도록 작성했는 가
    ⇒ 이러한 표현 방식들

3. AOP



❤️ 스프링은? 컨테이너이다 ❤️

  • 컨테이너
    애플리케이션 운용에 필요한 객체를 생성하고 관리
  • 내부적으로 객체들의 저장공간으로 컬렉션(Map 같은)을 사용


Spring framwork 을 본격적으로 공부하기 전에 기본 개념부터 이해해보았다

profile
imaginative and free developer. 백엔드 / UX / DATA / 기획에 관심있지만 고양이는 없는 예비 개발자👋
post-custom-banner

0개의 댓글