-
Notifications
You must be signed in to change notification settings - Fork 10
[21기_오지현] spring tutorial 미션 제출합니다. #5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: wlqgkrry
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,137 @@ | ||
# spring-tutorial-21st | ||
CEOS back-end 21st spring tutorial project | ||
|
||
<br> | ||
|
||
## Spring이란? | ||
- 개발 초기에 개발자가 설정하고 관리해야 하는 대부분의 요소 | ||
(= MVC 계층 구조, 클래스 생성자, 그 외 각 계층에서 필요한 객체 생성, 소멸, 의존성 관리 등의 기능)을 자동으로 처리해주는 프레임워크. | ||
<br> | ||
|
||
- 이를 통해 개발자는 개발 작업에 집중하고, 더 나아가 객체 간 관계의 설정 및 관리 작업을 더 쉽게 할 수 있습니다. | ||
<br> | ||
|
||
## Spring의 Bean은 무엇일까요? - Bean의 라이프 사이클에 대해! | ||
- Bean : Spring 컨테이너에서 생성, 관리하는 재사용 가능한 **객체**입니다. | ||
- Bean의 특징 | ||
(1) 객체(Bean) 간 의존성(연결점)을 설정할 수 있습니다. | ||
(2) Ioc, DI의 원리가 적용됩니다. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 객체지향 5원칙 중 IoC, DI 개념을 실제 코드와 연결지어준 부분이 좋은 것 같습니다 |
||
<br> | ||
|
||
- Bean의 라이프 사이클 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 깔끔하게 정리하셔서 보기 좋네요 :) Q. 혹시 외부 라이브러리 코드에도 콜백을 적용하고 싶을 때, 코드의 수정이 힘든 경우가 있을 텐데 이럴 때는 어떻게 처리하는게 좋을까요? |
||
1. @Component 또는 @Bean으로 등록된 객체가 생성됩니다. | ||
2. 의존성 주입(@Autowired 등) | ||
3. 초기화(Initaializing Bean, @PostConstruct -> Bean이 생성된 후 실행.) | ||
4. 애플리케이션이 실행되면서 빈이 사용됩니다. | ||
5. 소멸(Destroying Bean, @PreDestory -> Bean이 소멸되기 전 실행) : 애플리케이션 종료 시 정리 작업을 수행합니다. | ||
Comment on lines
+22
to
+26
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 스프링 컨테이너에 빈을 등록하는 과정을 더 공부하면 재미있을 것 같습니다. 특히 |
||
<br> | ||
|
||
|
||
|
||
## 스프링 어노테이션(Annotation)에 대해 | ||
- 어노테이션은 무엇일까요? | ||
컴파일러에게 정보를 주는 **주석**( = 메타데이터) 역할을 합니다. | ||
사람이 코드에서 주석을 보고 코드에 대한 정보를 얻듯, | ||
@ 뒤의 단어를 통해 컴파일러의 코드 생성에 정보를 주거나, 특정 행위를 하도록 유도합니다. | ||
주석은 프로그램에 영향을 끼치지 않지만 어노테이션은 프로그램의 동작에 다양한 영향을 줍니다. | ||
|
||
- 어노테이션의 종류 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 👍 |
||
|
||
**(1) 표준 어노테이션 | ||
(2) 메타 어노테이션 | ||
(3) 사용자 어노테이션** | ||
|
||
<br> | ||
|
||
### 1. 표준 어노테이션 | ||
- 자바에서 기본적으로 제공하는 어노테이션 | ||
- 종류 | ||
1) @Component : 일반적인 Bean 등록 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ! 자바 표준 어노테이션과 스프링제공 어노테이션을 헷갈리신거 같습니다!(아마..?) |
||
2) @Service : 서비스 계층(비즈니스 로직 계층)에서 사용합니다. | ||
3) @Repository : 데이터 접근 계층 (DAO)에서 사용합니다. | ||
4) @Controller : MVC 패턴에서 컨트롤러 역할에 하는 클래스에 사용합니다. | ||
5) @RestController : JSON 형태의 응답을 반환하는 API 컨트롤러에서 사용합니다. | ||
6) @Override : 상위 클래스의 메서드를 오버라이딩 한다는 것을 알립니다. | ||
7) @SuppressWarning : 컴파일 경고 메시지가 나타나지 않도록 합니다. | ||
|
||
<br> | ||
|
||
### 2. 메타 어노테이션 | ||
- 다른 어노테이션에서도 사용되는 어노테이션 | ||
- 종류 | ||
1) @Autowired → 자동으로 의존성을 주입합니다. | ||
2) @Qualifier → 특정한 Bean을 지정하여 주입합니다. | ||
3) @RequiredArgsConstructor → Lombok을 활용한 의존성을 주입합니다. | ||
|
||
<br> | ||
|
||
### 3. 사용자 어노테이션 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 어노테이션의 구조를 살펴보시면 사용자 어노테이션을 어떻게 만들 수 있을지 알 수 있을거 같습니다!! 한번 보면 재밌을거 같아요~🧐 |
||
- 사용자가 직접 정의하여 사용하는 어노테이션 | ||
- 종류 | ||
1) @Aspect → AOP를 정의하는 클래스. | ||
2) @Before → 메서드 실행 전에 동작합니다. | ||
3) @After → 메서드 실행 후 동작합니다. | ||
4) @Around → 메서드 실행 전후로 동작합니다. | ||
Comment on lines
+68
to
+74
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 작성하신 어노테이션은 모두 기본으로 제공되는 어노테이션으로 알고 있습니다! 사용자 어노테이션은 작성하신대로 사용자가 |
||
|
||
|
||
|
||
<br> | ||
|
||
## 단위 테스트 vs 통합 테스트 | ||
|
||
- 테스트를 하는 이유? | ||
개발 과정에서의 문제점을 미리 발견할 수 있습니다. | ||
JS에서 타입 체크를 하지 않아서 타입 문제가 발생한다면, | ||
TS에서는 타입 지정을 미리 해서 타입 변환 문제를 미리 방지하는데, 이러한 논리와 유사합니다. | ||
테스트를 미리 해봄으로써 발생할 수 있는 문제 상황을 줄일 수 있습니다. | ||
|
||
- 테스트의 종류 | ||
1. 단위 테스트(Unit Test) | ||
한 개의 메서드 또는 클래스만을 테스트합니다. | ||
다른 컴포넌트(데이터베이스, 네트워크 등)와 분리하여 테스트하며, | ||
독립적이고 빠르게 실행이 가능합니다. | ||
|
||
|
||
3. 통합 테스트(Integration Test) | ||
전체 시스템(데이터베이스, API, 서비스 등)을 포함하여 테스트합니다. | ||
실제 DB, 외부 API 등과 연동되는 환경에서 실행합니다. | ||
환경 설정이 필요하여 실행 속도가 단위 테스트보다 느립니다. | ||
|
||
<br> | ||
|
||
## 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, 트랜잭션, 메시징 등 다양한 기술을 쉽게 사용할 수 있도록 스프링이 추상화를 제공합니다. | ||
|
||
<br> | ||
|
||
|
||
## 새롭게 알게 된 점 | ||
스프링의 기본 문법과 이론에 대해 알 수 있는 기회였습니다. | ||
이론에 집중해서 정리를 해 보았는데 다음에는 이론 + 실습을 적절히 섞어 작성해보려 합니다 : ] | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 정리가 깔끔하셔서 보기 좋네요 수고하셨습니다 :) |
||
|
||
|
||
<br> | ||
|
||
--- | ||
|
||
|
||
<br> | ||
|
||
|
||
|
||
 | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
스프링이 무엇을 자동화해주는지 예시를 들어준게 좋네요!