본문 바로가기

기타113

[gradle] buildSrc를 이용한 gradle 의존성 관리 안녕하세요. 오늘은 gradle의 의존성 관리를 좀 더 명확하고 유지관리하게 쉽게 할 수 있는 gradle의 buildSrc에 대해서 알아보는 시간을 가져보도록 하겠습니다. 빌드 도구의 상수와 함수 코딩을 하면 기본적으로 자주 사용하는 함수 또는 상수에 대해서 별도의 파일로 선언하여 여러 곳에서 참조할 수 있게합니다. 이렇게 함으로써 중복 코드를 줄이고 코드의 가독성도 높일 수 있습니다. 이건 이 글을 읽고 있는 개발자이신 여러분들에게는 기본적인 것이겠지요. gradle 에서도 buildSrc를 이용하면 이러한 방법으로 script를 작성할 수 있다는 사실을 알고 있으셨나요 ? buildSrc를 이용하면 build script를 더 쉽게 유지보수하고 가독성을 향상시킬 수 있습니다. buildSrc와 in.. 2021. 11. 22.
[gradle] gradle의 퍼포먼스를 늘릴 수 있는 유용한 정보 및 옵션들 요즘은 spring의 빌드 도구로 java, kotlin을 가리지 않고 gradle을 많이 사용합니다. 오늘은 이와 관련된 주제로 gradle의 퍼포먼스를 늘릴 수 있는 유용한 정보 및 옵션드에 대해서 알아보는 시간을 가져보도록 하겠습니다. 의존성을 주입할 때 dynamic version 보다는 static version을 사용하자 일반적으로 의존성을 주입할 때 dnynamic version 보다는 static version을 사용하는 것을 권장합니다. 이유는 버전을 dynamic version으로 하게되면 이후 특정 모듈의 버전이 올라감에 있어서 호환성 이슈가 발생할 수 있기 때문입니다. 이와는 별개로 static version을 사용하는것이 좋은 이유가 있습니다. 바로 성능적인 문제입니다. grad.. 2021. 10. 13.
[git] merge, squash & merge 그리고 rebase의 원리에 대해서 알아보자 안녕하세요. 오늘은 merge와 squash & merge 그리고 rebase의 차이점에 대해서 알아보는 시간을 가지도록 하겠습니다. 오늘은 이론적인 부분에 대해서만 말씀드릴 것이며 명령어를 실습하는 것은 다음시간에 이어서 진행하도록 하겠습니다. branch 병합 개발은 혼자 진행할 수도 있지만 대개는 여러명이 팀을 이루어 함께 개발을 합니다. 이럴 경우 github, gitlab과 같은 원격 저장소를 이용하여 코드의 형상관리를 하게됩니다. 이때 branch라는 개념을 이용하여 각자가 맡은 기능에 대한 개발을 진행하고 개발이 완료되면 master와 같은 base 브런치에 병합(merge)한 후 하나가 된 base의 코드를 서버에 배포하는 과정을 거치게됩니다. 위 이미지는 1개의 base 브런치에서 2개의.. 2021. 10. 2.
[flyway] flyway를 통해 DDL 형상관리를 하자 - Spring Boot (Java API) 편 안녕하세요. 오늘은 flyway를 이용하여 로컬 환경에서 DDL의 형상관리를 하는 방법을 알아보도록 하겠습니다. flyway flyway는 데이터베이스의 형상관리를 목적으로 하는 툴입니다. 데이터베이스의 형상 관리란 어떤 것일까요? git을 통하여 우리가 코드를 관리하는 것의 데이터베이스 버전으로 볼 수 있습니다. git에서는 코드를 파일별로 로깅을 통해서 변화의 이력을 추적합니다. flyway는 데이터베이스의 DDL의 이력을 쌓아서 DDL이 어떻게 변화되었는지 관리하는 툴로 사용할 수 있습니다. 위 이미지는 flyway 공식 홈페이지에 나와있는 이미지로 DDL 형상관리의 이해를 위해서 가져왔습니다. 위 이미지를 보시면 Axel과 Christian이 별개로 DDL을 만들고 있습니다. 그리고 서버로 배포할.. 2021. 9. 17.
[UML] 상태 머신 다이어그램 이해하기 안녕하세요. 오늘은 오랜만에 UML의 시간을 가져보고자합니다. 오늘 알아보고자 하는 UML은 상태 머신 다이어그램입니다. State Machine Diagram (객체 상태 다이어그램) 상태 머신 다이어그램 모델이란 객체의 행동 다이어그램 중 하나입니다. 객체는 특정 상태를 지니며 이 상태는 이벤트와 같은 액션에 의하여 상태는 변경될 수 있습니다. 이러한 객체의 상태와 상태의 변화를 도식화 한 다이어그램이 바로 객체 상태 다이어그램입니다. 외부에 비동기적으로 데이터를 전송하고 이벤트를 수신함에 있어서 응답 확인 처리를하는 시나리오가 있을 수 있습니다. 이럴경우 이를 상태 머신 다이어그램으로 나타낼 수 있습니다. 아래의 이미지를 보시면 명확하게 알 수 있습니다. 아래의 이미지는 전송 완료 상태에서 응답 확.. 2021. 9. 9.
[mockk] 코틀린 테스트 프레임워크에 대해서 알아보자 안녕하세요. 오늘은 코틀린 테스트 프레임워크인 mockk의 사용법에 대해서 알아보는 시간을 가져보도록 하겠습니다. mockk framework mockk는 코틀린 스타일로 테스트 코드를 작성할 수 있도록 도와주는 라이브러리입니다. 기존의 java에서 사용하시던 mockkito를 대체한다고 보시면 됩니다. mockk를 사용하기 위해서는 아래처럼 mockk에 대한 의존성을 주입해주실 필요가 있습니다. 포스팅을 쓰는 시점의 가장 최신 버전은 1.12.0 이므로 저는 이 버전을 사용하도록 하겠습니다. testImplementation("io.mockk:mockk:1.12.0") 테스트 서비스 예제 코드 mockk로 테스트를 만드는데 사용할 코드는 아래와 같습니다. 메인으로 테스트할 코드는 마지막에 있는 Mapp.. 2021. 9. 6.
[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.
[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.