
개요Dockerfile을 만들다 보면, ENTRYPOINT에 단순 application을 실행하는 로직 외 다양한 로직을 실행하기 위해서 Shell Script를 실행하는 경우가 있다.이 경우, Docker를 종료하려고 SIGTERM을 전송하면 Shell Script로 전송되기 때문에 Application에서는 정상적으로 SIGTERM을 전달받지 못해서 Graceful Shutdown이 수행되지 않고 SIGKILL에 의해서 서비스는 강제 종료된다.위의 상황들을 해결하기 위한 기본적인 방법인 Shell Script로 전달된 SIGTERM을 Application으로 전달하는 방법을 설명한다.run.sh#!/bin/sh# Send SIGTERM to the application.term_handler() { ..

Promise자바스크립트 비동기 처리에 사용되는 객체이다.상태Pending, 대기비동기 처리 로직이 아직 완료되지 않은 상태이다. new Promise() 함수를 호출하면 대기 상태가 된다.Fulfilled, 이행비동기 처리가 완료되어 프로미스가 결과 값을 반환해준 상태이다. 콜백 함수의 인자 resolve를 실행하면 이행 상태가 된다.Rejected, 실패비동기 처리가 실패하거나 오류가 발생한 상태이다. 콜백 함수의 인자 reject를 실행하면 실패 상태가 된다.Promise Chaining, 프로미스 연결then() 메서드를 호출하면 새로운 프로미스 객체를 반환하여 다시 then() 메서드를 이어서 사용 가능하다.new Promise(function(resolve, reject) { setTim..

Spring RetrySpring Project를 구성하다보면 비즈니스 로직이 정상적으로 이루어지지 않는 경우에 대한 재시도 및 오류 처리에 대한 로직을 구현할 필요가 있다.Spring Retry는 Spring Batch Project에서 파생되어, 현재는 분리되어 단독으로 발전해가는 프로젝트이다.Dependency org.springframework.retry spring-retry 2.0.11implementation 'org.springframework.retry:spring-retry:2.0.11'일반적으로 "spring-retry"에 대한 maven dependency로 추가 혹은 gradle implementation하여 사용할 수 있다.최신 Spring Boot 프로젝트에서는 버전을 명..

Spring TransactionSpring Transaction은 어노테이션 기반으로 수행이 된다.Spring Bean으로 정의 된 Method를 트랜잭션 관리를 하고자 할 때, @Transactional 어노테이션을 활용하면 프록시 패턴의 AOP를 사용하여 원하는 수준의 트랜잭션 관리를 할 수 있다.2025.02.23 - [개발] - Spring Aspect Orientated Programming(AOP)에 대한 설명2024.11.17 - [개발] - Spring Bean에 대한 설명Isolation Level트랜잭션에서 일관성이 없는 데이터를 다른 트랜잭션이 읽는 것을 허용하도록 하는 수준이다.트랜잭션 경쟁(Race Conditiaon)에 대한 문제점Dirty Read커밋 전 데이터 조회와 롤백 ..

Aspect Orientated Programming(AOP)횡단 관심사(공통된 코드)의 분리를 허용함으로써 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임이다.특징Spring은 프록시 패턴을 사용한다.Proxy는 외부 메서드 호출만 인터셉트하여 동일 클래스 내 메소드 호출 시, 동작하지 않는다. Bean으로 정의된 Method를 대상으로만 적용이 가능하다.용어Aspect횡단 관심사를 모듈화 한 것이다.TargetAspect를 적용하는 곳이다.Advice부가 기능(코드)을 담은 모듈이다.Before Advice메서드가 실행되기 전에 수행하는 모듈이다.@Before 어노테이션을 사용하여 정의한다.Around Advice메서드가 실행되기 전과 실행된 후에 각각 수행하는 모듈이다.@Around 어노테이션을..

JSON Web Token(JWT)당사자간에 JSON 객체로 가볍고 자가 수용적인 방식으로 정보를 안전하게 전송하기 위한 개방형 표준(RFC7519)이다.JWT는 비밀(HMAC 알고리즘 사용) 또는 RSA 또는 ECDSA를 사용하는 공개/개인 키 쌍을 사용하여 서명할 수 있다.장점언어의 지원 폭이 넓다.JAVA, JavaScript, Python, Ruby 등 다양한 언어에서 JWT를 지원하므로, 언어에 제한이 없이 사용이 가능하다.자가 수용적이다.자체적으로 필요한 모든 정보를 JSON 형태로 가지고 있다.쉽게 전달 가능하다.JSON은 XML보다 간결하며, 인코딩 될 때 크기도 작아지므로 HTML과 HTTP 환경에서 전송하기 좋다.구조HeaderJWT를 어떻게 검증(Verify)하는가에 대한 내용을 담고..

Git버전 관리 시스템(VCS - Version Control System) 중 하나이다.GNU GPL(General Public License)v2 하에 배포되는 무료 소프트웨어이다.서로 완전히 독립적 일 수있는 여러 개의 로컬 브랜치를 허용하고 권장한다.CSV, Sebversion, Perforce 같은 시스템은 중앙 집중식 버전 관리(CVCS - Centralized VCS)이며, Git은 분산 버전 관리 시스템(DVCS - Distributed VCS)이다.CVCS : Client-Sever Model로 하나의 중앙 서버가 존재하며, 중앙 서버에서 각자 맡은 부분의 작업을 수행 후 중앙 서버로 통합을 수행한다.DVCS : Distributed Model로 하나의 중앙 서버와 각자의 컴퓨터 저장소에..

Deployment제품 팀은 릴리스를 더 자주 프로덕션에 배포하며, 순수한 소프트웨어 제품을 구축하는 경우에는 수 개월 또는 수 년에 걸친 릴리스 주기가 드물어지고 있다.배포 빈도가 높을수록 배포 된 코드가 사이트 안정성이나 고객 경험에 부정적인 영향을 미칠 수 있으므로, 제품과 고객에 대한 위험을 최소화하는 코드 배포 전략을 개발하는 것이 중요하다.배포 직후 발생하는 문제를 모니터링하는 것은 완벽한 배포를 계획하고 실행하는 것 만큼 중요하다.StrategyRolling Deployment서버를 한 대씩 구버전에서 새 버전으로 교체해가는 전략이다.서버의 수에 제약이 있을 경우 유용하다.배포 중 인스턴스 수가 감소하므로, 서버 처리 용량을 미리 고려해야 한다.Blue-Green Deployment 구버전에..

Promise자바스크립트 비동기 처리에 사용되는 객체이다.상태Pending, 대기비동기 처리 로직이 아직 완료되지 않은 상태이다. new Promise() 함수를 호출하면 대기 상태가 된다.Fulfilled, 이행비동기 처리가 완료되어 프로미스가 결과 값을 반환해준 상태이다. 콜백 함수의 인자 resolve를 실행하면 이행 상태가 된다.Rejected, 실패비동기 처리가 실패하거나 오류가 발생한 상태이다. 콜백 함수의 인자 reject를 실행하면 실패 상태가 된다.Promise Chaining, 프로미스 연결then() 메서드를 호출하면 새로운 프로미스 객체를 반환하여 다시 then() 메서드를 이어서 사용 가능하다.new Promise(function(resolve, reject) { setTim..

오류 발생Mapper SELECT * FROM customer WHERE id = #{id} 간단히 주어진 고객 id를 이용하여, 해당 고객의 정보를 가져오는 쿼리를 Mapper에 생성하였다.Console Logorg.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: org.apache.ibatis.reflection.ReflectionException: Error instantiating class java.lang.Long with invalid types () or values (). Cause: java.lang.NoSuchMethodException: java.lang.Lo..
- Total
- Today
- Yesterday
- async
- hot-backup
- Spring
- bouncy castle
- aws s3
- await
- extensibility
- functional programing
- nosuchmethodexception
- point cut
- ASYNCHRONOUS
- JWT
- docker
- javascript
- minio
- bean
- PostgreSQL
- sample code
- reusability
- jdeps
- graecful shutdown
- mybtis
- object storage
- repmgr
- java
- barman
- patametertype
- db lank
- multi stage biluild
- Promise
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |