분류 전체보기
Async, CompleteableFuture 에서 RequestContextHolder 에 접근하기
Async, CompleteableFuture 에서 RequestContextHolder 에 접근하기
2022.10.20RequestContextHolder 는 ThreadLocal 을 사용하여 attributes 들을 저장하고 있다. MVC spring 에서 비동기적으로 작업을 처리해야 할때가 있는데 이때 RequestContextHolder 에 접근하게 되면 Thread 가 달라 attributes 가 원하는 값이 나오지 않게 된다. 문제해결 @Configuration class WebConfig : ServletContextInitializer { override fun onStartup(servletContext: ServletContext) { val applicationContext = AnnotationConfigWebApplicationContext() val dispatcherServlet = Dispat..
AWS DynamoDB & DocumentDB 교육
AWS DynamoDB & DocumentDB 교육
2022.10.13사내 지원으로 AWS 교육을 듣게 되었다. 나에게 조금은 생소한 DynamoDB (key, value) 와 DocumentDB (mongoDB) 였다. 교육을 들으면서 너무 좋은 내용들이 많았고 몰랐던 내용들도 많아서 정리해보려고 한다. DynamoDB 란? https://docs.aws.amazon.com/ko_kr/amazondynamodb/latest/developerguide/Introduction.html What is Amazon DynamoDB? - Amazon DynamoDB 이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오. docs.aws.amazon.com https://ve..
Estimating the number of elements in a set (w. hyperloglog)
Estimating the number of elements in a set (w. hyperloglog)
2022.10.08What is Hyperloglog? Hyperloglog 란 ? https://d2.naver.com/helloworld/711301 Finding approximate number in redis using hyperloglog Redis 에서 Hyperloglog 를 사용하여 count 에 대한 근사치 구하기 방문자 수를 카운팅 하는 예제 import com.jongyun.redission.config.BaseTest import java.util.stream.LongStream import kotlin.streams.toList import org.junit.jupiter.api.Test import org.redisson.client.codec.LongCodec import reactor.cor..
Explain And Index (with. mysql)
Explain And Index (with. mysql)
2022.10.05실행계획 분석하기 ID SQL 문이 수행되는 순서를 의미합니다. 위의 실행계획을 확인할 경우 첫 번째 행과 두번째 행의 ID 가 같습니다. SELECT_TYPE select 문의 유형을 의미합니다. SIMPLE: 단순한 SELECT 구문 PRIMARY: 서브쿼리를 감싸는 외부 쿼리, UNION 이 포함될 경우 첫번째 SELECT 문 SUBQUERY: 독립적으로 수행되는 서브쿼리 (SELECT, WHERE 절에 추가된 서브쿼리) DERIVED: FROM 절에 작성된 서브쿼리 UNION: UNION, UNION ALL 로 합쳐진 SELECT DEPENDENT SUBQUERY : 서브쿼리가 바깥쪽 SELECT쿼리에 정의된 칼럼을 사용 DEPENDENT UNION : 외부에 정의된 컬럼을 UNION으로 결합된..
RealMySql - Select (Index)
RealMySql - Select (Index)
2022.10.03Index 를 타지 않은 경우 WHERE 적용 및 JOIN 실행 GROUP BY DISTINCT HAVING 조건 적용 ORDER BY LIMIT Index 를 타는 경우 ORDER BY 나 GROUP BY 절 이 있더라도 Index 를 이용해 처리할 때는 그 단계 자체가 불필요 하므로 생략된다. Index 사용 기본 규칙 WHERE, ORDER BY, GROUP BY 가 INDEX 를 사용하려면 기본적으로 인덱스된 컬럼의 값 자체를 변환하지 않고 사용해야함 원본값을 검색하거나 정렬 할때만 B-Tree 에 정렬된 INDEX 를 이용한다. Index 를 타지 않는 SQL 구문 SELECT * FROM salaries WHERE salary * 10 > 150000; Index 를 탈 것 같지만 타지 않는 ..
How to use Redisson with kotlin
How to use Redisson with kotlin
2022.10.02Redisson은 Jedis, Lettuce 와 같은 자바진영의 레디스 클라이언트입니다. Lettuce와 비슷하게 Netty 를 사용하며 non-blocking I/O 를 사용합니다. Redisson 의 특이한 점은 직접 레디스의 명령어를 제공하지 않고 , Bucket 이나 Map 과 같은 자료구조나 Lock 같은 특정한 구현체의 형태로 제공한다는 점입니다. https://github.com/redisson/redisson GitHub - redisson/redisson: Redisson - Redis Java client with features of In-Memory Data Grid. Over 50 Redis based Java objects Redisson - Redis Java client wi..
Git Hook 으로 commit message 강제하기
Git Hook 으로 commit message 강제하기
2022.10.01Git hook 을 사용하여 협업시 commit template 의 통일성을 가져가려고 합니다. .git 폴더 밑에 .gitmessage 를 만들어 줍니다. # : ##### Subject 50 characters ################# -> | # Body Message ######## Body 72 characters ####################################### -> | # Issue Tracker Number or URL # --- COMMIT END --- # Type can be # feat : new feature # fix : bug fix # refactor: refactoring production code # style : formatting, mis..
WebFlux spring graphql 에서 Header Handling 하기
WebFlux spring graphql 에서 Header Handling 하기
2022.10.01WebFlux 에서는 WebMvc 와는 다른 방법으로 header 를 handling 해야합니다. login 을 했을때 cookie 를 set 하는 예시로 시작해보겠습니다. @MutationMapping fun login( @Argument input: LoginInput, context: GraphQLContext ): Mono { return memberService.login(input) .flatMap { context.put("token", it.token) Mono.just(AuthToken(it.tokenType, it.token)) } } GraphqlContext 에 key value 형태로 token 을 저장합니다. 그리고 headerInterceptor 를 만들어 context 의 값..
How to set up Security in WebFlux
How to set up Security in WebFlux
2022.10.01WebFlux 에서 Spring Security 를 구성하려면 WebMvc 에서의 Security Configuration 과 조금 다른부분이 있어 정리 해두려고 합니다. WebFlux 란? [Spring] WebFlux란? WebFlux? Spring Framwork5에서 새롭게 추가된 모듈이다. web-flux는 client, server에서 reactive 스타일의 어플리케이션 개발을 도와주는 모듈이라고 한다. 스프링 공식문서에… heeyeah.github.io build.gradle.kts 구성 implementation("org.springframework.boot:spring-boot-starter-graphql") implementation("org.springframework.boot:sp..
Leet code 3 — Longest Substring Without Repeating Characters
Leet code 3 — Longest Substring Without Repeating Characters
2022.10.01Given a string s, find the length of the longest substring without repeating characters. Example 1: Input: s = "abcabcbb" Output: 3 Explanation: The answer is "abc", with the length of 3. Example 2: Input: s = "bbbbb" Output: 1 Explanation: The answer is "b", with the length of 1. Example 3: Input: s = "pwwkew" Output: 3 Explanation: The answer is "wke", with the length of 3. Notice that the ans..
spring 에서 비동기 처리를 위한 TreadPoolTaskExecutor 알아보기
spring 에서 비동기 처리를 위한 TreadPoolTaskExecutor 알아보기
2022.08.24Spring ThreadPoolTaskExcutor 는 java.util.concurrent.ThreadPoolExecutor 의 추상화 한것을 Spring 에서 제공하는 JavaBean 입니다. corePoolSize maxPoolSize queueCapacity allowCoreThreadTimeOut keepAliveSeconds 와 같은 속성을 통해 커스텀하게 사용 할 수 있습니다. corePoolSize vs maxPoolSize corePoolSize corePoolSize 는 timeout 없이 active status 를 유지하기 위한 최소한의 worker 수입니다. ThreadPoolTaskExecutor 는 구성된 설정을 java.util.concurrent.ThreadPoolExecu..
kotlin coroutine - Mutex 와 Actor (공유자원)
kotlin coroutine - Mutex 와 Actor (공유자원)
2022.08.05kotlin 에서 멀티쓰레드 및 코루틴 환경에서 자원을 공유 하기위해서는 보통 잘알려진 방법으로 는 Mutex 로 context 의 Lock 을 걸어 자원을 읽고 쓰는 동안 그 자원에 대해서 접근하지 못하도록 하는 방법이 있다. Mutex private suspend fun massiveRun(action: suspend () -> Unit) { val n = 100 // 시작할 코루틴의 갯수 val k = 1000 // 코루틴 내에서 반복할 횟수 val elapsed = measureTimeMillis { coroutineScope { // scope for coroutines repeat(n) { launch { repeat(k) { action() } } } } } println("$elapsed ..