본문 바로가기

분류 전체보기

(122)
함수의 정의 위치와 호출 방식 (다시 생각해보기) 무한 요청이 발생하는 이유는 인터셉터 내부에서 재발급 함수(reissue)를 호출하는 구조가 올바르게 처리되지 않아서 발생할 수 있습니다. 이를 해결하려면, reissue 함수를 인터셉터 바깥에 정의하고, 이를 통해 재발급 요청을 처리하는 방식으로 수정해야 합니다.import axios from 'axios'const instance = axios.create({ baseURL: 'http://localhost:8080', // 기본 URL을 직접 설정 headers: { 'Content-Type': 'application/json', }, withCredentials: true})// 요청 인터셉터 설정instance.interceptors.request.use( (config) => {..
[Spring Boot] http 쿠키 전달 이슈 상황)로그인 시스템을 구현하는 과정에서 Access Token과 Refresh Token을 사용하여 토큰 기반 인증을 설정했습니다. 로그인 시 서버는 클라이언트에게 Access Token은 헤더로, Refresh Token은 쿠키로 전달합니다. Access Token이 만료되면 Refresh Token을 사용하여 새로운 Access Token을 발급합니다. 하지만 로그아웃 시, 쿠키에 있는 Refresh Token을 삭제하려고 할 때 문제가 발생했습니다. 이 문제를 해결하는 과정을 단계별로 정리했습니다. 로그아웃 로직 로그인시 토큰 발급  Cors 설정   1) localhost(프론트) -> localhost(백엔드) : 쿠키가 잘 전달된다. 프론트 코드(로그인) 프론트 코드(로그아웃) withCred..
[Cloud] Spring Boot & Docker EC2 & Git Ation (CI/CD) - 2탄 수동 Docker 배포 gradle 빌드 명령어 → jar 파일 생성# 해당 폴더로 이동cd {gradlew가 있는 폴더} # gradlew 실행./gradlew clean build# test 건너뛰고 빌드 ./gradlew clean build -x test build.gradle 추가 ( jar { enabled = false}  build를 해줘야하기 때문에 수동, 자동 둘다 Dockerfile이 존재해야한다.# 최신 17-jdk 이미지로 부터 시작FROM openjdk:17-jdk# 인자 정리ARG JAR_FILE=build/libs/*.jar# 앞에는 HOST OS의 현재 폴더를 의미# 뒤에는 컨테이너의 현재 폴더(WORKDIR)를 의미COPY ${JAR_FILE} app.jar# doc..
[Cloud] Vue.js & Nginx & Dockerfile ( + Cors 해결 ) - 1탄 프로젝트를 진행하면서 여러 가지 어려운 문제들을 겪었습니다. 특히, Vue.js, Spring Boot, 그리고 쿠키 문제와 관련된 이슈들이 가장 힘들었습니다. 하지만 이러한 문제들을 해결하면서 많은 것을 배울 수 있었습니다. 이제 각각의 이슈를 소개하고 해결 과정을 공유하겠습니다 파일 구조  nginx.confserver { listen 80; # 웹 서버가 HTTP 요청을 수신할 포트 번호를 지정합니다. 여기서는 포트 80을 사용합니다. server_name localhost; # 서버 이름을 지정합니다. 여기서는 localhost로 설정되어 있습니다. location / { root /usr/share/nginx/html; # 요청된 파일의 기본 디렉토리를 설정합니..
[Spring Boot] JPA - 영속성 컨텍스트(Persistence Context) 영속성 컨텍스트(Persistence Context)는 JPA (Java Persistence API)를 이해하는 데 핵심적인 개념으로, ORM(Object-Relational Mapping)에서 매우 중요한 역할을 합니다. 영속성 컨텍스트란?영속성 컨텍스트는 엔티티(Entity) 객체를 영구적으로 저장하는 환경을 의미합니다. 엔티티 매니저(Entity Manager)를 통해 접근할 수 있으며, 애플리케이션 내에서 엔티티 객체를 관리하고 지속성을 보장하는 역할을 합니다. 주요 특징논리적인 개념:영속성 컨텍스트는 물리적으로 존재하는 것이 아니라 논리적으로 존재하는 개념입니다. 실제로는 메모리에 존재하며, 엔티티 매니저를 통해 접근할 수 있습니다.엔티티 관리:영속성 컨텍스트는 엔티티 객체를 관리합니다. 여기..
[Query DSL] 프로젝트 세팅 ( import 인식 문제 확인 ) build 폴더안에 있는 내용이 자동으로 import  IDE 설정에서 Build, Execution, Deployment > Build Tools > Gradle에서Build and run using이 gradle로 설정되어 있는지 확인해야 한다. 만약 잘 안된다면 IDE 설정이 꼬여서 그럴 수 있습니다. 이런 경우에는 IDE를 종료하고, 프로젝트 폴더에 숨겨져 있는 .idea 폴더를 삭제해주세요. 그리고 프로젝트를 처음부터 다시 import 해주세요.  Build and run using (IntelliJ IDEA) - import 인식 X Build and run using (Gradle) - import 인식 O 중요!!!  Querydsl 부트 3.x 설정plugins { id 'java'..
[Spring Boot] Security6 OAuth2 유저 정보 DB 저장 (10) UserEntity 생성@Entity@Getter@Setterpublic class UserEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; private String name; private String email; private String role;}   UserRepository 생성public interface UserRepository extends JpaRepository { UserEntity findByUsername(String username);}  service>CustomOAuth2UserServi..
[Spring Boot] Security6 OAuth2 OAuth2UserService (9) OAuth2UserService는 OAuth2 공급자로부터 가져온 원시 사용자 정보를 반환합니다. 그러나 실제로는 이 정보를 우리의 애플리케이션에 맞게 가공하거나, 추가적인 사용자 정보를 처리해야 할 경우가 많습니다.  CustomOAuth2UserService@Servicepublic class CustomOAuth2UserService extends DefaultOAuth2UserService { @Override public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException { // 기본 OAuth2UserService를 사용하여 OAuth2 공급자로부터 ..
[Spring Boot] Security6 OAuth2 Naver 및 Google (8) https://developers.naver.com/products/login/api/api.md 네이버 로그인 - INTRO환영합니다 네이버 로그인의 올바른 적용방법을 알아볼까요? 네이버 로그인을 통해 신규 회원을 늘리고, 기존 회원은 간편하게 로그인하게 하려면 제대로 적용하는 것이 중요합니다! 이에 올바developers.naver.com   application.ymlspring: security: oauth2: client: registration: naver: client-name: naver client-id: client-secret: redirect-uri: htt..
[Spring Boot] Security6 OAuth2 동작 및 세팅 (7) OAuth2 동작더보기클라이언트 ----> /oauth2/authorization/{서비스명} ----> OAuth2AuthorizationRequestRedirectFilter  |                                                                    |  |  |  |  |OAuth2LoginAuthenticationFilter -----> Access 토큰 발급 및 사용자 정보 획득  |  |----> LoginSuccessHandler -----> JWT 토큰 발급 및 클라이언트에 전달  |JWTFilter   |  |----> JWT 토큰 검사 및 세션 생성 클라이언트사용자는 클라이언트(예: 웹 브라우저)를 통해 OAuth2 인증을 시도합니다.외..