분류 전체보기696 외부 API를 연동할 때 고려하면 좋은 점들 개요최근 프로젝트에서 외부 API를 연동하는 일이 굉장히 많았었는데, 작업하면서 얻은 다양한 경험과 지식을 공유하고자 작성하게 되었습니다. 피드백은 언제든 환영이며 댓글 남겨주시면 감사하겠습니다. 1. I/O와 트랜잭션을 분리해라트랜잭션은 데이터베이스와 통신하기 위해 커넥션을 필요로 한다. 하지만 이 커넥션을 생성하는 데는 꽤 많은 비용이 들며, 대부분 이를 절약하기 위해 웹 애플리케이션 서버(WAS)는 실행 시 미리 일정 수의 커넥션 객체를 만들어 풀에 저장한다. 그리고 클라이언트의 요청이 발생하면 이 풀에서 이미 생성되어 있는 커넥션 객체를 사용하는 방식을 이용한다.그러나 커넥션 풀의 크기는 제한되어 있기 때문에, 동시에 수많은 요청들이 커넥션 풀의 개수 이상으로 오게 된다면, 커넥션을 획득하지 못.. 2024. 2. 24. [Kafka] 프로듀서 멱등성 보장하기 개요멱등성은 동일한 작업을 여러 번 수행하더라도 동일한 결과가 나타나는 특성을 의미합니다. 따라서 멱등성을 지닌 프로듀서는 같은 데이터를 여러 번 전송하더라도 해당 데이터가 카프카 클러스터에 단 한 번만 저장되도록 보장합니다.그렇다면 프로듀서에 어떻게 멱등성을 적용하고, 이를 통해 데이터의 중복 저장 없이 정확히 한 번만 저장되도록 보장할 수 있을까요? 이번 글에서는 프로듀서에 멱등성을 보장하도록 적용하는 방법에 대해 상세하게 알아보도록 하겠습니다. 메시지 전송 방식Producer와 Broker의 설정 및 구성에 따라 Kafka에서는 메시지 전달 보장 수준을 아래와 같이 세 가지 방식으로 구분합니다. 최대 한 번 (At most once): 메시지가 한 번만 전송되며, 재전송은 발생하지 않는다. 그러나.. 2024. 2. 1. MySQL 버전에 따른 @Transactional(readOnly=true)의 동작 과정 개요 이 글은 태현님의 블로그 게시글에서 영감을 받아 작성하게 되었습니다. 우리는 스프링 프레임워크를 통해 RDBMS를 활용하는 과정에서, 우리는 성능 최적화, 가독성 향상, 데이터 일관성 유지 등 여러 이유로 비즈니스 로직에 @Transactional(readOnly=true) 어노테이션을 자주 사용하곤 합니다. 그런데 이 어노테이션은 어떠한 원리로 동작하는 것일까요? 이번 글에서는 @Transactional(readOnly=true)의 JDBC 단계에서의 동작 과정을 위주로 살펴보려 합니다. 동작 과정 비즈니스 로직에 @Transactional(readOnly=true)을 걸고 실행하는 경우 동작하는 전체적인 과정은 아래와 같습니다. 트랜잭션 시작 데이터베이스 연결 준비 읽기 전용 상태 전파 비즈니스.. 2024. 1. 24. [랭킹 알고리즘] - Hacker News Algorithm 개요공개된 Ranking Algorithm에는 가장 인기 있는 게시글을 선별하거나, 추천수를 바탕으로 순위를 매기는 알고리즘, 평점에 따라 순위를 결정하는 알고리즘 등 다양한 방식의 랭킹 알고리즘이 존재합니다. 이 중에서도 Hacker News Ranking Algorithm, Reddit Ranking Algorithm, 그리고 Highly Rated가 대표적인데, 이번 글에서는 이들 중에서도 조회수를 바탕으로 간편하게 적용할 수 있는 Hacker News Algorithm에 대해 자세히 알아보도록 하겠습니다. Hacker News Algorithm이란?Hacker News Algorithm은 Y Combinator가 운영하는 뉴스 공유 사이트인 Hacker News에서 사용하는 랭킹 알고리즘입니다... 2024. 1. 16. 2023년 회고 드디어 올 것이 왔다. 2022년 회고를 쓴 게 엊그제 같은데 벌써 2023년 회고... 라니 시간 진짜 빨리 간다. 작년 이맘때쯤 취업했으니 1년 차? 아니 2년 차라 해야 하나? 여하튼 새해를 맞았으니 작년 한 해를 한번 회고해보자 한다. 작년 회고글도 그렇듯 올해도 회고글은 남들에게 보여주기보다는 내 스스로 정리하면서 한해를 뒤돌아보는 경향이 강하기 때문에 글에 두서가 없을 수도 있다.. 혹시나 지금 이 글을 읽으면서 불편함을 느꼈다 해도.. 감안해서 보면 좋겠다. 책 먼저 한 해 동안 읽은 책들은 다음과 같다. 한 달에 한 권씩은 읽는 걸 목표로 했는데 어느 정도 달성한 것 같아서 기분이 좋다. 클린코드 면접을 위한 CS 전공지식 노트 구글 엔지니어는 이렇게 일한다. 테스트 주도 개발 이펙티브 자.. 2024. 1. 14. [Kafka] 리밸런싱 종류와 파티션 할당 전략 개요카프카 컨슈머는 토픽의 각 파티션에서 메시지를 처리하는 역할을 합니다. 그런데 특정 컨슈머가 문제를 겪게 되면 그 컨슈머가 처리하던 파티션의 소유권을 다른 컨슈머로 넘겨야 합니다. 이런 과정을 '리밸런싱'이라고 부르며 주로 아래 네 가지 상황에서 발생합니다.컨슈머 그룹에 새로운 컨슈머가 추가될 때기존 컨슈머가 그룹에서 나갈 때구독하는 토픽에 새로운 파티션이 생길 때컨슈머가 구독하는 토픽이 변경될 때리밸런싱이 가장 많이 일어나는 일반적인 상황은 애플리케이션 배포 시입니다. 기존 애플리케이션 종료 후 새로운 애플리케이션이 실행되면서, 기존 컨슈머가 삭제되고 새로운 컨슈머가 생성되기 때문입니다. 이 과정에서 리밸런싱이 최소 두 번 이상 발생하게 됩니다.그리고 리밸런싱 과정은 아래와 같은 문제점을 동반합니다.. 2024. 1. 7. 기업 정보를 수집하는 방법 공공 API 조사먼저 다른 채용 플랫폼들은 어떤 방법으로 기업 정보를 수집하고 있는지 조사를 시작했습니다. 대부분의 플랫폼들이 데이터의 출처를 명시해 놓아 조사하기는 수월했는데, 약 6개의 플랫폼을 살펴본 결과 대표적으로 나이스(NICE), 금융감독원(FSS), 금융위원회(FSC), 그리고 국민연금공단(NPS) 등에서 데이터를 제공받고 있는 것을 확인할 수 있었습니다. 그리고 더 나아가 중소벤처 24, 알리오, 클린아이 등에서도 데이터를 얻을 수 있는 것을 확인했습니다.각 데이터 출처의 웹사이트는 다음과 같습니다.나이스(NICE): https://www.niceinfo.co.kr/main.nice금융감독원(FSS): https://opendart.fss.or.kr/guide/main.do?apiGrpCd.. 2023. 12. 28. Hibernate의 @Formula를 이용한 연관 관계 엔티티 집계 개요 Hibernate의 @Formula 어노테이션은 엔티티 클래스 내에서 실제로 데이터베이스 스키마에 존재하지 않는 '가상 컬럼'을 정의할 수 있는 기능입니다. @Formula를 사용하면 다른 컬럼들의 값에 기반하여 계산된 값을 표현할 수 있으며, 이 값은 엔티티를 조회할 때만 계산되어 사용됩니다. 예시 코드 @Formula 어노테이션의 전형적인 사용 사례는 연관된 데이터의 집계를 수행하는 경우입니다. 예를 들어, 게시글과 연결된 댓글의 수를 계산하는 경우를 들 수 있습니다. 아래는 간단한 예시 코드입니다. 전체 코드는 깃허브에서 확인 가능합니다. @Entity public class Post { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) pri.. 2023. 12. 20. [Java] CompletableFuture로 비동기 및 병렬 처리하기 Future vs CompletableFuture Future와 CompletableFuture는 모두 Java에서 비동기 프로그래밍을 지원하기 위한 도구입니다. Java 5에서 도입된 Future는 비동기 연산의 결과를 표현하는 데 사용되며, Java 8에서 도입된 CompletableFuture는 Future를 확장하여 더 많은 기능을 제공합니다. CompletableFuture와 Future차이는 무엇일까요? Future에 대한 상세한 내용은 이번 포스팅의 주제에서 벗어날 것 같아 간단하게 CompletableFuture와의 차이점만 비교해 보았습니다. Blocking vs Non-Blocking Future는 get() 메서드를 통해 비동기 연산의 결과를 얻습니다. 하지만 이 메서드는 연산이 완료.. 2023. 12. 12. 이전 1 2 3 4 5 6 ··· 78 다음