반응형

전체 글 140

공통 텍스트 스타일 — 크기별 네이밍 규칙으로 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

두더지 잡기 — 등장/유지/퇴장 3단계 진행도

오프라인 인디팩 · 개발일지두더지 잡기 — 등장/유지/퇴장 3단계 진행도2026-06-08 · v1.0 · 아케이드 / 반응속도요약 — 30초 동안 무작위로 튀어나오는 두더지를 때리는 게임. 시간이 지날수록 등장 간격은 짧아지고 유지 시간도 줄어들어 후반부로 갈수록 훨씬 빡빡해진다.진행률에 따라 스폰 간격과 생존시간 선형 보간게임 진행률(0=시작, 1=종료)에 따라 스폰 간격은 0.9초에서 0.25초로, 두더지 생존시간은 1.4초에서 0.6초로 줄어든다. 둘 다 단순 선형 보간이라 코드가 짧지만 체감 난이도 곡선은 뚜렷하다.double get _spawnInterval => 0.9 - 0.65 * _progress;double get _moleLifetime => 1.4 - 0.8 * _progr..

매장 홈 화면을 위젯 단위로 쪼개기 — 31KB 파일이 감당 가능해진 이유

실무 프로젝트 · 개발일지 매장 홈 화면을 위젯 단위로 쪼개기 — 31KB 파일이 감당 가능해진 이유 Flutter · GetX 요약 — 캐러셀 배너, 검색바, 카테고리, 상세 다이얼로그까지 들어가는 매장 홈 화면. 전체를 한 파일에 몰아넣는 대신 컨트롤러와 하위 위젯을 폴더 단위로 분리해서 파일 하나의 책임을 좁혔다. 1. 상태는 전용 컨트롤러로, 화면은 조립만 StoreHomeController가 캐러셀 인덱스, 카테고리 선택 상태 등을 전부 들고 있고, 메인 위젯(StoreHome)은 Get.put으로 컨트롤러를 주입받아 하위 위젯들을 배치하는 역할만 한다. import 목록만 봐도 appSearch, bannerDetailView, middle_category, St..

Flutter & Dart 2026.10.04
반응형