전체 글 139

DTO 클래스 생성 Request, Response

DTO = Data Transfer Object 데이터를 전송하기 위한 객체 요청이나 응답에 사용할 데이터만 따로 담아두는 전용 박스아니 처음에 DTO가 전혀 이해가 안 가는 겁니다.이거 왜 쓰는데?! 뭐가 다른데?! 으악코드 먼저 보겠습니다.ReadingRecordRequest.javapackage me.dodo.readingnotes.dto;import java.time.LocalDate;public class ReadingRecordRequest { private String title; private String author; private LocalDate date; private String content; // 기본 생성자 // 없으면 JPA와 동일하게 Jac..

Spring Boot project 2025.04.13

ReadingRecordController 생성, get/post Test

사용자가 요청을 처리함[사용자 클릭] → [Controller] → [Service] → [Repository] → [DB 저장]ReadingRecordController.javapackage me.dodo.readingnotes.controller;import me.dodo.readingnotes.domain.ReadingRecord;import me.dodo.readingnotes.service.ReadingRecordService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.*;import java.util.List;@RestController@Req..

Spring Boot project 2025.04.12

ReadingRecordService 생성

Controller(요청 받는 곳)와 Repository(DB와 연결되는 곳) 사이에서 실제 로직을 처리하는 역할.ex. "책을 저장하되, 제목이 없으면 저장하지 마!" 같은 유효성 검사도 여기서 처리함.Service를 왜 만드냐?비즈니스 로직(Service)와 DB 로직(Repository)를 분리할 수 있음.비즈니스 로직(Service) - 유효성 검사, 수량 확인 등DB 로직(Repository) - DB에 저장구조장점 단점Controller → Repository빠르게 구현, 간단로직이 섞이면 복잡해짐Controller → Service → Repository유지보수 좋고 재사용 가능코드 구조가 조금 더 복잡해짐ReadingRecordService.javapackage me.dodo.reading..

Spring Boot project 2025.04.11

ReadingRecordRepository 생성

Repository는 JPA가 제공하는 '자동 DAO(데이터 접근 객체)'DAO(Data Access Object) - 실제 DB에 접근하여 CRUD하는 객체ReadingRecordRepository.javapackage me.dodo.readingnotes.repository;import me.dodo.readingnotes.domain.ReadingRecord;import org.springframework.data.jpa.repository.JpaRepository;public interface ReadingRecordRepository extends JpaRepository { // 필요하면 여기에 커스텀 쿼리도 작성}public interface ReadingRecordRepository ..

Spring Boot project 2025.04.10

ReadingRecord 엔티티 생성

DB와 매핑될 클래스 생성.POST로 받을 책 내용들 저장하는 구조.파일 위치src/main/java/your_package_name/domain/ReadingRecord.javadomain은 모델 객체를 넣는 일반적인 디렉터리명임.ReadingRecord.javapackage me.dodo.readingnotes.domain;import jakarta.persistence.*;import java.time.LocalDate;@Entity //이 클래스가 JPA 엔티티임을 선언. DB 테이블과 매핑됨@Table(name = "reading_record") //DB에서 이 엔티티가 매핑될 테이블 이름을 지정함public class ReadingRecord { @Id //이 필드(id)가 **기본 키(..

Spring Boot project 2025.04.09

환경설정

maven이 아니라 gradle로 하려고 다시 프로젝트 생성함.웹org.springframework.boot:spring-boot-starter-webJPAorg.springframework.boot:spring-boot-starter-data-jpa테스트org.springframework.boot:spring-boot-starter-test개발툴org.springframework.boot:spring-boot-devtools개발용 DBcom.h2database:h2라이브러리는 이렇게 사용.이해하기 어려워지는 것 같아서 라이브러리 일단 몇 개 줄임.(필요하면 나중에 추가 예정)

Spring Boot project 2025.04.09

Spring - th:field와 th:value 차이

public class MemberForm { private String email = "test@example.com"; // getter, setter}@GetMapping("/register")public String register(Model model) { model.addAttribute("memberForm", new MemberForm()); return "register-form";}이런 상황일 때 th:field일 경우 실제로 브라우저에서 보여지는 HTML (렌더링 결과) 자동으로 name도 붙고, value도 들어가고, 나중에 form 전송되면 email 값도 넘어감. th:value일 경우 실제로 브라우저에서 보여지는 HTML (렌더링 결과) ..

Spring Boot 2025.04.09

Spring - No static resource 에러

지금까지 잘 경로 찾아서 갔으면서 왜 못 찾겠다는 거야?!static과 다른 폴더에 있는 상태긴했다. 💡 왜 오류가 났던 걸까?그냥 주소창에 /members/register 치면 static 폴더에 있지 않은 파일들은 볼 수 없다!templates 폴더는 Spring이 직접 렌더링해서 보여줄 때만 사용됨.즉, templates 폴더에 있는 파일은 그냥 주소창에서 못 연다! 지금 static/members/register.html 인 상태. ✅ 해결법: @Controller로 연결한다@Controller는 "얘가 웹 요청을 처리할 수 있는 클래스야!" 라고 Spring한테 알려주는 역할임.templates/members/register.html 파일을 찾아서 브라우저에 보여줌.

Spring Boot 2025.04.09

React - State

State컴포넌트의 상태state 값이 변경될 경우 컴포넌트도 재렌더링이 됨.state는 컴포넌트를 개발하는 개발자가 직접 정의함.주의사항렌더링이나 데이터 흐름에 사용되는 값만 state에 포함시켜야함.→ 데이터 흐름에 상관없는 경우 불필요한 렌더링 발생으로 성능이 저하됨.특징state는 직접적인 변경이 불가능함.변경할 때는 반드시 setState() 함수나 개별 set함수를 이용해야 함.import React, { useState } from 'react';function Counter() { // useState를 사용하여 count라는 상태와 이를 갱신할 수 있는 setCount 함수를 선언 const [count, setCount] = useState(0); return ( ..

React 2025.04.08