📌 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 |
댓글