-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
131 additions
and
0 deletions.
There are no files selected for viewing
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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를 사용할 때의 주의할 점 및 장/단점 | ||
|
||
- 영속성 컨텍스트 | ||
|