개발 칼럼
-
[5] 블룸 필터를 구현해보자! (feat. 자바)개발 칼럼 2025. 5. 14. 23:57
전에 다뤘던 대용량 트래픽 관련 글 (https://woongle.tistory.com/11)에서 블룸필터를 살펴봤었다. 글로는 잘 이해가 되지 않아. 글을 토대로해서 java로 간단하게 구현해보았다! 클래스 설계블룸필터에 단어를 던졌을 때 다음과 같은 메서드를 가지는 클래스를 만들어보자. i) 단어가 기록된 적이 없다면, 해당 블룸필터 자리를 true로 기록하고 false를 던지고 ii) 단어가 기록된 적이 있다면, true를 던지는 구현에 앞서 아래 몇 가지 고려사항이 있다. 1. 블룸필터 사이즈블룸필터의 사이즈는 CacheRatio와 결함률을 결정한다.블룸필터가 아무리 Fault-Tolerant한 시스템에 사용된다지만, 결함률이 높으면 캐시를 사용하지 않는 편이 더 빠를 것이다. 블룸..
-
[4] 스프링에서 @Autowired 현명하게 사용하기개발 칼럼 2025. 2. 19. 15:00
IoC (Inversion of Control)와 DI (Dependency Injection) 스프링 세계에서 Autowired를 설명하기 위해 반드시 알아야하는 프레임워크의 가장 기본적인 개념이 있다. IoC (Inversion of Control, 제어의 역전) 그리고 DI (Dependency Injection, 의존성주입)이다. Java에서 객체는 Object로 불리지만 스프링 프레임워크에서는 Bean으로 통칭된다. 스프링에서는 모든 Bean의 라이프사이클(생성, 소멸, ...)을 스프링이 관리한다. 객체호출 작업 등이 개발자가 아닌 외부에서 결정이 된다는 것이고, 이것이 바로 "제어의 역전 (IoC)"이라고 부르는 개념이다. 개발자는 외부에서 주입된 이 객체를 정해진 방법에 따라 사용만 하면 ..
-
[3] Try-with-Resources 와 AutoCloseable을 활용한 Java 리소스 관리개발 칼럼 2025. 2. 18. 10:42
Java에서의 리소스 관리는 아주 중요한 요소이다. 과거에는 개발자가 파일, 소켓, 데이터베이스 연결과 같은 리소스를 명시적으로 닫아야 했고, 이는 종종 휴먼 에러(리소스 누수 등)를 초래했다. 실제로 며칠 전 내 업무관련 코드에서도 실수로 파일 관련 리소스를 닫지 않아 취약점 검사에 걸렸었다...😢 그래서 알아본게 바로 이것이다. Try-with-Resources와 AutoCloseable 인터페이스 도입위에 잠깐 말했듯이.. Java7 이전에는 개발자가 코드에서 파일, DB 등 리소스를 사용한 후에 finally 블록을 사용하여 리소스를 명시적으로 닫아야 했다. close 메서드를 호출하지 않으면 memory leak이 발생했고, 잘못 처리할 경우 오류가 발생했다. 다음은 명시적으로 리소스를 닫아..
-
[2] 우버는 어떻게 수 조개의 트랜잭션을 다루나개발 칼럼 2025. 2. 17. 13:49
Uber는 어떻게 수 조개의 결제 트랜잭션을 단 한개의 트랜잭션도 놓치지 않고 처리하는걸까?우리나라 카카오택시와도 비슷한 Uber의 작동방식은 다음과 같이 간단하다. 사용자는 목적지를 입력하고 Uber에게 요금을 지불한다.운전자를 기다린다.탑승 후 원하는 목적지에서 하차한다.Uber는 운전자에게 요금을 지불한다.이제 이 간단한 일을 수억명의 유저들에게 적용하면 된다. Uber도 초창기에는 이 결제 시스템이 불안정하고 지연도 자주 발생했다고 한다. 하지만 모든 시스템이 그렇듯 돈과 관련된건 아주아주 중요한일이고 단 한 건의 실수도 있어서는 안되는 시스템이다. 그렇기에 Uber는 결제시스템의 대대적인 업그레이드를 하기로 마음을 먹는다. 1. 결제시스템 분리Uber는 급격히 증가하는 거래량에 맞춰 시스템을 좀..
-
[1] 수십억건의 유저 데이터에서 ID 존재여부 찾기개발 칼럼 2025. 2. 16. 17:35
10억건 규모의 회원데이터에서의 아이디 validation 체크는 어떻게 해야할까? 현재 내가 개발하고 있는 서비스에서도 천만단위의 회원 DB에서 온라인으로 존재 여부를 판단하는 일은 존재한다. 아니 흔하다. 트래픽과 DB 종류 및 구조에 따라서 인덱스만 적절히 설정해줘도 요구사항에 맞게 작동되는 시스템이 있을 수 있다. 하지만 글로벌서비스같은 경우, DB의 규모가 1억 10억건을 넘어갈 수 있고 트래픽도 지금 경험하는 것 보다 훨씬 많을 것이기에 인덱스만으로 DB를 최적화 하기엔 한계가 있을 수 있다. 그래서 다른 방법도 생각해봐야 한다. 1. DB 조회가장 쉽고 직관적이고 기본적인 방법이다. 요청이 들어오면 DB를 조회하는 것 가장 쉽지만 여기엔 몇 가지 문제가 있다. 성능 문제: 대기 시간이 상대적..
-
개발칼럼 요약개발 칼럼 2025. 2. 16. 16:40
오늘부터 자기개발 및 Medium 글 공유 목적으로 한달에 한 개 정도 Meduim 칼럼을 읽고 요약해볼까한다.주제는 내가 경험해왔던 그리고 경험하고 있는 주제의 개발 관련된 칼럼이며, 주로 머신러닝, 데이터 엔지니어, 스프링, DB 관련 내용이다. (Medium에 구독안하면 읽을 만한 글이 없기에.. 유료 멤버십까지 구독했다.) 물론 저작권이 있기에 칼럼 내용을 그대로 번역하진 않을 것이고 글에 대한 요약과 내 생각을 정리해 볼 예정이다.때론 일기처럼 때론 숙제처럼 적을 예정이고 이런 작고 귀찮은 노력이 쌓여 내 능력과 직관에 밑거름이 되기를 바란다.