증상Postman으로 로그인 요청을 보냈을 때, 응답 코드가 403 Forbidden으로 반환되며 서버에서 아무 로그도 출력되지 않음.요청이 ⟨⟨@RestController⟩⟩까지 도달하지 않는 것으로 보였고, Spring Security 필터에서 차단된 것으로 추정됨.원인최종 원인요청의 ⟨⟨Content-Type⟩⟩이 미지정되어 있었음서버는 ⟨⟨@RequestBody⟩⟩로 JSON을 기대하고 있었기 때문에 파싱 실패 → 필터에서 비정상 요청으로 처리됨확인했던 원인 후보들Spring Security 설정에서 ⟨⟨/auth/login⟩⟩ 경로에 대해 ⟨⟨permitAll()⟩⟩이 빠져 있어 인증 없이 접근이 불가능한 상태일 수도 있다고 의심⟨⟨CSRF⟩⟩ 설정이 비활성화되지 않았을 가능성도 고려해결 방법1..
오늘 한 일 요약 테이블 설계 완료 (ERD v1 확정 및 재고·가결제·쿠폰 구조 설계)기능 설계 정리 (우선순위별 기능 분류 및 배포 계획 문서화)캐싱 전략 수립 (Caffeine / Redis 캐시 항목·구조·무효화 정책 설계) 테이블 설계개요1차 ERD를 MySQL 8 기준 DDL로 작성하고, 물리 테이블 구조를 확정하는 과정에서 트랜잭션 경계, 캐시 정책, 확장성까지 함께 검토하였다.고민한 점금액 컬럼 타입 : 가격·할인 계산 시 소수 오차를 없애고 인덱스 크기를 최소화하려면 어떤 타입이 적절할까?재고 필드 위치 : 동시 주문이 많은 상황에서 락 경합을 줄이려면 재고 수량을 어느 테이블에 두는 게 좋을까?상태 값 표현 : 상품 판매 상태를 ⟨⟨문자열⟩⟩,⟨⟨ENUM⟩⟩,⟨⟨별도 테이블⟩⟩ 가운데 ..
왜 자동 시간 기록이 필요할까?쇼핑몰 프로젝트와 같은 실무 백엔드에서는 거의 모든 주요 테이블에 ⟨⟨created_at⟩⟩, ⟨⟨updated_at⟩⟩ 컬럼이 존재한다.예시: 상품, 회원, 주문, 쿠폰 등 대부분의 테이블에 등록/수정 일시 컬럼이 필수로 들어감.이 컬럼을 직접 매번 코드에서 set하는 것은 비효율적이고, 자동화가 필요하다.테이블 예시주요 시간 컬럼productcreated_at, updated_atusercreated_at, updated_atordercreated_at, updated_at BaseTimeEntity의 역할⟨⟨BaseTimeEntity⟩⟩는 모든 엔티티의 공통 시간 컬럼 관리를 위한 추상 클래스다.@MappedSuperclass@EntityListeners(Auditin..
GitHub - kyeonghooon/KHMallContribute to kyeonghooon/KHMall development by creating an account on GitHub.github.com 1. 프로젝트 목적KHMall은 전자상거래 백엔드 기능을 단계적으로 구현·확장하며 Spring Boot 실무 패턴을 학습하는 프로젝트입니다.실무 설계·코딩 연습: 트랜잭션 관리, 캐싱, 비동기 이벤트 처리 등 실제 서비스에서 자주 쓰이는 패턴을 경험합니다.확장성 실험: MVP(최소 기능) 완성 뒤 검색, 쿠폰, 실시간 알림, PG 연동 등을 추가하며 구조의 유연성을 검증합니다.실전 배포 경험: 1순위 기능을 완료하면 외부에서도 접근 가능한 URL로 배포하여 운영 흐름까지 체험2. 기술 스택 한눈에 보..
파일 시스템운영체제는 데이터를 단순히 저장하는 것만으로는 충분하지 않다. 저장된 데이터를 효율적이고 안전하게 관리할 수 있도록 하는 체계가 필요한데, 이 역할을 하는 것이 바로 파일 시스템(File System) 이다. 파일 시스템은 저장 장치 위에 구축되어 사용자가 파일을 읽고 쓰고 지울 수 있도록 추상화된 인터페이스를 제공한다. 파일 시스템은 파일의 생성, 저장, 검색, 삭제, 갱신 등 모든 파일 관리 작업을 담당하는 시스템 소프트웨어다. 또한 디스크에 저장된 데이터를 블록 단위로 관리하며, 각 파일이 어떤 블록에 저장되어 있는지 추적하는 메타데이터도 함께 유지한다.파일 시스템의 계층적 구조현대적인 파일 시스템은 일반적으로 다음과 같은 계층 구조를 따른다: 사용자 인터페이스사용자가 명령어 또는 GU..
FIFO, LRU, OPT운영체제에서 페이지 교체 알고리즘은 한정된 메모리 프레임을 효율적으로 사용하기 위해 사용된다. 프로세스가 필요한 페이지가 메모리에 없으면 **페이지 폴트(page fault)**가 발생하고, 기존 페이지 중 하나를 제거하고 새로운 페이지를 적재해야 한다. 이때 어떤 페이지를 제거할지를 결정하는 방식이 바로 페이지 교체 알고리즘이다.대표적인 알고리즘으로는 FIFO, LRU, OPT가 있다. 각 알고리즘의 개념은 다음과 같다: FIFO (First-In First-Out)가장 먼저 메모리에 올라온 페이지를 가장 먼저 제거한다. 구현이 단순하지만 실제 성능은 좋지 않을 수 있다.LRU (Least Recently Used)가장 오랫동안 사용되지 않은 페이지를 제거한다. 최근 사용 정..