- [JPA] JWT를 사용한 로그인 인터셉터 만들기Song hyun[JPA] JWT를 사용한 로그인 인터셉터 만들기 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String jwt = request.getHeader(Define.AUTHORIZATION); if(jwt == null || jwt.startsWith((Define.BEARER)){ throw new Exception401("JWT 토큰을 전달해주세요"); } jwt = jwt.replace(Define.BEARER,""); try { ..
- 2024-10-25 09:28:30
- [JPA] JWT란?Song hyun[JPA] JWT란? 1. JWT란 무엇일까?JWT는 JSON Web Token의 약자로, 두 시스템 간에 정보를 안전하게 전송하기 위해 사용되는 토큰 기반 인증 방식이다.클라이언트-서버 간에 인증 정보나 사용자 상태를 유지하고 싶을 때 JWT를 사용한다. 2. JWT의 구조 : JWT는 크게 세 부분으로 구성되어 있다.헤더(Header): 토큰의 타입과 해싱 알고리즘 정보를 담고 이싿.페이로드(Payload): 주로 사용자 정보나 데이터를 포함하는 부분이다. 사용자 ID, 사용자 이름, 토큰 만료 시간 등의 정보가 담겨 있다.서명(Signature): 헤더와 페이로드의 내용을 해싱한 뒤, 비밀키로 서명한 부분이다. 이 서명을 통해 데이터가 위변조되지 않았음을 확인할 수 있다. 3. JWT의 작동 방식J..
- 2024-10-25 09:28:03
- [JPA] 34. RestAPI에 기반한 회원가입 기능 만들기Song hyun[JPA] 34. RestAPI에 기반한 회원가입 기능 만들기 *작업 순서응답 결과 확인하기공통 DTO 사용해 데이터 내려주기 설계서비스 레이어 코드 수정 (레포지토리 코드 확인)컨트롤러 레이어 코드 수정 1. [User] 폴더에 UserResponse 클래스 만들기package com.tenco.blog_v3.user;import lombok.Getter;import lombok.Setter;public class UserResponse { @Getter @Setter public static class DTO{ private int id; private String username; private String email; // ex..
- 2024-10-23 10:28:32
- [JPA] 32. 공통 응답 DTO 및 예외 처리 구조 만들기Song hyun[JPA] 32. 공통 응답 DTO 및 예외 처리 구조 만들기 1. ApiUtil 클래스란?ApiUtil 클래스는 모든 API 응답을 동일한 형태로 구성하기 위한 공통 응답 DTO이다.이를 통해 성공 응답, 에러 응답을 일관적인 구조로 제공할 수 있다. 2. 코드 예제(1) ApiUtil.javapackage com.tenco.blog_v3.common.util;public class ApiUtil { private Integer status; // 협의 -> 1 성공, -1 실패 private String msg; private T body; // T body (2) GlobalExceptionHandlerpackage com.tenco.blog_v3.common;import c..
- 2024-10-23 09:52:10
- [JPA] 31. RestAPI 주소설계와 세팅Song hyun[JPA] 31. RestAPI 주소설계와 세팅 1. yml - mustache 삭제 mustache: servlet: expose-session-attributes: true # Mustache ????? ?? ??? ??? ? ??? ?? expose-request-attributes: true # Mustache ????? ?? ??? ??? ? ??? ?? 2. [templates] 폴더 내부의 mustache 파일 모두 삭제 3. 페이지 요청 메서드 삭제 4. WebConfig 수정@Override public void addInterceptors(InterceptorRegistry registry) { // 로그인 인터셉터 등록 ..
- 2024-10-23 09:20:23
- [JPA] 30. RestAPI 주소 설계 규칙Song hyun[JPA] 30. RestAPI 주소 설계 규칙 1. 소문자를 사용한다.대문자는 때로 문제를 일으키는 경우가 있어, URI를 작성할 때는 소문자로 작성한다. 2. 언더바(_) 대신 하이픈(-)을 사용한다.가독성을 위해 긴 Path를 표현하는 단어는 하이픈(-)으로 사용하자.프로그램 글자 폰트에 따라 언더바 문자는 부분적으로 가려지거나 숨겨질 수 있다. 3. 마지막에 슬래시(/)를 포함하지 않는다.후행 슬래시는 의미가 전혀 없고 혼란을 야기할 수 있다 4. 행위를 포함하지 않는다.행위는 URI 대신 Method를 사용해 전달한다. 5. 파일 확장자는 URL에 포함시키지 않는다.파일 확장자는 URI에 포함하지 말아야한다. 대신 Content-type 헤더를 통해 전달되는 대로 미디어 타입을 사용해 bo..
- 2024-10-21 09:34:00
- [JPA] 29. CORS란 뭘까?Song hyun[JPA] 29. CORS란 뭘까? 1. CORS 의 의미CORS(Cross Origin Resource Sharing) = 출처 간 리소스 공유 (다른 도메인에서 자원을 공유할 수 있게 해준다.)기본적으로 웹 브라우저는 보안상의 이유로 동일 출처 정책을 적용하여, 다른 출처의 리소스에 대한 접근을 제한한다. 즉, 브라우저는 기본적으로 다른 출처로의 요청을 차단하지만 서버에서 이를 명시적으로 허용할 수 있다.=> 동일 출처 정책(Same-Origin-Policy:SOP)의 반대 개념이 CORS이다. *학교 도서관에 있다고 가정해보자. 도서관 내부에서는 책을 자유롭게 읽고 빌릴 수 있지만, 외부 건물에서는 접근이 제한된다. 2. CORS 설정하기(1) 서버측 CORS 설정하기 (전역)@Configurat..
- 2024-10-21 09:21:23
- [JPA] 28. 댓글 쓰기 및 삭제 및 인터셉터 적용Song hyun[JPA] 28. 댓글 쓰기 및 삭제 및 인터셉터 적용 *정방향 인서트: JPA에서 엔티티간의 연관 관계를 설정할 때, 연관 관계의 주인(owner) 엔티티를 통해 데이터를 저장하는 것을 의미한다. 이는 양방향 매핑에서 특히 중요하며, 연관 관계의 주인 측에서 데이터를 추가하고, 저장해야 연관관계가 올바르게 매핑된다. 1. 댓글 등록 화면 코드 수정 댓글등록 2. ReplyDTO.javapackage com.tenco.blog_v2.reply;import c..
- 2024-10-17 10:28:37
- [JPA] 27. 게시글 삭제 오류 해결하기Song hyun[JPA] 27. 게시글 삭제 오류 해결하기 ** fk 제약 조건 때문에 게시글을 삭제하면 댓글이 참조하는 게시글이 사라지기 때문에 삭제가 될 수 없음.어노테이션을 이용해 도움 받기댓글의 FK에 값을 NULL로 변경하고 게시글 삭제댓글을 먼저 삭제1. Cascade 설정하기package com.tenco.blog_v2.board;import com.tenco.blog_v2.reply.Reply;import com.tenco.blog_v2.user.User;import jakarta.persistence.*;import lombok.*;import java.sql.Timestamp;import java.util.ArrayList;import java.util.List;@NoArgsConstructor@E..
- 2024-10-17 10:25:58
- [JPA] 26. 댓글 목록 보기 기능Song hyun[JPA] 26. 댓글 목록 보기 기능 1. BoardService 코드/** * 게시글 상세보기 서비스, 게시글 주인 여부 판별 */ public Board getBoardDetails(int boardId, User sessionUser) { Board board = boardJPARepository .findById(boardId) .orElseThrow(() -> new Exception404("게시글을 찾을 수 없어요")); // 현재 사용자가 게시글을 작성했는지 여부 판별 boolean isBoardOwner = false; if(sessionUser != null ) {..
- 2024-10-17 09:53:32
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)