CROSS JOIN Cartesian Product (n * m) on/where절(조건절)을 거의 사용하지 않는다. CROSS JOIN + ON/WHERE은 INNER JOIN과 동일한 결과를 반환한다. 따라서 이런 경우에는 직관적인 INNER JOIN을 사용하는 게 낫다. References How to writ...
스프링에 의존하지 않고, 즉 bean validation을 사용하지 않고 입력 유효성을 검증할 수 있는 방법은 없을까? 물론 있다. 조건문을 나열해서 확인할 수도 있고, 유효성 검증을 위한 객체를 생성해서 확인할 수도 있다. 이번 글에서는 유효성 검증을 위한 객체를 생성해서 확인하는 방법을 위주로 살펴보려고 한다. 단순한 로직이라면 조건문을 나열하는...
정규표현식 문자열에서 특정 패턴을 만족하는 부분을 찾아낼 때 사용한다. \d 숫자 대표문자 digit 1글자만 찾는다. \w 글자 대표문자 word a, b, c, 가, 나, 다, 1, 2, 3과 같은 문자와 숫자를 포함한다. 특수문자는 포함하지 않지만, _는 포함한다. 1글자만 찾는다. + ...
요즘 Spring Reactive로 작성된 코드를 Spring MVC로 변경하면서 Optional을 자주 활용하고 있다. 예를 들면 switchIfEmpty()를 orElseGet()으로 대체한다. 문득 orElse()도 있는데, orElseGet() 대신 사용해도 괜찮지 않나? 라는 생각이 들었다. 하지만 두 메소드가 따로 구현된 이유가 있을 것이고...
의존성 추가 build.gradle에 필요한 의존성을 추가한다. // webflux implementation 'org.springframework.boot:spring-boot-starter-webflux' // swagger implementation 'io.springfox:springfox-boot-starter:3.0.0' impleme...
InnoDB 스토리지 엔진을 기준으로 설명한다. 읽기 잠금 Shared Lock(S Lock) T1 트랜잭션은 r1 행을 읽을 때 S Lock을 획득한다. T2 트랜잭션은 해당 행을 읽을 수 있지만(이때도 S Lock을 획득), 쓸 수는 없다. 어떤 행에 S Lock이 걸리면, 해당 행에 S Lock은 걸 수 있고 X Lock은...
스프링에서 @Transactional을 사용하면 기본적으로 모든 예외에 대해 롤백하는 줄 알았다. 근데 아니었다. @Transactional에는 rollbackFor 옵션이 있다. 요 옵션의 주석을 보면 다음과 같다. By default, a transaction will be rolling back on RuntimeException and...
실시간 unique count는 어떻게 계산할까? 애플리케이션에서 자료구조를 사용해서 데이터를 저장하고, 같은 데이터가 들어오면 저장하지 않는 방법이 있다. 하지만 이 방법은 대용량 데이터를 다루는 애플리케이션에서는 적절하지 않다. 메모리 공간을 많이 차지해서 다소 무거울 수 있고, 더 중요한 비즈니스 로직을 처리하기 위한 리소스를 쓰기 때문이다. ...
VAN 이미지 출처: PG와 VAN 무엇이 다를까? Value Added Network 오프라인 결제 (카드 단말기, POS 단말기) 가맹점은 VAN사 덕분에 카드사와 편리하게 결제를 연동할 수 있다. 하지만 VAN사가 매출 정산은 따로 해주지 않아, 각 카드사마다 매출을 정산받아야 한다. 만약 VAN사가 없었다면? ...
자프링에서 spring-data-jpa는 자주 써봤는데, spring-data-dynamodb는 아예 써본 적이 없다. 최근에 코프링에서 DynamoDB를 도입했다. 요런 조합이 처음이다보니 며칠 동안 삽질했다. 해결하고나서 뿌듯하면서도, 한편으로는 요런 경우가 또 있을 수도 있지 않을까 생각했다. 그래서 미래의 나를 위해 간단하게 정리한다. ...