본문 바로가기
CS/기본기 탄탄 🔥시리즈

재정리 - 🔥 Spring

by IMSfromSeoul 2021. 10. 2.

📌 1. Framework vs Library

  • 라이브러리와 프레임워크의 결정적인 차이는, 프레임워크는 소위 'Hollywood principle' 을 따른다고 할 수 있다. Hollywood principle이란 우리를 부르지마, 우리가 너를 부를거야 라는 것.
  • 라이브러리는 특정 기능을 수행하는 코드들의 집합이다. 최근에는 클래스들로 이루어져 있다. 라이브러리를 호출하면 특정 기능을 수행하고, 특정 값을 return한다.
  • 프레임워크는 라이브러리보다 더 많은 기능이 내장된 추상 디자인이다. 프레임워크는 설계의 기반이 되는 기반코드와 수정/확장을 할 수 있는 라이브러리가 통합된 형태이다. 사용하려면 사용자가 코드를 채워넣어야 한다.
  • 이후 프레임 워크가 해당 코드를 호출한다.

프레임워크 -> 자동차의 골격 ( 혹은 설계도 )

라이브러리 -> 자동차 하나하나의 부품

https://stackoverflow.com/questions/148747/what-is-the-difference-between-a-framework-and-a-library

📌 2.  Spring Framework

🔥 Spring Framework 이란?

  • java 기술을 더 쉽게 사용하게 해주는 open source frame work
  • Spring Framework의 가장 주요한 특징은 의존성 주입(DI)다. 모든 스프링 모듈들의 핵심에는 DI나 IoC가 존재한다. DI나 IoC를 적절히 사용하면, 결합도가 낮게 App을 개발할 수 있다.
https://jerryjerryjerry.tistory.com/62

https://blog.naver.com/PostView.nhn?isHttpsRedirect=true&blogId=sthwin&logNo=221271008423

🔥 Spring Boot

  • Spring은 여러개의 환경설정을 해주어야 한다. 예를 들면 Spring MVC에는 WAS가 존재하지 않기 때문에, Tomcat 같은 WAS를 직접 연동시켜주어야 한다.
  • 그러나 Spring Boot는 여러가지 환경설정을 대신 해주어 매우 편하게 프로젝트를 생성할 수 있다.

🔥 WAS - Web Server

  • 정적인 Web server(ex - apache) 와 동적인 WAS의 차이는 서블릿 컨테이너 기능이 있는가 없는가이다.
https://cheershennah.tistory.com/54

🔥 서블릿 컨테이너

  • 서블릿은 HTTP 통신을 더 쉽고 간편하게 사용하기 위해 JEE framework이다. request, response의 응답처리에 대한 책임을 갖는다.
  • 다른설명 - Servlet이란 javax.servlet package에 정의된 인터페이스이다.
  • 서블릿은 3가지 life cycle을 필수로 갖는다.
  • init(), service(), destroy()
  • 서블릿 컨테이너는 해당 서블릿들의 생명주기를 관리해준다.
https://www.baeldung.com/java-servlets-containers-intro

https://scshim.tistory.com/28

https://velog.io/@han_been/%EC%84%9C%EB%B8%94%EB%A6%BF-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88Servlet-Container-%EB%9E%80

🔥 Java EE vs Java SE

  • Java EE = Java Enterprise Edition
  • Java SE = Java Standard Edition
  • Java SE가 PC에서 구동하는 표준 Application을 구동하기 위한 플랫폼이었다면, Java SE는 서버에서 돌아가기 위한 기업용 플랫폼이다.
  • Java SE를 기반으로 기능이 추가된 것이 Java EE라고 생각하면 될 것 같다. 
https://dololak.tistory.com/82

🔥 Spring MVC란?

Model - View - Controller 3개의 layer를 분리하는 것이다.

 

mvc가 해결하고자 하는 것

  • 하나의 layer에 ( 서블릿 , JSP 등 ) 너무 많은 역할
  • 변경의 라이프 사이클의 불일치

🔥 MVC

  • Model -> View에 필요한 data
  • View -> rendering
  • Controller -> 비지니스 로직 실행
김영한 MVC 강좌
https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/mvc.html

📌 3. AOP 란?

https://imsfromseoul.tistory.com/268

 

[10분 테코톡] Spring AOP

📌 목차 영상의 링크 https://www.youtube.com/watch?v=Hm0w_9ngDpM 📌 AOP의 필요성 만약 회사의 요구사항에 모든 기능에 시간을 측정해달라고 하면 어떻게 될까? 만약 메서드가 1억개라면? 1억개에 다 달아

imsfromseoul.tistory.com

📌 4. JDK Dynamic Proxy - CGLIB

🔥 Runtime Weaving

  • 사용자가 호출을 하는 시점에, Spring AOP는 IoC Container를 이용해 AOP를 할 수 있는 Proxy Bean을 생성한다.
  • 동적으로 생성된 Proxy Bean은 Target의 method가 호출되는 시점에 부가기능을 추가할 메서드를 자체적으로 판단해서 흐름을 가로채서 부가기능을 주입해준다.
  • 이처럼 동적으로 Weaving을 한다고 해서 Runtime Weaving이라고 한다.
  • Spring AOP는 이런 Runtime Weaving에 기반을 두고 있다.

🔥 Weaving 이란?

  • 기존 .class 파일의 코드를 생성하거나 편집하는 것

https://stackoverflow.com/questions/3371431/what-is-weaving/50048486

🔥 Spring AOP Process

  • JDK dynamic proxy :  Spring AOP가 선호하는 방식이다. 하나 이상의 interface를 상속받으면 JDK dynamic proxy를 사용한다.
  • CGLIB proxy : 상속받은 인터페이스가 없다면 사용될 수 있다.
https://www.baeldung.com/spring-aop-vs-aspectj
https://gmoon92.github.io/spring/aop/2019/04/20/jdk-dynamic-proxy-and-cglib.html

📌 5. Spring PSA란?

🔥 Spring Triangle

  • Spring은 SpringTriangle이라는 세 가지 핵심 개념을 제공해준다.
  • IoC, AOP, PSA가 그것이다.
  • PSA = Portable Service Abstraction
  • 추상화 계층을 사용해서 어떤 기술을 내부에 숨기고 개발자에게 편의성을 제공하는 것 = Service Abstraction
  • Spring에서는 annotation을 그 예로 들 수 있다. @GetMapping -> 알아서 서블릿 처리를 해준다
  • Service Abstraction에 더해서 해당 기술을 다른 기술 스택으로 편하게 바꿀 수 있는 확장성을 갖고 있는 것이 Portable Service Abstraction이다.
https://atoz-develop.tistory.com/entry/Spring-%EC%8A%A4%ED%94%84%EB%A7%81-PSA

📌 6. ORM 이란?

  • Object Relational Mapping
  • 객체지향 프로그래밍 ( OOP )의 객체와 관계형 데이터 베이스( RDB )의 테이블을 자동으로 연결시켜주는 기술을 의미한다.
  • ORM을 사용하면 따로 SQL문을 짜지 않아도, ORM을 구현한 구현체가 알아서 SQL을 짜준다.

🔥 장점

  • 쿼리를 신경쓰지 않고, 객체지향적으로 코드를 짤 수 있다.
  • 유지보수에 유리하다
  • DBMS에 대한 종속성이 내려간다.

🔥 단점

  • 설계에 대한 난이도가 높다.
  • 초기 설정이 상대적으로 복잡하다.
https://geonlee.tistory.com/207

📌 7. JPA - Hibernate

  • JPA = Java Persistence API

🔥 Persistence ?

  • 영속성이란 Application이 꺼져도 데이터가 남아있는 것
  • 영구적으로 데이터를 저장하는 것

https://stackoverflow.com/questions/27608224/jpa-what-exactly-does-it-mean-for-an-entity-object-to-persist-what-is-the-def

  • JPA = java application에서 어떻게 data를 영속(persist)시킬 것인지에 대한 기술 명세
  • 즉, JPA는 Java APP에서 RDB를 사용하는 방식을 정의한 인터페이스이다.
  • Hibernate = JPA의 구현체. framework

🔥 Spring Data JPA

  • JPA를 쓰기 편하게 만들어놓은 Module
  • JPA를 한 단계 더 추상화 시킨 Repository 라는 인터페이스를 제공해준다.

  • JPA는 Java App과 JDBC 사이에서 작동한다.
https://www.baeldung.com/learn-jpa-hibernate
https://suhwan.dev/2019/02/24/jpa-vs-hibernate-vs-spring-data-jpa/
https://imsfromseoul.tistory.com/148?category=867222

 

'CS > 기본기 탄탄 🔥시리즈' 카테고리의 다른 글

재정리 - 🔥 db  (1) 2021.09.10
🔥7. Spring (2) - annotation 정리  (0) 2021.07.16
🔥6 - 데이터 베이스  (1) 2021.06.08
🔥5 - 네트워크  (0) 2021.06.03
🔥4 - 운영체제  (0) 2021.06.02

댓글