인증과 권한
사용자 식별, 계정 소유권, 역할, 쓰기 권한을 API 경계에서 나눕니다.
Java/Spring Boot와 Python/FastAPI로 제품 백엔드 기능을 구현합니다. API 동작, DB 상태, 인증, 권한, 캐시, 트랜잭션이 서비스 규칙과 어긋나지 않도록 확인하는 데 집중합니다.
AI/OCR도 결국 백엔드 데이터 경계 문제로 봅니다. 그럴듯한 AI 결과가 곧바로 최종 데이터가 되지 않도록 스키마, 검증, 사용자 확인 흐름을 분리합니다.
사용자 식별, 계정 소유권, 역할, 쓰기 권한을 API 경계에서 나눕니다.
승인, 참여, 환불처럼 현재 상태에서 가능한 액션만 허용되도록 확인합니다.
공유 데이터 변경은 서비스 계층 경계, 잠금 순서, 타임아웃, 실패 경로까지 봅니다.
성공 경로뿐 아니라 예외, 비동기, 커밋 전후에서 캐시 무효화가 빠지는 지점을 찾습니다.
요청, 응답, 에러, 화면 기대값을 양쪽에서 디버깅할 수 있게 명시합니다.
폼 검증만이 아니라 unique constraint, 저장 규칙, 엔티티 규칙으로 불변식을 보호합니다.
트랜잭션 커밋 전 삭제, 예외 경로, 비동기 내부 호출에서 캐시 제거가 누락될 수 있는 지점을 봤습니다. transaction-aware cache 처리, finally 정리, 비동기 람다 내부 정리, atomic guard를 적용 방향으로 잡고, 로컬 Caffeine 캐시의 다중 인스턴스 한계도 함께 기록했습니다.
단순 read-check-update 흐름은 두 요청이 모두 정원 검사를 통과할 수 있습니다. 더 안전한 설계는 비관적 잠금, member-to-party 고정 잠금 순서, timeout을 사용합니다. 정원 초과, 중복 참여, 잠금 타임아웃은 검증 범위에 넣고, 전체 멀티스레드 부하 테스트는 한계로 남겼습니다.
이메일만으로 계정을 연결하면 소유권이 잘못 귀속될 수 있습니다. provider와 socialId를 함께 식별자로 두고, DB unique constraint로 동시 최초 가입을 방어하며, 충돌 시 이미 생성된 계정을 다시 조회하는 흐름으로 수렴시킵니다.
OCR 응답과 최종 영수증 저장 요청을 분리했습니다. 읽기 어려운 선택 필드는 null로 두고, needs_review와 warnings로 불확실성을 남기며, 사용자가 확인한 값만 최종 저장 경계로 넘깁니다.
BOUT는 전자·가전기기 영수증과 보증 정보를 한곳에 모아두는 아카이빙 앱입니다. 영수증 사진에서 구매일, 제품명, 가격, 무상 AS 기간 후보를 뽑고, 사용자가 확인한 값만 보관 기록으로 저장합니다.
TFTgogo는 롤토체스 유저가 전적을 확인하고, 파티를 모집하고, 참여자와 채팅할 수 있는 게임 커뮤니티 서비스입니다. 저는 로그인 여부, 파티 정원, 중복 참여, 채팅 권한처럼 사용자 상태가 꼬이면 안 되는 흐름을 맡았습니다.
ALLPICK은 회원이 상품을 주문하고, 판매자가 상품을 관리하며, 관리자가 승인·환불·문의 처리를 맡는 쇼핑몰 플랫폼입니다. 저는 관리자 페이지와 마이페이지에서 권한과 상태가 맞지 않는 요청을 막는 흐름을 다뤘습니다.
개인 Ubuntu VPS에서 포트폴리오 배포, Obsidian/Jira 자동화, HTTPS 라우팅, 배포 재시작, 모니터링 기록, 장애 복구 흐름을 실습하고 운영한 시스템입니다.
사용자, 관리자, 주문, 파티, 계정 소유권, 상태 기반 서비스 흐름을 위한 Java/Spring Boot API를 만듭니다.
AI/OCR 결과를 검토 가능하게 다루고, 사용자 확인 후에만 올바른 저장 경계로 넘깁니다.
Docker, AWS, GitHub Actions, HTTPS, 개인 VPS 운영, 복구 기록처럼 배포 지향 흐름도 함께 다룹니다.
코드를 쓰기 전 현재 API 모양, 데이터 모델, 이슈, 실패 조건을 먼저 읽습니다.
바꿀 범위, 제외 범위, 기대 에러 동작, 검증 방법을 나눠서 정리합니다.
AI는 골격화에 활용하되, 핵심 로직, DB 상태, 로그, API 동작은 직접 확인합니다.