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에서는 타입 지정을 미리 해서 타입 변환 문제를 미리 방지 ## 새롭게 알게 된 점 스프링의 기본 문법과 이론에 대해 알 수 있는 기회였습니다. 이론에 집중해서 정리를 해 보았는데 다음에는 이론 + 실습을 적절히 섞어 작성해보려 합니다 : ] + + +
+ +--- + + +
+ + + +![image](https://github.com/user-attachments/assets/66338a13-8720-4e72-aa7b-a72512cd36eb) +