본문 바로가기

전체 글43

Cron 표현식으로 주중 오전 8시 표현하기 서비스를 운영하다 보면 특정 요일, 특정 시간에 동일한 작업을 수행해야 하는 일이 생긴다. 예를 들어 외부 Open API를 조회하여 가져온 값을 데이터 베이스에 저장하는 내부 API가 있다고 하자. 사람이 직접 매일 오전 8시에 호출해야 한다면 1년 365일 동안 한 번도 까먹지 않을 수 있을까? 만약 운영에 치명적인 영향을 주는 값이라면 어느 누구도 담당자가 되고 싶지 않을 것이다. 감사하게도 이를 대신해 주는 서비스들이 있다. 그중 하나가 AWS가 제공하는 Amazon EventBridge를 사용하여 AWS Lambda 함수를 실행하도록 하는 것이다. AWS Lambda Lambda는 서버리스 컴퓨팅 플랫폼이다. 서버리스 컴퓨팅이란 서버가 없다는 말이 아니고 서버의 별다른 설정 및 관리를 하지 않아.. 2024. 2. 18.
i18n을 도입하여 다국어(국제화) 서비스 제공 다국어 지원 서비스 개발 국내뿐만 아니라 해외에서도 서비스를 운영한다면 다국어 제공이 필수적이다. '주문' 기능을 담당하는 버튼은 영어로 'Order', 일본어로 '呪文'라고 보여야 할 것이다. 이를 위해 각 국가별 웹 사이트를 만드는 것은 좋은 방법일까? '주문'이라는 기능이 다른 이름으로 대체된다면 모든 국가별 소스 코드를 수정해줘야 한다. 만약 놓치는 국가가 있다면 큰일이다. i18n (w. Java & Spring) 다국어 서비스를 제공하기 위해서 많은 개발자들이 i18n 라이브러리를 사용한다. 전체 이름은 internationalization(국제화)이며 맨 앞 i, 맨 뒤 글자 n 사이에 18글자가 있다는 의미로 i18n이라고 부른다. 대표적으로 React 진영에선 i18n-next, Angu.. 2023. 10. 4.
스프링 ServiceLocatorFactoryBean으로 팩토리 메소드 패턴 구현 팩토리 메서드 패턴 올해 초 팩토리 메서드 패턴에 대한 글을 쓴 적이 있다. 다시 설명하자면, 객체 생성을 캡슐화하여 서브클래스에서 어떤 클래스의 인스턴스를 생성할지 결정권을 넘겨주는 패턴이다. 객체 생성을 추상화하여 서브클래스마다 다른 구상 클래스의 인스턴스를 생성하기 위해 사용한다. @Setter @Getter @MappedSuperclass public abstract class BaseEntity { private String email; private LocalDateTime createdAt; } @Entity @Getter @Setter public class Member extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType... 2023. 8. 23.
반복되는 필드를 모아 Entity를 만드는 @MappedSuperClass 반복되는 필드 재사용 Entity를 만들다 보면 createdAt, createdBy, updatedAt 그리고 updatedBy 등 반복되는 필드가 존재한다. 앞서 나열한 요소뿐만 아니라 서비스에 따라 Entity마다 공통되는 필드가 생기는 경우가 많다. 주소와 같이 우편번호, 지번 등이 포함되는 서비스도 해당될 수 있다. @Entity @Getter @Setter public class Member { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "member_seq") @SequenceGenerator(name = "member_seq", sequenceName = "member_sequence", allocationSiz.. 2023. 8. 16.
맥북 갑자기 발열이 생겼다면 확인해 볼 것 사건의 발단 회사에서 받은 MacBook Pro 16(M1 Pro)에서 어느 날부터 발열이 시작되었다. 재택근무를 하기 위해서 노트북을 가방에 넣어 집에 도착하면 꺼낼 때 팬이 비행기 이륙 소리를 내며 돌아가고 있는 것이 아니겠나. 처음엔 그럴 수도 있지 싶었는데 오며 가며 가지고 다니다 보면 이러다 노트북이 녹는 거 아닌가 싶었다. 심란해진 마음으로 왜 갑자기 발열이 시작되었나 추측하기 시작했다. 새 제품을 받았을 때 문제가 없었기 때문에 양품이라고 생각했는데 뭐지 싶었다. 추측 첫 번째 추측, macOS 버전을 업데이트했기 때문에 가장 먼저 든 의심은 버전 업데이트였다. 업데이트 후 발열이 갑자기 발생했다는 증상을 종종 들었기 때문이다. 그래서 다운그레이드를 해볼까도 생각을 했었다. 파일을 백업하고 .. 2023. 7. 20.
우선순위 큐 (PriorityQueue) PriorityQueue란? 스택과 큐에 대해서는 대부분 잘 알고 있을 것이다. 스택은 후입선출로 나중에 들어간 것이 먼저 나오고, 큐는 선입선출 먼저 들어간 것이 먼저 나온다. 큐이긴 하지만 기존의 큐와는 다른 특징을 가진 우선순위 큐라는 자료구조가 있다. 사용자가 지정한 우선순위를 기반으로 원소를 꺼낸다. /** * Creates a {@code PriorityQueue} with the default initial * capacity (11) that orders its elements according to their * {@linkplain Comparable natural ordering}. */ public PriorityQueue() { this(DEFAULT_INITIAL_CAPACITY.. 2023. 4. 24.