본문 바로가기

전체 글

(53)
Facade 패턴 Facade Patternstructural design pattern that provides a simplified interface to a library, a framework, or any other complex set of classesrefactoring.guruProblem라이브러리나 프레임워크를 이용해 코드를 작성한다고 해보자. 이런 경우 보통은 객체를 직접 초기화하고, 객체의 의존성을 직접 관리하고, 호출 순서까지 신경써야 한다.이렇게 되면 내가 작성하려고 하는 비즈니스 로직이 3rd party 라이브러리와 강하게 결합되게 되고, 코드릴 이해하거나 유지보수하기 어렵게 만든다.SolutionFacade 패턴은 많은 구성 요소를 가진 subsystem에 간단한 인터페이스를 제공하는 클래스..
Flyweight 패턴 Flyweight Patternfit more objects into the available amount of RAM by sharing common parts of state between multiple objects instead of keeping all of the data in each objectrefactoring.guruhead first design patterns 서적Problem인스턴스가 매우 많이 생성될 때, 인스턴스 생성 비용이 높은(하지만 모든 인스턴스가 공유하는 uniqueState) 필드가 있다면, 해당 필드는 공유하고 반복되는 state는 cache를 하면 메모리 절약 가능위 예시에서는 20KB를 차지하는 sprite는 공유하고, 반복적으로 생성되어 각 인스턴스에 할당되..
Observer 패턴 Observer Patternnotify multiple objects about any events that happen to the object they're observingrefactoring guruhead first design patterns 서적UMLPublishersubscribers 리스트를 갖고 있고, subscribe() / unsubscribe() 메서드를 통해 관리상태가 변경되면 subscribers 각각에 대해 변경된 상태를 알려주는 notifySubscribers() 메서드를 가짐SubscriberSubscriber interface는 Publisher가 notifySubscribers() 메서드에서 호출할 update() 메서드를 선언ConcreteSubscribersSub..
Decorator 패턴 Decoratorattach new behaviors to objects by placing these objects inside special wrapper objects that contain the behaviors.참고자료refactoring.guruhead first design patterns 서적UMLClient 여러 데코레이터로 wrapping하여 추가 작업(concrete decorator에서 정의한) 실행 가능Component > wrappers and wrapped objects를 위한 인터페이스나 추상 클래스Concrete Component 실제로 wrapped 되는 subclass로, 기본 기능에 해당Base Decorator > wrapping 시킬 object의 상위 인터페이스..
Strangler 패턴 Strangler Pattern이 글은 다음 글(Micro service architecture for the legacy codebase)을 번역하였습니다. 새로운 기능과 기능이 도입되면 application의 복잡성이 극적으로 증가하고 코드를 유지보수하거나 새로운 기능을 추가하는 것이 더 어려워집니다. 이러한 application은 Big Ball of Mud가 됩니다. 팀은 이렇게 복잡한 application을 유지보수하기 위해서 계속해서 노력해야 하고, 누군가는 새로운 기술이나 hosting, 아키텍쳐 패턴으로 대체할 것을 제안하게 됩니다. 그런데 전체 솔루션을 대체하는 것은 매우 어렵습니다.업계에서는 microservice, serverless architecture라는 유행어가 있어 왔습니다...
랜딩 페이지에서 문의 글 이메일로 전송하기 계기1인 사업을 하시는 대표님이 자사몰을 cafe24를 통해서 만드셨는데, 잘 안되는 부분이 있어서 나에게 문의를 하였다. 대학원에서 인연이 된 분이셔서 자사몰을 만들 때 다소의 도움을 드린 부분이 있어 유지보수(?) 차원에서 도움을 드리게 된 것이다. 개발이라기 보다는 cafe24 서비스 툴을 어떻게 활용해야 하는지, provider에서 제공하지 않는 기능을 어떻게 추가할 수 있는지에 대한 문제를 해결해드리는 것이 이번 미션이었다. cafe24 자사몰 이용기본적으로 cafe24에서는 상품 분류 및 결제 시스템, 홈페이지 내 진열과 관련된 ui 기능들과, 기타 문의사항 관련된 게시판들을 기본적으로 제공한다. 아마 무료버전이라 제한적인 기능을 제공하고 있는 것으로 생각되었다. 내가 도움드린 부분은 다음의 ..
Toss Slash 24 - 대규모 사용자 기반 서비스 운영 - (2) Toss Slash 24 - 대규모 사용자 기반 서비스 운영 - (1)이전 글에서 toss slash24에서 인상 깊었던 세션에 대해서 글을 적었었는데, 이를 실제로 간단한 코드로 구현해보고자 한다. 전체 세션 내용을 모두 적용하기에는 무리가 있어, 전체 중 '장애대응' 부분에 한해서 살펴보고자 한다.핵심은 Coordinator 서버를 두어 api 제공기관 시스템 트래픽을 자동으로 제어하고자 하는 것이다.기존 resilience4j를 사용했을 때는 서버 단위로 서킷 브레이커가 적용되어 차단 메커니즘에 왜곡이 있어, 전체 인스턴스 단위로 서킷 브레이커를 적용하자는 취지다. 추가하여 canary 배포 방식에 맞춰 처음과 끝 인스턴스 2대를 master 서버로 설정해 api 호출이 가능한지 지속 체크해준다.배..
json 역직렬화 성능 측정(feat. jackson, gson, JSONObject) - 2 1. json 역직렬화(feat. jackson)2. json 역직렬화 성능 측정(feat. jackson, gson, JSONObject)개요저번 글에서 jackson이 역직렬화를 어떻게 수행하는지 메서드 콜 스택을 뜯어 소스코드를 직접 살펴보며 알아보았다. 이 때 한 가지 의문점이 있었는데, 정말 성능적인 차이가 있는 것이냐는 문제다.일반적인 설명으로는 jackson이 streaming api를 이용해서 데이터를 메모리에 모두 올려두지 않고 token('{', ':' 등의 구분자를 토큰으로 명명해둠)로 메모리에만 올려서 해석한 뒤에 flush 시켜서, 성능적으로 더 우위가 있다고 말한다. 하지만 'jackson이 성능적으로 정말 이점이 있는가?'에 대해서는 따져볼 필요가 있다고 판단했다.jmhJMH(..