본문 바로가기

분류 전체보기

(178)
ERD 작성 https://www.erdcloud.com/ ERDCloudDraw ERD with your team members. All states are shared in real time. And it's FREE. Database modeling tool.www.erdcloud.com
트리 구조 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)는 메모리 주소를 저장하는 변수입니다. 포인터기호& : 주소 연산자, ~의 주소를 구해라.* : 역참조 연산자, 그 주소에 있는 값을 가..