일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- IDDD
- mongo
- spring-web
- spring caching
- 바운디드컨텍스트
- webframework
- java17
- armeria
- 애그리거트
- spring6
- 신입
- zuul
- ifkakao
- Conference
- kakao
- springboot
- spring scheduler
- Kotlin
- Spring
- Pay
- springcloud
- Redis
- ddd
- 값객체
- docker
- 반버논
- 개발자
- MongoDB
- MSA
- springboot3
- Today
- Total
목록분류 전체보기 (67)
Easy Understanding
새로운 버전의 HTTP 버전인 HTTP/3 가 이번 2022년 6월 6일에 국제 인터넷 표준화 기구에 표준으로서 등록되었다는 소식을 최근 팀 채널을 통해서 알게 되었습니다. 취준 시절 아래의 다람쥐가 그려져 있는 ‘HTTP 완벽 가이드’라는 책을 읽었는데, 이 책이 쓰여졌을 때는 HTTP/2가 최신 기술이다보니 가볍게만 다루고 있었습니다. 그래서 ‘HTTP/2는 아직까지는 널리 사용되고 있는 기술까지는 아니구나’ 라는 생각도 하고 있었던 차였습니다. 심지어 취업을 하고도 이 HTTP/2 와 관련된 스펙에 대해서 접해볼 일이 별로 없었던 것 같습니다. 물론 어플리케이션 레벨을 개발하는 입장에서 TCP, UDP, Http 같은 프로토콜을 직접 다뤄볼 기회가 얼마냐 있겠냐만, 그럼에도 불구하고 모든 통신이 이..
몽고 DB에 대한 기존 인식 몽고는 이미 굉장히 유명한 데이터베이스 중 하나이다. Redis와 더불어 NoSQL의 선두주자 같은 느낌으로, 들었을 때 모르는 사람은 별로 없을 것이다. 또한 Node.js 가이드들의 경우 간단하게 다룰 수 있어서인지 mongoose를 사용해서 express를 가르치는 경우도 많이 보았다. 하지만 Redis의 경우에는 이미 실무에서 널리 사용되고 있는 보편적인 기술이 되었지만, 몽고는 실제로 그러한가라고 물어보았을 때 아직 많지는 않은 것 같다. 혹여나 도입을 했다고 하더라도 서비스의 메인 데이터베이스로 사용하고 있는 사례가 많지는 않다. 물론 제대로 써본 적이 없다는 것이 몽고 DB에 대한 가장 큰 벽이었던 것 같다. "로그 수집이나 관계가 중요하지 않은 데이터에 선택적..
- 필요 개념: 상속, 컴포지션 - 활용도:사용할일이 많지는 않지만, 읽을 일이 많은 개념 - 난이도: 구조 자체는 심플하지만, 관련 기술이 복잡하다. - 패턴이 필요한 상황: 접근 제어, 메서드 기능 추가 다양하게 활용 가능 프록시의 구현 방법은 데코레이터 패턴과 비슷한 면이 많다. interface A { void doSomething(); } class AImpl implements A { public void doSomething(){ ... } } 이런 간단한 인터페이스와 클래스가 있다고 하자. 이 doSomething() 바깥에서 특수한 처리를 하고 싶다면 (누가 요청했는지 확인해서 막는다든지, 로깅을 하고 싶다든지 정말 다양한 이유로) 이렇게 처리하면 된다. class AProxy imp..
이번엔 3가지 패턴을 한 번에 정리한다. 생각보다 간단하고 활용성이 클 것 같지 않아서 정리하다보니 내용이 짧아졌고 그래서 합치게 되었다. 반복자 패턴 - 필요 개념: 컬렉션 - 활용도:필요하다면.. - 난이도: 간단 - 패턴이 필요한 상황: 컬렉션을 통합적으로 사용할 필요가 있을 때 모든 언어에는 여러 컬렉션이 존재한다. 자바의 경우는 다음과 같은 것이 대표적이다. List list; String[] arr; Map map; Set set; 그런데 여러 컬렉션들을 사용할 때 클라이언트에서는 이걸 같은 코드로 사용하고 싶을 때가 있다. 다양한 인터페이스 구현체들을 사용할 때 세부 구현체를 몰라도 되는 것처럼, 컬렉션도 비슷하게 처리할 수 있으면 좋은데, 그 대표적인 명세가 바로 Iterator 이다...
- 필요 개념: 간단한 상속, 추상 클래스 - 활용도:가끔 - 난이도: 간단 - 패턴이 필요한 상황: 코드의 큰 틀만 잡아주고,세부 구현은 클라이언트에게 맡기고 싶을 때 코드를 작성하다보면 항상 특정 Use-Case라는 것이 존재하고, 비즈니스에서는 이게 꽤나 복잡하게 엮일 수가 있다.다음은 하나의 흐름의 예시이며, 이런 코드야 비일비재한 코드다. 1. 데이터베이스에서 불러오기 2. 데이터 가공 처리 3. 데이터 로깅 4. 데이터 변환 5. 다시 저장 6. 이벤트 발행 7. 이런 일련의 작업들을 트랜잭션 처리 그런데 만약 이런 로직들에 대해서 여러 구현체에서 같은 flow를 따라야 한다고 해보자. 비디오나 소설, 웹툰 등의 서비스를 제공하는 곳에서는 분명 종류는 다르지만 공통의 Flow로 무엇인가를 ..
파사드 패턴 - 필요 개념: 상속이나 컴포지션과는 상관 없긴 함 - 활용도:가끔 - 난이도: 간단 - 패턴이 필요한 상황: 클라이언트 코드가 너무 길고 복잡해질 때 바로 스프링의 예시로 들어가보자. 스프링에서 컨트롤러를 작성할 때 여러 구현 철학들이 있지만 난 이런 식의 구현을 별로 좋아하지 않는다. 그래서 좀 정리를 해보고자 한다. @RestController @RequiredArgsConstructor public class AggregationController { private final UserService userService; private final PaymentService paymentService; private final OrderService orderService; priva..
어댑터 패턴 - 필요 개념: 컴포지션 - 활용도:가끔 - 난이도: 구현 자체는 간단함 - 패턴이 필요한 상황: 현재 개발한 코드와 비슷한 기능을 가진 다른 코드를 연동해야 할 때 어댑터 패턴은 그냥 사용하고 싶다고 사용할 수 있는 패턴은 아니다. 그 전제조건은 코드 자체가 오래되고 다양한 사람들이 개발하면서 쌓여온 소스코드여야 한다. 애초에 이 패턴은 이런 상황에 사용하는 것이다. - 새로운 api를 개발하는데 비슷한 이전 코드가 존재하기는 한다. 그런데 뭔가 매개변수도 다르고 구조도 다르다. - 여러 사람이 개발을 하는데 어쩌다보니 각자의 코드가 각자의 인터페이스를 갖고 있고 이게 도저히 수정할 수가 없는 구조다. 어댑터 패턴을 적용하는 것보다 더 좋은 것은 어댑터 패턴을 이용하지 않는 것이다. 인터..
싱글턴 패턴 - 필요 개념: 멀티스레딩 - 활용도:빈번함 - 난이도: 쉬움 - 패턴이 필요한 상황: 어플리케이션 내에 하나의 객체만 필요할 때 사용 일반적으로 스프링 프레임워크를 사용한다면 싱글턴 패턴을 직접 구현할 일은 없다. 게다가 웹에서는 대부분의 객체가 Request 라는 생명주기를 가지고 생성되곤 한다. 즉 하나의 요청에 하나의 객체가 생성이 되고, 동시에 여러 개가 생길 수가 있는 것이다. 그러나 모든 코드에서 한 객체를 동시에 봐야하는 경우가 있는데 이럴 때 사용해야 하는 것이 싱글턴 패턴이다. 싱글턴 객체가 내부에 프로퍼티 등의 상태를 가지고 있지 않다면 딱히 문제는 없지만, 상태를 가진 객체라면 멀티스레딩에서 동시성 문제가 반드시 발생하게 된다. 이것 때문에 싱글턴 패턴의 가이드에서는 ..