분류 전체보기
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..
낙관적 LOCK 과 비관적 LOCK - (JPA, Mysql)
낙관적 LOCK 과 비관적 LOCK - (JPA, Mysql)
2022.07.06먼저 알고 가면 좋은 것들 ACID https://hanamon.kr/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98%EC%9D%98-acid-%EC%84%B1%EC%A7%88/ [데이터베이스] 트랜잭션의 ACID 성질 - 하나몬 트랜잭션이란 여러 개의 작업을 하나로 묶은 실행 유닛을 말한다. 데이터베이스 트랜잭션은 ACID라는 특성을 가지고 있다. ACID는 데이터베이스 내에서 일어나는 하나의 트랜잭션(transaction)의 안 hanamon.kr Transaction 격리수준 https://zzang9ha.tistory.com/381#:~:text=%ED%8A%B8%EB%9E%9C%E..
JPA - Proxy
JPA - Proxy
2022.07.02Proxy 란 ? porxy 클래스란 실제 클래스를 상속 받아서 만든 실제 클래스와 겉모양이 똑같은 클래스 이다. Client 입장에서는 진짜 객체인지 Proxy 객체인지 구분하지 않고 사용하면 된다는 특징이 있다. Proxy 구조 Proxy 객체는 실제 객체애 대한 참조 (Ref) 를 보관한다. 그리고 Proxy 객체의 메소드를 호출 하면 Prxoy 객체는 실제 Method 를 호출한다. Prxoy 객체 초기화 proxy 객체는 member.getName() 처럼 실제 값에 접근하려고 할때 데이터베이스를 조회해서 실제 엔티티 객체를 생성하는데 이것을 프록시 객체 초기화라 한다. 프록시 객체에 member.getName() 을 호출해서 실제 데이터를 조회한다. 프록시 객체는 실제 엔티티가 생성되어 있지 ..
Connection Pool 이해하고 사용하기
Connection Pool 이해하고 사용하기
2022.06.25connection pool 이란? client 에서 요청이 올때마다 매번 connection 을 맺게 되면 TCP/IP 의 3way handshake 가 발생하게 되고 그만큼 client 에게 응답이 늦어지므로 사용자의 편의성이 하락 할 수 있다. 그리고 Database 의 connection 이 무한하게 증가 함으로 그다지 좋은 방법은 아니라 실무에서는 필수적으로 Connection Pool 을 사용하여 Database 를 사용한다. Spring boot 2.0 의 Connection Pool spring boot 2.0 에서는 connection pool 의 기본을 hikaricp 를 사용하도록 되어 있다. hikaricp 가 궁금하시다면 밑에 링크를 참조하자 GitHub - brettwooldri..
Strategy pattern (전략 패턴)
Strategy pattern (전략 패턴)
2022.06.18Strategy pattern (전략 패턴) 은 Template pattern 의 단점을 보완하고자 나온 패턴이다. 먼저 Template pattern 의 단점이 무엇인지 알아봅시다 Template pattern 은 부모 클래스에 알고리즘의 골격인 템플릿을 정의하고, 일부 변경되는 비즈니스 로직을 자식 클래스에 정의 하도록 했다. 이렇게 하면 자식 클래스가 알고리즘 전체 구조를 변경하지 않고 특정 부분만 재정의 할 수 있다는 장점이 있는데 결국 상속과 오버라이딩을 통한 다형성으로 문제를 해결 하는 것이다. http://www.yes24.com/Product/Goods/65551284 이펙티브 자바 Effective Java 3/E - YES24 자바 플랫폼 모범 사례 완벽 가이드 - Java 7, 8, ..
합이 같은 부분집합(DFS : 아마존 인터뷰) - (golang)
합이 같은 부분집합(DFS : 아마존 인터뷰) - (golang)
2022.05.28문제 풀이 해당 문제는 subset(부분집합) 을 만들어서 전체 배열의 원소의 합을 2로 나누었을 때 부분집합 의 합과 똑같으면 YES 다르면 NO 를 출력 하는 방식으로 접근 해보았다. 먼저 부분집합을 만드는 방식에 있어서 해당 원소를 부분집합으로 포함 할지 안할지 이렇게 2진 트리로 재귀호출을 할수 있다. func SameSumSubSet(depth, sum int) { SameSumSubSet(depth+1, sum+array[depth]) SameSumSubSet(depth+1, sum) } depth 와 함께 sum 이라는 변수를 재귀호출 로 넘김으로써 depth 가 N 과 같아졌을때 총합 / 2 와 비교하기 위해서 사용한다. 첫번째 재귀 호출은 해당원소를 부분집합으로 사용하는 재귀호출이고 두번..
상속 관계 매핑 Entity 를 QueryDsl 에서 사용하기
상속 관계 매핑 Entity 를 QueryDsl 에서 사용하기
2022.05.23Java 에서 말하는 상속 개념이 SQL 에서는 존재하지는 않지만 Jpa 를 사용하여 상속 전략 을 사용하여 두 객체관의 관계를 매핑 하고 상속 관계 전략을 구현한 여러개의 Entity 를 Querydsl 을 사용하여 select 해보겠습니다. https://ict-nroo.tistory.com/128 [JPA] 상속관계 매핑 전략(@Inheritance, @DiscriminatorColumn) 상속관계 매핑 객체는 상속관계가 존재하지만, 관계형 데이터베이스는 상속 관계가 없다.(대부분) 그나마 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다. 상속관계 매핑이라 ict-nroo.tistory.com 부모 Entity @Getter @Entity @Inheritance(strategy = S..
[백준] 9663번 : N-Queen - Golang
[백준] 9663번 : N-Queen - Golang
2022.05.22https://st-lab.tistory.com/118 [백준] 9663번 : N-Queen - JAVA [자바] www.acmicpc.net/problem/9663 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하.. st-lab.tistory.com 해당 블로그를 참조하여 문제를 해결 하였습니다. 처음에는 2차원 배열을 사용하여 문제를 해결 하려고 하였는데 DFS 의 특성상 깊이를 행 for 문을 사용하여 열을 검사하는 방식으로 풀면 1차원 배열로도 해당 문제를 풀수 있엇습니다. package main import ( "bufio" "fmt" "math" ..
Docker hub 에 Image Push 하기
Docker hub 에 Image Push 하기
2022.05.05Kubernetes, Docker, CI/CD 에 많이 활용되는 docker push, docker pull 을 하기 위해서 docker image 원격 저장소에 이미지를 push 하는 방법을 소개 하겠습니다. 제일먼저 필요한 것은 docker hub 에 계정이 없으신 분들은 계정을 생성해주셔야 합니다. https://hub.docker.com/ Docker Hub Container Image Library | App Containerization Build and Ship any Application Anywhere Docker Hub is the world's easiest way to create, manage, and deliver your team's container applications. ..