플라이웨이트 패턴의 개념플라이웨이트 패턴 (Flyweight Pattern)은 공유를 위해 사용되는 패턴으로, 객체를 재사용해서 메모리를 절약하기 위한 목적의 디자인 패턴이다. 이 때 객체는 재사용되어야 하므로 공유되는 객체는 불변이어야 한다. 불변 객체가 아니라면 어떤 코드가 플라이웨이트 객체를 임의로 수정했을 때 그 객체를 공유하고 있는 다른 코드에 영향을 미치기 때문이다. (이는 싱글톤과도 비슷하다) 시스템에 많은 수의 동일한 불변 객체가 있다면 이 패턴을 사용해서 객체를 플라이웨이트로 설계하고 메모리에 하나의 인스턴스만 보관하여 메모리를 절약할 수 있다. 꼭 동일한 객체가 아니더라도 유사도가 높은 객체에 대해 동일한 필드를 추출해서 플라이웨이트로 설계할 수도 있다. 이 때 변하지 않는 불변 속성은..
어댑터 패턴의 개념 한국에서 사용하던 플러그를 외국에서도 사용하려면 플러그 모양을 바꿔주는 어댑터가 필요하다. 이와 비슷하게, 디자인 패턴에서의 어댑터 패턴도 어떤 인터페이스를 클라이언트에서 요구하는 형태로 적응시키는 역할을 한다. 어떤 새로운 라이브러리를 사용해야 하는데 그 인터페이스가 기존의 인터페이스와 다를 경우, 새 인터페이스를 기존의 인터페이스에 적응시켜주는 클래스를 만들면 된다. 클래스 어댑터와 객체 어댑터 어댑터 패턴에는 클래스 어댑터, 객체 어댑터라는 두 가지 방식이 있다. 클래스 어댑터는 상속 관계를 사용한 방식이고, 객체 어댑터는 합성 관계를 사용한 방식이다. 헤드퍼스트 디자인 패턴에도 나오는 유명한 예시인, Duck과 Turkey의 예제로 설명해보겠다. 합성 기반의 객체 어댑터 int..
들어가기 앞서 본 포스팅은 해당 글을 번역 한 글입니다. 어느 정도의 의역이 있을 수 있습니다. https://thenewstack.io/unit-tests-are-overrated-rethinking-testing-strategies/ Unit Tests Are Overrated: Rethinking Testing Strategies A successful and continuous testing strategy demands a careful balance between various types of tests. This article explains how. thenewstack.io 단위 테스트는 과대평가되었습니다: 테스트 전략 다시 생각하기 성공적이고 지속적인 테스트 전략을 위해서는 다양한 유형..
들어가기 앞서 해당 글은 2023년 3월 16일, 회사 워크샵에서 발표했던 DevOps로 일상 속 불편함 개선하기 세미나의 대본과 자료를 '아카이브 겸' 하여 거의 그대로 가져왔습니다. 따라서 문체가 발표 톤인 점 양해 바랍니다~~ DevOps로 일상 속 불편함 개선하기 다들 Redmine 잘 사용하고 계신가요? 혹시 Redmine에 대해 처음 들어보실 신입 분들을 위해 Redmine에 대한 간단한 소개를 해드리자면, Redmine은 저희 회사에서 사용 중인 프로젝트 이슈 관리 시스템입니다. 그런데 사실 저는 이 Redmine을 쓸 때 불편한 부분이 되게 많았습니다. 로그인도 종종 풀리기도 하고, 매번 이메일로 제보되는 장애 건을 Redmine에 옮겨 적는 것도 귀찮았고, 이슈 번호로 해당 이슈 페이지에..
들어가기 전 주의 이 글은 초보 백엔드 개발자가 정도(正道)가 무엇인지에 대해 가르침을 받지 못해 열심히 땅바닥에 헤딩해가며 도메인 주도 개발에 대해 이해해보려 하는 슬픔의 시간의 결과물로 혼자 생각해낸 교훈입니다... 만약 글의 내용 중 잘못된 부분이 있다면 언제든 바로잡는 댓글을 달아주시면 정말 감사드리겠습니다. 발단 때는 2023년.. Nest와 Prisma를 사용해서 열심히 백엔드 (사이드) 프로젝트를 하고 있었다. Prisma는 ORM이지만 JPA와는 다르게, 쿼리의 결과로 '엔티티의 모델 클래스'가 아니라 순수한 자바스크립트 오브젝트를 반환한다. 다시 말해, Rich Domain Model을 사용해 프로그래밍하기 위해서는 도메인 객체로서 엔티티 클래스를 활용할 수 있는 JPA와 다르게 Pris..
들어가기 앞서 해당 글은 다음 글을 번역한 글입니다. 도커를 사용할 때 피해야 할 안 좋은 습관들에 대해 소개합니다. 어느 정도의 의역이 있을 수 있습니다. https://dwdraju.medium.com/how-it-works-in-my-machine-turns-it-works-in-my-container-1b9a340ca43d How “It works in my machine” turns “It works in my container”? You had things running with occasional glitches and there was always an excuse “It works in my machine” as there is rarely identical… dwdraju.medium...
들어가기 앞서 지난 번에 작성했던 사내 세미나 - 테스트 코드에 대해 알아보자 세미나의 다음 편으로 진행한 세미나이다. Getter와 Setter의 사용을 금지하라 '리팩토링' 책의 저자로 유명한 Martin Fowler는 객체지향 생활체조 원칙을 소개하면서 다음과 같이 쓴 적이 있다. Getter, Setter의 사용을 금지하라 The ThoughtWorks Anthology 대체 왜 이런 얘기를 했을까? 이 이유에 대해 한번 알아보려고 한다. Getter와 Setter란? 들어가기 앞서, Getter와 Setter가 무엇인지부터 알아보면 좋을 것 같다. Getter와 Setter는 다른 객체가 자신의 속성에 직접 접근하는 것을 막기 위해 사용하는 메소드이다. Getter와 Setter를 통해 객체 안..
어떤 프로젝트는 yarn berry를 사용하고 있고, 어떤 프로젝트는 그냥 yarn 1.0을 이용해서 프로젝트를 진행하고 싶었다. 하지만 아무리 yarn set version classic, yarn set version berry, yarn set version stable 같은 명령어를 쳐봐도 yarn 버전이 변경은 전혀 되지 않고, 그냥 yarnyc.yml가 생기기만 해서 스트레스가 좀 많았다. 그래서 yarn 버전을 변경하는 방법을 찾아봤다. cd ~/ yarn set version classic (yarn berry 로 바꾸고 싶다면 yarn set version berry를 입력하면 된다) 이렇게 하니 잘 적용이 되었다. 하지만 전역적으로 적용이 되어서 그런지, 다른 프로젝트에서도 내가 설정한..
들어가기 앞서 산업기능요원으로 현재 회사에 입사한 지가 벌써 2년이 다 되어가고 있다. 하지만 회사 내 스택은 아직 낮은 수준에 있기 때문에, 내가 나가기 전에 회사에 내가 아는 것들을 좀 전파를 많이 해야겠다는 생각을 요새 참 많이 하고 있다. 그래서 세미나를 할 계획을 몇 개 세워놓았는데, 그 첫 번째 세미나는 테스트 코드에 대해 진행하게 되었다. 웹 개발은 프론트엔드와 백엔드로 나누어지며, 특히 우리 회사는 기괴하게도 프론트엔드에 많은 부분이 몰빵되어 있는 부분이 많다. (프론트엔드 쪽에 비즈니스 로직이 많다). 하지만 프론트엔드의 테스트 코드 작성에 대해 얘기하자니, 그에 필요한 사전 지식들이 너무나도 많았다. 그렇기 때문에 차라리 더 입문하기도 쉽고 설명하기도 좋을 것 같은 백엔드 테스트 전략에..
[원문: http://blog.cleancoder.com/uncle-bob/2014/11/24/FPvsOO.html ] Clean Coder Blog OO vs FP 24 November 2014 A friend of mine posted the following on facebook. He meant it as a troll; and it worked, because it irked me. There are many programmers who have said similar things over the years. They consider Object Orientation and Functional blog.cleancoder.com 들어가기 앞서 원문 작성일: 2014년 11월 24일 OO = Ob..