본문 바로가기

Programming18

Cron 표현식으로 주중 오전 8시 표현하기 서비스를 운영하다 보면 특정 요일, 특정 시간에 동일한 작업을 수행해야 하는 일이 생긴다. 예를 들어 외부 Open API를 조회하여 가져온 값을 데이터 베이스에 저장하는 내부 API가 있다고 하자. 사람이 직접 매일 오전 8시에 호출해야 한다면 1년 365일 동안 한 번도 까먹지 않을 수 있을까? 만약 운영에 치명적인 영향을 주는 값이라면 어느 누구도 담당자가 되고 싶지 않을 것이다. 감사하게도 이를 대신해 주는 서비스들이 있다. 그중 하나가 AWS가 제공하는 Amazon EventBridge를 사용하여 AWS Lambda 함수를 실행하도록 하는 것이다. AWS Lambda Lambda는 서버리스 컴퓨팅 플랫폼이다. 서버리스 컴퓨팅이란 서버가 없다는 말이 아니고 서버의 별다른 설정 및 관리를 하지 않아.. 2024. 2. 18.
디자인패턴 시리즈 14. 인터프리터 패턴 (Interpreter Pattern) 인터프리터 패턴 (Interpreter Pattern) 자주 등장하는 문제를 간단한 언어로 정의하고 재사용한다. 코드에 적용해보기 언어로 정의한다는 말은 약속을 한다는 뜻이다. 예를 들어 1 add 1은 피연산자: 1, 연산자: +, 피연산자: 1로 해석된다. add라는 명령을 사용했을 때 약속된대로 이를 해석하는 패턴이 바로 인터프리터 패턴이다. 대표적인 예시로 정규표현식이 있다. 일종의 패턴을 만들어 \d는 숫자를 의미하고, ^A는 A로 시작한다는 의미이다. 매번 문자열에서 어떤 패턴을 찾는 로직을 만드는 것보단 규칙을 정의하고 이를 해석하는 것이 더 낫다고 판단했기 때문이다. 다만 이를 남발하는 것은 좋지 않다. 인터프리터 패턴은 언어의 문법이 복잡해질수록 관리할 클래스가 많아져 오히려 복잡해진다... 2023. 1. 30.
대용량 데이터 처리를 위한 Message Broker 메세지 브로커 (Message Broker) 대용량 데이터 처리를 위한 미들웨어(서로 다른 어플리케이션이 서로 통신하는데 사용되는 소프트웨어)이다. 일반적으로 데이터를 3개의 어플리케이션들이 데이터를 주고 받으려면 3개의 커넥션이 필요하다. 어플리케이션이 2개만 더 늘어나도 커넥션은 10개로 늘어난다. 어플리케이션의 개수가 늘어날수록 커넥션의 개수도 기하급수적으로 늘어나게 된다. 이들의 연결 관계는 점점 복잡해지고 프로그램의 확장도 어려워진다. 어플리케이션들의 연결을 한 곳으로 모아 관리하는 소프트웨어가 있다면 구조는 더욱 간단해진다. 이것이 바로 미들웨어의 힘이다. 어플리케이션들의 사이에서 서로 통신할 수 있게 하고, 데이터를 주고 받을 수 있게 하는 분산 소프트웨어이다. 메세지 브로커도 미들웨어의 종.. 2023. 1. 30.
디자인패턴 시리즈 13. 오브젝트 풀 패턴 (Object Pool Pattern) 오브젝트 풀 패턴 (Object Pool Pattern) 재사용 가능한 객체들을 모아둔 객체 풀 클래스를 정의한다. 객체가 필요로 할 때 풀에 요청하고 사용한 후엔 반환한다. 코드에 적용해보기 오브젝트 풀 패턴의 특성을 보면 마치 플라이웨이트 패턴과 유사하다고 느껴진다. 플라이웨이트 패턴은 특정한 클래스의 인스턴스 하나로 여러 개의 가상 인스턴스를 제공한다. 즉, 같은 인스턴스를 여러 객체에서 공유한다는 의미에서의 재사용이다. 메모리 차지를 최소한으로 줄이기 위해 사용하는 것이 목적이다. 반면 오브젝트 풀 패턴은 객체를 재사용하지만 하나의 객체는 독점적으로 사용된다. 반드시 사용하고 있지 않은 객체만을 재사용하는 것이다. 인스턴스를 만들 때 비용이 많이 드는 경우에 사용할 수 있다. 데이터 베이스 연결같.. 2023. 1. 27.
디자인패턴 시리즈 12. 책임 연쇄 패턴 (chain-of-responsibility Pattern) 책임 연쇄 패턴 (chain-of-responsibility Pattern) 1개의 요청을 2개 이상의 객체에서 처리해야 할 때 사용하면 좋은 패턴이다. 코드에 적용해보기 요청을 처리하는 인터페이스를 정의하고 여러 개의 객체를 체인 형태로 연결하여 책임을 맡기는 형태이다. 각각의 객체들은 해당 요청을 처리하지 못하는 경우에 다음 체인으로 책임을 넘기게 된다. 예를 들면 고객의 소리함이라고 하는 서비스를 운영한다고 하자. 소리를 보내는 방법은 이메일을 보내는 것이다. 그런데 이 메일들을 살펴보면 크게 3가지 특징이 있다. 각각 서비스에 대한 불만을 얘기하는 메일, 특정 상품을 출시 해달라는 메일, 스팸 메일이다. 순서대로 CS팀, MD에게 메일을 처리하게 하고 스팸 메일은 삭제 처리해야 한다. 메일을 종류.. 2023. 1. 25.
디자인패턴 시리즈 11. 프로토타입 패턴 (prototype Pattern) 프로토타입 패턴 (prototype Pattern) 특정한 클래스의 인스턴스를 만들 때 자원과 시간이 많이 들거나 복잡할 때 사용하면 좋은 패턴이다. 코드에 적용해보기 어떤 제품을 만들어서 출시하기에 앞서 테스트를 위한 샘플을 만드는데 이를 프로토타입이라고 한다. 객체를 생성하는 게 복잡하거나 이미 비슷한 객체가 있는 경우에 프로토타입 패턴을 이용하여 원본 객체를 새로운 객체에 복사하여 사용할 수 있다. 일반적으로 원본 객체를 복사하기 위해 자바의 clone() 메소드를 사용한다. Cloneable 인터페이스를 구현하여야 사용할 수 있으므로 상속 받는다. 예시 코드에서는 getClone() 메소드를 직접 만들어 구현해보겠다. public interface Prototype { public Prototyp.. 2023. 1. 24.