본문 바로가기

전체 글

(177)
트리 구조 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() 시 아무 역할도 하..
Redis ZSet 기반 슬라이딩 윈도우 설계 🔹 Redis ZSet 기반 슬라이딩 윈도우 설계📌 목적인원 수 기반 실시간 혼잡도 판단 시스템에서, 각 구역(subArea)의 최근 1분 간 인원 수 데이터를 기반으로 혼잡도를 판단해야 함.📌 기술적 배경 및 요구사항슬라이딩 윈도우: 최근 60초 데이터만 반영해야 함.데이터 중복 가능: 같은 peopleCount가 여러 번 들어올 수 있음.시간순 정렬 필요: 최신 데이터 순으로 빠르게 접근 가능해야 함.동시성/분산 환경 고려: 시스템은 여러 인스턴스에서 동시에 Redis에 접근하므로, 분산 환경에서 안정성이 필요함.왜 ZSet인가?비교 기준Hash/List/SetZSet정렬 지원없음✅ Score 기반 정렬슬라이딩 윈도우 구현TTL이나 별도 처리 필요✅ rangeByScore(min, max) 사용..
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()로 엔티티..
C언어 정리 C언어 학습의 필요성리눅스 커널은 C로 작성되어 있습니다. 따라서 커널의 구조와 동작 방식을 이해하려면 C 언어에 대한 지식이 필요합니다.추상화 언어의 최적화 가능I/O 성능과 버퍼링 이해 가능: C를 통해 버퍼, 블로킹/논블로킹 I/O, 파일 디스크립터, select/poll 등 성능과 밀접한 개념 이해메모리, 포인터, 시스템 콜, 버퍼링, 프로세스/스레드 같은 개념을 C로 직접 경험하면,JVM·GC 내부 동작네트워크 I/O 병목대용량 데이터 처리 최적화성능 튜닝이런 영역에서 문제를 더 깊이 이해하고 해결할 수 있는 기반이 생깁니다. 포인터란?포인터(pointer)는 메모리 주소를 저장하는 변수입니다. 포인터기호& : 주소 연산자, ~의 주소를 구해라.* : 역참조 연산자, 그 주소에 있는 값을 가..
I/O 시스템과 스트림 UNIX의 철학 : 모든 것은 파일이다의 의미진짜 전부 파일이라는 뜻이 아니라,운영체제가 그것들을 '파일처럼 다룰 수 있게 만든다'는 의미입니다.즉, 운영체제가 다양한 자원을 파일 인터페이스로 추상화했다는 뜻 자원 종류설명실제 파일인가?파일처럼 다뤄지는가? (read, write, FD 사용 등)file.txt디스크 상의 실제 파일✅ 예✅ 예/dev/null쓰면 버리고, 읽으면 EOF 반환하는 특수 장치❌ 아니오✅ 예/dev/sda, /dev/tty0하드디스크, 터미널 등 물리 장치❌ 아니오✅ 예소켓 (AF_INET)TCP, UDP 같은 네트워크 통신❌ 아니오✅ 예stdin, stdout, stderr표준 입출력 스트림 (fd = 0, 1, 2)❌ 아니오✅ 예 파일인터페이스란진짜 물리적 파일이 아니더라..