From 9ad73cee8d2123164cb2d19399416a3ac2d031b3 Mon Sep 17 00:00:00 2001 From: Diger Date: Mon, 1 Jan 2024 01:49:29 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B8=B0=EB=B3=B8=EC=9D=B4=20=EC=A4=91?= =?UTF-8?q?=EC=9A=94=ED=95=98=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ing.md => 2023-11-11-SpringAnnotations.md} | 0 _posts/2024-1-1-Spring.md | 131 ++++++++++++++++++ 2 files changed, 131 insertions(+) rename _posts/{2023-11-11-Spring.md => 2023-11-11-SpringAnnotations.md} (100%) create mode 100644 _posts/2024-1-1-Spring.md diff --git a/_posts/2023-11-11-Spring.md b/_posts/2023-11-11-SpringAnnotations.md similarity index 100% rename from _posts/2023-11-11-Spring.md rename to _posts/2023-11-11-SpringAnnotations.md diff --git a/_posts/2024-1-1-Spring.md b/_posts/2024-1-1-Spring.md new file mode 100644 index 0000000..bb9feb4 --- /dev/null +++ b/_posts/2024-1-1-Spring.md @@ -0,0 +1,131 @@ +--- + +title: Fundermental Spring +date: 2024-01-01 +categories: [Spring] +tags: [Spring] +layout: post +toc: true +math: true +mermaid: true + +--- + +# 스프링 프레임워크란? + +# 프레임워크와 라이브러리와 차이는? + +# 스프링의 특징 + +- 경량 컨테이너 +- POJO(Plain Old Java Object) +- 제어 역행(IoC, Inversion of Control) + - 코드의 유연성, 테스트 용이성, 모듈화, 재사용성, 확장성, 가독성, 유지보수성 등 여러 가지 장점 +- 의존성 주입(DI, Dependency Injection) + - 생성자 주입 + - 한 번 주입되면 변경할 수 없다. 값이 누락된 경우 컴파일 오류가 발생해서 IDE로 어디서 문제가 발생했는지 확인할 수 있는 장점이 있다. + - 순환참조 방지, final, 테스트 코드 작성 용이 + - 수정자 주입 + - public 으로 열려 있어서 잘못 변경되면서 에러가 발생할 수 있다. + - 변경이 필요하면 쓴다 + - 필드 주입 +- 트랜잭션 관리 +- AOP 지원 + - 스프링은 관점 지향 프로그래밍(Aspect-Oriented Programming, AOP)을 지원하고, 공통 관심 사항(예: 로깅, 보안)을 분리하여 모듈화(횡단 관심사 분리) +- 테스트 지원 + +--- + +# Spring 최신버전 주요 Features +- Spring 5 + - Java 8 기본 설정 + - @Nullable, @NotNull 추가로 컴파일 타임에 유효성 검사 가능 + - classpath 기반 component scan 가능 + - Webflux Stack 추가 + +--- + +# Spring vs Spring Boot + +- Embbeded Tomcat 여부, jar 로 배포 가능 + - @AutoConfiguration + - 일반적으로 수많은 Bean들을 자동으로 등록해주는 기능 + - 애플리케이션의 설정과 빈 등록을 자동화하여 개발자가 최소한의 설정을 제공하면서도 애플리케이션을 빠르게 구축할 수 있게 해주는 역할 + +--- + +# Bean이란? + +--- + +# Bean의 생명 주기 + +--- + +# filter와 intercepter 차이 + +--- + +# Dispatcher-Servlet 이란 + +--- + +# 스프링 어노테이션 이란? + +스프링 어노테이션은 Java 어노테이션의 확장으로, 스프링 애플리케이션을 구성하고 제어하기 위한 메타데이터를 제공하며, XML 설정 파일을 대체하거나 보완 +- @ComponentScan: 스프링이 컴포넌트 스캔을 수행하도록 지정하는 어노테이션으로, 지정된 패키지나 클래스를 대상으로 스캔을 수행하고 @Component 및 관련 어노테이션을 찾아 빈으로 등록합니다. + + +# AOP란? + +객체 지향 프로그래밍 패러다임을 보완하는 기술로 메소드나 객체의 기능을 핵심 관심사(Core Concern)와 공통 관심사(Cross-cutting Concern)로 나누어 프로그래밍하는 것 + +## 프록시 패턴 + +- JDK Proxy : Java 내부에 구현되어있는 Proxy + +- CGLLIB Proxy : Open source로 구현되어있는 Proxy + - 내부 호출시 프록시가 적용되지 않는 이슈 + - 자기자신 주입 + - 지연 조회 + - ObjectProvider 를 사용하여 조회한다. + - ApplicationContext 를 통해 조회한다. + - 구조 개선 + +--- + +# Maven/Gradle + +- 빌드 관리 도구 + - 종속성 다운로드 - 전처리(Preprocessing) + - 소스코드를 바이너리 코드로 컴파일(Compile) + - 바이너리 코드를 패키징(Packaging) + - 테스트 실행(Testing) + - 프로덕션 시스템에 배포(distribution) + +- maven + - xml사용 + - 라이프 사이클에 의해 동작 + - clean -> validate -> compile -> test ... + +- gradle + - apache ant + Groovy + - 가독성이 좋다 + - 재사용에 용이 + - 구조적인 장점 + - 편리함 + - 멀티 프로젝트 지원 + - gradle 궁극적인 사용 이유 + - Maven은 멀티 프로젝트에서 특정 설정을 다른 모듈에서 사용하려면 상속 받아야하지만, gradle은 설정 주입 방식을 사용하므로 멀티 프로젝트에 적합하다. + - 캐시적용으로 인해 빌드 속도 향상 + +--- + +# JPA + +- JPA를 왜 쓰는지 + +- JPA를 사용할 때의 주의할 점 및 장/단점 + +- 영속성 컨텍스트 +