본문 바로가기

전체 글189

[React Client, Spring Boot Server] Spring Security와 OAuth2 Client를 활용한 SPA 웹 애플리케이션 로그인 시스템 구축: 일반 회원 및 소셜 로그인(Naver, Google, Kakao)과 JJWT 활용 (1) 구현 절차와 인증 방식에 대한 설명 쇼핑몰을 만드는 팀 프로젝트를 진행하면서, 일반 회원 및 소셜로그인 을 구현 했으며JWT 토큰을 활용한 로그인에 대해 포스팅 하려고 합니다.특히나 보안을 신경 쓰기 위해서, 소셜로그인과 같은 경우 Rest API 방식을 사용하지 않고클라이언트에서 redirect uri 를 요청하는 방식이 아닌서버에서 직접 redirect uri 를 요청하고 그에 대한 응답을 클라이언트에게 반환 하는 OAuth2 Client 의 커스텀 소셜 로그인을 진행했습니다.방식 : JWT 를 활용한 로그인에는 여러가지 방식이 존재 하지만, Authorization Header 방식과 HttpOnly Cookie 방식을 사용한 "혼합 방식"을 채택했습니다.  ■ 프론트엔드 기술Vite 와 같은 프론트엔드 빌드 도구를 사용하지 않았고,.. 2024. 6. 21.
[Server] 세션 기반 인증 VS 토큰 기반 인증 세션 기반 인증 세션 기반 인증은 오랫동안 사용자 인증을 처리하는 기본 방법으로 사용되어 왔습니다. 세션 기반 인증은 상태를 유지하는 방식입니다. 이는 인증 기록 또는 세션이 서버와 클라이언트 양쪽에서 유지되어야 함을 의미합니다. 서버는 데이터베이스에 활성 세션을 기록해야 하며, 프론트엔드에서는 세션 식별자가 포함된 쿠키가 생성됩니다. 따라서 이를 쿠키 기반 인증이라고 부릅니다. 전통적인 쿠키(세션) 기반 인증의 흐름을 살펴보겠습니다.사용자가 로그인 자격 증명을 입력합니다.서버가 자격 증명이 올바른지 확인하고 세션을 생성하여 이를 데이터베이스에 저장합니다.세션 ID가 포함된 쿠키가 사용자의 브라우저에 저장됩니다.이후의 요청에서 세션 ID는 데이터베이스와 대조되어 유효한 경우 요청이 처리됩니다.사용자가 로.. 2024. 6. 13.
[쇼핑몰 프로젝트]포스팅 할 것들. (스스로 체크하기 위한 게시글) 팀원들과 프로젝트를 3월 11일 부터 시작해서, 현재(6월10일)까지 3달정도가 지났는데많은 버전 업그레이드를 거치면서, 최종적으로 기능 구현을 위한 큰 리펙토링이 끝났기 때문에포스팅 해야할 글들이 많아졌습니다. 1. 설계와 시나리오. (이유, 의도, 목적 등)2. 단계별 포스팅 (기능 구현을 위한, 절차적 프로세스)등등 저는 개인적으로 포스팅이라는 것은, 끝 마무리를 짓는 것이라고 생각해서제가 담당 하거나, 구현했던 기능들에 대해서 어느정도 정리하는 것을 선호하는데요사실 이 포스팅은, 제가 보기 위해서(체크 하기 위해서) 작성한 글입니다.우선 순위에 맞게 포스팅 할 것이구.. 최고 우선 순위라고 하면가장 어려운 기술에 대해서 우선적으로 포스팅 하는게 제 스타일 일 것 같습니다. 시큐리티 관련 작업들이겠.. 2024. 6. 10.
[문제해결]이미지를 등록하고나서 , 이미지가 바로 나오지 않는 이유 프로필 이미지를 등록하는 시나리오 및 과정 현재 진행중인 프로젝트에서 , 프로필 페이지에서회원 정보 수정 페이지로 들어갔을 때 , 프로필 이미지를 POST(업데이트) 하는  연필모양의 버튼을 누르게 되면, 프로필 이미지를 등록하는 모달창이 나오게 됩니다.이 모달창에서는, 1. 이미지 파일을 선택하고2. 이미지 파일 미리보기에서 이미지를 크롭하고3. 프로필 이미지를 등록하는 순서로 프로세스가 진행됩니다.Crop Image 를 누르면, 무조건 Apply Profile Image 버튼이 활성화 되는 것은 아닙니다.const MAX_FILE_SIZE = 2 * 1024 * 1024; // 2MB// 프로필 이미지 크롭 헨들러const handleCropImage = async () => {setCanvasPre.. 2024. 6. 4.
[Backend] 데이터베이스 트랜잭션(Transaction)이란? (1) 트랜잭션은 개발자라고 하면 제대로 알고 있어야 하는 개념이다. 하지만 트랜잭션은, 다양한 영역에서 흔히 사용되는 개념이다. HTTP (request와 response로 이루어진 단위) 단위에서의 트랜잭션도 존재하며, DB의 상태를 기준으로하는 트랜잭션도 존재한다. 이 트랜잭션이라는 것은, 어떤 특정한 기준에서의 작업의 단위를 말한다. 이 글에서는 데이터베이스 트랜잭션은 무엇이고 어떤 특징을 가지고 있으며, 트랜잭션의 상태와 연산에 대해 다룰 것이다.트랜 잭션에 대해서, 기본과 원리를 이해하고 추후 서비스 영역에서 트랜잭션 처리를 어떻게 해야할지 고민하게 될때올바른 이해와 정확성을 위해 트랜잭션에 대한 시리즈를 포스팅할 계획이다.이번 포스팅에서는, 흔히 말하는 Database 에서 Transaction .. 2024. 5. 13.
Spring Boot 3.2.3에서 의존성 호환성 설정[JPA, Redis, Java Mail Sender, Thymeleaf, Validation, Web, Datatype-hibernate6, Hibernate Core] Hibernate5 -> Hibernate6변경 인프런 김영한님의 실전! 스프링 부트와 JPA 활용2 강의를 듣고 Project Undemand 프로젝트 dependencies를 설정하는 과정에서 java.lang.ClassNotFoundException:javax.persistence.Transient 다음과 같은 에러가 발생하여, 이를 해결하는 과정을 담고자 포스팅을 합니다. 먼저 프로젝트 initializers 를 다음과 같이 셋팅하고 시작했다는 점을 말씀드립니다. 여기서 각 Dependencies 가 어떤 기능을 하는지는 , 다루지 않겠습니다 ! 스프링부트 3.2 릴리즈노트를 보시면, 최소 지원버전 및 중요한 정보들을 확인하실 수 있습니다. 강의에서 Hibernate5JakartaModule 설정 저는 강의에서 스프링 부트 3.0 이하에서의 H.. 2024. 3. 6.