프로젝트 12

블로그 만들기 -에러 처리 가이드

여러 전략 1.Errorattributes  DefaultErrorattrtibutes       단점 예외 이름만 보고는 왜 발생한 예외인지 파악이 어렵다.예외 메시지가 여러 곳에 퍼져 있기 때문에 관리하기가 어렵다.  2.ErrorCode enum 에러메세지용 객체, 한 눈에 보기 좋다. 구조 바꾸기 용이   에러 코드를 한 곳에 모아 관리하기 위한 enum class 에러가 발생 했을 때 3가지 정의어떤 HTTP 상태 값으로 응답하는지어떤 기본 메세지를 가지고 있는지어떤 고유한 에러코드를 가지는 지 이러면 예외를 한 곳에서 관리 가능!         2-1 errorResponse  아까 만든 ErrorAttributes를 대체할용도를 가진 에레 메세지용 객체 메세지 필드와 에러코드를 String으..

프로젝트 2025.04.09

블로그 만들기 - 배포 중 build 실패 대처

./gradlew란?gradlew는 Gradle Wrapper 실행 파일입니다.**./gradlew**는 로컬에 설치된 Gradle이 없어도 프로젝트를 빌드할 수 있게 해줍니다.Linux/macOS에서는 ./gradlew, Windows에서는 gradlew.bat로 실행합니다  build하는 중 test에서 실패했다..  그래서 test 쪽에 문제가 있는 것 같은데 어디인 지 잘 모르겠고 정확하게 분석이 필요하다  그럴 땐?   ./gradlew test --scan     Build Scan을 제공!  gradle이 제공하는 빌드 분석 리포트를 내준다. 실행한 태스크, 소요 시간, 실패 원인, 테스트 통계, 환경 정보 등을 시각적으로 보여줌       실제로 들어가본 결과     다양한 기능들을 제공한..

프로젝트 2025.04.08

블로그 만들기 - OAuth2 handler가 동작하지 않는 에러

google로 OAuth2 로그인을 구현했으나,   로그인 시 문제 상황은   기대 :  인증 후 /articles?token=로 리다이렉트되길 원했지만,  실제 : 리다이렉트가 이루어지지 않고, 기본 경로(/)로 이동      내가 지정해놓은 handler를 타지 않았다. 일반적인 실패라면 failureHandler라도 탔을텐데 타지 않고 redirect 주소도 무시했다..         OAuth2 로그인 흐름 개요   총 크게 3번의 흐름으로 http 요청 및 응답 사이클이 돌아간다.   1. 클라이언트 → 서버 (OAuth2 로그인 요청)주요 흐름:1️⃣ 사용자가 /login 페이지에 접근2️⃣ Spring Security가 /oauth2/authorization/google로 리다이렉트3️⃣ 구..

프로젝트 2025.04.03

블로그 만들기 -Oauth2구글에 요청이 자동으로 간다고?

예전에 팀 프로젝트를 할 당시 로그인을 맡아서 했었는데 완전 햇병아리에다가 처음 코딩을 접할 시기라security가 진짜 너무 어려웠다.. 특히 Oauth는 계속 실패해서 원인조차 찾지 못할 시기가 있었으니..   어디까지 security에서 해주고 (filter와 super.load 등)나는 어디서부터 어디까지 구현해야할 지 너무 헷갈렸다.    security의 핵심은!  다른 모듈들을 거쳐 UserDetailsService 에서 UserDetails 를 반환,반환된 UserDetilas 가 SecurityContext 내부의 Authentication에 들어가게 된다. (이전 글에서 jwt에서 적어놈)  그러나 Oauth의 경우 소셜 로그인은 DefaultOAuth2UserService를 호출, 이..

프로젝트 2025.03.31

블로그 만들기 - cookie와 util 클래스를 static으로?

Oauth2 구글을 활용하기 위해 클라이언트에 내려줄 cookie를 설정해주는 작업을 해봤다.. 사실 예전에 프로젝트에서 jwt 토큰으로 인증까진 성공했었는데 oauth는 쓰린 실패의 맛을 봤어서 다시 차근차근 공부하고 있다.  쿠키는 크기 제한이(보통 4KB)이 있으므로, 큰 데이터는 세션이나 DB에 저장하는 게 낫다. 나는 간단하게 토큰 값만 저장할 거라서 쿠키에 저장하면 좋겠다 싶었음 쿠키는 되게 간단하다. package me.hanjun.util;import jakarta.servlet.http.Cookie;import jakarta.servlet.http.HttpServletRequest;import jakarta.servlet.http.HttpServletResponse;import org.s..

프로젝트 2025.03.30

블로그 만들기 - 환경변수 dotenv으로 관리

예전 프로젝트에서는 환경변수를 하드코딩식으로 local에 올렸었는데 (aws서버에서도),이번엔 .env 파일 + application.yml 조합으로 해봐야겠다.  그러기 위해서 가장 쉬운 방법이 dotenv라이브러리 활용이다. .env을 만들고 .gitignore에 설정만 해주는 아주 간단한 작업!  build.gradle .env반드시 쌍따옴표를 붙이고 써야한다.JWT_SECRET_KEY="[YOUR KEY]"

프로젝트 2025.03.30

블로그 만들기 - controller test (ObjectMapper)

스프링에서 테스트가 익숙치 않은데 그 중에서도 더 익숙하지 않은 경우는 controller test이다..mock으로 직접 설정하고 해야하기에.. @Test@DisplayName("createNewAccessToken() : 새로운 액세스 토큰을 발급한다.")void createNewAccessToken() throws Exception { //given final String url = "/api/token"; User testUser = userRepository.save(User.builder() .email("user@email.com") .password("test") .build()); String refreshT..

프로젝트 2025.03.29

블로그 만들기 - jwt TokenProvider 테스트 오류

전에 만든 TokenProvider를 테스트 하기 위해 테스트 코드를 작성 중    jwt토큰 초기화 및 빌드해 유용하고 쉽게 테스트 하기 위해 준비했고      1. generateToken 테스트      실제 유저 생성 후 토큰 값으로 넘겨서 parser() 로 비교했을 때 같은 지 비교하는 구문에서   빌더가 제대로 작동하지 않는 이슈가 있었다.  롬복의 문제인 듯 싶어   @getter를 확인하니 역시나 fail lombok의 문제인 게 확실했고, 에너테이션 및 dependencies를 확인해도 찾을 수 없었지만,,   문제는 testAnnotationProcessor을 따로 추가하지 않아서.. 생긴 문제다        그럼 왜  annotationProcessor 선언을 해야 할까? 의미가 궁..

프로젝트 2025.03.26

블로그 만들기 - spring Security 로그아웃

예전에 프로젝트에서 Security를 맡았던 기억이 있는데,그땐 logout의 경우 인증 정보를 강제로 없앴다 (따로 요청 없이 프론트에서 인증 정보를  없애버렸다..)  여튼 logout을 하는데 왜 request와 response가 둘 다 필요한 지 이해가 안 가 찾아보니..    request는 서버 쪽을 관리한다면response로 클라이언트 측 쿠키나 사애를 정리하게 해야한다.  SecurityContextHolder.getContext().getAuthentication(): 현재 인증된 사용자의 인증 객체를 가져옵니다.logout(request, response, authentication): 세션 종료, 컨텍스트 정리, 쿠키 삭제 등을 수행합니다.  request와 response를 둘 다 ..

프로젝트 2025.03.20