전체 글 257

스프링 부트 간단한 요청과 응답 동작 방식

스프링 부트 그림으로 요약한 요청과 응답에 흐름 살펴 보기 클라이언트 측에서 /user로 GET 요청을 합니다. 이 요청은 톰캣을 거쳐 스프링 부트 애플리케이션으로 전달됩니다.이때, 스프링 부트의 디스패처 서블릿(DispatcherServlet)이 요청을 받습니다. 디스패처 서블릿은 요청된 URL을 분석하고, 이를 처리할 수 있는 컨트롤러와 해당 메서드를 찾습니다.컨트롤러에서 비즈니스 로직이 필요한 경우, 비즈니스 계층(Service) 및 퍼시스턴스 계층(Repository)을 통해 데이터를 처리합니다.응답 과정에서 MIME 타입(예: JSON, HTML, XML 등)에 따라 다음과 같이 응답 방식이 달라집니다:JSON, XML 등 데이터 포맷으로 응답해야 하는 경우, 메시지 컨버터가 작동합니다. 예를 ..

Spring boot 2025.11.17

CHAKAK 스냅 촬영 플랫폼 - 중개플랫폼 웹/앱

프로젝트 주제 및 선정 배경, 기획의도현재 스냅 촬영 시장은 SNS 허위 광고와 웨딩 업체의 높은 가격 거품 문제를 안고 있습니다.'찰칵'은 실제 거래 완료 고객의 후기만 수집하여 신뢰성을 확보하고, 불필요한 중간 마진을 제거한 합리적 가격으로 고객과 작가를 직접 연결하는 투명한 플랫폼으로 구축하였습니다.이를 통해 소비자는 신뢰할 수 있는 정보로 적정 가격에 작가를 선택하고, 작가는 실력에 맞는 정당한 평가를 받을 수 있는 환경을 제공하는 것이 목적입니다. git 주소 https://github.com/suuu1021/chakak_flutter GitHub - suuu1021/chakak_flutterContribute to suuu1021/chakak_flutter development by creat..

My Project 2025.09.29

레코드 문법과 tyepdef 에 대해 알아 보자.

1. Record 문법이란?개념 설명Record는 마치 투명한 보관함과 같습니다. 기존의 클래스가 잘 포장된 선물 상자라면, Record는 내용물이 한눈에 보이는 투명한 케이스입니다. 필요한 데이터를 간단하게 묶어서 전달할 수 있는 가벼운 데이터 컨테이너라고 생각하면 됩니다.Record 문법의 특징Record는 항상 소괄호 () 로 시작합니다!이는 Record를 다른 데이터 타입과 구별하는 가장 중요한 문법적 특징입니다. 마치 수학에서 좌표를 (x, y)로 표현하는 것처럼, Dart의 Record도 괄호 안에 데이터를 담아 표현합니다.기본 문법//Record 타입 정의(String, int) userInfo = ('홍길동', 25);// Named Record({String name, int age}) ..

Flutter 2025.09.05

블로그 프로젝트 - 게시글 수정하기

Postimport 'package:flutter_blog/data/models/user.dart';class Post { // TODO - (댓글은 추후 추가) int id; // 게시물 ID String title; String content; DateTime createdAt; // 생성일시 DateTime updatedAt; // 수정일시 User user; // 작성자 (관계형 데이터) int bookmarkCount; // 북마크 수 // 현재 사용자의 북마크 여부 (로그인 상태에 따라 달라짐) bool? isBookmark; // post.createdAt.year - 2025 // post.createdAt.month - 5 // DateTime.now().diffe..

Flutter 2025.09.05

블로그 프로젝트 - 게시글 상세 보기 구현 하기

사전 기본 개념Family Provider vs 일반 Provider// 일반 Provider: 앱 전체에서 하나의 인스턴스만 사용final userProvider = NotifierProvider(() { return UserNotifier();});// 사용: ref.watch(userProvider) - 항상 같은 사용자 정보// Family Provider: 매개변수별로 다른 인스턴스 생성final postDetailProvider = AutoDisposeNotifierProvider.family(() { return PostDetailNotifier();});// 사용: ref.watch(postDetailProvider(1)) - 게시글 1번// ref.watch(postDetai..

Flutter 2025.09.05

Spring Boot - STOMP 프로토콜 채팅

학습 목표STOMP(Simple Text Oriented Messaging Protocol) 프로토콜의 개념과 동작 원리 이해순수 WebSocket의 복잡성을 해결하는 구조화된 메시징 시스템 구현스프링 부트의 WebSocket + STOMP 지원 기능 활용메시지 브로커와 구독/발행 패턴 이해채널 기반 메시지 라우팅과 사용자별 개별 메시지 전송 구현실시간 통신의 진화 과정 완성 (폴링 → SSE → WebSocket → STOMP 로드맵의 최종 단계)핵심 개념 이해1. STOMP(Simple Text Oriented Messaging Protocol)란?STOMP는 메시징 중간웨어와 통신하기 위한 간단한 텍스트 기반 프로토콜입니다. WebSocket 위에서 동작하며, 표준화된 메시지 형식과 구독/발행 패턴..

블로그 프로젝트 - 게시글 쓰기 구현 하기 ( Riverpod 상태관리 )

사전 기반 지식1. 왜 글쓰기 폼에서 상태관리가 필요한가?// 나쁜 예: 상태관리 없이 구현하면...void writePost() { // 버튼을 여러 번 눌러도 막을 방법이 없음 // 성공/실패 상태를 관리하기 어려움 // 다른 화면과 데이터 동기화 불가능}// 좋은 예: 상태관리로 구현하면...enum PostWriteStatus { initial, loading, success, failure }// 각 단계별 상태를 명확히 관리// UI가 상태에 따라 자동으로 업데이트 2. Riverpod의 핵심 개념Provider: 상태를 제공하는 객체Notifier: 상태를 변경하는 로직을 담당Consumer: Provider의 상태를 감시하는 위젯 재사용 가능한 위젯 개선 CustomTextFormFi..

Flutter 2025.09.04

블로그 프로젝트 - 로그아웃 기능 연결 및 UI 수정

CustomNavigationimport 'package:flutter/material.dart';import 'package:flutter_blog/_core/constants/size.dart';import 'package:flutter_blog/providers/global/session_notifier.dart';import 'package:flutter_riverpod/flutter_riverpod.dart';// 창고에 접근할 수 있는 위젯으로 확장해야 한다.class CustomNavigation extends ConsumerWidget { final scaffoldKey; const CustomNavigation(this.scaffoldKey, {Key? key}) : super(key..

Flutter 2025.09.04