본 글은 CLAUDE + GPT와 함께 작성한 글임을 밝힙니다.CLAUDE-CODE에서 왜 자꾸 너는 CLAUDE.md에 있는 내용을 까먹는거야? 와 같은 내용으로 질문을 하였을때 알려준 내용을 토대로 나온 글입니다. CLAUDE.md의 내용을 자꾸 까먹는다니까요.반복된 실패 사례사용자 요청: "PR 머지해"기대 동작: 문서 4개 자동 업데이트 (status.md, tasks.md, README.md, dev-notes/)실제 동작: PR만 머지 → 문서 업데이트 누락결과: 상태 불일치, 뒤늦게 수동 작업비즈니스 임팩트자동화 도입 효과 상실 → 수동 부담 증가프로젝트 문서와 실제 상태 불일치인지 부하 증가 → 개발자 경험(DevEx) 악화규칙 준수율 저하 → 품질 저하원인 분석1. 과도한 정보량기존 CL..
이전 글 : https://developer-youn.tistory.com/193 0. 이 글을 쓰는 이유하... 그니까 이게 제 실수긴 한데.. 미친듯한 N+1문제가 발생을 하긴 했습니다.. 그래서 다시.. 1. 그니까 그 문제의 부분이 어디냐면.. if (!Hibernate.isInitialized(collection)) { Hibernate.initialize(collection) } 여기서 join이 걸려있는 경우 한번에 모아서 fetch를 하는게 아니라 각각 초기화를 하다 보니 정말 join이 걸리면 그 개수만큼 N번 날려서... 2. 그래서 고민은 꼬리에 꼬리를 물며내가 왜 이렇게..
부제 : spring boot 2.7에서 3.x 로 올리며 당신도 당할 수 있는 이야기 0. 왜 이 글을 쓰게 되었는가?spring boot 2.7에서 spring boot 3.2로 대 격변을 일으키게 되며 MSA로 구성중이던 서비스들 중 일부를 업그레이드하게 되었습니다. 근데 아니 세상에 결과가 이전과 다르게 나왔는데 제가 시원하게 기존 코드를 제거하면서 발생한 일이었습니다. 문제의 라이브러리는Criteria.DISTINCT_ROOT_ENTITY였고 저는 변명을 하자면 이게 다 마이그레이션 가이드를 탓할 겁니다. 분명 다 해준다고 했거든요? 근데 이건 예외더라고요...그래서 문서를 좀 봤어요. Criteria는 Deprecated 이런 것도 없고 setResultTransformer에는 이렇게 되어있네..
0. 이 글을 작성하는 이유누군가 당할 수 있고 나도 당했기 때문에 정말 아주 짧고 간단히 정리를 해보기 위함 1. 코드도 최소한으로, 하지만 상상력을 당신에게 부여하며오늘도 서버개발자는 평화롭게 코딩을 하던 중 클라이언트 파트에게 연락이 왔다. 클라 : 님 아니 우리 boolean은 앞에 is붙이기로 했잖아요 왜 갑자기 안 붙여서 보내요서버 : ????? 저 건든 거 없어요클라 : 아니 진짜 안붙어서 온다니까서버 : 리스폰스 줘봐요클라 : { "expiryDate": 1741527664.202672300, "name": "tester1", "age": 444, "paid": true, "ageAvailable": true, "dateAvailable": true}서버 :..
0. 이 글을 작성하는 이유 회사에서 진행한 PostgreSQL 9.6 성능 이야기 책 스터디를 하며 정리한 내용을 올리기 위함 PostgreSQL 프로세스 유형 4가지 Backend process Postmaster (Daemon) process Background process Client process 물리적인 관점에서 보았을 때의 PostgreSQL의 구조 공유 메모리( Shared Buffer, WAL 버퍼 ), 프로세스, 데이터 파일 Postgres의 Database 구조에 대한 6가지 정리 PostgreSQL은 여러 DB로 구성된다. 이를 데이터베이스 클러스터라고 한다 initdb()수행 시에 template0, template1, postgres DB가 생성된다. template0과 tem..
0. 이 글을 작성하는 이유 이제 Docker image를 registry에 올려야 하는데 public말고 자체 registry를 구축하여 올리기 위해 Docker부터 registry까지 내부 설치하는 과정을 올리기 위함 1. 우선 내 ubuntu 버전 확인하기 lsb_release -a로 현재 ubuntu 버전 확인하기 lsb_release -a 2. 생각해 보니 Docker도 없군. 설치 시작(feat. RTFM) 저는 하라는 대로 했더니 설치가 되었더이다. Install Docker Engine on Ubuntu | Docker Docs Install Docker Engine on Ubuntu Jumpstart your client-side server applications with Docker ..
0. 이 글을 작성하는 이유 UUID타입을 LIKE 연산자로 패턴매칭하려고 했더니 매칭이 안되었던 일이 있어서 왜 그런가 간단하게 정리해 보기 위함 1. 사건의 경위 postgres14 사용 중 아래와 유사한 sql이 먹히지 않았다. id like 'abed%' 에러는 이렇게 나왔다. SQL Error [42883]: ERROR: operator does not exist: uuid ~~ unknown Hint: No operator matches the given name and argument types. You might need to add explicit type casts. Position: 41 explicit type cast를 하라고 한다. 생긴 건 비슷한데 왜 그럴까. 2. LIKE문은..
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 ..