본문 바로가기

전체 글45

목록 관리는 단순하게 이 글을 읽고 있다면 카테고리를 상세하게 생성하여 관리해 봤던 경험이 있을 거라고 생각합니다. 저 또한 블로그를 관리할 때, 노트를 정리할 때 가장 먼저 하는 것이 카테고리를 나누는 것이었는데요. 이미 많이 경험 했겠지만 카테고리를 상세하게 나누면서 글을 깔끔하게 정리하는 것은 어렵습니다. 카테고리를 다음과 같이 나눴다고 가정해 보겠습니다. 데이터베이스 네트워크 알고리즘 생각정리 위와 같이 나눴을 때 1년 동안 알고리즘을 공부하지 않는 경우만 놓고 봐도 현재 무엇을 하고 있는지에 따라 카테고리에 새로운 항목이 추가되는 것이 결정됩니다. 특정 카테고리의 글은 1년이고, 2년이고 예전 그대로 그 수를 유지할 수 있다는 것입니다. 이 상태가 지속적으로 반복되면 이른바 "죽은 카테고리"가 됩니다. (죽은 카테고.. 2023. 12. 11.
DDD 사용해보자. 지금까지 개발을 하면서 DDD를 잘 적용하기 위해 노력했고, 그 결과로 몇가지 경우의 수를 추려낼 수 있었다. 이번 글을 통해서 DDD에 대해 간략하게 설명하고, 어떤 경우에 DDD를 고려해볼 수 있는지 설명하겠다. 우선, DDD란 무엇인지 간략하게 알아보자. DDD는 도메인 주도 설계(Domain-Driven Design)의 약어로, 소프트웨어 개발에서 복잡한 도메인을 이해하고 그에 맞게 시스템을 구축하는 설계 방법론이다. 이는 Eric Evans가 2003년에 발표한 "도메인 주도 설계"라는 책에서 소개되었다. 더 자세한 내용은 관련 책을 보면서 학습하는 것을 추천한다. 도메인 주도 개발 시작하기.최범균.한빛미디어 도메인 주도 설계.에릭 에반스 저/ 이대엽 역.위키북스 도메인 주도 설계 철저 입문.나.. 2023. 12. 8.
고객 만족과 지속적 배포 Our highest priority is to satisfy the customer through early and continuous delivery of valuable software. - principles behind the agile manifesto 가치 있는 소프트웨어를 짧은 기간, 지속적으로 배포하여 고객을 만족시키는 것이 최우선순위라는 것으로 해석됩니다. 해석에 따라 IT회사에서 원하는 역량으로 해설될 수 있는데요. 짧은 기간, 지속적 배포 -> 직관적이고 간편한 CI/CD 환경 구축 고객 만족 -> 사용자의 입장에서 서비스를 생각할 수 있는 능력 짧은 기간, 지속적 배포 특히, 짧은 기간, 지속적 배포는 서비스 운영 측면에서 매우 중요하다고 생각합니다. 여러 애자일 방법론 중에 스크.. 2023. 11. 5.
2023년 1분기 회고 1분기를 회고를 4월이 되어서야 작성을 하고 있습니다...😂 (모든 일은 고민하는 시간에 해결하는 게 제일 빠른 것 같습니다.) 미룬 만큼 어떤 일을 해냈고, 어떤 일을 잘하지 못했는지 빠르게 알아보겠습니다. 다음은 1분기에 이루고자 했던 목표입니다. 1주일에 개발 블로그 1개 쓰기 개발 서적 4권 이상 읽기 깃허브 1일 1커밋하기 스터디하기 개발 이외의 서적 1권 읽기 1분기 동안에 어떤 일이 있었는지 알아보겠습니다. 1주일에 개발 블로그 1개 쓰기 언제나 그렇듯 글을 쓰는 일은 어려운 것 같습니다. 주제와 대상을 정하고, 주제에 대한 이해도 등등등 정해야 할 것이 수십 가지가 있기 때문에 더 그런 것 같습니다. 이전 블로그와 현재 블로그까지 합치면 거의 3년 정도 블로그를 작성하며 수백 가지의 글을 .. 2023. 3. 31.
git hooks를 사용하여 commit 메시지 검사하기 commit 메시지를 구조화하고 빠르게 이해하기 위해 commit 컨밴션을 많이 사용하는데요. 보통 컨벤션은 commit 메시지에 prefix를 작성하는 구조를 사용합니다. 가령 feat: 새로운 기능이 추가된 경우 docs: readme와 같은 문서를 수정한 경우 test: 테스트를 추가, 수정한 경우 와 같은 단어들을 prefix로 사용하는데요. 해당 단어들을 사용하여 commit 메시지를 작성하면 메시지를 읽는 것만으로 테스트를 수정했는지 새로운 기능을 추가했는지 이해할 수 있습니다. commit 컨밴션은 문서로 정의해 두고 실제로 commit을 할 때 검사하지 않는 경우도 존재합니다. 이런 경우 컨밴션을 사용하지 않은 commit이 repository에 반영될 수 있기 때문에 개발 중인 프로젝트에.. 2023. 2. 27.
모든 프로젝트에 .gitignore 적용 .gitignore는 Github 사용 시에 커밋하고 싶지 않은 파일들을 정의하는 용도로 많이 사용됩니다. 보통은 프로젝트 단위로 설정을 하게 되지만 spring boot, node + express, react와 같은 프로젝트에서 각각 커밋하고 싶지 않은 파일들이 다르기 때문인데요. 몇가지 파일들 예를 들어 intelliJ를 사용한다면 .idea 디렉터리 하위 파일들 그리고 mac을 사용한다면 .DS_Store와 같은 파일들을 각각의 프로젝트에서 설정하는 것보다는 전체 프로젝트에 적용하는 것이 편하고 효율적일 수 있습니다. 이런 경우 아래 명령어를 실행하여 .gitignore를 전역으로 설정할 수 있습니다. // 루트에 .gitignore 파일 생성 vi .gitignore // 생성된 .gitigno.. 2023. 2. 20.
유닛 테스트와 통합 테스트를 gradle 명령어로 분리하자 많은 테스트와 기능이 있는 프로젝트에서 리팩토링 또는 기능 추가를 하게 된다면 현재 작성하고 있는 코드가 다른 코드에 영향을 미치고 있지는 확인하기 위해 테스트를 여러 번 실행하게 됩니다. 이때, 통합 테스트와 유닛 테스트가 같은 패키지 하위에 있다면 통합 테스트 외부 의존성 설정 시간 때문에 테스트에 많은 시간을 사용합니다. (근처 카페에서 커피 포장해 와도 테스트가 실행 중일 수 있습니다...🤣🤣) 유닛 테스트와 통합 테스트의 실행 목적을 스피커에 빗대어 나름의 생각을 정리하면 다음과 같습니다. 유닛 테스트: 재생을 누르면 내부 회로가 재생 신호를 받는가? 내부 회로는 다음 재생해야 할 음성이 무엇인지 알 수 있는가? 내부 회로는 스피커로 재생해야 할 음성을 전송할 수 있는가? 통합 테스트: 재생 버.. 2023. 2. 18.
Jnit5 @Nested 사용하여 테스트 가독성 높이기 어떤 서비스를 개발해도 시간이 지남에 따라 서비스는 복잡해지고 규모는 커지게 됩니다. 점점 복잡한 기능을 가지면서 성장하다 보면 어느 순간 개발자 1명이 모든 기능을 이해하기 어려울 정도가 되고, 개발자가 기존의 기능을 수정하거나 새로운 기능을 추가하는 경우 코드가 서비스에 어떤 영향을 끼치는지 파악하기 힘들 정도가 됩니다. 여기까지 테스트 코드가 하나도 없다고 한다면 "진정한 기도 메타가 시작되지 않을까?"라는 생각이 듭니다. 이런 의미에서 테스트 코드는 개발자가 수정, 추가한 코드가 다른 코드에 영향을 주지 않는다는 보증의 의미로 "절대 뚫리지 않는 창"처럼 생각되기도 합니다. 하지만 이러한 테스트는 아무런 제약 없이 작성하면 코드를 작성한 개발자를 제외하고, 다른 사람들은 코드를 이해하는데 어려움이.. 2023. 2. 5.
코틀린 coroutine dispatcher 3종 비교 참고문서 kotlinx.coroutines 문서 launch, withContext, async 등 코틀린에서 coroutine을 사용하기 위해서는 Thrad를 어떻게 사용할지에 대한 정책을 설정해줘야 합니다. kotlin에서는 이러한 정책을 Dispatcher라고 부르며 다음과 같은 코드로 정의했습니다. public actual object Dispatchers { @JvmStatic public actual val Default: CoroutineDispatcher = DefaultScheduler @JvmStatic public actual val Main: MainCoroutineDispatcher get() = MainDispatcherLoader.dispatcher @JvmStatic publ.. 2023. 1. 1.
2022년 회고 "학생에서 주니어 개발자로" 목표 kotlin 활용 가능할 정도로 공부해 보기 1주일에 1개 개발 블로그 작성하기 개발 서적 4권 이상 읽기 개발자로 취업하기 졸업 안정적으로 하기 kotlin 활용 가능할 정도로 공부해 보기 쏘카 취업 후 회사 기술 스택이 kotlin + spring boot라는 것을 알게 되어 kotlin에 대한 이해가 필수가 되었습니다. 코틀린 책으로 유명한 책 중 하나인 kotlin in action와 코틀린 쿡북을 읽으며 # 살아있다 #자프링외길12년차 #코프링2개월생존기 로컬 광고 서버 NodeJS->Kotlin 전환기 Kotlin Coroutines 톺아보기 강의를 공부하고, 현재는 코틀린을 다루는 기술 책을 읽으며 코틀린 심화 학습을 이어가고 있습니다. 꾸준히 개발 블로그 작성하기 블로그를 일.. 2022. 12. 27.
입력과 출력 타입이 다르면 fold를 고려해보자 함수형 프로그래밍에 대해 공부하면 map, filter, reduce, fold 등과 같은 함수들에 대해서 알 수 있습니다. 그중에서도 map과 filter는 좋은 예제들과 직관적인 사용법 덕분에 학습에 있어 큰 어려움이 없지만 reduce와 fold와 같은 함수들은 html 문자열 만들기 리스트의 합, 평균 구하기와 같은 개인적으로 살짝 부족한 예제를 설명하여 map과 filter에 비해 학습이 더 어렵습니다. 앞서 설명한 기초적인 예제 말고 조금은 더 실무적인 관점의 예제를 구현하여 fold와 map의 차이를 알아본 후에 왜 입력과 출력 타입이 다를 때 fold를 고려해볼 수 있는지 알아보겠습니다. 요구사항: 프로그래밍 언어, 선호도 ex) java, good 가 저장된 배열이 있을 때 각 언어의 선.. 2022. 12. 20.
@ParameterizedTest 를 사용하여 반복적인 테스트 작성 기능을 테스트함에 있어 하나의 변수로 검증하는 것보다는 여러 변수로 검증하는 것이 테스트의 신뢰도가 높습니다. 보통의 테스트는 함수 하나가 한번만 실행됩니다. 때문에 여러 데이터에 대해 반복적인 테스트를 작성하는 것은 어려움이 따를 수 있습니다. 하지만 Junit5에서는 @ParameterizedTest를 제공함으로써 반복적인 테스트를 쉽게 구현할 수 있게 해 줍니다. 반복적인 테스트를 위한 어떤 데이터를 사용할 것인지 정해주어야 합니다. Junit5에서는 @ValueSource, @CsvSource, @MethodSource를 제공하여 테스트에 사용할 데이터 값 세트를 정의할 수 있습니다. @ValueSource: String, Int, Long, Boolean 등 중에 하나의 타입을 선택하여 배열로 .. 2022. 12. 4.