0. 이 글을 작성하는 이유 postgresql9.6 성능 이야기책을 읽으면서 조금 부족하다고 생각했던 내용을 정리하려고 한다. 1. WAL Buffer WAL이란 Write-Ahead Logging의 약자로 데이터 베이스의 변경 사항을 잠시 저장하는 buffer이며 정해진 시점(사용자 custom가능)에 buffer에 있는 내용은 WAL 파일로 기록되어 백업 및 복구에 사용된다. 2. Postmaster Process와 Background Process Postmaster process는 PostgreSQL을 기동 할 때 가장 먼저 시작되는 프로세스로 초기 기동 시 복구 작업, Shared 메모리 초기화 작업, Background 프로세스 구동 작업을 수행한다. 모든 Background Process는..
0. 이 글을 작성하는 이유 잘 사용하다가 어느 날 postgres가 DBeaver에서 접속이 안되기 시작하였다. 이걸 조치하는 건 구글링으로 해결했지만 발생 이유와 내용을 아주 조금 더 깊게 분석해 본 내용을 공유해 보기 위함 환경 : mac os brew install postgresql14 0-1. 조치 방법 먼저 공유 error : 아래 에러가 발생함. Bootstrap failed: 5: Input/output error Try re-running the command as root for richer errors. Error: Failure while executing; `/bin/launchctl bootstrap gui/501 /Users/user/Library/LaunchAgents/ho..
0. 이 글을 작성하는 이유 토이프로젝트를 위해 집에 미니pc를 하나 구동 중인데 유저를 추가하고 디렉토리 접근 제한을 하는 방법을 시도해 본 내용을 기록하기 위함 1. 일단 내 계정 상황과 하려는 작업은 root계정을 제외하고 A라는 계정을 하나 가지고 있다. 이후 같이 작업하는 사람들에게 B라는 계정을 하나 만들어줄건데 B라는 계정을 가진 사람들은 특정 디렉토리 부터 접근 권한을 주고 싶어 상위 디렉토리는 권한을 주고 싶지 않다. 물론 A라는 계정은 B에 접근 가능하게 할 것이다. 2. 그래서 뭘 했나 우선 새로운 계정을 하나 만들어 주었다. sudo useradd -m -d /home/work_dir B B계정의 시작 디렉토리를 work_dir로 잡아주었다. 이후 비밀번호를 만들어준다. sudo ..
0. 이 글을 쓰는 이유 2023년 회고 1. 우선 내가 뭘 했더라 1-1. 회사에서는 두 번째 회사를 다니며 다양한 작업을 진행했었다. java가 사용되는 파트는 어지간하면 다 들어갔던 것 같다. 회사 내부에 서버를 두고 on-premise형태로 운영되던 SI성 작업이 해당 회사의 Cloud로 이관을 해야 한다고 하며 1월을 시작했었고 기존 회사에서 SaaS형태로 나가던 서비스도 on-premise로 나가기 위해 docker-compose 작업도 진행되었다. 이후 3월과 4월은 SaaS환경에서의 결제 시스템에 수정 및 개발을 진행했다. 1-2. 어쩌다 퇴사 집에 해가 떠있을 때 들어가면 어색하게 느껴질 정도로 높은 업무 강도와 스트레스는 내 건강을 좀먹기 시작했고 많은 고민 끝에 퇴사를 했다. 1-3...
0. 이 글을 작성하는 이유 최근 PostgreSQL을 사용하던 중 기능 구현을 위해 Materialized View라는 걸 알게 되었는 데 사용하면서 알게 된걸 간단하게 정리하기 위함 1. Materialized View와 일반 View를 비교하면서 알아보자. 물리적 저장을 하느냐 안 하느냐의 차이에서 시작할 것 같다. 일반 View는 논리적으로 사용하지만 Materialized View는 의미 그대로 이를 구체화하여 물리적으로 저장한다. View는 이 특성으로 인해 결과값을 저장하는 게 아닌 이 View 전체를 조회하는 쿼리를 참조하고 있어 별도의 갱신이 없어도 계속해서 값을 갱신한다. Materialized View는 실제 값을 저장하기 때문에 갱신을 명시적으로 해주어 한다. 즉, 우리가 View를..
0. 이 글을 작성하는 이유 이번에 Redis에 expired설정을 하는데 방법이 하나만 있는 게 아니어서 기법을 기록하기 위함 1. 우선 Redis의 expire를 간단하게 설명하면 해당 Key의 만료 시간을 설정한다. TTL(Time To Live)은 초 단위로 관리가 된다. 만약 해당 Key의 expire값을 가져올 때 아래 경우의 수를 볼 수 있다. 설정이 되어있지 않다 : -1 Key가 제거되어 있다 : -2 만료가 되었다: 0 아직 남은 기간 : 양수 값 문제는 만료가 된다고 Key가 제거되는 것은 아니라는 거다. 이에 대해 Redis에서는 Key제거에 대한 정책을 두고 있다. 가장 대표적인 것으로는 만료된 Key에 접근 시 제거하는 것과 알아서 Redis Key를 검색하면서 만료된 것들을 제..
0. 이 글을 작성하는 이유 토이 프로젝트를 진행하면서 gRPC를 사용하려는데 rpc파일들은 submodule로 관리를 하려고 한다. 일단 붙이긴 해서 여기서 더 효율적인 gradle내용과 이쁘게 하기 위해 수정은 해야겠지만 기록 및 공유하기 위함 1. 일단 왜 gRPC를 붙이려고 했는가? 토이 프로젝트가 MSA환경으로 구축하고 있는데 각 서비스 간 통신을 하기 위해 gRPC를 택했다. 2. 그래서 gradle은 어떻게 했는가? 인터넷 짜집기를 좀 많이 했다. 분명 수정해야 할 것들이 존재할 거다. 내가 작성한 gradle은 아래와 같다. import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import com.google.protobuf.gradle.* pl..
0. 이 글을 작성하는 이유 Spring API Gateway를 사용하며 정리하기 위해 1. 이전 글에서 좀 달라진 점 이전 글 : https://developer-youn.tistory.com/174 Spring Cloud Netflix Zuul을 바라보며 0. 이 글을 작성하는 이유 회사에서 API Gateway에 Spring Cloud Netflix Zuul이 적용되어 있는데 이게 뭐 하는 놈인지 간단하게 알고 가기 위함(추후 더 자세히 작성되는 글이 올라올 수도..) 1. Spring Cloud와 developer-youn.tistory.com 토이프로젝트에서 kotlin + jdk17 + spring boot3을 사용하며 API Gateway를 사용하려고 했는데 netflix-zuul의 경우 더..
0. 이 글을 작성하는 이유 파티션 테이블에 대해 공식 문서에서는 어떻게 설명하고 있는지 이해하면서 읽기 위함. 실제 SQL과 같이 실습하는 것은 다음 글에서 이어서 작성할 예정 https://www.postgresql.org/docs/current/ddl-partitioning.html 5.11. Table Partitioning 5.11. Table Partitioning # 5.11.1. Overview 5.11.2. Declarative Partitioning 5.11.3. Partitioning Using Inheritance 5.11.4. Partition Pruning 5.11.5. Partitioning and Constraint Exclusion … www.postgresql.org ht..
0. 이 글을 작성하는 이유 지방에 내려갔다가 서울로 올라오는 버스에서 야스오 버그 영상을 봤는데 이런 메커니즘이 빠져있어서 발생한 버그가 아닐까 하는 게 생각나서 가볍게 정리해 보기 위함(실은 직업병인 듯) 1. 버그 https://youtu.be/GCuyT0C7bBM?feature=shared 요약 : 신규 아이템을 사용하면(원래는 가지고 있으면이지만 개발 편의를 위해 사용으로 바꿔보았다. 딱 한번 사용 가능하다고 해보자.) 궁극기 쿨타임이 줄어드는데 문제는 사용하고 상점에 팔고 다시 사고 사용하고 상점에 팔고 사고.. 반복하는 만큼 쿨타임이 계속 줄어드는 것 2. 정상 동작은? 실은 팔고 나면 다시 원래대로 쿨타임이 적용되어야 하는데 그러지 못함 3. 왠지? 원래대로 돌려주는 로직이 빠져있는 느낌이..