본문 바로가기

전체 글12

[Spring] Spring MVC에서 코틀린 코루틴 안티패턴 3줄요약Spring MVC에서 controller에 suspend를 사용하면 Unconfined 디스패처가 적용된다.WebClient에서 함수가 끝난뒤에, Unconfined 디스패처의 성질로 인해 WebClient의 쓰레드를 점유하여, 논블로킹이 깨지게 된다. 코루틴 내부에서 ThreadLocal을 활용하는 JPA 사용시,코루틴 쓰레드 변경으로 인해 사이드 이펙트가 발생할 수 있다. 코루틴 개념코루틴은 경량쓰레드이다. 코루틴은 협력적(비선점형) 스케줄링으로 명시적인 컨텍스트 스위칭이 필요하며, 개발자가 컨트롤을 가져간다.즉, 현재 실행 중인 코루틴이 명시적으로 제어권을 넘겨주기(suspend) 전까지는 다른 코루틴이 실행되지 않는다. 이 비선점형 특성은 코루틴의 동작 방식과 이어진다. 코틀린 코루틴은.. 2024. 11. 28.
[Spring] Kotlin으로 Spring AOP 우회 DSL 만들기 개요스프링 MVC를 사용하여 개발하면 크게 다가오는 장점 중에 @Transactional이 있다. 요청을 처리하는 개별스레드의 ThreadLocal을 사용하여 트랜잭션을 데이터계층에 전달하는 것을추상화한 AOP를 통해 트랜잭션을 간편하게하여 세부 비즈니스 로직에 집중할 수 있다. 하지만1. 개발중에 실수로 transctional을 빼먹게 된다면 어떻게 될까? 컴파일단계에서는 해당 실수를 알 수 없다.2. 영속성 컨텍스트 외부에서 프록시객체를 조회할 경우 런타임에서야 에러를 알아차릴 수 있다. 예를 들어:@Transactional(readOnly = true)fun getUserModelById(userId: Long) : UserModel { val user = userReader.getById(u.. 2024. 11. 25.
[Go] 러닝 Go 후기 Go언어 기초부분을 알려주는데, 고급스럽게 알려준다.구조체와 nullable을 다루는 부분, 포인터, 스택의 예시가 너무 인상깊었다.Go를 공부한거보다, CS를 공부한느낌...🥹`JVM 밑바닥까지 파헤치기`책을 읽기전에 이 내용을 먼저 알았으면 좋았을 거 같다.  Go에 대해 공부해보게된 계기는 K8S와 도커가 Go로 작성되었다는 것 때문이다.언어가 확실히 심플하고, 모던한게 느껴졌다. 코틀린과도 비슷하고, 덕타이핑도 지원하고, 고루틴도 있고, 포인터도 있고..기초를 배우는데는 정말 금방 배울 수 있으니, 한 번쯤 시도해보는 것을 추천한다.자바에서의 클래스(정적영역(method,static)), 인스턴스(힙영역), 함수 호출(스택영역)와 비교해서 차이점을 알 수 있는것이 가장 기억에 남는다.여태까지 자.. 2024. 11. 24.