목록2026/03 (9)
co-cherry
앞서 게시글 생성과 상세 조회를 구현했다. 이번 시간에는 게시글 삭제와 수정을 구현해보려고 한다. 게시글 삭제와 수정은 작성자만 가능하므로 작성자 권한 검증이 서비스 로직에 들어가야 함을 유의하고 API를 설계해보자. 게시글 삭제 게시글을 삭제하기 위해서는 삭제할 게시글의 Id와 권한 검증을 위해 해당 게시글을 삭제할 user의 Id가 필요하다. 게시글을 삭제하기 전에, 아래 두 가지의 검증이 필요하다.해당 아이디의 게시글이 존재하는지 확인 → 아니라면 POST_NOT_FOUND 반환 해당 게시글의 작성자가 삭제 요청을 보낸 user와 일치하는지 확인(권한 검증) → 아니라면 POST_UNAUTHORIZED 반환@Transactional public void deletePost(Long postI..
4주차 과제로 영화 사이트(CGV)처럼 TMDB를 통해 영화 데이터를 불러와 무한 스크롤 페이지를 구현해보았다. 1. 타입 설정먼저, 영화 리스트와 영화 타입을 먼저 지정해주었다. TMDB API 응답 구조를 그대로 정의하되, 필요하지 않을 것 같은 부분은 빼주었다.MovieListResponse가 API 호출 시 반환되는 최상위 타입이고, 그 안에 Movie 배열이 담기는 구조이다. export interface Movie { id: number; title: string; overview: string; poster_path: string | null; // 포스터가 없을 수 있으므로 NULL 허용 release_date: string; vote_average: n..
TanStack QueryReact 애플리케이션에서 서버 상태(Server State)를 관리하기 위한 비동기 상태 관리 라이브러리 서버에서 데이터를 가져오고, 캐싱하고, 동기화하고, 업데이트 하는 모든 과정을 대신 관리해준다. Q. 왜 필요할까?useEffect + fetch 로 직접 서버 데이터를 관리하면 매번 반복되는 코드를 작성해야 함 const [data, setData] = useState(null);const [isLoading, setIsLoading] = useState(false);const [error, setError] = useState(null);useEffect(() => { setIsLoading(true); fetch('/api/todos') .then(res =..
*UMC 워크북 내용을 일부 참고하였다. 기능 목록 확정게시판 기능을 구현하기 위한 기능 목록을 작성하였다.(후에 이미지 추가 및 댓글 부분 추가 예정) 게시글 생성게시글 수정게시글 삭제게시글 단건 조회 (상세 보기) 게시글 목록 조회 (페이지, 최신순) ERD 작성위 게시판 기능을 기준으로 User와 Post 엔티티를 최소로 정의하였다. Enum의 사용 예시를 보여 주기 위해 부가적으로 필드를 추가했지만... 한 명의 회원(1)은 여러 개의 게시글(N)을 작성할 수 있으므로 User와 Post는 1:N의 관계로 설정하였다.또한, Post 엔티티는 작성자의 식별을 위해 user_id를 외래키로 가진다. https://www.erdcloud.com/d/hFup7EsMsQsaM3cYJ springboot-..
https://ko.react.dev/learn/managing-state State 관리하기 – ReactThe library for web and native user interfacesko.react.dev Context API컴포넌트 트리 전체에 데이터를 전달하는 React 내장 기능별도의 라이브러리 없이 React가 기본 제공하는 전역 상태 도구 Props drilling 없이 하위 컴포넌트에서 상태를 구독할 수 있다. 장점설치 불필요(React 내장)createContext → Provider → useContext 세 가지만 알면 바로 쓸 수 있음 다크모드 테마, 로그인 유저 정보, 언어 설정처럼 앱 전체에서 읽기만 하는 값(자주 변하지 않음)에 사용하기 좋음단점context 전체를 통째로..
커스텀 훅을 활용한 로직 분리 커스텀 훅(Custom Hook)반복되는 로직을 React의 내장 훅을 활용하여 재사용 가능한 형태로 분리한 사용자 정의 훅 예를 들어, 같은 input 로직이 두 컴포넌트에 있다고 가정해보자. EmailInput (Before)import { useState } from "react";function EmailInput() { const [email, setEmail] = useState(""); const handleChange = (e: React.ChangeEvent) => { setEmail(e.target.value); }; return ( );}export default EmailInput; NicknameInput (Before)import {..
공통 응답 형식 구조ApiResponse ← 실제 응답 wrapper 클래스 ├── BaseSuccessCode ← 성공 코드 인터페이스 │ └── GeneralSuccessCode (enum) └── BaseErrorCode ← 에러 코드 인터페이스 └── GeneralErrorCode (enum) ApiResponse실제 응답을 감싸는 공통 응답 *래퍼(wrapper) 클래스*Java의 기본형을 객체로 감싸는 클래스 public class ApiResponse { private final Boolean isSuccess; private final String code; private final String messa..
1. Spring Boot란?Spring 기반 웹 애플리케이션을 쉽고 빠르게 만들 수 있도록 도와주는 Java의 프레임워크 복잡한 설정을 자동으로 처리하는 Auto Configuration 기능 제공 내장 서버(Tomcat) 제공 → 별도의 서버 설치 필요 없음REST API 개발에 많이 사용됨 https://wikidocs.net/160047 1-01 스프링 부트란?**스프링 부트(Spring Boot)** 는 웹 프로그램(웹 애플리케이션)을 쉽고 빠르게 만들 수 있도록 도와주는 자바의 웹 프레임워크이다. 스프링 부트는 스프링(Spring)…wikidocs.net자세한 내용은 위 링크 참조 (개념 이해에 좋다) 2. Spring Boot 프로젝트 생성하기 IntelliJ IDEA를 사용해 Spring ..
1. SRP(Single Responsibility Principle)SRP(Single Responsibility Principle) 는SOLID 원칙 중 첫 번째 원칙으로, 하나의 클래스는 하나의 책임만 가져야 한다 는 원칙이다.보다 정확하게 말하면, 클래스를 변경해야 하는 이유는 단 하나뿐이어야 한다.즉, 하나의 클래스가 여러 역할을 동시에 수행하면 안 된다는 의미다. 클린 코드(Clean Code) 저서에서는 이렇게 말한다.클래스나 모듈을 변경할 이유가 하나, 단 하나뿐이어야 한다. 여기서 중요한 점은 기능의 개수가 아닌 변경 이유(Change Reason)이다.예를 들어,비즈니스 로직이 변경될 때DB 구조가 변경될 때출력 포맷이 변경될 때서로 다른 이유로 클래스가 수정된다면 그 클래스는 여러 책..