전체 글 36

데이터 스트리밍 - 카프카(Kafka)

데이터 스트리밍은 다양한 데이터 소스에서 일련의 데이터를 취합 및 수집하고 해당 데이터를 실시간으로 처리하여 의미와 인사이트를 추출하는 것을 포함한다.스트리밍 데이터는 일반적으로 빅데이터와 관련해서 쓰이는 용어로, 그 예로는 고객이 생성하는 로그 파일, 전자 상거래 구매, 게임 내 플레이어 활동, 소셜 네트워크의 정보, 주식 거래소, 지리공간 서비스, 연결된 디바이스의 텔레메트리, 데이터 센터의 계측이 있다. 스트리밍 데이터를 처리하기 위한 대표적인 소프트웨어아파치 카프카(Kafka) : 실시간 데이터를 처리하는 오픈소스 분산형 이벤트 스트리밍 플랫폼. 이벤트 기반 애플리케이션을 지원하고 신뢰할 수 있는 데이터 파이프라인을 구축하는 데 탁월하며, 지연 시간이 짧고 처리량이 높은 데이터 전송을 제공한다.

TIL 2025.08.23

Redis

Redis (Remote Dictionary Server): In memory 기반의 key-value 구조를 가진 오픈 소스 기반 비관계형 데이터베이스(NoSQL) 관리 시스템.디스크가 아닌 메모리 기반이라 모든 데이터들을 메모리에 저장하고 조회에 매우 빠르다. (리스트형 데이터 입력과 삭제가 MySQL에 비해서 10배정도 빠름)메모리에서 처리된 데이터를 주기적으로 디스크에 동기화해 데이터 유실을 방지메모리에 상주하면서 서비스의 상황에 따라 데이터베이스로 사용될 수 있으며, Cache로도 사용될 수 있다.자주 조회되는 데이터를 메모리에 캐싱 하여 데이터베이스의 부하를 줄이고 빠른 응답 속도를 제공참고

TIL 2025.08.22

node.js

html 웹페이지에 동적 기능과 상호 작용을 추가하는 데 일반적으로 사용되는 컴퓨터 프로그래밍 언어인 JavaScript의 파일 실행기. 즉, Node.js는 JavaScript 코드를 브라우저 외부에서 실행할 수 있게 해주는 런타임(실행창) 환경이다.빈번한 I/O 처리에 있어서의 우수한 성능, 서버 확장의 용이성, JavaScript라는 프론트엔드 필수 언어로 백엔드까지 작성할 수 있다는 장점 때문에 출시 이후로 빠르게 점유율을 높여가고 있다.단일 스레드 non-blocking I/O 이벤트 기반 비동기 방식으로 작동하는데, 비동기로 데이터를 처리할 수 있기 때문에 동시에 많은 이용자가 이용하는 서비스에 적합하다. 패키지 매니저npm (Node Package Manager): Node.js를 설치하면..

TIL 2025.08.19

Vault

Vault는 비밀 관리 및 데이터 보호를 위한 보안 솔루션으로, API 키, 비밀번호, 인증서와 같은 중요한 정보를 안전하게 저장하고 접근을 제어하는 기능을 제공한다. 또한, ID 기반 접근 관리(인증;Authentication & 권한 부여;Authorization)와 동적 비밀 생성(Dynamic Secret), 암호화 서비스 등의 강력한 보안 기능을 갖추고 있다. Vault는 기본적으로 토큰(Token)을 기반으로 작동하며, 이 토큰은 정책(Policy)과 연결된다. 각 정책은 경로(Path) 단위로 정의되며, 해당 경로에 어떤 권한을 부여할지 설정하는 방식이다. Vault의 기본 워크플로는 4단계로 구성된다.1. 인증(Authentication) : 클라이언트가 Vault에 자신을 인증, 토큰 생..

TIL 2025.08.18

페이징(Paging)

페이징(Paging)전체 데이터를 한 번에 불러오지 않고, 일정한 범위로 잘라서 가져오는 백엔드의 데이터 처리 방식필요한 데이터만 전달하므로 응답 속도가 빨라지고 데이터 처리 부담이 줄어든다.페이징 방식 종류Offset 기반 (페이지별 목록 / 검색 결과 조회, PC 환경에 적합)버튼을 눌러 페이지 이동 ( page=1&size=10 )구현이 간단함페이지가 깊어질수록 성능 저하 (OFFSET이 클수록 느림)중간 데이터 변경 시 중복/누락 가능예) page=2로 요청했는데, 그 사이에 page=1에 해당하는 데이터가 삭제되면, 일부 데이터가 중복/누락될 수 있음Cursor 기반 (무한스크롤 / 피드, SNS, 모바일 환경에 적합)id 또는 created_at 같은 정렬 기준을 커서로 사용 ( lastIte..

TIL 2025.08.03

게시글 목록 조회

게시글 목록 조회 시 미리보기(최대 100글자) 구현 1. 게시글 내용 일부만 잘라내는 과정을 DB 쿼리(SQL) 단에서 처리하도록 구현: 애플리케이션(Java)에서 자르는 것보다 DB 부하는 조금 증가하지만 다음과 같은 이점이 있음DB에서 필요한 만큼의 데이터만 가져옴 → 성능 효율 좋음네트워크 전송량 최소화글자 수가 많을수록 속도가 더 빠름(긴 글을 짧게 잘라 전송) 2. DB에서 잘라온 후 Java에서 다듬기: 자바(Java)에서 줄바꿈·공백 등을 제거텍스트 전처리, 특히 UI 최적화용 텍스트 정제는 Java가 훨씬 쉽고 직관적유지보수와 가독성 측면에서 Java가 훨씬 유리DB에서 정제하려고 하면 문법 복잡하고 가독성 낮음, 로직 추가할수록 복잡도 증가반면, Java는 가독성 높고, 테스트 용이, ..

TIL 2025.08.02

JPQL은 DB 비종속적 설계

JPQL(Java Persistence Query Language)는 JPA 구현체(Hibernate 등)가 DB에 상관없이 공통된 문법으로 쿼리 작성할 수 있도록 도와주는 추상화된 쿼리 언어 항목 JPQL Native SQL DB 종속성 없음 (JPA 구현체가 알아서 변환) 있음 (직접 DB 함수 써야 함) 사용법 DTO 생성자 기반 Projection interface 또는 DTO mapping 필요 성능 일반적 사용에 충분 복잡 쿼리 최적화 시 유리 SUBSTRING 지원 지원 (SUBSTRING(str, start, length)) DB마다 문법 다름 (Oracle: SUBSTR) 추천 일반적인 경우 가급적 JPQL 사용성능 최적화 필요할 때만 Native SQL대규모 트래..

TIL 2025.08.01

DB에 변화를 줄 수 있는 부분에 @transactional 붙이기

Spring Data Jpa는 save와 delete메서드를 호출하면 자동으로 트랜잭션을 호출하지만 @transactional 어노테이션을 붙여야 하는 이유는 아래와 같다.1. 추가 로직이 있는 경우 트랜잭션 분리가 발생할 수 있음public void deleteQuestion(Long id) { Question question = findQuestionByIdOrThrow(id); // DB 접근 (SELECT) eventPublisher.publish(...); // 이벤트 발생 questionRepository.delete(question); // 또 다른 DB 접근 (DELETE)} 만약 이 전체 메서드가 하나의 @Transactional으로 묶이지 않으면, 각 DB 접근은 별도의..

TIL 2025.07.31

AOP

AOP(Aspect-Oriented Programming, 관점 지향 프로그래밍)는 객체 지향 프로그래밍(OOP)을 보완하는 개념으로, 프로그램의 로직을 핵심 관점과 부가 관점으로 나누어 모듈화하는 방법이다. ( 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것 )핵심 관점: 주된 비즈니스 로직부가 관점: 데이터베이스 연결, 로깅, 파일 입출력 등 핵심 로직을 보조하는 기능 AOP는 반복적으로 나타나는 코드, 즉 흩어진 관심사(Crosscutting Concerns)를 하나의 Aspect로 모듈화하여 핵심 로직에서 분리하고, 이를 재사용 가능하게 만든다. 결국, AOP는 코드의 중복을 줄이고, 관심사를 명확히 분리하여 유지보수성을 높이는 목적을 가지고 있다.

Spring 2025.07.29