본문 바로가기

분류 전체보기256

[database] mysql과 mariaDB 중 어떤 DB가 나에게 맞을까? 안녕하세요. 오늘은 mysql과 mariaDB에 대한 차이점을 알아보고 어떤것을 사용하면 개인에게 그리고 팀에게 적합할지 알아보는 시간을 가져보도록 하겠습니다. 히스토리 mariaDB는 mysql의 개발자가 나와서 만들었다는 사실은 다들 익히 알고 계실껍니다. 저도 여기까지는 어디선가 들어가 이미 알고 있던 정보입니다. 그렇습니다. mariaDB의 개발자인 Monty는 회사를 나와 MontyProgram AB라는 회사를 차리면서 mariaDB를 만들게 된것입니다. mysql을 기반으로 fork하여 자체적으로 개발하는 서비스로 mariaDB 뿐만이 아니라 PerconaServer도 있다고 합니다. 이들간의 관계를 한번 보도록 하겠습니다. 그렇습니다. mariaDB는 mysql의 엔진에 PerconaServ.. 2021. 5. 26.
[java] ThreadLocal에 관하여 안녕하세요. 오늘은 ThreadLocal에 대해서 알아보도록 하겠습니다. 변수를 공유하는 방법 객체는 Heap 또는 Stack 메모리 영역에 배치시킬 수 있습니다. Heap 영역은 일반적으로 모든 thread에서 접근 할 수 있으며 stack은 thread 하나당 만들어 지는 메모리 영역으로 thread간 접근이 불가능한 것으로 알려져 있습니다. 아래 코드의 UserRepository 변수는 Heap 영역에 만들어진 객체를 가리키고 있으며 다른 곳에서도 해당 객체를 바로 접근할 수 있습니다. 함께 공유해서 사용하기 때문에 여러 thread에서 사용할 때 공유된 정보로써 제공할 수 있습니다. 따라서 만약 UserRepository가 설정 정보를 가지고 있고 이를 변경한다면 사용하고 있는 모든 곳에서 영향을.. 2021. 5. 15.
[LeetCode] Top K Frequent Elements 개인풀이 문제 숫자 배열 nums과 숫자 k가 주어집니다. nums 배열에서 자주 반복되는 값을 k개 반환하도록 합니다. 순서는 상관 없습니다. 예제_1 입력: nums = [1,1,1,2,2,3], k = 2 출력: [1,2] 예제_2 입력: nums = [1], k = 1 출력: [1] 제약조건 1 count.get(n1) - count.get(n2)); // 2. keep k top frequent elements in the heap // O(N log k) k) heap.poll(); } // 3. build an output array // O(k log k) .. 2021. 5. 1.
[spring + spock + TestContainer] Spring, Spock Framework에서 기능 테스트 하기 - TestContainer 사용 안녕하세요. Spring에서 DB 기능 테스트를 할 때 어떤 걸 주로 이용하시나요? 제가 생각하기로는 여러분들은 로컬에서 쉽게 돌릴 수 있는 인메모리 DB인 H2를 가장 많이 사용하실 것 같습니다. 왜냐하면 사용하기 쉽기 때문이겠죠. 오늘제가 여러분들께 알려드리고자 하는 것은 조금 다른 기능 테스트 방법을 제공해주는 TestContainers입니다. H2를 사용하는 것과 어떻게 다르며 사용할 수 있는지 알아보도록 하겠습니다. :) TestContainer TestContainer는 로컬 환경에서 실제 DB에 테스트를 할 수 있도록 지원하는 Java 라이브러리입니다. DB라면 인메모리 DB인 H2를 사용하면 되지 않느냐? 라고 생각하실 수 있습니다. 그럼에도 불구하고 TestContainer를 왜 사용할까.. 2021. 4. 30.
[LeetCode] Single Number 개인풀이 문제 integer 배열이 주어집니다. 1개의 숫자를 제외하고는 2번씩 노출됩니다. 1번만 노출되는 숫자를 찾으세요. 나아가기 : O(N) 시간복잡도와 O(1)의 공간복잡도를 가질 수 있도록 해결할 수 있으면 좋습니다. 예제 1 입력 : [2,2,1] 출력 : 1 예제 2 입력 : [4,1,2,1,2] 출력 : 4 예제 3 입력 : [1] 출력 : 1 제약 조건 1 2021. 4. 28.
[기타] DDD(domain driven development)의 계층 구조(layered architecture)에 대해서 알아보자 안녕하세요. 이전 우리는 [spring + 객체 지향 원칙] Spring에서의 의존성 역전의 원칙(Dependency Inversion Principle) 포스팅에서 Layered Architecture에 대해서 간단히 확인해보았습니다. Layered Architecture는 코드의 아키텍처를 구성할 때 주로 사용되며 일반적으로 3 계층 또는 4 계층으로 나누어 사용합니다. 3 계층으로 나눌때는 표현계층(Presentation Layer) - 서비스 계층 (Business Layer) - 영속성 계층(Persistence Layer) 으로 나누어 사용하곤 합니다. DDD를 이용할 때도 이에 대응되는 계층적인 구조가 있는데요. 오늘 배워볼 내용은 DDD에서의 계층의 분화에 대한 부분입니다. 각 계층별 설명.. 2021. 4. 24.
[elasticsearch + Spring] elasticsearch를 Java Spring에서 사용해보자 - 기본적인 검색 만들기 안녕하세요. 오늘 실습해볼 내용은 elasticsearch를 이용하여 Spring에 빠른 검색을 적용해 보는 것입니다. 이전시간까지 우리는 아래 포스팅을 통해서 환경설정, index를 만들고 document의 CRUD를 적용해보는 것에 대해서 실습해 보았습니다. [elasticsearch + Spring] elasticsearch를 Java Spring에서 사용해보자 - 환경설정과 Index 만들기 [elasticsearch + Spring] elasticsearch를 Java Spring에서 사용해보자 - Document CRUD 만들기 ElasticSearch를 사용한다는 것은 일반적으로 빠른 검색 서비스를 이용하기 위한 목적을 가지고 계실 것입니다. 이전까지는 검색을 하기위해 데이터를 쌓는 부분에 .. 2021. 4. 23.
[LeetCode] Sqrt(x) 개인풀이 문제 양수인 Integer x가 주어질 때 x의 root 값의 정수 부분을 구하세요. 예제 1 입력 4 출력 2 2는 4의 root값 예제 2 입력 8 출력 2 8의 root값은 2.8242... 이기때문에 양의 정수 부분의 값은 2 제약조건 0 2021. 4. 21.
[git] git stash에 대해서 알아보자 안녕하세요. 오늘은 git stash 명령어에 대해서 알아보는 시간을 가져보도록 하겠습니다. git stash 명령어는 언제 사용하는가 ? stash 저장소는 임시저장소입니다. 프로젝트에서 작업을 하고 있었습니다. 그런데 다른 요청이 들어와서 다른 일을 먼저 진행하게 되었습니다. 해당 요청을 처리하기 위해서는 branch의 전환이 필요합니다. 하지만 branch를 전환하기 위해서는 Index Storage의 데이터를 비워야합니다. 그러기 위해 commit을 이용할 수 있습니다. 하지만 commit은 커밋 로그가 남으며 원하는 목적과 동떨어집니다. 이럴때 임시 저장소로 사용할 수 있는것이 바로 stash 명령어이며 이 명령어는 stash Area를 사용합니다. git repository의 종류 [git] .. 2021. 4. 13.
[LeetCode] Word Search(글자 찾기) 개인 풀이 문제 m x n 크기의 board와 문자열 하나가 주어집니다. board에서 문자열을 얻어낼 수 있다면 true 그렇지 않다면 false를 리턴하세요. board 한칸에는 하나의 문자가 들어가며 문자열은 한문자에서 한칸씩 이동하여 만들어야합니다. 또한 중복으로 접근하는것은 불가능 합니다. 예제 보드판 예제 1 입력 word = "ABCCED" 출력: true [0,0] -> [0,1] -> [0,2] -> [1,2] -> [2,2] -> [1,2]로 가능 예제 2 입력 word = "SEE" 출력: true [1,3] -> [2,3] - [2,2]로 가능 예제 3 입력 word = "ABCB" 출력: false 제한 사항 m == board.length n == board[i].length 1 2021. 4. 3.
[java] Java와 Lazy evaluation - Java8 Stream 안녕하세요. 이전시간에 우리는 Lazy evaluation에 대해서 알아보는 시간을 가졌었습니다. 오늘은 이어서 Java8의 Stream의 Lazy Evaluation에 대해서 알아보는 시간을 가져보겠습니다. 우리는 이전 시간 [Java] Java와 Lazy Evaluation 포스터에서 Lazy Evaluation의 장점을 필요하지 않는 연산을 하지 않는다라고 이야기했습니다. 그리고 Stream은 Lazy Evaluation을 사용하는 대표적인 연산방식입니다. 예제 아래와 같은 로직이 있다고 해보겠습니다. 1 ~ 30까지의 숫자의 List가 있습니다. 이 숫자에서 3의 배수의 숫자만을 걸러내고 10을 곱한 값중 앞에서 3가지만 취하도록 하겠습니다. 이런 로직을 가지는 메서드를 만든다고 해보겠습니다. C.. 2021. 4. 2.
[Java] Java와 Lazy Evaluation Lazy evaluation은 실제로 필요로 해지는 경우에 연산을 시작하는 것입니다. 이 반대로는 eager evaluation이 있으며 이는 할당되자마다 연산을 시작합니다. 기본적인 Java의 기조는 eager evaluation을 기본으로합니다. 하지만 일부 Lazy Evaluation이 있었으며 Java 8이 나오면서 Java에는 Lazy Evaluation을 좀 더 유연하게 사용할 수 있게되었습니다. 오늘은 Lazy Evaluation의 예제와 Java 8에서 어떻게 사용할 수 있을지에 대해서 알아보는 시간을 가져보도록 하겠습니다. 예제 오늩 테스트를 위해 사용하는 메서드는 아래와 같습니다. 해당 메서드를 실행하게되면 1초간 sleep을 하고 입력받은 파라미터에 a가 포함되어있는지 여부로 true.. 2021. 3. 26.