본문 바로가기

개발기술

(132)
POSIX multiplexing Non-blocking I/Ofcntl(fd, F_SETFL, O_NONBLOCK);이걸 설정하면 read() / write() 가 → 데이터가 없을 때 blocking 하지 않고 즉시 -1(EAGAIN) 을 리턴.해당 방식의 문제점은 사용자가 직접 polling 해야함while (1) {read(fd, ...);sleep(1); // or 그냥 busy loop} Multiplexing (select, poll, epoll)epoll_fd = epoll_create1(0);epoll_ctl(epoll_fd, EPOLL_CTL_ADD, socket_fd, &event);epoll_wait(epoll_fd, events, max_events, timeout);여러 fd 를 커널에게 한번에 맡기고 ready..
이벤트 드리븐 event driven이란?Event Driven = "외부에서 무언가 발생했을 때 (event), 그에 반응해서 (callback or handler) "비즈니스 로직이 실행되는 구조." 즉, 설계관점에서 Event driven 이라는 건외부에서 어떤 event(데이터, 신호, 메시지) 가 들어오면그것을 event loop (혹은 dispatcher) 가등록된 handler (callback) 에게 넘겨서필요한 로직을 실행하는 구조.대표적인 Event Driven 시스템 예시🖥 서버 / 네트워크 예시 설명Node.js단일 event loop 기반, HTTP/socket, callback 구조Netty (Java)NIO 기반 event loop, channelPipeline handler 로 이벤트 ..
RabbitMQ : Java Client 통신구조 RabbitMQ 와 client 의 통신 구조 전반RabbitMQ와 Connection 1개당 메인 쓰레드를 생성하고 read()를 동해서 메인 쓰레드는 Socket에 데이터가 들어올때까지 Block 상태로 대기한다. Socket에 데이터가 들어오면 메인쓰레드는 Woker Thread에게 callback 함수를 전달하여 후속 로직을 실행한다.이벤트 드리븐 아키텍쳐지만 non blocking event loop구조는 아니다 왜냐면 MQ client 는 보통 많은 connection 을 열 필요가 없음 Kafka, RabbitMQ, NATS, Redis Streams 등 MQ client 들은 한 application 이 broker 와 보통 1~5개 connection 만 유지합니다. epoll, kqu..
트리 구조 API (메뉴트리, 댓글트리) 트리 구조 API란트리 구조 API는 계층형 데이터(부모-자식 관계)를 클라이언트에 구조적으로 전달하는 API입니다.프론트엔드는 이 API를 통해 트리 형태의 UI를 구성합니다. 이 구조가 널리 쓰이는 이유✅ 프론트에서 바로 사용 가능React, Vue, Angular에서 children 기반으로 메뉴 컴포넌트를 재귀 렌더링✅ UI 연동이 쉬움아이콘, 경로, title 등 필요한 정보를 함께 포함시켜 UX까지 포함된 메뉴 구성 제공✅ null 또는 []로 리프 노드 명확화자식이 없는 경우를 명확하게 처리할 수 있어 로직 구현에 유리 대표적인 트리 구조 데이터 예시 메뉴 : 상위-하위 메뉴 구조{ "code": 200, "message": "메뉴 조회 성공", "data": [ { ..
데이터 베이스의 디스크 읽기방식 디스크 I/O는 ‘읽어야할 row 개수’보다 ‘접근 패턴’이 중요 디스크는 블록 단위로 읽는다 디스크에서 데이터를 읽을 때는 row 단위가 아니라 보통 4KB, 8KB 블록 단위로 읽습니다.하나의 블록에는 수십~수백 개의 row가 들어있습니다.즉, 100만 row를 Full Scan한다 해도, 디스크는 수천 개의 블록만 읽으면 충분합니다. Full Scan 순차 I/O (Sequential I/O): 디스크가 물리적으로 인접한 블록을 한 번에 쭉 읽는 방식하드디스크의 경우, 디스크 헤드가 거의 움직이지 않음 (빠름)SSD도 내부 채널 병렬성 활용이 가능 (빠름)OS나 DB가 미리 예측해서 prefetch → 성능 극대화Full Scan은 하드디스크나 SSD가 물리적으로 정렬된 데이터를 블록 단위로 연..
embedded key 와 joincolumn에 대하 정확히 보셨어요! 지금 이 AuthMenu 엔티티에서 auth나 menu 필드에 실제 값이 들어가지 않는다면, 그 이유는 대부분 아래 두 가지 중 하나 때문입니다:✅ 원인 1. insertable = false, updatable = false 때문java복사편집@ManyToOne(fetch = LAZY) @JoinColumn(name = "auth_id", insertable = false, updatable = false) private Auth auth; 이 설정은 JPA에게 다음과 같이 지시합니다:🔒 이 auth_id는 DB에 insert/update할 때 사용하지 마라.👉 즉, 읽기 전용 필드로만 사용하겠다는 뜻입니다.결과적으로:auth나 menu 필드는 persist() 시 아무 역할도 하..
Sliding window와 Redis ZSET Redis ZSet(Sorted Set)이란? 기본 개념ZADD Sorted Set(ZSET)은 key, score, member로 구성됩니다.key: 하나의 ZSET 컬렉션을 대표하는 이름score: 정렬 기준이 되는 숫자 (double,) , 우리는 timestamp로 사용member: 실제 저장되는 값 (String)값은 중복 불가하지만, score는 중복 가능. member는 유일해야 함 (덮어쓰기 방지 위해 유일 값 필요)score를 기준으로 자동 정렬됩니다. 아래 예시는 "user1"과 "user2"는 각각 시간 score 기준으로 정렬ehlaZADD online-users 1717067600000 "user1"ZADD online-users 1717067610000 "user2" 주..
JPA 데이터 조회 구현 ; EntityFetch JPA Method, JPQL, QueryDSL, 네이티브SQL JPA에서 제공하는 주요 조회 쿼리 생성 방법JPA는 객체를 기반으로 검색할 수 있도록 여러 가지 방법을 제공합니다.조회 방법설명JPQL (Java Persistence Query Language)엔티티 객체를 대상으로 SQL과 유사한 문법으로 조회네이티브 SQLJPA에서 직접 SQL을 사용할 수 있도록 지원QueryDSLJPQL을 타입 안전하게 편리하게 작성할 수 있도록 도와주는 빌더 클래스 JPA Method 생성시 Method Naming 룰 in Spring Data JPAfindbyId : Id를 기준으로 해당하는 엔티티를 반환save() : PK에 해당하는 엔티티가 존재하지 않으면 create, 존해자면 update 함.업데이트 : jpa에서는 업데이트문이 존재하지 않고 find()로 엔티티..