감정 분석 API에서 7가지 감정 점수를 소수점 둘째 자리 백분율로 보여주되 합계는 반드시 100.00%가 되게 하는 문제, 반올림 함정과 Largest Remainder Method(최대 잔여 방식) 해법, 구현 시 부동소수점·동점 처리 등을 정리합니다.
감정 분석 API를 만들면서 “각 항목은 소수점 둘째 자리로 보이게 하되, 합계는 반드시 100.00%”라는 요구를 만났다. 단순 반올림과 흔한 보정 방식의 함정, 최대 잔여 방식(Largest Remainder, Hamilton 방식으로도 알려짐)으로 맞춘 과정과 구현 시 체크 포인트를 정리한다.
트랜잭션 커밋 전 publishEvent()를 호출했을 때 발생한 타이밍 문제와 @TransactionalEventListener(AFTER_COMMIT) 및 afterCommit() 해결 방식을 정리한 글이다.
📝 TIL (Today I Learned) @Transactional 안에서 publishEvent()를 호출하면 @Async 리스너가 커밋 전 데이터를 읽으려다 실패할 수 있다. 이 문제는 TransactionSynchronizationManager.afterCommit() 또는 @TransactionalEventListener(AFTER_COMMIT)로 해결한다.
in TIL on Til, Spring, Redis, Websocket, Stomp, 트랜잭션, 분산시스템
Spring Events(@TransactionalEventListener, AFTER_COMMIT), @Async와 LazyInitializationException, Redis ZSET·Lua·TOCTOU, STOMP WebSocket 사용자별 전송, 스케줄러 설계 등 #148·#149 구현에서 정리한 백엔드 포인트입니다.
📝 TIL (Today I Learned) 트랜잭션 경계를 이해하고, Redis에서 원자성을 보장하며, WebSocket 세션 상태를 고려한 분산 환경의 실시간 알림을 다루면서 정리한 내용이다.
in TIL on Til, Java, 동시성, Racecondition, Volatile, Atomicboolean, Cas, Webflux
멀티스레드 환경에서 volatile의 한계(가시성 vs 원자성)와 check-then-act 레이스 컨디션을 AtomicBoolean.compareAndSet(CAS)으로 해결하는 방법을 정리했습니다.
📝 TIL (Today I Learned) \n+> volatile만으로는 해결되지 않는 문제가 있다. "가시성"과 "원자성"은 다르고, check-then-act 패턴이 섞이면 레이스 컨디션이 터진다. 이걸 AtomicBoolean.compareAndSet으로 정리해 본다.
in TIL on Til, Android, Capacitor, 보안, Https, Manifest
Capacitor Android 앱에서 HTTPS만 사용하도록 usesCleartextTraffic을 false로 설정할 때, 카카오 SDK와의 Manifest merger 충돌을 tools:replace로 해결하는 방법과, CORS와의 관계를 정리했습니다.
📝 TIL (Today I Learned) Capacitor로 빌드한 Android 앱에서 HTTPS만 사용하도록 보안 설정을 바꾸다가, 카카오 SDK와 Manifest merger 충돌이 났고, tools:replace로 해결했다. 이 과정에서 usesCleartextTraffic이 무엇인지, CORS와는 어떻게 다른지까지 정리해 본다.