From 1d05f43ce619250ac28611b7f146d9031846b988 Mon Sep 17 00:00:00 2001
From: wlqgkrry <121949750+wlqgkrry@users.noreply.github.com>
Date: Fri, 14 Mar 2025 21:37:02 +0900
Subject: [PATCH 1/4] Update README.md
updating the explaination of spring tutorials
---
README.md | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 110 insertions(+)
diff --git a/README.md b/README.md
index ebeffaf..e79dc03 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,112 @@
# spring-tutorial-21st
CEOS back-end 21st spring tutorial project
+
+
+## Spring이란?
+- 개발 초기에 개발자가 설정하고 관리해야 하는 대부분의 요소
+ (= MVC 계층 구조, 클래스 생성자, 그 외 각 계층에서 필요한 객체 생성, 소멸, 의존성 관리 등의 기능)을 자동으로 처리해주는 프레임워크.
+- 이를 통해 개발자는 개발 작업에 집중하고, 더 나아가 객체 간 관계의 설정 및 관리 작업을 더 쉽게 할 수 있습니다.
+
+
+## Spring의 Bean은 무엇일까요? - Bean의 라이프 사이클에 대해!
+- Bean : Spring 컨테이너에서 생성, 관리하는 재사용 가능한 **객체**입니다.
+- Bean의 특징
+ (1) 객체(Bean) 간 의존성(연결점)을 설정할 수 있습니다.
+ (2) Ioc, DI의 원리가 적용됩니다.
+
+
+- Bean의 라이프 사이클
+1. @Component 또는 @Bean으로 등록된 객체가 생성됩니다.
+2. 의존성 주입(@Autowired 등)
+3. 초기화(Initaializing Bean, @PostConstruct -> Bean이 생성된 후 실행.)
+4. 애플리케이션이 실행되면서 빈이 사용됩니다.
+5. 소멸(Destroying Bean, @PreDestory -> Bean이 소멸되기 전 실행) : 애플리케이션 종료 시 정리 작업을 수행합니다.
+
+
+
+## 스프링 어노테이션(Annotation)에 대해
+- 어노테이션은 무엇일까요?
+ 컴파일러에게 정보를 주는 **주석**( = 메타데이터) 역할을 합니다.
+ 사람이 코드에서 주석을 보고 코드에 대한 정보를 얻듯,
+ @ 뒤의 단어를 통해 컴파일러의 코드 생성에 정보를 주거나, 특정 행위를 하도록 유도합니다.
+ 주석은 프로그램에 영향을 끼치지 않지만 어노테이션은 프로그램의 동작에 다양한 영향을 줍니다.
+
+- 어노테이션의 종류
+ 1. 표준 어노테이션
+ 2. 메타 어노테이션
+ 3. 사용자 어노테이션
+
+
+### 1. 표준 어노테이션
+- 자바에서 기본적으로 제공하는 어노테이션
+- 종류
+1) @Component : 일반적인 Bean 등록
+2) @Service : 서비스 계층(비즈니스 로직 계층)에서 사용합니다.
+3) @Repository : 데이터 접근 계층 (DAO)에서 사용합니다.
+4) @Controller : MVC 패턴에서 컨트롤러 역할에 하는 클래스에 사용합니다.
+5) @RestController : JSON 형태의 응답을 반환하는 API 컨트롤러에서 사용합니다.
+6) @Override : 상위 클래스의 메서드를 오버라이딩 한다는 것을 알립니다.
+7) @SuppressWarning : 컴파일 경고 메시지가 나타나지 않도록 합니다.
+
+
+### 2. 메타 어노테이션
+- 다른 어노테이션에서도 사용되는 어노테이션
+- 종류
+1) @Autowired → 자동으로 의존성을 주입합니다.
+2) @Qualifier → 특정한 Bean을 지정하여 주입합니다.
+3) @RequiredArgsConstructor → Lombok을 활용한 의존성을 주입합니다.
+
+
+### 3. 사용자 어노테이션
+- 사용자가 직접 정의하여 사용하는 어노테이션
+1) @Aspect → AOP를 정의하는 클래스.
+2) @Before → 메서드 실행 전에 동작합니다.
+3) @After → 메서드 실행 후 동작합니다.
+4) @Around → 메서드 실행 전후로 동작합니다.
+
+
+어노테이션을 사용하면 Bean으로 등록됩니다.
+- @Component
+- @Service
+- @Repository
+- @Controller
+
+
+## 단위 테스트 vs 통합 테스트
+
+- 테스트를 하는 이유?
+개발 과정에서의 문제점을 미리 발견할 수 있습니다.
+JS에서 타입 체크를 하지 않아서 타입 문제가 발생한다면,
+TS에서는 타입 지정을 미리 해서 타입 변환 문제를 미리 방지하는데, 이러한 논리와 유사합니다.
+테스트를 미리 해봄으로써 발생할 수 있는 문제 상황을 줄일 수 있습니다.
+
+- 테스트의 종류
+1. 단위 테스트(Unit Test)
+한 개의 메서드 또는 클래스만을 테스트합니다.
+다른 컴포넌트(데이터베이스, 네트워크 등)와 분리하여 테스트하며,
+Mockito 같은 목(Mock) 객체를 활용하여 독립적으로 실행이 가능합니다.
+빠르고 독립적입니다.
+
+
+3. 통합 테스트(Integration Test)
+전체 시스템(데이터베이스, API, 서비스 등)을 포함하여 테스트합니다.
+실제 DB, 외부 API 등과 연동되는 환경에서 실행합니다.
+환경 설정이 필요하여 실행 속도가 단위 테스트보다 느립니다.
+
+
+## Spring이 지원하는 기술들 - IoC/DI, AOP, PSA
+
+1. IoC (Inversion of Control, 제어의 역전)
+- 객체의 생성과 생명주기를 개발자가 직접 관리하는 것이 아니라, 스프링이 대신 관리합니다.
+- 기존에는 new 키워드를 사용해 객체를 생성했지만, 스프링에서는 자동으로 생성합니다.
+
+2. DI (Dependency Injection, 의존성 주입)
+- 객체 간의 의존성을 스프링이 관리해 줍니다.
+- @Autowired, @Component, @Service 등을 활용하여 코드의 결합도를 낮출 수 있습니다.
+
+3. AOP (Aspect-Oriented Programming, 관점 지향 프로그래밍)
+- 공통적인 기능(로깅, 트랜잭션 등)을 분리하여 관리합니다.
+- @Aspect, @Before, @After, @Around 등의 어노테이션을 사용합니다.
+
+4. PSA (Portable Service Abstraction, 서비스 추상화)
+- JDBC, 트랜잭션, 메시징 등 다양한 기술을 쉽게 사용할 수 있도록 스프링이 추상화를 제공합니다.
From 7353ec435daed47651276f9e581b54231159245b Mon Sep 17 00:00:00 2001
From: wlqgkrry <121949750+wlqgkrry@users.noreply.github.com>
Date: Fri, 14 Mar 2025 21:41:29 +0900
Subject: [PATCH 2/4] Update README.md
updating the lines
---
README.md | 36 ++++++++++++++++++++++--------------
1 file changed, 22 insertions(+), 14 deletions(-)
diff --git a/README.md b/README.md
index e79dc03..e5c34ac 100644
--- a/README.md
+++ b/README.md
@@ -1,19 +1,22 @@
# spring-tutorial-21st
CEOS back-end 21st spring tutorial project
+
## Spring이란?
- 개발 초기에 개발자가 설정하고 관리해야 하는 대부분의 요소
(= MVC 계층 구조, 클래스 생성자, 그 외 각 계층에서 필요한 객체 생성, 소멸, 의존성 관리 등의 기능)을 자동으로 처리해주는 프레임워크.
+
+
- 이를 통해 개발자는 개발 작업에 집중하고, 더 나아가 객체 간 관계의 설정 및 관리 작업을 더 쉽게 할 수 있습니다.
-
+
## Spring의 Bean은 무엇일까요? - Bean의 라이프 사이클에 대해!
- Bean : Spring 컨테이너에서 생성, 관리하는 재사용 가능한 **객체**입니다.
- Bean의 특징
(1) 객체(Bean) 간 의존성(연결점)을 설정할 수 있습니다.
(2) Ioc, DI의 원리가 적용됩니다.
-
+
- Bean의 라이프 사이클
1. @Component 또는 @Bean으로 등록된 객체가 생성됩니다.
@@ -21,6 +24,7 @@ CEOS back-end 21st spring tutorial project
3. 초기화(Initaializing Bean, @PostConstruct -> Bean이 생성된 후 실행.)
4. 애플리케이션이 실행되면서 빈이 사용됩니다.
5. 소멸(Destroying Bean, @PreDestory -> Bean이 소멸되기 전 실행) : 애플리케이션 종료 시 정리 작업을 수행합니다.
+
@@ -32,10 +36,12 @@ CEOS back-end 21st spring tutorial project
주석은 프로그램에 영향을 끼치지 않지만 어노테이션은 프로그램의 동작에 다양한 영향을 줍니다.
- 어노테이션의 종류
- 1. 표준 어노테이션
- 2. 메타 어노테이션
- 3. 사용자 어노테이션
+
+ **(1) 표준 어노테이션
+ (2) 메타 어노테이션
+ (3) 사용자 어노테이션**
+
### 1. 표준 어노테이션
- 자바에서 기본적으로 제공하는 어노테이션
@@ -48,6 +54,7 @@ CEOS back-end 21st spring tutorial project
6) @Override : 상위 클래스의 메서드를 오버라이딩 한다는 것을 알립니다.
7) @SuppressWarning : 컴파일 경고 메시지가 나타나지 않도록 합니다.
+
### 2. 메타 어노테이션
- 다른 어노테이션에서도 사용되는 어노테이션
@@ -56,21 +63,19 @@ CEOS back-end 21st spring tutorial project
2) @Qualifier → 특정한 Bean을 지정하여 주입합니다.
3) @RequiredArgsConstructor → Lombok을 활용한 의존성을 주입합니다.
+
### 3. 사용자 어노테이션
- 사용자가 직접 정의하여 사용하는 어노테이션
+- 종류
1) @Aspect → AOP를 정의하는 클래스.
2) @Before → 메서드 실행 전에 동작합니다.
3) @After → 메서드 실행 후 동작합니다.
4) @Around → 메서드 실행 전후로 동작합니다.
-어노테이션을 사용하면 Bean으로 등록됩니다.
-- @Component
-- @Service
-- @Repository
-- @Controller
+
## 단위 테스트 vs 통합 테스트
@@ -93,20 +98,23 @@ Mockito 같은 목(Mock) 객체를 활용하여 독립적으로 실행이 가능
실제 DB, 외부 API 등과 연동되는 환경에서 실행합니다.
환경 설정이 필요하여 실행 속도가 단위 테스트보다 느립니다.
+
## Spring이 지원하는 기술들 - IoC/DI, AOP, PSA
-1. IoC (Inversion of Control, 제어의 역전)
+1. **IoC** (Inversion of Control, 제어의 역전)
- 객체의 생성과 생명주기를 개발자가 직접 관리하는 것이 아니라, 스프링이 대신 관리합니다.
- 기존에는 new 키워드를 사용해 객체를 생성했지만, 스프링에서는 자동으로 생성합니다.
-2. DI (Dependency Injection, 의존성 주입)
+2. **DI** (Dependency Injection, 의존성 주입)
- 객체 간의 의존성을 스프링이 관리해 줍니다.
- @Autowired, @Component, @Service 등을 활용하여 코드의 결합도를 낮출 수 있습니다.
-3. AOP (Aspect-Oriented Programming, 관점 지향 프로그래밍)
+3. **AOP** (Aspect-Oriented Programming, 관점 지향 프로그래밍)
- 공통적인 기능(로깅, 트랜잭션 등)을 분리하여 관리합니다.
- @Aspect, @Before, @After, @Around 등의 어노테이션을 사용합니다.
-4. PSA (Portable Service Abstraction, 서비스 추상화)
+4. **PSA** (Portable Service Abstraction, 서비스 추상화)
- JDBC, 트랜잭션, 메시징 등 다양한 기술을 쉽게 사용할 수 있도록 스프링이 추상화를 제공합니다.
+
+
From 6151bd8a3998e8acac739ec2691f9eb52c449e6a Mon Sep 17 00:00:00 2001
From: wlqgkrry <121949750+wlqgkrry@users.noreply.github.com>
Date: Sat, 15 Mar 2025 02:21:27 +0900
Subject: [PATCH 3/4] Update README.md
adding my think after studying spring.
---
README.md | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
index e5c34ac..f59cc9f 100644
--- a/README.md
+++ b/README.md
@@ -89,8 +89,7 @@ TS에서는 타입 지정을 미리 해서 타입 변환 문제를 미리 방지
1. 단위 테스트(Unit Test)
한 개의 메서드 또는 클래스만을 테스트합니다.
다른 컴포넌트(데이터베이스, 네트워크 등)와 분리하여 테스트하며,
-Mockito 같은 목(Mock) 객체를 활용하여 독립적으로 실행이 가능합니다.
-빠르고 독립적입니다.
+독립적이고 빠르게 실행이 가능합니다.
3. 통합 테스트(Integration Test)
@@ -118,3 +117,8 @@ Mockito 같은 목(Mock) 객체를 활용하여 독립적으로 실행이 가능
- JDBC, 트랜잭션, 메시징 등 다양한 기술을 쉽게 사용할 수 있도록 스프링이 추상화를 제공합니다.
+
+
+## 새롭게 알게 된 점
+스프링의 기본 문법과 이론에 대해 알 수 있는 기회였습니다.
+이론에 집중해서 정리를 해 보았는데 다음에는 이론 + 실습을 적절히 섞어 작성해보려 합니다 : ]
From ead856ca6c2e59f51ee0f311c2959faf7b01fc8b Mon Sep 17 00:00:00 2001
From: wlqgkrry <121949750+wlqgkrry@users.noreply.github.com>
Date: Mon, 17 Mar 2025 16:09:54 +0900
Subject: [PATCH 4/4] adding the picture that explaining more details about
Bean.
organizing the basic concepts by using Bean.
---
README.md | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/README.md b/README.md
index f59cc9f..e4a0ed0 100644
--- a/README.md
+++ b/README.md
@@ -122,3 +122,16 @@ TS에서는 타입 지정을 미리 해서 타입 변환 문제를 미리 방지
## 새롭게 알게 된 점
스프링의 기본 문법과 이론에 대해 알 수 있는 기회였습니다.
이론에 집중해서 정리를 해 보았는데 다음에는 이론 + 실습을 적절히 섞어 작성해보려 합니다 : ]
+
+
+
+
+---
+
+
+
+
+
+
+
+