macOS + zsh 환경 설정 완벽 가이드 (.zprofile vs .zshrc)
PATH를 .zprofile에 넣었더니 IntelliJ 터미널에서만 안 잡히는 이유를 두 파일의 실행 시점 차이로 갈라 정리하고, 잘못된 설정 한 줄로 터미널이 죽었을 때의 진단·복구 절차까지 붙였다.
Backend Developer
Kotlin과 Spring으로 서버를 만들면서, 무엇을 왜 그렇게 결정했는지를 남겨 왔습니다. 2024년부터 2025년까지의 기록 52편입니다.
프론트에 넘길 API 문서를 만들면서 테스트를 강제하는 Spring REST Docs와 UI가 좋은 Swagger UI를 굳이 둘 다 붙인 구성을 정리했다. OAS로 두 문서를 하나로 합치는 방안은 설계만 그려두고 후속 과제로 남겼다.
컨트롤러에 스웨거 애노테이션이 뒤엉켜 서버 코드가 읽히지 않자, 인터페이스 분리 원칙을 적용해 문서용 인터페이스를 떼어내고 반복되는 정의는 커스텀 어노테이션으로 묶은 개선기.
6개 도메인이 얽힌 커머스 주문을 멀티모듈로 분리하고, 내부/외부 통신과 트랜잭션 경계를 설계한 3부작
Loki와 Grafana가 통신하지 못하는 장애를 거슬러 올라가니 Calico ServiceAccount에 RBAC 권한이 없어 CNI가 아예 동작하지 못한 것이었고, ClusterRoleBinding으로 권한을 주자 아래 서비스들이 연쇄로 복구된 진단 기록.
누르면 해당 기록만 모아 볼 수 있습니다.
PATH를 .zprofile에 넣었더니 IntelliJ 터미널에서만 안 잡히는 이유를 두 파일의 실행 시점 차이로 갈라 정리하고, 잘못된 설정 한 줄로 터미널이 죽었을 때의 진단·복구 절차까지 붙였다.
rebase가 미추적 파일을 덮어쓸까 봐 멈추는 이유를 워킹 트리 보호 원칙으로 짚고, squash로는 왜 풀리지 않는지와 stash -u로 치운 뒤 이어가는 해결 순서를 정리했다.
JUnit 5 애노테이션과 Assertion부터 Mockito의 스터빙·호출 검증·ArgumentCaptor, 테스트 더블 다섯 종류까지 실제로 쓰는 문법만 예제로 모아둔 장문의 레퍼런스다.
이미 원격까지 올라간 .gradle·build 디렉터리를 되돌리려고 git rm --cached로 인덱스에서만 걷어내고 commit --amend로 마무리한 기록. 마지막 커밋·과거 커밋·이력 완전 삭제까지 상황별 명령을 표로 갈라 두었다.
마스터-디테일, 다대다 해소, 이력 관리, 소프트 삭제 같은 테이블 패턴과 페이징·배치·비동기 API 패턴을 예제 SQL과 함께 모아, 어떤 문제에 어떤 패턴을 고를지 기준을 세운 정리.
다른 스키마의 객체를 자기 것처럼 부르게 해주는 SYNONYM의 PUBLIC/PRIVATE 차이와, 객체 위치가 바뀌어도 애플리케이션 쿼리를 고치지 않아도 되는 이유를 정리했다.