본문 바로가기

전체 글

(291)
[디자인패턴] 팩토리 패턴들 팩토리 관련 패턴은 대략 3개로 나눌 수 있다. 단순 팩토리 패턴: 객체 생성 로직을 캡슐화하여 클라이언트와의 결합도를 낮춘다. 팩토리 메서드 패턴: 객체 생성에 대한 인터페이스만 정의하고, 구체적인 생성은 서브 클래스에게 위임한다. 추상 팩토리 패턴: 함께 사용되거나 연관된 패밀리 객체 군을 생성하는 인터페이스를 정의한다. 각 객체를 생성하기 위한 인터페이스(메서드 각각)들을 정의할 때 팩토리 메서드나 프로토타입 패턴이 사용될 수 있다. 팩토리 메서드 패턴과 추상 팩토리 패턴의 경우 DIP를 중점적으로 생각하자... 단순 팩토리 패턴 객체를 생성하는 로직을 클라이언트로부터 숨겨 클라이언트와 객체 생성 책임 사이의 결합도를 낮추기 위한 패턴이다. 버튼 클래스의 서브 클래스들 중 하나를 선택하는 상황을 생..
정처기 필기 후기 CBT 기반에 문제 은행 시스템으로 구성되는지, 교재에서 봤던 문제들이 상당히 많이 등장했다. 완전 동일한 문제도 상당히 많았던 것 같다. 5개 분야 100 문항으로 구성되긴 하지만, 한 문제를 푸는데 30초도 걸리지 않는 경우가 많아서 30분 정도만 풀어보고 제출했다. 순서대로 5, 3, 3, 1, 1 문제를 틀려서 87점이 나왔다. CS 도메인을 두루두루 복습하는 목적으로 준비하기는 했지만 합격 난이도만 따지면 상당히 쉬운 것 같다. 개인적으로 정처기가 의미 없다는 말이 무슨 뜻인지 와닿는 부분이었는데, 전공생 입장에서는 학교 수업만 적당히 들어 두면 1과목 소프트웨어 공학(암기 부분이 상당히 많음) 제외 간단하게 복습하는 수준으로 준비할 수 있다는 생각이 든다. 다만 개념을 모르면 애매모호하게 다가..
[프로그래머스] 마법의 엘리베이터 https://school.programmers.co.kr/learn/courses/30/lessons/148653 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 마법의 엘리베이터는 0층 이상의 값을 가지며, 한번에 10c (c >= 0) 층(1, 10, 100 ... 위 아래 다 가능)씩 움직일 수 있다. 한번 움직이는데 마법의 돌 하나가 필요할 때 최소 개수로 0층까지 이동하는 것이 이번 문제의 목표다. 1 600 -(4)> 1000 -(1)> 0이기 때문이다. 이때 매 순간마다 10c 자리만 생각해보자. 각 자리에서 올림 등 로직을 전부 처리하고 나..
[nextjs13] fetch API 무작정 fetch 메서드를 써보다가 뭔가 이상해서 공식 문서를 찾아봤다. https://nextjs.org/docs/app/api-reference/functions/fetch Functions: fetch | Next.js Using App Router Features available in /app nextjs.org nextjs 13 버전에서는 getStaticProps, getServersideProps 같은 불편한 표기가 사라졌다. 서버로부터 데이터를 가져오는 방식이 fetch API를 경유하도록 일관된 방식으로 변경되었으며, cache / next 옵션을 통해 기존 함수에 대응되는 기능을 구현할 수 있도록 변했다. force-cache / default: getStaticProps에 대응 no..
[디자인패턴] Observer 패턴 설명 객체 사이에 1 대 N 의존 관계를 정의하여, 대상(subject) 객체의 상태 변화가 의존 객체(observers)에게 통지되고, 상태를 자동으로 업데이트한다. 객체 사이의 데이터 일관성을 유지하고 싶지만 결합도를 높이고 싶지는 않다. 예를 들어 데이터를 관리하는 클래스와 표를 보여주는 클래스(바, 파 차트, 표 등)들이 있을 때, 데이터가 변동될 때마다 표의 모습을 바꾸고 싶다고 생각해보자. 일단 데이터와 표를 담당하는 클래스가 분리되어 있으므로, 데이터를 시각화하기 위해서는 데이터 클래스가 표 클래스에게 자신의 데이터를 지속적으로 제공할 필요가 있다. 이때 각 표를 위한 클래스들의 인터페이스가 동일하다는 보장은 없으므로 단순히 구현한다면 데이터 클래스 내부에 업데이트를 요구하는 클래스들의 레퍼..
[디자인패턴] Chain Of Responsibility 패턴 설명 메시지를 보내는 객체와 해당 요청을 처리하는 객체 사이의 결합도를 낮춘다. 하나의 요청이 들어올 때 연결된 객체 리스트 사이를 이동하면서 해당 요청을 처리할 수 있는 객체까지 전달되어 처리한다. 요청을 처리하는 객체는 전달된 요청을 자신이 처리할 수 있다면 처리하고 아니면 자신이 알고 있는 다음 객체에게 넘긴다. 이처럼 책임 객체의 동작 방식이 체인처럼 연결되어 있어 책임 체인 패턴이라는 이름이 붙어 있다. 웹 애플리케이션 서버를 만들고 있는 상황을 생각해 보자. 외부에서 들어온 요청은 handleRequest(request, response)라는 단일 함수 내에서 분류되어 처리된다. 이때 HTTP 헤더는 현재 사용되고 있는 메서드는 무엇인지, 원하는 데이터 타입은 무엇인지 뿐만 아니라 수많은 정보..
[디자인패턴] Proxy 패턴 설명 proxy라는 단어는 "대리" 라는 의미를 가지고 있다. 이름에서 알 수 있듯이 proxy 패턴은 원 객체에 대한 접근을 제어하기 위해 대리자 역할을 수행한다. 프록시 객체는 원 객체에 대한 접근을 조절하거나 생성 및 소멸을 책임질 수 있으며, 원 객체에게 전달될 요청을 받아 넘기기 전에 해당 데이터를 이용하여 여러가지 동작을 추가적으로 취할 수 있으므로 간단한 로깅부터 시작하여 접근 제어, 캐싱 등 사용 방법이 매우 다양할 수 있는 것이 특징이다. gof 책에서는 다음과 같은 활용 예시를 제시하고 있다. 원격지 프록시(remote proxy): 서로 다른 주소 공간에 존재하는 객체를 가리키는 객체로, 프록시 객체 자체는 로컬에 존재한다. 로컬의 프록시 객체는 네트워크 통신을 통해 원격의 실제 객체..
[docker] restart policy https://docs.docker.com/config/containers/start-containers-automatically/ Start containers automatically docs.docker.com docker 옵션 중 컨테이너가 종료되었을 때 어떻게 반응할지 지정하기 위한 'restart' 옵션이 존재한다. 서버의 경우 어떤 오류가 발생하더라도 계속 활성화된 상태를 유지해야 하는데, 이를 위해 현재 옵션을 지정할 수 있다. "no": 컨테이너를 재시작하지 않는다. 기본 옵션. 큰따옴표가 붙는 이유는 yml 파일에서 "no"가 false을 의미하기 때문 on-failure[:max-retries]: 컨테이너가 비정상적으로 종료되었을 때 ( exit code != 0 일 때 ) 최대 ma..