Skip to content

Commit 7f65b79

Browse files
committed
merge wiki to source (github.com/ruthetum/study/wiki)
1 parent 8b5e94e commit 7f65b79

File tree

73 files changed

+1840
-75
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+1840
-75
lines changed

README.md

Lines changed: 62 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,64 @@
11
# 📝 Study
2-
- 공부한 내용은 정리하기
3-
- 궁금한 내용은 실험하기
4-
- 기억할 내용은 [보관](https://github.com/ruthetum/study/wiki)하기
52

6-
## 💾 Theory
7-
### Kafka
8-
- [Kafka 개념 및 구조](./kafka/kafka-theory-architecture.md)
9-
- [이벤트 브로커 vs 메시지 브로커](./kafka/messaging-platform.md)
10-
11-
### Netty
12-
- [Netty - 자바 네트워크 소녀 Netty 정리](./netty/java-network-girl-netty)
13-
14-
### Redis
15-
- [Redis 야무지게 쓰기](./redis)
16-
- [Redis vs Memcached](./redis/compairson-redis-memcached.md)
17-
18-
### Java
19-
- [Effective Java 정리](./effective-java)
20-
- [Effective Java 스터디](https://github.com/Effective-Java-Camp/effective-java-3rd)
21-
22-
### DB
23-
- [MySQL IN 절 안에 있는 순서대로 정렬하기](./db/query/mysql_in_%EC%A0%88_%EC%95%88%EC%97%90_%EC%9E%88%EB%8A%94_%EC%88%9C%EC%84%9C%EB%8C%80%EB%A1%9C_%EC%A0%95%EB%A0%AC%ED%95%98%EA%B8%B0.md)
24-
25-
### Web Server
26-
- [Apache vs Nginx](./nginx/compairson-apache-nginx.md)
27-
28-
### Spring
29-
- [AOP](./spring/aop/)
30-
- [Spring Cache with AOP](./spring/cacheable/)
31-
32-
### MSA
33-
- [Saga 패턴](./saga/)
34-
35-
## 🔬 Experiment
36-
- [Spring으로 이것저것](https://github.com/ruthetum/my-spring)
37-
38-
- [DB 성능 비교 테스트 - MySQL vs MongoDB vs Redis](./db/db-comparison)
39-
40-
- [Spring 캐시를 이용한 캐시 적용 성능 비교](./spring/cacheable/)
41-
42-
- [HTTP vs MQ - Kafka 활용](./kafka/http-vs-mq)
43-
44-
- [MSA에서 모든 비즈니스 규칙들을 실시간으로 일관성을 맞춰줘야 할까?](./kafka/%EB%B9%84%EC%A6%88%EB%8B%88%EC%8A%A4%EC%9D%BC%EA%B4%80%EC%84%B1%2B%EB%B9%84%EB%8F%99%EA%B8%B0%ED%86%B5%EC%8B%A0)
45-
46-
- [Spring MVC vs WebFlux](./reactive/mvc%20vs%20webflux)
47-
48-
- [다중 채팅 서버 만들기 with Redis](./redis/chatting-with-redis)
3+
## 💾 Contents
4+
- [WIP] Armeria
5+
- AWS
6+
- [AWS KMS](./aws/kms.md)
7+
- [CI/CD](./cicd/readme.md)
8+
- [AgroCD](./cicd/agrocd.md)
9+
- [Github Actions](./cicd/github-actions.md)
10+
- clean-architecture
11+
- [만들면서 배우는 클린 아키텍처](./clean-architecture/만들면서-배우는-클린-아키텍처)
12+
- [CQRS](./cqrs/README.md)
13+
- Database
14+
- [MySQL / Mongo / Redis 성능 비교 w. Spring](./db/db-comparison)
15+
- [MySQL / Mongo / Redis Docker compose 예시 소스](./db/docker-images)
16+
- [Real MySQL](./db/real-mysql)
17+
- [Isolation Level](./db/isolation-level)
18+
- [MySQL IN 절 안에 있는 순서대로 정렬하기](./db/query/mysql_in_절_안에_있는_순서대로_정렬하기.md)
19+
- [디자인 패턴](./design-patterns/README.md)
20+
- Docker
21+
- [Docker 기본 명령어](./docker/command.md)
22+
- [Effective Java](./effective-java/README.md)
23+
- ELK
24+
- [ELK Overview](./elk/contents/overview.md)
25+
- [WIP] Fixture Monkey
26+
- gRPC
27+
- [WIP] [gRPC Overview](./grpc/readme.md)
28+
- HTTP
29+
- [Cache-Control](./http/cache-control.md)
30+
- **[WIP]** [istio](./istio/readme.md)
31+
- Jaeger
32+
- [Jaeger Overview](./jaeger/README.md)
33+
- [Jaeger in Action](https://github.com/wilump-labs/jaeger-in-action)
34+
- Jenkins
35+
- [Jenkins Overview](./jenkins/README.md)
36+
- JS
37+
- [Babel, Webpack, Polyfill](./js/readme.md#babel-webpack-polyfill)
38+
- **[WIP]** [Kafka](./kafka/readme.md)
39+
- **[WIP]** [Kubernetes](./kubernetes/readme.md)
40+
- [NATS](./nats/README.md)
41+
- [Netty](./netty/README.md)
42+
- Network
43+
- [NAT](./network/NAT.md)
44+
- nginx
45+
- [nginx vs apache](./nginx/compairson-apache-nginx.md)
46+
- nGrinder
47+
- [nGrinder 기본 사용법](./ngrinder/usage.md)
48+
- [대기열 시스템](./qms/README.md)
49+
- [Reactive Programming](./reactive/README.md)
50+
- [mvc vs webflux](./reactive/mvc-vs-webflux)
51+
- [CompletableFuture](./reactive/completable-future)
52+
- Redis
53+
- [Redis 야무지게 쓰기](./redis)
54+
- [Redis vs Memcached](./redis/compairson-redis-memcached.md)
55+
- [Redis Transaction](./redis/redis-transaction)
56+
- [Saga 패턴](./saga/readme.md)
57+
- Spring
58+
- [AOP](./spring/aop/)
59+
- [Spring Cache](./spring/cacheable/)
60+
- [Spring Cloud 맛보기](./spring/spring-cloud)
61+
- [MSA 환경에서 REST DOCS 적용하기](./spring/restdocs/mas-환경에서-rest-docs-적용하기.md)
62+
- [TDD](./tdd/README.md)
63+
- [Spring Boot TDD](./tdd/spring-boot)
64+
- [테스트 주도 개발 시작하기](./tdd/테스트-주도-개발-시작하기)

design-patterns/README.md

Lines changed: 72 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,96 @@
11
# Design Patterns
2-
```
3-
- Head First Design Patterns을 읽고 정리/실습한 내용입니다.
4-
- 추가적인 패턴별 설명은 아래 reference를 읽어주세요.
5-
```
2+
- 특정 문맥에서 공통적으로 발생하는 문제에 대해 쓰이는 재사용 가능한 해결책
3+
- 목적별로 일정한 패턴이 제시되어 있음
4+
- 완전한 정답이 되는 알고리즘과 달리 현재 상황에 맞춰 최적화된 패턴을 결정하여 사용하는 것이 좋음
5+
- 대표적으로 구체화된 디자인 패턴은 GoF(Gang of Four)에서 제시한 23개의 패턴이 있음
66

7-
## 목차
8-
| Chapter | Pattern | Description | Directory | Classification |
9-
|:-------:|:------------------------------------------------------------:|:-----------------------------------------------------------------------------------------------|:--------------------------------------------------:|:------------------:|
10-
| 1 | 전략(Stratergy) | 동일 계열의 알고리즘군을 정의하고 캡슐화하여 상호 교환이 가능하게 함 | [ch1-strategy](./ch1-strategy) | 행동(행위) 패턴 |
11-
| 2 | 옵저버(Observer) | 객체 상태가 변할 때 관련 객체들이 그 변화를 전달받아 자동으로 캐싱 | [ch2-observer](./ch2-observer) | 행동(행위) 패턴 |
12-
| 3 | 데코레이터(Decorator) | 주어진 상황에 따라 객체에 다른 객체를 덧붙임 | [ch3-decorator](./ch3-decorator) | 구조 패턴 |
13-
| 4 | 팩토리 메서드(Factory method)<br>추상 팩토리(Abstract factory) | 객체 생성을 서브클래스로 분리하여 위임(캡슐화)<br>구체적인 클래스를 지정하지 않고 인터페이스를 통해 연관되는 객체들을 보여줌 | [ch4-factory](./ch4-factory) | 생성 패턴 |
14-
| 5 | 싱글턴(Singleton) | 한 클래스마다 인스턴스를 하나만 생성하여 어디서든 참조 | [ch5-singleton](./ch5-singleton) | 생성 패턴 |
15-
| 6 | 커맨드(Command) | 요청을 객체의 형태로 캡슐화하여 재사용하거나 취소 | [ch6-command](./ch6-command) | 행동(행위) 패턴 |
16-
| 7 | 어댑터(Adpater)<br>파사드(Facade) | 클래스의 인터페이스를 어떤 클래스에서든 이용할 수 있도록 변환<br>서브 시스템에 있는 인터페이스 집합에 대해 통합된 인터페이스 제공 | [ch7-adapter-facade](./ch7-adapter-facade) | 구조 패턴 |
17-
| 8 | 템플릿 메서드(Template method) | 상위 클래스는 알고리즘의 골격만을 작성하고 구체적인 처리를 서브 클래스로 위임 | [ch8-template-method](./ch8-template-method) | 행동(행위) 패턴 |
18-
| 9 | 반복자(Iterator)<br>복합(Composite) | 컬렉션 구현 방법을 노출하지 않으면서 모든 항목에 접근할 수 있는 방법을 제공<br>객체들의 관계를 트리 구조로 표현하는 방식으로 복합 객체와 단일 객체를 구분없이 다룸 | [ch9-iterator-composite](./ch9-iterator-composite) | 행동(행위) 패턴<br>구조 패턴 |
19-
| 10 | 상태(State) | 객체의 상태에 따라 동일한 동작을 다르게 처리 | [ch10-state](./ch10-state) | 행동(행위) 패턴) |
20-
| 11 | 프록시(Proxy) | 실제 기능을 수행하는 객체 대신 가상의 객체를 사용해 로직의 흐름을 제어 | [ch11-proxy](./ch11-proxy) | 구조 패턴 |
21-
| 12 | 복합(Compound) | 두 개 이상의 패턴을 결합하여 일반적으로 자주 등장하는 문제들에 대한 해법을 제공하는 패턴 | [ch12-compound](./ch12-compound) | - |
22-
| 13 | 실전에서의 디자인 패턴 | - | [ch13-patterns](./ch13-patterns) | - |
23-
| 14 | 기타 패턴(브리지, 빌더, 역할 사슬, 플라이웨이트, 인터프리터, 미디에이터, 메멘토, 프로토타입, 비지터) | - | [ch14-etc](./ch14-etc) | - |
7+
## 디자인 패턴의 장점
8+
- 개발자 간의 원활한 협업이 가능
9+
- 소프트웨어의 구조를 파악하기 용이함
10+
- 재사용을 통해 개발 시간 단축
11+
- 설계 변경이 있을 경우 비교적 원활하게 조치가 가능
2412

13+
## 디자인 패턴의 단점
14+
- 객체지향적 설계를 고려하여 진행해야 함
15+
- 초기 투자 비용이 많이 들어감
2516

2617
## GoF 디자인 패턴
27-
#### 목적에 따른 분류
28-
- 생성 패턴, 구조 패턴, 행동 패턴 총 3가지로 구분됨
18+
### 목적에 따른 분류
19+
- <strong>생성 패턴, 구조 패턴, 행동 패턴</strong> 총 3가지로 구분됨
2920
- 각 패턴이 어떤 작업을 위해 생성되는 것인지에 따른 구분
3021

3122
|생성 패턴|구조 패턴|행동 패턴|
3223
|---|---|---|
33-
|Abstract Factory<br>Builder<br>Factory Method<br>Prototype<br>Singleton|Adapter<br>Bridge<br>Composite<br>Decorator<br>Facade<br>Flyweight<br>Proxy|Chain of Responsibility<br>Command<br>Interpreter<br>Iterator<br>Mediator<br>Memento<br>Observer<br>State<br>Stratergy<br>Template Method<br>Visitor|
24+
|Abstract Factory<br><strong>Builder</strong><br>Factory Method<br>Prototype<br><strong>Singleton</strong>|<strong>Adapter</strong><br>Bridge<br>Composite<br>Decorator<br>Facade<br>Flyweight<br>Proxy|Chain of Responsibility<br>Command<br>Interpreter<br>Iterator<br>Mediator<br>Memento<br><strong>Observer</strong><br>State<br><strong>Stratergy</strong><br>Template Method<br>Visitor|
3425

35-
#### 생성 패턴
26+
### 생성 패턴
3627
- 생성 패턴은 객체의 생성과 관련된 패턴
3728
- 특정 객체가 생성되거나 변경되어도 프로그램 구조에 영향을 최소화할 수 있도록 유연성 제공
3829

39-
#### 구조 패턴
30+
|생성 패턴|의도|
31+
|---|---|
32+
|추상 팩토리(Abstract Factory)|구체적인 클래스를 지정하지 않고 인터페이스를 통해 연관되는 객체들을 보여줌|
33+
|빌더(Builder)|객체의 생성과 표현을 분리하여 객체를 생성|
34+
|팩토리 메서드(Factory Method)|객체 생성을 서브클래스로 분리하여 위임(캡슐화)|
35+
|프로토타입(Prototype)|원본 객체를 복사하여 객체를 생성(클론)|
36+
|싱글톤(Singleton)|한 클래스마다 인스턴스를 하나만 생성하여 어디서든 참조|
37+
38+
### 구조 패턴
4039
- 구조 패턴은 프로그램 내 자료 구조나 인터페이스 구조 등 프로그램 구조를 설계하는데 사용되는 패턴
4140
- 클래스나 객체를 조합하여 더 큰 구조를 만들 수 있게 해줌
4241

43-
#### 행동(행위 패턴)
42+
|구조 패턴|의도|
43+
|---|---|
44+
|어댑터(Adapter)|클래스의 인터페이스를 어떤 클래스에서든 이용할 수 있도록 변환|
45+
|브리지(Bridge)|구현부에서 추상층을 분리하여 각자 독립적으로 변형하고 확장할 수 있도록 함|
46+
|컴포지트(Composite)|객체들의 관계를 트리 구조로 표현하는 방식으로 복합 객체와 단일 객체를 구분없이 다룸|
47+
|데코레이터(Decorator)|주어진 상황에 따라 객체에 다른 객체를 덧붙임|
48+
|파사드(Facade)|서브 시스템에 있는 인터페이스 집합에 대해 통합된 인터페이스 제공|
49+
|플라이웨이트(Flyweight)|크기가 작은 여러 개의 객체를 매번 생성하지 않고 최대한 공유하여 사용하도록 메모리 절약|
50+
|프록시(Proxy)|실제 기능을 수행하는 객체 대신 가상의 객체를 사용해 로직의 흐름을 제어|
51+
52+
### 행동(행위 패턴)
4453
- 행동 패턴은 반복적으로 사용되는 객체들의 커뮤니케이션을 패턴화
4554
- 객체 사이에 알고리즘 또는 책임을 분배하는 방법에 대해 정의됨
4655
- 결합도를 최소화하는 것이 주 목적
4756

57+
|행동 패턴|의도|
58+
|---|---|
59+
|책임 연쇄(Chain of Responsibility)|요청을 받는 객체를 연쇄적으로 묶어 요청을 처리하는 객체를 만날 때까지 객체 Chain을 따라 요청을 전달|
60+
|커맨드(Command)|요청을 객체의 형태로 캡슐화하여 재사용하거나 취소|
61+
|인터프리터(Interpreter)|특정 언어의 문법 표현을 정의|
62+
|반복자(Iterator)|컬렉션 구현 방법을 노출하지 않으면서 모든 항목에 접근할 수 있는 방법을 제공|
63+
|중재자(Mediator)|한 집합에 속해있는 객체들의 상호작용을 캡슐화하여 새로운 객체로 정의|
64+
|메멘토(Memento)|객체가 특정 상태로 다시 되돌아올 수 있도록 내부 상태를 실제화|
65+
|옵저버(Observer)|객체 상태가 변할 때 관련 객체들이 그 변화를 전달받아 자동으로 캐싱|
66+
|상태(State)|객체의 상태에 따라 동일한 동작을 다르게 처리|
67+
|전략(Stratergy)|동일 계열의 알고리즘군을 정의하고 캡슐화하여 상호 교환이 가능하게 함|
68+
|템플릿 메서드(Template Method)|상위 클래스는 알고리즘의 골격만을 작성하고 구체적인 처리를 서브 클래스로 위임|
69+
|방문자(Visitor)|객체의 원소에 대해 수행할 연산을 분리하여 별도의 클래스로 구성|
70+
71+
---
72+
73+
> - 아래 내용은 Head First Design Patterns을 읽고 정리/실습한 내용입니다.
74+
75+
## 예제 코드
76+
| Chapter | Pattern | Description | Directory | Classification |
77+
|:-------:|:------------------------------------------------------------:|:-----------------------------------------------------------------------------------------------|:--------------------------------------------------:|:------------------:|
78+
| 1 | 전략(Stratergy) | 동일 계열의 알고리즘군을 정의하고 캡슐화하여 상호 교환이 가능하게 함 | [ch1-strategy](./ch1-strategy) | 행동(행위) 패턴 |
79+
| 2 | 옵저버(Observer) | 객체 상태가 변할 때 관련 객체들이 그 변화를 전달받아 자동으로 캐싱 | [ch2-observer](./ch2-observer) | 행동(행위) 패턴 |
80+
| 3 | 데코레이터(Decorator) | 주어진 상황에 따라 객체에 다른 객체를 덧붙임 | [ch3-decorator](./ch3-decorator) | 구조 패턴 |
81+
| 4 | 팩토리 메서드(Factory method)<br>추상 팩토리(Abstract factory) | 객체 생성을 서브클래스로 분리하여 위임(캡슐화)<br>구체적인 클래스를 지정하지 않고 인터페이스를 통해 연관되는 객체들을 보여줌 | [ch4-factory](./ch4-factory) | 생성 패턴 |
82+
| 5 | 싱글턴(Singleton) | 한 클래스마다 인스턴스를 하나만 생성하여 어디서든 참조 | [ch5-singleton](./ch5-singleton) | 생성 패턴 |
83+
| 6 | 커맨드(Command) | 요청을 객체의 형태로 캡슐화하여 재사용하거나 취소 | [ch6-command](./ch6-command) | 행동(행위) 패턴 |
84+
| 7 | 어댑터(Adpater)<br>파사드(Facade) | 클래스의 인터페이스를 어떤 클래스에서든 이용할 수 있도록 변환<br>서브 시스템에 있는 인터페이스 집합에 대해 통합된 인터페이스 제공 | [ch7-adapter-facade](./ch7-adapter-facade) | 구조 패턴 |
85+
| 8 | 템플릿 메서드(Template method) | 상위 클래스는 알고리즘의 골격만을 작성하고 구체적인 처리를 서브 클래스로 위임 | [ch8-template-method](./ch8-template-method) | 행동(행위) 패턴 |
86+
| 9 | 반복자(Iterator)<br>복합(Composite) | 컬렉션 구현 방법을 노출하지 않으면서 모든 항목에 접근할 수 있는 방법을 제공<br>객체들의 관계를 트리 구조로 표현하는 방식으로 복합 객체와 단일 객체를 구분없이 다룸 | [ch9-iterator-composite](./ch9-iterator-composite) | 행동(행위) 패턴<br>구조 패턴 |
87+
| 10 | 상태(State) | 객체의 상태에 따라 동일한 동작을 다르게 처리 | [ch10-state](./ch10-state) | 행동(행위) 패턴) |
88+
| 11 | 프록시(Proxy) | 실제 기능을 수행하는 객체 대신 가상의 객체를 사용해 로직의 흐름을 제어 | [ch11-proxy](./ch11-proxy) | 구조 패턴 |
89+
| 12 | 복합(Compound) | 두 개 이상의 패턴을 결합하여 일반적으로 자주 등장하는 문제들에 대한 해법을 제공하는 패턴 | [ch12-compound](./ch12-compound) | - |
90+
| 13 | 실전에서의 디자인 패턴 | - | [ch13-patterns](./ch13-patterns) | - |
91+
| 14 | 기타 패턴(브리지, 빌더, 역할 사슬, 플라이웨이트, 인터프리터, 미디에이터, 메멘토, 프로토타입, 비지터) | - | [ch14-etc](./ch14-etc) | - |
92+
4893
## Reference
49-
- 디자인 패턴별 설명 : https://github.com/ruthetum/study/wiki/Design-Pattern
5094
- https://refactoring.guru/design-patterns
5195
- https://msyu1207.tistory.com/entry/1%EC%9E%A5-%ED%97%A4%EB%93%9C%ED%8D%BC%EC%8A%A4%ED%8A%B8-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4-%EC%A0%84%EB%9E%B5-%ED%8C%A8%ED%84%B4
5296
- 소스 코드 내에 담겨진 readme의 설명은 위의 블로그를 참고해서 정리됐습니다.

0 commit comments

Comments
 (0)