스프링 부트는 어떻게 라이브러리 버전 관리를 자동으로 하지?
2024. 12. 12. 20:55
Spring
0. 들어가며스프링부트로 개발을 하다보면 다양한 외부 라이브러리를 활용하게 됩니다. 예를 들어, 웹 애플리케이션을 위해 spring-boot-starter-web을, DB 연동을 위해 spring-boot-starter-data-jpa를, JSON 처리를 위해 jackson 계열 라이브러리를 사용하죠.그런데 스프링부트를 사용하면 특정 라이브러리의 버전을 적지 않아도 프로젝트가 잘 빌드되고 동작합니다. 스프링부트는 의존성을 관리해주는 기능을 제공하는데, 어떻게 라이브러리 버전을 자동으로 관리하는지 궁금하여 알아본 내용을 글로 정리합니다. 1. 스프링 부트와 의존성 관리1.1 의존성 관리의 필요성프로젝트를 진행하다보면 수많은 라이브러리를 가져다 쓰게됩니다. 하나의 웹 애플리케이션을 개발한다고 해도 적어도 다..
Private Method를 테스트를 하고싶으면 어떡하지?
2024. 12. 4. 21:40
Spring
0. 서론NEXT STEP TDD 수업을 들으며 기능을 구현하던 와중 private method를 테스트하고 싶다는 생각이 들었는데요. private method를 테스트하면 좋지 않다고 들어왔기 때문에 멈칫하게 되었고, 이에 정말 private method 는 테스트하면 안좋은걸까라는 의문이 생겨서 이 글로 제 개인적인 의견을 정리해봅니다. 1. private method를 테스트하는 것이 왜 좋지 않은가?여러 자료를 살펴보면 private method를 테스트하는 것이 변경에 취약한 구조를 만든다고 합니다. 이에 대한 이해를 위해 public method와 private method의 변경 가능성에 대한 전제 하나를 만들고 가야하는데요. public method는 클래스 외부에 공개된 계약으로 간주됩..
BloomFilter에 대하여.
2024. 5. 29. 21:55
CS/자료구조
0. 들어가며 BloomFilter에 대해 알아보게 된 계기대규모 사용자 기반을 가진 서비스에서 사용자들에게 개인화된 정보를 제공하는 경우, 개인화된 정보를 효율적으로 저장하고 이를 빠르게 처리해야하는 것이 중요합니다. 하지만 DB만을 저장소로 사용하다보면 데이터가 쌓일수록 저장공간도 많이 사용해야하고, 트래픽이 많아질 수록 성능 저하가 생길 수 있습니다. 이러한 문제를 해결하기 위해 메모리를 효율적으로 사용하면서도 빠르게 특정 원소가 집합에 포함되어있는지 확인이 가능한 BloomFilter라는 자료구조를 도입해보았고, 도입하는 과정에서 BloomFilter에 대해 알아본 내용들을 정리해보려합니다.이번 글에서 다룰 내용 소개이번 글에서는 다음과 같은 내용을 다룹니다.BloomFilter가 무엇인지Bloo..
[Database] 인덱스(index)에 대하여.
2023. 12. 23. 02:28
CS/데이터베이스
0. 들어가며 데이터베이스의 쿼리 성능 향상을 위해 빼놓을 수 없는 것이 바로 인덱스입니다. 무지성으로 인덱스를 where 절에 있는 컬럼에 맞춰걸지 않지 않기 위해 공부한 내용을 정리해보려 합니다. 인덱스는 어떻게 동작하고, 인덱스를 걸었더니 왜 성능이 빨라진거지에 대한 물음을 얻는 것이 목표이며, 본 글의 내용은 Real MySQL 8.0을 주로 참고한 내용입니다. 따라서 MySQL과 InnoDB 스토리지 엔진을 기반으로 된 설명임을 알립니다. 이 글을 읽기 전 알고 있어야할 배경지식은 다음과 같습니다. B-Tree가 무엇인지 DB에 대한 간단한 지식 1. 데이터베이스의 디스크 읽기 HDD는 SSD에 비해 500배 느리고, SSD는 DRAM에 비해 1,000배 가량 느립니다. 또 DRAM은 CPU에 ..
[Kotlin] 코틀린에서의 제네릭에 대하여.
2023. 8. 31. 01:09
Java & Kotlin
0. 들어가며 🏃🏻♂️ 이번 글은 코틀린에서의 제네릭과 관련된 내용을 정리해보려합니다. 제네릭과 공변에 대한 내용은 한번 제대로 정리해보고 싶었는데 마침 코틀린 인 액션을 읽고 코틀린의 제네릭에 대해 배우게 되었습니다. 자바와 비슷하면서도 다른 기능들을 제공해주는데 제네릭 개념과 함께 이를 정리해보겠습니다. 본 글은 자바 혹은 코틀린 제네릭에 대한 문법정도는 알고 읽어야 도움이 되실 것 같습니다. 1. 들어가기 전 코드 베이스 설명 제네릭과 공변 관련 개념을 설명하기위해 본 글에서는 아래와 같은 코드를 예시로 사용하려 합니다. 간단한 코드이니 한번 살펴봐주세요! // 동물 open class Animal(val name: String) // 포유류 open class Mammal(name: String..
[Kotlin] Kotlin In Action을 읽고나서.
2023. 8. 22. 16:51
Java & Kotlin
0. 들어가며🏃🏻♂️ 최근 여러 회사들의 기술 스택을 보면 자바 대신 코틀린을 사용하는 경우가 많이 있는 것 같습니다. 저 또한 회사에서 코틀린을 사용하고 있는데 과연 내가 코틀린스럽게 사용하고 있는걸까? 라는 의문이 드는 순간들이 많았던 것 같습니다. 이에 코틀린 컴파일러 개발자가 직접 썼다는 Kotlin In Action을 읽어보았고, 이에 대한 내용과 생각을 정리해보려 합니다. 1. 코틀린에 대하여😎 많은 자바 개발자들이 자바에 익숙했음에도 불구하고 코틀린으로 기술 스택을 변경해나가는 이유가 무엇일까 궁금했습니다. 이를 알기 위해서는 코틀린의 특징, 철학 등에 대해 먼저 알아보아야 할 것 같은데요. 코틀린 공식문서와 Kotlin In Action에서 설명하는 코틀린을 제 나름대로 요약, 정리해보면..
[JPA] findByXXX 와 findByXXXId 에서 생기는 차이
2023. 8. 5. 00:47
Spring/JPA
0. 문제상황 🤔 Spring Data JPA를 사용하다가 다음과 같은 상황이 있었습니다. A 라는 엔티티가 B 라는 엔티티를 필드로 가지고 있는데 A를 찾기 위해 B 조건을 걸고 싶었던 것이죠. 원래 같았으면 findByB(B b) 와 같은 메서드를 Spring Data JPA를 사용해 추가했을 텐데 제약사항때문에 findByBId(Long id)와 같이 B의 Id 값을 통해 불러오고 싶었습니다. 근데 왠걸 findByBId(Long id)를 호출하고 쿼리를 확인해보았더니 join문이 끼어있더군요. 이런 상황이 왜 벌어졌는지 알아보았고, 이를 알아본 내용을 정리하려합니다. 1. 테스트 해보기❗️ 우선 상황을 가정해보도록 하겠습니다. 아래와 같이 Member 엔티티와 Team 엔티티가 있다고 생각해봅시다..
[Spring] 동시성 이슈 해결하는 방법 찍먹하기
2023. 7. 22. 18:30
Spring
0. 들어가며 🏃🏻♂️ 평소 동시성 이슈에 대해 알고는 있었으나, 이를 어떻게 해결하는지 이론적으로만 알고 있다고 생각하여 코드상으로는 어떻게 구현할 수 있는지에 대해 알아보기 위해 공부하였고, 이에 대한 내용을 정리해보려합니다. 전체적으로 인프런의 재고시스템으로 알아보는 동시성이슈 해결방법 강의를 참고하였습니다. 1. 전체 개요 📖 우선 글에서 가정이 되는 상황을 먼저 소개하겠습니다. 어떤 물품을 판매한다고 가정했을 때 물품의 수량이 있을 것이고, 소비자가 물품을 사는 행위를 할 때마다 Stock entity에 decrease 메서드를 통해 수량을 감소시키는 간단한 상황을 생각해보겠습니다. @Entity public class Stock { private Long quantity; public voi..
[프로그래머스] 등산코스 정하기 - Python
2023. 6. 30. 01:10
Algorithm/프로그래머스
🤔 문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 😀 풀이 해당 문제는 최단 경로 문제의 변형으로 최단 경로문제가 익숙하시다면 다익스트라 알고리즘을 떠올리기까지는 비교적 쉬울 것 같습니다. 다만 저처럼 아무생각 안하고 다익스트라를 적용하게되면 시간초과를 맞게됩니다..ㅠ 처음 생각했던 풀이는 모든 출입구에 대하여 (출입구 -> 산봉우리 -> 출입구)의 최단경로를 구하는 방식을 사용했는데 이렇게 되면 N번의 다익스트라를 수행해야해서 시간초과가 나게되죠. 문제를 다시 천천히 읽어보니 2가지 포인트를 찾을 수 있었습니다. 첫 번째는 (출입구 -> 산봉우리)..
[Spring & Java] 왜 난 개발할 때 Runtime Exception을 써왔지?
2023. 5. 16. 14:53
Spring
0. 들어가며 🏃🏻♂️ 스프링으로 개발을 하다 보면 예외에 대한 코드를 작성하는 경우가 많이 있습니다. 예외처리를 위해 커스텀 예외 클래스를 종종 만들곤 했는데 대부분의 경우 RuntimeException을 상속받아 클래스를 작성했습니다. 이러한 방법에 불편함이 없었기 때문에 별생각 없이 쓰고 있다가 문득 나는 왜 개발할 때 Checked Exception이 아닌 Unchecked Exception 즉, Runtime Exception을 주로 사용했지라는 물음에 답을 할 수 없음을 깨달았습니다. 이에 해당 내용을 공부해 보았고, 공부한 내용을 정리해보려 합니다. 1. Java의 Exception 간단한 복습 📖 본격적으로 글을 쓰기 전에 먼저 Java에서의 Exception에 대해 간단히 내용정리를 해..