전체 글 79

[루프팩] volume 2. 0 하나 처리하다가 기 빨린 썰 푼다: 값의 유효성 vs 행동의 입력 조건

이번 과제에서는 실제 구현에 들어가기 전에 도메인 설계에 시간을 많이 썼습니다.상품, 좋아요, 포인트, 주문을 만들면서 "이 규칙은 누가 지켜야 하는가"를 계속 고민했는데, 그중 가장 오래 헷갈렸던 주제 하나를 정리해 보려고 합니다.바로 0입니다. 아무것도 없다는 뜻의 숫자지만, 이번 과제에서 가장 많은 고민을 안겨 준 숫자이기도 합니다. 1. 같은 0인데 결과가 다르다포인트와 재고를 구현하고 나니 다음과 같은 표가 나왔습니다. 요청결과충전한 적 없는 사용자의 잔액 조회0원, 정상0원 충전거절 (400 INVALID_CHARGE_AMOUNT)재고 5개인 상품에서 0개 차감거절합계 0원 주문 확정 (0원 결제)성공잔액 0원은 괜찮은데 충전 0원은 안 되고, 재고 0개 차감은 안 되는데 0원 결제는 됩니다...

루프팩 2026.09.18

[루프팩] volume 1. 기획서의 빈칸은 결국 누군가 채운다

"번개런/정기런 모임 장소 1km 이내에서 출석 버튼을 누르면 출석이 가능하다." 사이드 프로젝트 아지트에서 받은 요구사항 한 줄이다.읽으면 다 이해한 것 같고 바로 구현할 수 있을 것 같다. 실제로 그때 바로 구현했다면 출석 API는 하루 만에 나왔을 것이다.문제는 그 하루 동안 내가 기획자 대신 결정했을 사항들이다. 막혔던 질문들당시 실제로 막혔던 질문은 다음과 같다. (이 외에도 여러 질문들이 있었는데, 해당 글에서는 세 개의 질문으로만 상정하겠다)1. 일정 시작 앞뒤 한 시간 안에 출석할 수 있다고 했는데, 59분까지인가 60분까지인가.2. 일정을 만든 팀원이 시작 한 시간 전에 크루를 탈퇴하면 그 일정은 어떻게 되는가. 이미 출석한 크루원과 아직 하지 않은 크루원은 각각 어떻게 되는가.3. 이미..

루프팩 2026.09.11

클러스터드 인덱스, 커버링 인덱스, B-Tree, PK 전략 등

버퍼 풀 Buffer Pool디스크에 저장된 테이블과 인덱스 데이터를 캐싱하기 위해 할당한 메모리 영역.디스크(HDD/SSD)의 IO 속도는 메모리(RAM)에 비해 압도적으로 느리다. 모든 요청마다 디스크에 접근하면 성능이 매우 안좋아지므로 메모리에 올려서 최대한 메모리 안에서 처리하기 위해 쓰인다.왜 느릴까?RAM: 구조가 매우 단순, 전기식. CPU와 가까운 곳에 위치. 주소를 알면 즉시 접근 가능디스크: 물리적인 움직임/로직이 복잡함. 메인보드 상 CPU와 떨어져 있음. 데이터를 바이트 단위가 아닌 블록, 페이지 단위로 저장하므로 한 데이터 읽을 때마다 블록/페이지 전체 읽어와야 함.데이터를 페이지(16KB)로 쪼개서 사용하고, LRU (least recently used) 알고리즘을 사용한다.최근..

CS 2026.04.29

[CICD] 도커 - 젠킨스 파이프라인 스크립트

이틀 내내 삽질을 정말 많이 해서.. (하루는 환경변수 주입이 안 돼서 하루종일 환경변수 구글링만 함ㅜㅜ)기록용으로 현재 빌드 성공한 스크립트 및 설정을 적어두려고 한다. 환경변수 설정 할 때 '이 빌드는 매개변수가 있습니다' 설정에서 파라미터를 등록하라는 글이 있어서 따라해봤었는데, 결과적으로 잘 되지 않았다. 그래서 일단 젠킨스 자체에 시크릿 키를 등록해두고 해당 키들을 환경변수로 적용하는 방법을 사용했다.추후 더 좋은 방법이 있으면 적용할 생각이다. pipelinepipeline { agent any environment { IMAGE_NAME = "cogroom/cogroom-server-develop" CONTAINER_NAME = "cogroom" ..

CICD 2025.06.11

[CICD] 도커 - 젠킨스 Unable to access jarfile /app.jar 오류 해결

CI CD를 위한 도커파일, 젠킨스 스크립트 작성 후 item을 실행시켜보니, 정상적으로 모든 stage가 작동하고 배포 완료 로그가 뜨는데도 서버 실행이 되지 않았다.이에 docker log를 확인하려고 했더니 Unable to access jarfile /app.jar 에러가 발생했다.jar 파일을 찾지 못해서 발생한 오류라고 한다. 가장 먼저 도커 상황을 확인했다.docker ps -a | grep cogroom-app잘 작동하고 있다. stage console output 을 확인했다.build가 잘 되었다고 뜬다. 구글링을 더 해본 후 답을 찾았다.Dockerfile에서 설정해둔 ENTRYPOINT의 jar 파일 경로를 읽어들이지 못해서 발생한 오류였다.Dockerfile의 ENTRYPOINT ..

CICD 2025.06.11

[백준] 28215: 대피소 (JAVA)

풀이너무 오랜만에 접한 알고리즘 문제 + 긴 지문으로 인해 시간이 좀 오래 걸렸다 .. 문제가 좀 헷갈리고 복잡해서 그렇지 사실 dfs를 적용할 수 있으면 간단하게 풀 수 있을 문제였다. 정답 코드import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTokenizer;public class Main { static int N, K; static int[][] arr; static int minMaxDist = Integer.MAX_VALUE; // 가장 큰 거리값이 가장 작을 때의 거리 static int[] selected; // 선택..

알고리즘/백준 2025.04.07

[WebSquare5] 트리뷰(TreeView) 구현

https://docs.inswave.com/support/api/w5/5.0_1.2484A.20170126.120903/WebSquare.uiplugin.treeview/WebSquare.uiplugin.treeview.html WebSquare.uiplugin.treeview계층 구조를 가지는 데이터를 Tree형태로 출력하는 컴포넌트이다. 각 노드에 checkbox와 image(icon)를 넣을 수 있으며 TeeView 컴포넌트간 마우스의 Drag&Drop을 이용하여 Data(노드)를 주고 받을 수 있다.docs.inswave.com 공식문서에는 데이터를 어떻게 보내야 하는지 나와있지 않아서 좀 헤맸지만, 사실 간단하게 해결할 수 있었다.  [ label, value, depth ]  dataList..

WebSquare 2025.03.25

[SpringBoot] 파일 업로드 시 서버에 해당 파일이 즉시 적용되지 않는 문제 (정적 리소스 경로 설정)

지정된 폴더에는 파일 업로드가 되고 있는데, 서버에 즉각 반영이 되지 않고 재시작을 해야 반영되는 문제가 발생했다. 해결 방법@Configurationpublic class WebMvcConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/common/images/**") // URL 패턴 .addResourceLocations("file:src/main/resources/static/common/images/"); // 실제 리소스 경로 }}c..

Java/SpringBoot 2025.03.20