Spring boot 60

1. CORS (Cross-Origin Resource Sharing)란?

CORS (Cross-Origin Resource Sharing) =" 다른 도메인에서 우리 서버로 요청을 보낼 수 있게 허용하는 정책" Origin(출처)이란?Orign = Protocol + Domain + Porthttpls://localhost:3000(플러터 앱)http://localhost:8080(우리 Spring Boot 서버)-> 서로 다른 Origin! 왜 CORS 문제가 발생할까요?시나리오 : React 앱에서 우리 API호출플러터 앱(localhost:3000)에서 아래 주소로 요청 실행fetch('http://localhost:8080/api/boards') .then(response => response.json()) .then(data => console.log(..

Spring boot 2025.07.21

0. SSR 개념과 CSR 개념 확인

1. SSR과 CSR 개념 이해하기 SSR(Server-Side Rendering) - 우리가 지금까지 만든 방식SSR은 서버에서 사용자에게 보여줄 페이지를 모두 구성하여 사용자에게 페이지를 보여주는 방식이다. 즉 , 서버로부터 완전하게 만들어진 html파일을 받아와 페이지 전체를 렌더링 하는 방식이다. 서버에서 완성된 HTML을 만들어서 보내주는 방식브라우저 요청 -> 서버가 HTML 완성 -> 완성된 페이지 전송 -> 브라우저 표시 SSR의 특징-서버에서 모든 작업 처리 : 데이터 조회, HTML 생성, 페이지 완성-새로고침 발생: 페이지 이동할 때마다 전체 페이지 새로고침- 템플릿 엔진 사용: Mustache, Thymeleaf 등으로 HTML 생성 우리 프로젝트 예시:@GetMapping("/b..

Spring boot 2025.07.21

연관관계 핵심 정리 사항

JPA에서 DB의 JOIN이 필요한 상황에서 엔티티의 연관관계를 설정해 데이터를 조회할 때, 즉시 로딩과 지연 로딩의 차이와지연 로딩에서 발생할 수 있는 N + 1 문제, 그리고 이를 해결하기 위한 방법 정리 개념 정리JPA에서 데이터베이스의 JOIN이 필요한 상황에서 엔티티 간 연관관계를 설정하여 데이터를 조회할 수 있습니다. 1. 즉시 로딩(Eager Loading)- 엔티티를 조회할 때 연관된 데이터도 즉시 함께 조회합니다. - 예 : @ManyToOne(fetch = FetchType.EAGER)설정.- 장점 : 한 번의 쿼리로 필요한 모든 데이터를 가져옴- 단점 : 불필요한 데이터까지 조회할 경우 성능 저하 가능. 2. 지연 로딩(Lazy Loading)- 엔티티 조회 시 연관된 데이터는 실제로..

Spring boot 2025.07.21

댓글 저장과 양방향 맵핑 설정

단방향 매핑 vs 양방향 매핑단방향 매핑이란?단방향 매핑은 한쪽 엔티티에서만 다른 엔티티를 참조하는 관계입니다. 단방향 매핑이란?단방향 매핑은 한쪽 엔티티에서만 다른 엔티티를 참조하는 관계입니다.// Reply 엔티티 (댓글)public class Reply { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "board_id") private Board board; // 댓글 → 게시글 참조 (단방향) @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id") private User user; // 댓글 → 사용자 참조 (단방향)}// Board 엔티..

Spring boot 2025.07.21

1. JpaRepository

JpaRepository란?Spring Data JPA에서 제공하는 인터페이스로, 기본적인 CRUD 메서드들을 자동으로 제공합니다.기존의 EntityManager를 직접 사용하는 방식에서 더 간편한 방식으로 발전findAll(), save(), findById(),deleteById() 등의 메서드를 자동 제공복잡한 쿼리는 @Query 어노테이션으로 직접 작성 가능 1. JpaRepository package com.tenco.blog.user;import org.springframework.data.jpa.repository.JpaRepository;import org.springframework.data.jpa.repository.Query;import org.springframework.data.r..

Spring boot 2025.07.18

REST API 란

1. REST API의 탄생REST는 Representational State Transfer라는 용어의 약자로서 2000년도에 로이 필딩(Roy Fielding)의 박사학위 논문에서 최초로 소개되었습니다. 로이 필딩은 HTTP의 주요 저자 중 한 사람으로 그 당시 웹 (HTTP)설계의 우수성에 비해 제대로 사용되지지 못하는 모습에 안타까워하며 웹의 장점을 최대한 활용할 수 있는 아키텍처로써 REST를 발표했다고 합니다. 2. REST 구성쉽게 말해 REST API는 다음의 구성으로 이루어져있습니다.자원(RESOURCE)- URI행위(Verb) - HTTP METHOD표현(Representations)1) URI는 정보의 자원을 표현해야 한다.(리소스명은 동사보다는 명사를 사용)GET/members/d..

Spring boot 2025.07.18

5. 게시글 페이징 처리

blog_v6 에서 코드 시작디자인 시안 확인https://getbootstrap.com/docs/4.0/components/pagination/ PaginationDocumentation and examples for showing pagination to indicate a series of related content exists across multiple pages.getbootstrap.com JPA 페이징 처리- 페이징 : 많은 데이터를 한 번에 보여주지 않고, 페이지 단위로 나눠서 보여주는 방법.필요한 이유는?데이터가 많으면 느려지니까, 한 페이지에 3~10개씩만 보여줘서 빠르게!사용자가 한눈에 보기 편함게시글 100개가 있으면 , 1 페이지에 10개씩 보여주고 1,2,3 ... 페이지로..

Spring boot 2025.07.18

5. 인증검사와 권한 확인 구분 하기

@PostMapping("/board/{id}/delete")public String delete(@PathVariable("id") Long id, HttpSession session) { User sessionUser = (User) session.getAttribute("sessionUser"); Board board = boardRepository.findById(id); // 권한 체크: 본인이 작성한 게시글만 삭제 가능 if (!board.isOwner(sessionUser.getId())) { log.warn("게시글 삭제 권한 없음 - 게시글 ID: {}, 요청자: {}", id, sessionUser.getUsername()); ..

Spring boot 2025.07.14

4. intercepter 활용(인증검사 공통 처리)

학습 목표 1.intercepter란 뭘까?2.인터셉터 구현 클래스 만드는 방법과 인터셉트를 등록 처리3. AccountController 인증 검사 제거 및 테스트=================================================================================1.intercepter인터셉터는 Spring MVC의 핵심 기능 중 하나로, 웹 애플리케이션에서 공통적인 처리를 재사용할 수 있게 해주는 강력한도구입니다.인터셉터(Interceptor)는 들어오는 요청과 나가는 응답을 가로채어 특정 로직을 수행할 수 있게 해주는 매커니즘을 제공합니다.이는 AOP(Aspect-Oriented Programming)의 일종으로 볼 수 있으며, 컨트롤러(Control..

Spring boot 2025.07.14

3. 예외 처리 중앙 집중화

| 로그 레벨 설정 확인(-dev)# 2칸 공백, 탭키 절대 사용 금지!# 로그 설정 (개발환경용)# 로그 레벨의 개념# ERROR > WARN > INFO > DEBUG > TRACElogging: level: root: INFO com.tenco.blog: DEBUG # 개발 시 모든 로그 확인 #com.tenco.blog.user: INFO # User 패키지만 INFO (선택사항) | 로그 레벨설정 확인(-prod)# 2칸 공백, 탭키 절대 사용 금지!# 로그 설정 (개발환경용)# 로그 레벨의 개념# ERROR > WARN > INFO > DEBUG > TRACElogging: level: root: WARN com.tenco.blog: INFO ..

Spring boot 2025.07.14
728x90