분류 전체보기
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 ..
GraphQL 에서 N + 1 을 해결 하기 위해 Dataloader 사용하기
GraphQL 에서 N + 1 을 해결 하기 위해 Dataloader 사용하기
2022.08.02# 들어가기전 Kotlin + Dgs framework 를 사용하고 있습니다. https://netflix.github.io/dgs/ Home - DGS Framework How did this project begin? The DGS framework project started at Netflix in 2019 as internal teams began developing multiple GraphQL services. As 2020 wrapped up, Netflix decided to open source the framework and build a community around it. Is it productio netflix.github.io Graphql 에서는 왜 N + 1 문제가 발생하..
GraphQL 에서 Resolver 의 역활
GraphQL 에서 Resolver 의 역활
2022.07.28GraphQL이란 GraphQL은 2012년 페이스북 개발자들이 모바일 어플리케이션을 제작하면서 만든 쿼리 언어이다. SQL과 마찬가지로 데이터베이스의 정보를 질의하는데 사용되지만 그 구조는 매우 다르다. 페이스북 개발자들은 왜 굳이 새로운 쿼리 언어를 만들면서까지 프론트엔드로 데이터를 보내는 방식을 개선하려고 했을까? 전통적인 REST API는 오버페칭이나 언더페칭 같은, 데이터를 너무 많이 전달하거나 너무 적게 전달하여 불필요한 데이터 전송을 일으키는 문제를 발생시켰다. 또 REST API의 경우 개발이 계속될수록 점점 더 많은 엔드포인트를 필요로 하게 되어 프로젝트 관리를 어렵게 한다. 반면 GraphQL은 프론트엔드에서 필요로 하는 데이터를 있는 그대로 JSON 형태로 표현하여 되돌려받는다는 장점..
Kotlin - with 과 apply
Kotlin - with 과 apply
2022.07.24java 를 주 언어로 사용하시다가 kotlin 으로 넘어오는 경우가 많은데 kotlin 을 처음 접하게 되면 드는 생각이 OOP를 지원하지만 생각보다 많은것들이 함수형으로 코드를 작성하는것이 더 편하다는 생각이 든다. 오늘은 그중에서도 With 과 Apply function 에 대해서 알아보자. With 어떤 객체의 이름을 반복하지 않고도 그 객체에 대해 다양한 연산을 수행할 수 있다면 좋을 것이다. 다양한 언어가 그런 기능을 제공한다. 코틀린도 마찬가지 기능을 제공하지 만 언어 구성 요소로 제공하지 않고 With라는 라이브러리 함수를 통해 제공한다. fun main() { println(alphabet()) } fun alphabet() = with(StringBuilder()) { for (lett..