반응형

전체 글 142

대리점 전용 API를 별도 패키지로 분리하기 — 같은 서버, 다른 권한 경계

실무 프로젝트 · 개발일지 대리점 전용 API를 별도 패키지로 분리하기 — 같은 서버, 다른 권한 경계 Spring Boot · 멀티 테넌트형 API 요약 — 일반 사용자/파트너 API와 완전히 분리된 패키지에 대리점(지사) 관리자 전용 API를 모아뒀다. 지역 코드 하나로 그 지사 소속 데이터만 조회되도록 파라미터 경계를 명확히 뒀다. 1. 지역 코드를 모든 조회의 필수 파라미터로 지사 홈 화면의 "우수 영업자 조회", "가입수 조회" 같은 API는 전부 {jisa_code}를 경로 파라미터로 받는다. 이 코드가 없으면 조회 자체가 불가능한 구조라, 다른 지사의 데이터를 실수로 노출할 여지를 API 설계 단계에서부터 차단한다. @RequestMapping("/jisa_v..

SpringBoot (JAVA) 2026.10.11

스도쿠 — 시드 그리드 변형으로 무한한 유효 보드 생성

오프라인 인디팩 · 개발일지스도쿠 — 시드 그리드 변형으로 무한한 유효 보드 생성2026-06-08 · v1.0 · 퍼즐 게임 / 조합론요약 — 매번 새로운 스도쿠를 생성하기 위해, 검증된 시드 그리드 하나를 숫자 치환·행/열 셔플·전치 등 6단계 변형을 거쳐 완전히 다른 유효한 보드로 바꾼다.6단계 변형: 치환 → 밴드 내 셔플 → 스택 내 셔플 → 밴드 셔플 → 스택 셔플 → 전치스도쿠는 특정 변형을 가해도 유효성이 깨지지 않는 성질이 있다. 숫자 1~9를 다른 숫자로 통째로 바꿔도, 같은 3행 묶음(밴드) 안에서 행 순서를 바꿔도, 대각선 전치를 해도 여전히 스도쿠 규칙을 만족한다. 이 6가지를 순서대로 적용하면 원본과 전혀 달라 보이는 새 보드가 나온다.// 1) 숫자 치환final per..

공통 텍스트 스타일 — 크기별 네이밍 규칙으로 200개 가까운 스타일 관리하기

실무 프로젝트 · 개발일지 공통 텍스트 스타일 — 크기별 네이밍 규칙으로 200개 가까운 스타일 관리하기 Flutter · GetX 요약 — 색상+굵기+크기 조합을 매번 TextStyle로 새로 만들지 않고, "색상Bold크기" 형태의 명명 규칙을 가진 필드로 미리 다 정의해둔 스타일 클래스. 플랫폼별 폰트 크기 보정도 이 안에서 흡수한다. 1. 네이밍 규칙 하나로 어떤 스타일인지 바로 유추 가능 black14는 검정색 14사이즈, blackBold16은 검정 굵게 16사이즈처럼, 필드 이름만 보고 색상·굵기·크기를 바로 알 수 있게 통일했다. 새 스타일이 필요하면 기존 패턴을 따라 필드 하나만 추가하면 되니 디자인 시스템처럼 일관성을 유지하기 쉽다. TextStyle b..

Flutter & Dart 2026.10.10

v1에서 v2로 — 기존 컨트롤러를 참조하며 점진적으로 옮겨간 버전 관리

실무 프로젝트 · 개발일지 v1에서 v2로 — 기존 컨트롤러를 참조하며 점진적으로 옮겨간 버전 관리 Spring Boot · REST API 버전 관리 요약 — v2 컨트롤러는 처음부터 새로 짜지 않고, v1의 컨트롤러/서비스를 생성자로 주입받아 재사용하면서 새 응답 구조나 추가 로직만 v2 계층에 얹는 방식으로 마이그레이션했다. 1. v2가 v1을 주입받아 감싸는 구조 BaseController2는 자체 서비스(BaseService2)뿐 아니라 v1의 PortOneController, MessageController, AuthController까지 생성자로 주입받는다. 완전히 새로 구현하는 대신 검증된 v1 로직을 그대로 호출하고, v2에서 달라져야 하는 부분만 새로 얹는..

SpringBoot (JAVA) 2026.10.09

시간 감각 테스트 — 오차 절댓값으로 점수 매기기

오프라인 인디팩 · 개발일지시간 감각 테스트 — 오차 절댓값으로 점수 매기기2026-05-29 · v1.0 · 두뇌 트레이닝요약 — 숫자 없이 정확히 10초를 세다가 탭하는 게임. 5번 시행한 오차의 평균이 최종 기록이 되며, 낮을수록(정확할수록) 좋은 성적이다.목표 시간과의 절댓값 오차실제 경과 시간과 목표(10000ms)의 차이를 절댓값으로 구해서 오차로 기록한다. 일찍 눌러도 늦게 눌러도 똑같이 벌점이라, "정확히" 맞추는 것 자체가 유일한 목표가 된다.void stop(int elapsedMs) { lastElapsedMs = elapsedMs; lastErrorMs = (elapsedMs - targetMs).abs(); errors.add(lastErrorMs);}최고 기록은 "가..

광고 추적기 하나로 3개 SDK(Facebook·Firebase·카카오픽셀) 동시에 기록하기

실무 프로젝트 · 개발일지 광고 추적기 하나로 3개 SDK(Facebook·Firebase·카카오픽셀) 동시에 기록하기 Flutter · Facebook App Events · Firebase Analytics 요약 — 회원가입, 견적 요청, 긴급 출동 같은 주요 이벤트가 발생할 때마다 마케팅 SDK 3곳에 동시에 기록을 남기는 공통 트래커. 이벤트 이름 하나를 각 SDK가 요구하는 형태로 알아서 매핑해준다. 1. 이벤트 이름 하나 → 3개 SDK 호출로 팬아웃 _logEvent() 하나가 Facebook App Events와 Firebase Analytics에는 그대로 기록하고, 카카오 픽셀은 네이티브 SDK가 없어 MethodChannel로 안드로이드/iOS 네이티브 코..

Flutter & Dart 2026.10.08

Swagger 그룹 분리 — v1/v2/관리자 API 문서를 하나의 화면에서 전환하기

실무 프로젝트 · 개발일지 Swagger 그룹 분리 — v1/v2/관리자 API 문서를 하나의 화면에서 전환하기 Spring Boot · Springfox Swagger2 요약 — 패키지 경로 기준으로 Docket 빈을 3개 등록해서, 같은 Swagger UI 안에서 드롭다운으로 v1/v2/관리자용 API 문서를 바로 전환해볼 수 있게 만들었다. 1. basePackage 필터로 Docket을 여러 개 등록 RequestHandlerSelectors.basePackage()에 패키지 경로만 다르게 지정한 Docket 빈을 3개(v1/v2/관리자) 만들고, 각각 groupName()을 다르게 줬다. Swagger UI 상단의 그룹 선택 드롭다운에서 이 이름들이 그대로 보인다...

SpringBoot (JAVA) 2026.10.07

트라이픽스 솔리테어 — 부모-자식 관계로 표현한 피라미드

오프라인 인디팩 · 개발일지트라이픽스 솔리테어 — 부모-자식 관계로 표현한 피라미드2026-06-09 · v1.0 · 카드 솔리테어 / 알고리즘요약 — 3개의 봉우리 모양 피라미드에서 카드를 제거해나가는 트라이픽스. 각 카드가 몇 번 위치의 "자식"인지를 미리 정의한 매핑 테이블로 앞면/뒷면을 결정한다.위치 → 자식 2개 매핑으로 face-up 판정28개 위치 중 상위 18개는 각각 아래 2개의 자식 위치를 가진다. 두 자식이 모두 제거되면(=null) 그 카드가 face-up이 된다. 베이스 행(18~27번)은 애초에 자식이 없어 항상 face-up이다.bool isFaceUp(int pos) { if (pyramid[pos] == null) return false; if (pos >= 18..

앱 시작 시 초기화 순서 — 저장된 로그인 정보부터 순서대로 복원하기

실무 프로젝트 · 개발일지 앱 시작 시 초기화 순서 — 저장된 로그인 정보부터 순서대로 복원하기 Flutter · GetX · FCM 요약 — 앱이 켜질 때 로그인 토큰, 주소, 약관 동의 여부를 순서대로 복원하고, 다른 기기에서 먼저 로그인했는지 검사한 뒤에야 알림/화면 비율 등 나머지 초기화를 진행한다. 1. 초기화는 반드시 순서가 있다 — await 체인으로 명시 사용자 정보 → 주소 → 토큰 → 약관 동의 → 토큰 재검증 → 로그인 방식(카카오/네이버/애플) 순서로 하나씩 복원한다. 병렬로 실행하면 서로 참조하는 값이 아직 없는 상태에서 읽힐 수 있어서, 의도적으로 순차 await 체인으로 작성했다. static appInit(BuildContext context)..

Flutter & Dart 2026.10.06

알림톡 발송 서비스 — 템플릿 변수 치환을 문자열 replace로 처리하기

실무 프로젝트 · 개발일지 알림톡 발송 서비스 — 템플릿 변수 치환을 문자열 replace로 처리하기 Spring Boot · 비즈메시지(알림톡) API 요약 — DB에 저장된 알림톡 템플릿 문자열의 플레이스홀더를 실제 값으로 치환한 뒤, 외부 알림톡 발송 API에 JSON으로 쏘는 서비스. 템플릿 내용과 발송 로직을 분리해서 문구는 코드 배포 없이 DB에서만 수정 가능하게 만들었다. 1. DB에 저장된 템플릿을 코드에서 변수 치환 템플릿 문구 자체는 #{이름}, #{신청일} 같은 플레이스홀더가 포함된 채로 DB에 저장돼 있고, 발송 시점에 실제 값으로 하나씩 replace()한다. 템플릿을 코드로 하드코딩하지 않아서 운영팀이 문구를 바꿀 때 배포가 필요 없다. Strin..

SpringBoot (JAVA) 2026.10.05
반응형