개발자 노트 - 강경훈 story
close
프로필 배경
프로필 로고

개발자 노트 - 강경훈 story

  • 분류 전체보기 (582)
    • 설치메뉴얼 (9)
    • Java (273)
      • Java 기초 문법 (24)
      • Java 객체 지향 핵심 (30)
      • Java 유용한 클래스 (51)
      • 자료구조 (20)
      • JSP (28)
      • Swing 프로젝트 (19)
      • 교재 정리 (12)
      • 디자인 패턴 (11)
      • 자바 라이브러리 (6)
      • 알고리즘(코테) (67)
    • Spring Boot (92)
      • Bank App 만들기 (deployment) (30)
      • 추가 개념 (7)
      • Blog 프로젝트 만들기(JPA) (53)
    • My Project (29)
      • 쇼핑몰 (15)
      • Java Swing 멀티 쓰레딩 프로그램 (10)
      • Java 1 : N 양방향 소켓 통신 (스윙) (4)
    • 면접 질의 응답 모음 (5)
    • CS (28)
      • 컴퓨터 구조 (7)
      • 운영체제 (6)
      • 네트워크 (8)
      • 시스템 설계 (7)
    • Vue.js (1)
      • 사전지식 (1)
    • MySQL (47)
      • 정리 (33)
      • 1일 1쿼리 (14)
    • HTML CSS (30)
      • HTML (10)
      • CSS (8)
      • CSS flexbox (9)
      • 블로그 만들기 (3)
    • JS (23)
      • JavaScript 핵심 (6)
      • JS 작업을 위한 코딩 연습 (8)
      • JavaScript 게시판 만들기 (8)
    • Git (9)
      • 강의 정리 (5)
      • 교재 정리 (3)
    • Flutter (27)
      • 기초 (4)
      • Flutter UI 프레임워크 (18)
      • MVVM 패턴과 상태 관리 (4)
    • error note (4)
      • Java (4)
    • 방통대정리 (2)
      • C++프로그래밍 (2)
  • 홈
  • 깃 허브
  • 설정

Trouble shooting #5 - S3 SignatureDoesNotMatch (PUT 403: Cache-Control 헤더 누락)

증상상품 이미지 업로드 시 POST/PUT 요청이 403으로 실패. S3 에러 바디에는 SignatureDoesNotMatch 표기.원인presign 시 >(캐시 제어)을 포함해 서명했지만, 실제 PUT 업로드 요청 헤더에 동일 헤더를 넣지 않아 서명에 사용한 헤더와 실제 요청 헤더가 불일치.해결 방법presigned PUT URL을 내려줄 때 클라이언트가 반드시 포함해야 하는 모든 헤더(예: >, >, 필요한 헤더)를 함께 반환하고, 프론트는 해당 헤더를 그대로 넣어 업로드 수행.결과동일 키/파일에서도 403 재발 없음. 업로드 후 객체 조회 정상.

  • format_list_bulleted My Project/쇼핑몰
  • · 2025. 8. 13.
  • textsms

작업 일지 #6 상품 등록, 이미지 등록 (AWS S3 사전 서명 방식)

오늘 한 일 요약상품 등록: ⟨⟨name, price, categoryId, imageKey, status(on_sale|stop), initialQuantity⟩⟩를 받아 ⟨⟨Product⟩⟩·⟨⟨Inventory⟩⟩·⟨⟨InventoryLog(INIT, delta=+initialQuantity)⟩⟩를 한 트랜잭션으로 생성했다.이미지 등록: 프론트가 ⟨⟨GET /api/images/presign?contentType={MIME}⟩⟩으로 presigned PUT URL을 받아 S3에 직접 업로드하며, 키는 ⟨⟨{prefix}/{yyyy}/{MM}/{uuidNoHyphen}.{ext}⟩⟩ 규칙·만료 5분·헤더(Content-Type/Cache-Control) 일치로 운영한다. 상품 등록개요관리자 전용 상품..

  • format_list_bulleted My Project/쇼핑몰
  • · 2025. 8. 13.
  • textsms

AOP + MDC 기반 감사 로그

서비스 계층에서 create · update · delete가 끝날 때마다 “” 로그를 남기는 전략을 AOP와 MDC 두 가지만으로 구현한다.기술핵심 역할Spring AOP (AspectJ)메서드 실행을 가로채 로깅 로직 주입MDC (Mapped Diagnostic Context)로그마다 사용자 ID 등 컨텍스트 유지Spring AOP - 메서드 가로채기Pointcut> 같이 메서드 시그니처 패턴으로 타깃 지정 세 가지 메서드만 잡는다Advice> : 정상 리턴 시점에만 동작—예외가 터지면 실행하지 않는다핵심 코드@AfterReturning( pointcut = "execution(public * com.khmall..*Service.create*(..)) || " + "e..

  • format_list_bulleted My Project/쇼핑몰
  • · 2025. 8. 6.
  • textsms

작업 일지 #4 카테고리 생성·수정 & 테스트 환경 분리

오늘 한 일 요약 카테고리 생성 — > 구현, 상위 존재·이름 중복 검증 후 > 기본 0으로 저장.카테고리 수정 — > 구현, > 로 부분 업데이트 지원·깊이 / 중복 예외 처리.테스트 환경 분리 — > 베이스 + JUnit 확장으로 모든 테스트를 > 프로필로 강제. 카테고리 생성개요> 엔드포인트를 구현해 최상위·하위(1 단계) 카테고리를 등록할 수 있게 했다.입력 필드: >, > (nullable), > (nullable·기본값 0).고민한 점전달된 >가 실제로 존재하는지 서비스 레이어에서 검증할 방법.카테고리 이름 중복을 어떤 범위(전역 vs 동일 부모)에서 제한할지 기준 설정.검증 실패 시 예외를 어디서 던지고 어떤 HTTP 상태로 변환할지.>를 요청에 포함하지 않으면 어떤 값으로 저장할지(디폴트 ..

  • format_list_bulleted My Project/쇼핑몰
  • · 2025. 8. 5.
  • textsms

JsonNullable을 활용한 PATCH 요청 DTO 구현

JsonNullable 이란?RESTful API에서 ⟨⟨PATCH⟩⟩ 요청을 사용할 때, 필드의 “명시적 null”과 “미입력”을 구분해야 할 때가 많다.⟨⟨JsonNullable⟩⟩은 바로 이 문제를 해결하는 Java용 제네릭 래퍼 클래스다.일반적인 DTO 필드는 null이면 “값을 비우는 것”과 “아예 값을 건드리지 않는 것”이 구분되지 않는다.⟨⟨JsonNullable⟩⟩을 사용하면입력 없음: ⟨⟨JsonNullable.undefined()⟩⟩입력값 있음: ⟨⟨JsonNullable.of(값)⟩⟩명시적 null: ⟨⟨JsonNullable.of(null)⟩⟩식으로 3가지 상태를 구분할 수 있다. 특징DTO 필드의 "입력 없음"과 "명시적 null"을 완전히 분리주요 메서드⟨⟨isPresent()..

  • format_list_bulleted My Project/쇼핑몰
  • · 2025. 8. 5.
  • textsms

Trouble shooting #4 상위 카테고리를 해제하지 못하는 문제

증상카테고리 수정 시, 상위 카테고리(⟨⟨parentId⟩⟩)를 제거하고 싶었으나API 요청에서 해당 필드를 아예 누락하거나 null로 보내도 변경이 반영되지 않음.원인기존에는 DTO에서 ⟨⟨parentId⟩⟩를 일반 필드(Integer, Long 등)로 선언하여값을 아예 보내지 않으면 서비스 레이어에서 “미수정”으로 간주,null로 보내면 프론트/백엔드/컨버터 해석에 따라 "변경 없음" 또는 "오류"로 처리됨.결과적으로 상위 카테고리를 “없음(null)”으로 업데이트하는 방법이 없음.해결 방법카테고리 수정 DTO에서 ⟨⟨parentId⟩⟩ 타입을 ⟨⟨JsonNullable⟩⟩로 변경.서비스에서 ⟨⟨parentId⟩⟩의 ⟨⟨isPresent()⟩⟩ 여부를 체크:present이고 값이 null이면, 진짜로..

  • format_list_bulleted My Project/쇼핑몰
  • · 2025. 8. 5.
  • textsms
  • navigate_before
  • 1
  • 2
  • 3
  • 4
  • 5
  • navigate_next
공지사항
  • 목차 목록
전체 카테고리
  • 분류 전체보기 (582)
    • 설치메뉴얼 (9)
    • Java (273)
      • Java 기초 문법 (24)
      • Java 객체 지향 핵심 (30)
      • Java 유용한 클래스 (51)
      • 자료구조 (20)
      • JSP (28)
      • Swing 프로젝트 (19)
      • 교재 정리 (12)
      • 디자인 패턴 (11)
      • 자바 라이브러리 (6)
      • 알고리즘(코테) (67)
    • Spring Boot (92)
      • Bank App 만들기 (deployment) (30)
      • 추가 개념 (7)
      • Blog 프로젝트 만들기(JPA) (53)
    • My Project (29)
      • 쇼핑몰 (15)
      • Java Swing 멀티 쓰레딩 프로그램 (10)
      • Java 1 : N 양방향 소켓 통신 (스윙) (4)
    • 면접 질의 응답 모음 (5)
    • CS (28)
      • 컴퓨터 구조 (7)
      • 운영체제 (6)
      • 네트워크 (8)
      • 시스템 설계 (7)
    • Vue.js (1)
      • 사전지식 (1)
    • MySQL (47)
      • 정리 (33)
      • 1일 1쿼리 (14)
    • HTML CSS (30)
      • HTML (10)
      • CSS (8)
      • CSS flexbox (9)
      • 블로그 만들기 (3)
    • JS (23)
      • JavaScript 핵심 (6)
      • JS 작업을 위한 코딩 연습 (8)
      • JavaScript 게시판 만들기 (8)
    • Git (9)
      • 강의 정리 (5)
      • 교재 정리 (3)
    • Flutter (27)
      • 기초 (4)
      • Flutter UI 프레임워크 (18)
      • MVVM 패턴과 상태 관리 (4)
    • error note (4)
      • Java (4)
    • 방통대정리 (2)
      • C++프로그래밍 (2)
최근 글
인기 글
태그
전체 방문자
오늘
어제
전체
Copyright © 쭈미로운 생활 All rights reserved.
Designed by JJuum

티스토리툴바