전체 글
글 79편
-
pull 은 됐는데 설정이 반만 적용된다 — 맥 4대 dotfiles 를 무인 동기화하기
훅: 파일은 최신인데 설정은 옛날이었다 맥 4대(회사 2 / 개인 2)를 오가며 쓰는 상황 한쪽에서 고친 Claude Code 규칙이 다른 쪽엔 없음 새 머신 세팅 — zsh, git, ssh, 폰트, 플러그인을 기억에 의존해 복구 회사 머신에만 있어야 할 사내 서버 SSH 설정이...
-
초당 85줄 로그가 그날의 매도 체결 기록을 지웠다
문제: 로그가 너무 많아서 로그가 사라졌다 호출 빈도 — 자동매매 전략의 on_candle 함수는 종목마다, 매 틱마다 호출 문제 코드 — MDD(최대 낙폭) 차단이 걸릴 때마다 logger.info로 무조건 기록 실질 — “차단 중”이라는 상태 하나를 매 틱마다 재알림 2026년...
-
ddl-auto: update의 빈틈을 보완 DDL 자동화로 메우기
Flyway를 걷어낸 뒤 남은 숙제 이전 글: Flyway를 도입하고 3주 만에 걷어낸 이야기 걷어낸 뒤 스키마 관리 방식 JPA ddl-auto 사람이 손으로 적용하는 SQL 파일 묶음(db/manual/*.sql) 구멍 두 가지 stg 환경은 ddl-auto: validate ...
-
종목마다 따로 놀던 최고점이 멀쩡한 계좌를 손절 모드로 밀어넣었다
문제: 손실이 없는데 손절 모드였다 equity_peak의 정의: 계좌 자산이 지금까지 찍은 최고점 기록 여기서 얼마나 떨어졌는지(MDD, Max Drawdown) 계산 일정 이상 하락 시 신규 매수 차단 그런데 실제 저장 상태는 달랐다. 저장 단위: 종목별 전략 인스턴스마다 따로...
-
체결 47건을 역산해서야 드러난 4.1배짜리 수수료 오차
시작은 작은 지적이었다 최초 지적: 손익 화면에서 수수료와 세금이 하나의 값으로 합산 표시 첫 판단: “두 값을 나눠 보여주면 끝” — 넘어갈 뻔함 확인 결과: 합산 구조만의 문제가 아님. 요율 자체가 틀려 있었다. 가정 대신 실측한 내역 데이터: 실제 체결 47건 출처: KIS ...
-
설정 버그를 고쳤더니, 그다음엔 'ML을 켜는 게 맞나'라는 질문이 남았다
발단: 단순한 설정 누락 docker-compose.yml의 environment 항목 — 어떤 환경변수를 컨테이너에 넘길지 명시적으로 나열하는 방식 누락된 항목 — HYBRID_ENABLE_ML 결과 — .env 파일에 값을 뭐라고 적어두든 컨테이너까지 미전달 그래서 enable...
-
죽은 파일이 살아있는 파일보다 최신이었다
감사의 목적은 번들 축소가 아니었다 흔한 동기(번들 크기, 파일 수)가 아님 목적: “죽은 코드를 살아있다고 착각하고 거기에 작업하는 사고” 방지 계기: 그 사고가 이미 여러 번 발생 조사 결과: 2주 동안 같은 패턴 5회 반복 원인: git log가 거짓말을 한다 가장 인상적인 ...
-
같은 버그를 두 번 고친 날, V1/V2 이중 스택을 정리하기로 했다
계기: 같은 버그를 양쪽에서 따로 고쳤다 한 화면에 V1·V2 두 벌의 구현 공존 신규 작성 화면 — V2 사용 월 업데이트 화면 — V1 사용 카테고리 상태 desync 버그 발생 시의 대응: V1 쪽 수정 → 며칠 뒤 V2 쪽에서 재수정 같은 원인·같은 증상·같은 수정의 2회 ...
-
매수 신호는 나오는데 체결이 0건 — 감으로 안 고치고 필터를 채점했다
문제: 신호는 나오는데 거래가 없다 기간: 2026년 7월 20~21일 라이브 로그 전략 상태: BUY 신호 계속 발생 실제 매수 체결: 하루종일 0건 신호 자체는 살아있는데 그게 전부 걸러지고 있다는 뜻이었다. 감으로 고치지 않고, 필터를 채점했다 방식: 짐작으로 필터를 하나씩 ...
-
엑셀 라이브러리가 두 개였다 — xlsx에서 exceljs로 통일하기
문제 한 프로젝트 안에서 엑셀을 내보내는 경로가 두 개였고, 각각 다른 라이브러리를 사용 중. 경로 라이브러리 헤더 스타일 AG Grid export xlsx 불가 리포트 export exceljs 적용됨 xlsx(SheetJS) 커뮤니티 버전의 제약 — 셀 스타일 미지원 결과 —...
-
AI 코드리뷰 봇 2종을 파이프라인에 넣고, 봇이 못 잡는 걸 배웠다
배경 대상: 프론트엔드 저장소 1곳 구성: AI 코드리뷰 두 겹 PR에 자동으로 달리는 Gemini 리뷰 봇 작업 중간에 명시적으로 태우는 code-review 패스 목표: “지적을 받는 것”이 아니라 지적사항을 실제 커밋으로 환류시키기 기간: 약 두 달 두 달 운영 결과 — 봇이...
-
소프트 삭제 전환과 @Filter가 새는 곳
엔티티 14개를 하드 삭제에서 소프트 삭제로 배경 — 보고서에서 참조하는 데이터가 삭제되면 과거 보고서가 파손 작업 — 삭제를 is_delete 플래그로 전환 대상 — 엔티티 14개 개념은 단순한데 실제로 걸린 곳은 둘 — 유니크 제약, @Filter 미적용 경로 (a) 유니크 제...
-
동기 30초 타임아웃을 webhook 비동기로
30초로는 부족했다 기능: 문서 OCR 파싱 기존 구조: 내부 OCR 서비스에 HTTP 요청 → 결과 수신 → 응답 (동기) 30초 타임아웃에 계속 걸린 원인 두 가지: PaddleOCR 콜드스타트 — 모델 로딩 지연. 유휴 후 첫 요청이 특히 느림 페이지당 처리 지연 — 문서 길...
-
PDF 다운로드가 7초 걸렸는데, 범인은 한글 폰트였다
문제 대상 — 제품 배출량을 산정하는 B2B 웹앱의 결과 리포트 PDF 다운로드 소요 시간 — 버튼 클릭 후 약 7초 그동안 화면 — 로딩만 회전, 아무 변화 없음 사용자 반응 — “먹통이 됐나” 하고 재클릭하기 충분한 시간 구현 스택 — @react-pdf/renderer 4.x...
-
AI 에이전트 72개로 메모리 누수를 감사하고, 그 결과를 다시 검증했다
문제 오래 켜두는 SPA의 메모리 누수 — 재현부터 어려움 조건: 특정 화면 열고 닫기를 수십 번 반복해야 드러남 그 시점엔 이미 어느 컴포넌트 탓인지 특정하기 어려움 수백 개 컴포넌트를 사람이 하나씩 훑는 건 비현실적 그래서 접근 전환 병렬 에이전트 72개를 띄워 프론트엔드 컴포...
-
RTK Query 워터폴을 평탄화하고, 캐시를 켜자 stale이 드러났다
문제 대시보드 탭 하나를 여는 데 요청이 직렬로 연결. summary 조회 → 첫 제품 자동 선택 → 해당 제품의 LCA 선택 → 상세 데이터 호출 각 단계가 앞 단계의 응답을 기다린 뒤에야 시작 — 전형적인 워터폴 추가로 이 API 그룹은 keepUnusedDataFor: 0으로...
-
N+1 제거 4종 세트 — fetch join이 답이 아닐 때
N+1은 하나의 문제가 아니다 기간: 한 달 반 작업: 대시보드 조회 성능 개선 N+1 조우 횟수: 여러 번, 매번 처방이 상이 “N+1이면 fetch join” 반사가 통하지 않는 경우: 절반 이상 (a) fetch join을 못 쓸 때 — @BatchSize 첫 케이스 위치: ...
-
뷰를 물질화 테이블로 — 읽기 비용을 쓰기 시점으로 옮기기
읽을 때마다 5개 CTE를 풀스캔하고 있었다 대상 — 대시보드 조회에 쓰이는 엔티티 하나 매핑 — @Subselect로 매핑된 뷰 구성 — CTE 5개를 엮은 집계 뷰 MySQL의 동작 — 이 뷰를 실체화해두지 않음. 조회할 때마다 전체 재계산 즉 화면을 열 때마다 풀스캔 판단 기...
-
AG Grid의 autoHeight는 행 가상화를 끈다
문제 입출력 데이터를 입력하는 그리드에서 행이 수백 개로 늘어나자 셀 하나를 편집할 때마다 눈에 띄게 버벅였다. 타이핑 속도를 화면이 못 따라오는 정도였다. 원인 1: 편집할 때마다 columnDefs가 통째로 재생성됐다 columnDefs는 useMemo로 감싸져 있었음 의존성 ...
-
readOnly 트랜잭션에서 write를 잡아내는 테스트 가드레일
조회 API가 매번 write 트랜잭션을 만들고 있었다 발단 — 대시보드 조회 API 응답 지연 확인 결과 — eco-view의 배출원 조회 경로가 lcaStepService.updateStepOnly(write)를 부수효과로 호출 즉 대시보드를 열 때마다 write 트랜잭션 생성...
-
AI가 쓴 커밋 메시지가 거짓말을 했다
배경: 커밋의 절반이 AI 협업이다 대상: 같은 백엔드를 공유하는 쌍둥이 Next.js 프론트엔드 기간: 한 달 남짓 집중 작업 커밋 접두사: 압도적으로 fix 국면: 통합테스트 + QA 대응 그 기간의 AI 협업 표기를 집계해 보니, 두 저장소 모두 AI 협업 커밋이 전체의 절반...
-
Flyway를 도입하고 3주 만에 걷어낸 이야기
도입과 철수 사이 22일 도입 — 2026년 5월 13일 철수 — 6월 4일 기간 — 22일 그 사이 FlywayConfig — 221줄까지 성장 후 통째로 삭제 성공담이 아니라 철수 회고다. 왜 도입했나 프로젝트 구조: 빌드 — Gradle 멀티모듈 7개 (common / sha...
-
JWT를 걷어내고 Spring Session으로 — 그 뒤에 온 것들
전환 자체는 하루였다 내용: JWT 기반 인증 → Redis 기반 Spring Session 삭제: JwtFilter, JwtProvider 등 클래스 6개, 374줄 커밋 하나로 종료 정작 내용이 있는 구간: 그다음 3주 이 글의 주제: 세션 전환 후 드러난 문제들 (a) API...
-
kubectl exec은 왜 멈추는가 — 셸 스크립트에 타임아웃과 재시도 넣기
문제: 스크립트가 멈춘다 Fabric 네트워크 기동 = bash 스크립트가 kubectl을 순서대로 호출 증상 — 스크립트가 간헐적으로 멈춤. 에러가 아니라 그냥 정지 환경 — 폐쇄망 + kind 다중 클러스터. 네트워크 계층이 순탄하지 않음 원인 구조: kubectl은 기본적으로...
-
TanStack Query에서 로그아웃은 토큰만 지우는 게 아니다
문제: 로그아웃했는데 이전 사용자 데이터가 보인다 구성: 같은 백엔드를 쓰는 쌍둥이 Next.js 프론트엔드 — 관리자 포털, 사용자 포털 인증 상태: Zustand 서버 상태: TanStack Query 이 분리 자체는 흔하고 합리적인 구성 문제 지점: 로그아웃 경로 useAut...
-
비동기 API가 무조건 200을 반환하고 있었다
문제: “삭제 성공”이라는 거짓말 블록체인 네트워크 생성에 걸리는 시간 — 몇 분 수행 작업 — Kubernetes에 리소스 등록, pod 기동 대기, 채널 생성, peer 조인 그래서 채택한 방식 — 생성도 삭제도 비동기 처리 컨트롤러의 역할 — 작업 등록만 하고 즉시 응답 문제...
-
TOCTOU 한 건을 고치는 대신 버그 클래스를 없앴다
문제: SFTP 업로드가 동시에 들어오면 터졌다 프로젝트: 웹 버튼 클릭 → Hyperledger Fabric·Besu 네트워크를 Kubernetes 클러스터에 배포하는 플랫폼 인프라 계층: JSch로 원격 서버에 SSH/SFTP 접속 → bash 스크립트 전송 후 실행 해당 업로...
-
localStorage에 남은 isAuthenticated: true가 로그인을 막았다
문제: 로그인 페이지가 “로딩 중…“에서 안 넘어간다 사용자 포털 버그 리포트 한동안 안 쓰다가 다시 진입하면 로그인 화면이 “로딩 중…“만 표시한 채 정지 폼 미표시 → 로그인 경로 없음 localStorage 비우면 정상 복귀 localStorage를 비워야 풀린다 → 원인은 ...
-
오픈소스 오퍼레이터 버그를 CRD 스키마 패치로 우회하기
문제: 체인코드 상태가 FAILED에서 안 나온다 구조: 체인코드 배포 시 Kubernetes에 FabricChaincode 커스텀 리소스 생성 hlf-operator가 이 리소스를 보고 실제 체인코드 pod 기동 증상: 배포는 실제로 성공 kubectl get fabricchai...
-
invalidateQueries를 refetchQueries로 바꿨더니
문제: mutation 후 목록이 즉시 안 바뀐다 관리자 포털과 사용자 포털 양쪽에서 반복된 QA 피드백. 증상 — 항목을 삭제하거나 생성했는데 목록이 그대로 반영 시점 — 탭을 옮겼다 오거나 새로고침한 뒤 전제 — mutation 성공 후 invalidateQueries 호출 중...
-
인증 필터가 매 요청 DB를 네 번 때리고 있었다
문제: TPS가 안 나온다 부하 테스트에서 목표 TPS 미달 애플리케이션 로직 자체는 가벼움 조사 방향: 비즈니스 코드가 아니라 모든 요청이 반드시 지나가는 경로 구성: Spring Security + JWT 필터 체인 추적 결과: DB 접근이 겹겹이 누적 지점 하는 일 JwtFi...
-
게이트웨이가 죽었는데 사용자가 F5를 누른다 — 브라우저 서킷 브레이커
문제: 새로고침이 서버를 한 번 더 때린다 구성: 같은 백엔드를 공유하는 쌍둥이 Next.js 프론트엔드 — 관리자 포털, 사용자 포털 게이트웨이가 502/503/504 반환 시 두 앱 모두 전역 오버레이 표시 (“잠시 후 다시 시도해 주세요”) 진짜 문제는 그 다음: 사용자가 멈...
-
navigator.clipboard는 HTTPS에서만 동작한다
문제: 복사 버튼이 아무 반응이 없다 화면: 관리 화면 기능: 값 복사 버튼 로컬: 정상 동작 배포 환경: 버튼 눌러도 무반응 에러 토스트 없음, 콘솔 출력 없음 원인 위치 — 코드가 아니라 배포 환경 조건: HTTPS가 아닌 환경에서 서비스되는 경우 navigator.clipbo...
-
탭 상태를 useState에 두지 마라 — URL 파생 상태로 바꾸기
문제: 사이드 메뉴로 이동하면 탭이 안 바뀐다 관리자 포털의 여러 목록 화면이 탭 보유 탭 상태 위치 — ?tab= 쿼리 파라미터 그 덕에 되는 것 — 링크 공유, 새로고침 담당 훅 — useTabQuery 하나 QA에서 올라온 증상 사이드 메뉴 구성 — ?tab=code 링크와 ...
-
사이드바 권한 분기 100줄을 지우고 ICON_MAP만 남기다
문제: 사이드바가 권한을 안다 사용자 포털 사이드 메뉴: 상수 배열로 하드코딩 두 그룹의 메뉴가 파일 안에 박혀 있음 각 항목에 permission 문자열 부착 // 권한 코드와 경로는 가명. 구조만 그대로다. const GROUP_A_MENU_ITEMS = { ALPHA: { l...
-
401을 성공으로 취급하는 헬스체크 — 배포 스크립트를 서브커맨드 오케스트레이터로 재설계
훅: 헬스체크가 401을 실패로 보고 있었다 기존 헬스체크 동작 앱 재시작 후 /monitor/health 호출 응답이 오면 성공 처리 until "${SSH_CMD[@]}" "$REMOTE_USER@$REMOTE_HOST" \ "curl -fsS 'http://127.0.0.1:...
-
AI에게 스펙을 쓰게 하고, 자기검토를 시키고, 그 다음 구현하기
커밋 히스토리가 곧 작업 기록이다 기간: 넉 달 커밋마다 어떤 도구로 작업했는지 트레일러를 남겼다 — Made-with: Cursor, Co-Authored-By: Claude <모델> 트레일러를 남긴 덕에 나중에 “이 코드를 어떤 방식으로 짰더라”를 되짚을 수 있었다....
-
엑셀 업로드에서 이름이 모호할 때 사용자에게 되묻기
문제 엑셀 파일로 장비 수천 행을 조직에 일괄 배정하는 기능: 사용자가 하는 일 — 시트에 장비번호와 조직명 기입 후 업로드 서버가 하는 일 — 조직명으로 조직을 찾아 매핑 문제 지점 — 조직명이 유일하지 않음 조직 트리에서 서로 다른 부모 아래 동명의 하위 조직 존재 가능. 사용...
-
정규화된 조인을 버리고 역정규화하기 — 백필 마이그레이션 포함
문제 장비 A의 소속 조직 파악 — 두 단계 조인 필요 A ──(customer_sq)──> B ──(매핑 테이블)──> 조직 A는 조직을 직접 갖지 않음 A → 고객 B에 부착 B → 조직 매핑 테이블을 통해 조직에 연결 정규화 관점에서는 정상 — 조직 정보가 한 곳에...
-
권한 체크를 세션에 캐싱하고, 무효화 지점을 찾기
문제 기존 권한 모델: user_level 정수 하나 숫자가 클수록 많은 권한 한계: “조회는 되는데 삭제는 안 되고, 다른 화면에서는 승인 권한이 있다” 같은 요구 → 정수 하나로 표현 불가 새 권한이 생길 때마다 숫자 구간 재해석 필요 그 해석이 코드 여기저기에 분산 결정: 권...
-
GIN trigram 인덱스를 만들었는데 왜 안 빨라지지?
인덱스를 만든 날과 인덱스가 실제로 쓰인 날이 13일 떨어져 있다 2026-03-12 — GIN trigram 인덱스 추가 2026-03-25 — 인덱스가 쿼리 플랜에 처음 등장 그 사이 13일 동안 인덱스는 디스크만 차지 이 글의 주제 — 그 13일 문제 환경: Spring Bo...
-
depth < 10 방어 코드가 버그를 감추고 있었다
문제의 코드 대상: 계층형 조직 트리 서비스의 조상 조직 ID 수집 메서드 원래 구현의 핵심 — 아래 한 줄 while (currentId != null && depth < 10) { ancestorIds.add(0, currentId); Organization...
-
PostgreSQL 바인드 파라미터 65,535개 한도에 부딪히다
문제 기능: 엑셀로 장비 매핑 정보 일괄 업로드 수백 행 → 정상 동작 실제 현장 데이터 수만 행 → 배치 INSERT에서 터짐 구현: MyBatis <foreach> 멀티 로우 INSERT 행이 늘수록 SQL 하나의 바인드 파라미터 개수도 선형 증가 그 개수에 상한 존...
-
배포 직후 55분, 핫픽스 4연발 — 문제를 네 번 다시 정의한 하루
09:41 — 배포하자마자 터졌다 배포 대상: 프록시 로테이션 기능 증상: 실서버에서 크롤링 미작동 로컬은 정상, 배포 환경에서만 실패 이후 55분 동안 커밋 4개 연달아 배포 문제를 하나 고칠 때마다 다음 문제가 드러나는 패턴이었다. 10:12 — 1차 원인: 토큰이 서버에 없었...
-
리액트 시작하기 (6 ~ 장)
State 리액트 Component의 상태를 관리하는 객체 state는 개발자가 정의한다. 랜더링이나 데이터의 흐름에 사용되는 값들만 state에 포함시켜야한다. state가 변경될 경우, 컴포넌트가 재 랜더링 되기 때문에 랜더링과 데이터의 흐름에 관계없는 데이터를 저장하면, 컴포...
-
Alias 명령어 처리
Alias 명령어 처리 bash 접근 nano ~/.bashrc alias 명령어 추가 alias log="tail -f /{프로젝트 경로}/logs/{로그파일명}.log"
-
도커 교과서 4장
애플리케이션 소스 코드에서 도커 이미지까지 Dockerfile 가 있는데 빌드서버가 필요할까? 빌드 툴 체인을 통해 한번에 패키징해서 공유하면 편리 도커만 갖춰진다면 컨테이너를 통해 어떤 환경에서든 애플리케이션 빌드, 실행 가능 도커허브를 통해 빌드도구가 내장된 공식 이미지 제공 ...
-
S3 란
S3 란 매우 안전하고 가변적인 오브젝트 저장 공간 제공 버킷 : 최상의 폴더 S3 오브젝트 구성 요소 이해 Key Value 구조 (key : 오브젝트 파일명, value : 오브젝트 내용물) 업로드된 파일에 다른 내용이 들어가있따면, 버전 2로 업로드 가능 S3 데이터 일관성 ...
-
RDS 란
RDS 란 관계형 데이터 베이스 서비스 RDBS Amazon Aurora 서버리스 및 머신러닝 어플리케이션 구축을 위해 요구되는 고성능 관계형 DB 데이터 웨어하우스 데이터 관리하는 시스템 유형 데이터 분석 작업 진행 즉, ‘데이터를 보관하고 사용하는 저장 창고’ 하나 혹은 여러 ...
-
MCP 란
MCP 란 Model Context Protocol (MCP)는 LLM(대형 언어 모델)과의 상호작용을 위한 프로토콜입니다. MCP는 LLM이 특정 작업을 수행하기 위해 필요한 컨텍스트를 제공하는 데 중점을 둡니다. 이 프로토콜은 LLM이 더 나은 응답을 생성할 수 있도록 돕기 위...
-
리액트 시작하기 (1 ~ 5장)
리액트 설치 방법 npm 설치 node 설치 툴은 원하는대로 JSX 문법 자바스크립트 확장 문법 JavaScript + XML/HTML ex) 예시 const element = <h1>Hello, world!</h1>; 원리 React.createElement...
-
EC2 란
EC2 란 클라우드 공간에 크기가 유연하게 변경되는 가상 서버 기능 제공 가상서버이기에 디스크 용량, CPU, 메모리 등을 자유롭게 조정 가능 비용 지불 방법 온디맨드: 사용한 만큼만 지불, 예측 불가능한 트래픽에 적합 리저브드: 저렴한 비용, 1~3년 임대, 인스턴스 크기 변경 ...
-
Markdown 문법
Markdown 문법 게시물 작성하면서, Markdown을 많이 사용할텐데, 요약집처럼 정리해보았다. 제목 # 제목 1 ## 제목 2 ### 제목 3 #### 제목 4 ##### 제목 5 ###### 제목 6 제목 1 제목 2 제목 3 제목 4 제목 5 제목 6 <h1>...
-
쿠버네티스
쿠버네티스란, 다수의 컨테이너를 효율적으로 배포, 확장 및 관리 하기 위한 오픈소스 시스템 Docker Compose의 확장판이라고 생각 쿠버네티스 장점 컨테이너 관리 자동화(배포, 확장, 업데이트) 부하 분산 (로드 밸런싱) 쉬운 스케일링 셀프 힐링 파드(Pod) 란?, 하나의 ...
-
도커 교과서 3장
도커 이미지 만들기 도커 허브에 공유된 이미지 사용하기 web-ping 어플리케이션 이미지 pull 명령어 docker image pull diamol/ch03-web-ping 도커 이미지를 다운받을 때 각각의 파일을 이미지 레이어 라고 부른다. 환경변수 도커 컨테이너도 별도의 환...
-
도커 교과서 2장
도커의 기본적인 사용법 컨테이너 실행 컨테이너로 애플리케이션 실행 명령어 애플리케이션은 미리 도커로 실행되도록 패킹돼 누구나 사용되도록 공유된 것 docker container run diamol/ch02-hello-diamol 애플리케이션을 컨테이너에서 실행할 수 있도록 패키징(...
-
Github Action VS Code Pipeline
Github action 이란 Github에서 공식적으로 제공하는 CI / CD 툴 코드 변경 문제사항 검사 소프트웨어 빌드, 상용서버 배포 통계 데이터 수집 코어 개념 Workflow 자동화된 전체 프로세스. 하나 이상의 Job으로 구성되고, Event에 의해 예약되거나 트리거될...
-
Clean Code 후기
1장 [깨끗한 코드] 회사가 망한 원인은 바로 나쁜 코드 탓.. 나쁜 코드는 개발 속도를 크게 떨어트린다. → 현재 기반을 잡는 상태이기에 여러 상황에 따라 유연히 대체 가능한 코드를 구현해야한다. 나쁜 코드의 위험을 이해하지 못하는 관리자 말을 그대로 따르는 행동은 전문가답지 못...
-
티켓 원정대 출발!
프로젝트 시작 TDD 책을 정독하고 읽었던 내용들을 사용해보는 프로젝트를 진행해보려고 한다. 나는 2,3번 프로젝트를 진행해봤는데 결과는 좋지 않았고 이번에는 결과물을 완성하고 싶은 마음이 크다. 설명 100명에게 Ticket을 배포하는 프로그램을 RESTful방식 개발합니다 *신...
-
엔티티 설정
고민 과연 Account 객체를 생성할 때 필요한 column명을 찾아서 적어봤다. Account @Getter @Builder @Entity @NoArgsConstructor @AllArgsConstructor public class Account { @Id @GeneratedV...
-
내가 적어보는 Hateoas 정리
Hateoas 티켓 프로젝트를 진행하면서 rest(ful?) api 문서화를 만드는 중, 우리는 hateoas를 당장 써서 만들어야 할지 아닐지 고민되었다. 그래서 일단 자료조사를 위해서 hateoas에 대해 알아보려고 한다. Hateoas 란? Wikipedia에서 ‘hateoa...
-
DTO 처리방법
티켓 프로젝트를 진행하다가 다들 DTO에 대한 처리방식이 있었는데 나도 하나 적고 싶어서 DTO에 대한 내용을 찾다가 DTO에 관한 고찰 이분에 대한 내용 글이 재미있어서 읽고 블로그에 정리하고 싶어졌다. DTO 란? Data Transfer Object 로 계층간의 데이터를 교환...
-
SAP UI5 란
SAP UI5 SAP UI5 란 HTML5, CSS, JavaScript로 구성된 클라이언트 UI 기술이다. SAP UI5로 개발된 앱들은 우리가 사용하는 장치의 브라우저 안에서 실행한다. 사용자들이 앱을 액세스 할 때, 해당 서버로 애플리케이션을 브라우저에 로드하라는 요청을 전송...
-
OData V2 Model
oData V2 model oData V2 모델을 사용하면 oData Service로 부터 데이터 제어를 가져올 수 있다. oData V2 모델은 서버측의 모델이며 데이터 셋은 단지 서버에서 사용가능하고 클라이언트들은 단순히 요청된 데이터만 알 수 있다. 각 정렬과 필터링 작동은 ...
-
자바의 예외 처리
목적 자바의 예외 처리에 대해 학습하세요. 학습할 것 자바에서 예외 처리 방법 (try, catch, throw, throws, finally) 자바가 제공하는 예외 계층 구조 Exception과 Error의 차이는? RuntimeException과 RE가 아닌 것의 차이는? 커스...
-
자바의 인터페이스
목적 자바의 인터페이스에 대해 학습하세요. 학습할 것 인터페이스 정의하는 방법 인터페이스 구현하는 방법 인터페이스 레퍼런스를 통해 구현체를 사용하는 방법 인터페이스 상속 인터페이스의 기본 메소드 (Default Method), 자바 8 인터페이스의 static 메소드, 자바 8 인...
-
자바의 패키지
목적 자바의 패키지에 대해 학습하세요. 학습할 것 package 키워드 import 키워드 클래스패스 CLASSPATH 환경변수 -classpath 옵션 접근지시자 1. package 키워드 패키지 패키지는 클래스랑 인터페이스의 모음이며 관련된 클래스끼리 그룹단위로 모아 효율적인 ...
-
자바의 상속
목적 자바의 상속에 대해 학습하세요. 학습할 것 자바 상속의 특징 super 키워드 메소드 오버라이딩 다이나믹 메소드 디스패치 (Dynamic Method Dispatch) 추상 클래스 final 키워드 Object 클래스 1. 자바 상속의 특징 자바의 상속 전, 상속이란, 기존 ...
-
자바의 Class
목적 자바의 Class에 대해 학습하세요. 학습할 것 클래스 정의하는 방법 객체 만드는 방법 (new 키워드 이해하기) 메소드 정의하는 방법 생성자 정의하는 방법 this 키워드 이해하기 1. 클래스 정의하는 방법 클래스란, 객체를 정의해놓은 것, 또는 객체의 설계도 라고 정의할 ...
-
제어문
목적 자바가 제공하는 제어문을 학습하세요 학습할 것 선택문 반복문 1. 선택문 Switch if 같은 조건문은 참, 거짓밖에 없기 때문에 경우가 많아질 수록 else if를 계속 추가해야하며 else if 에 있는 조건식들을 일일히 다 계산하며 내려가야 하므로 처리 시간이 늘어난다...
-
연산자
목적 자바가 제공하는 다양한 연산자를 학습하세요. 학습할 것 산술 연산자 비트 연산자 관계 연산자 논리 연산자 instanceof assignment(=) operator 화살표(->) 연산자 3항 연산자 연산자 우선 순위 (optional) Java 13. switch 연산...
-
primitive 타입, 변수, 배열
목적 자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다. 프리미티브라는 한글말만 보고 커피에 타먹는 가루 용어인가 그래서 어원 비슷하게 쓰는가 생각했는데.. 검색해보니 ‘primitive = 기본적인, 원시적인’ 이라는 뜻이라니.. 잠깐 누구도 보지 않았는데 영...
-
자바의 애노테이션
목적 자바의 애노테이션에 대해 학습하세요. 학습할 것 애노테이션 정의하는 방법 @retention @target @documented 애노테이션 프로세서 1. 애노테이션 정의하는 방법 애너테이션이란 프로그램의 소스코드 안에 다른 프로그램의 위한 정보를 미리 약속된 형식으로 포함시킨...
-
JVM, 자바 코드 실행 과정
목적 자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기 남궁성님이 출판하신 JAVA의 정석를 기반으로 작성하려고 한다. 학습할 것 JVM이란 무엇인가 JVM이란 java를 실행하기 위한 가상 머신이다. 여기서 ‘가상머신’ 대신 ‘가상 컴퓨터’라고 부르는게 이해하기 좋...
-
Jasypt 암호화
jasypt 이란 프로젝트를 하면서 이메일 인증이나 DB정보를 저장할 때 값을 노출 시킨 상태에서 github에 올린다면 해킹의 여지가 있기에 jasypt 라이브러리를 사용하자는 이야기가 나왔다. 일단은 암호화에 대한 내용을 찾아봤다. 암호화란 메시지 내용이 불명확하도록 평문을 재...
-
깃허브 블로그 로컬로 돌리기
깃허브 블로그 실행 파일 처음엔 남들 github.io에 개발 관련 블로그가 많이 보이길래 저건 어떻게 만들지 하며 찾아보니깐 깃허브로 무료 호스팅을 제공하는거라 한다. 나는 이런 글을 쓰는 것이 좀 어색하지만 차츰 글의 양을 늘려보도록 하겠다. 일단 jekyll 설치, 실행 방식...
-
Git flow와 Jira 사용 전략
일단 프로젝트를 진행하면서 저희는 코드 관리는 github를 사용하기로 했고 테스크 툴로는 Jira를 사용하기로 했다. 그리고 협업 전략에서 git flow라는 것을 알게 되었다. 일단 이것들이 먼지 살펴보려고 한다. git flow란? 프로젝트 브랜치 전략의 개발 모델 또는 방법...
-
SSR, SSG
SSR, SSG, jamstack SSR Server Side Rendering으로 서버에서 HTML 구조로 응답하는 방식 CSR Client Side Rendering (ex Angular, React, Vue) javascript로 동적 페이지를 출력 SPA Single Pag...
-
PostgreSQL이란
PostgreSQL 오픈 소스 객체 관계형 데이터베이스 새로운 하나의 프로그래밍처럼 구현하는 기능을 제공한다. 구조 클라이언트 / 서버 모델 사용 기능 트랜잭션과 ACID(Atomicity, Consistency, Isolation, Durability)를 지원 또한 주요 기능들을...