javax.persistence.NonUniqueResultException
🌳 에러 코드 javax.persistence.NonUniqueResultException 🌳 해결 방법 🌾 원인 :Query.getSingleResult() 호출 했는데 결과가 2 이상일 때 반환. 🌾 해결 방법 : DB에서 중복된 쿼리 확인 후, 중복 되지 않은 쿼리로 request 보내서 해결. Before After
🌳 에러 코드 javax.persistence.NonUniqueResultException 🌳 해결 방법 🌾 원인 :Query.getSingleResult() 호출 했는데 결과가 2 이상일 때 반환. 🌾 해결 방법 : DB에서 중복된 쿼리 확인 후, 중복 되지 않은 쿼리로 request 보내서 해결. Before After
🌱 오늘의 주제 : Git - 명령어 정리 🌱 Git- 명령어 정리 git add . git commit -m "yuri" git push -u origin main git pull ----> git에 업데이트된 내용을 받을 수 있다. git clone git@github.com:freeCodeCamp/freeCodeCamp.git
🌳 에러 코드 컨트롤러나 서비스 계층에서 발생한 예외의 종류에 상관없이 403 Forbidden 응답이 반환되는 문제가 생겼다. 기본적으로 스프링에서는 따로 예외 처리를 하지 않았다면 예외 발생 시 500 에러가 발생한다. 그런데 스프링 시큐리티를 적용하면 메소드에서 예외가 발생했을 때 403 에러가 발생한다. 심지어 존재하지 않는 URL로 접속하여 404 Not Found가 발생해야 하는 상황에서도 403 Forbidden이 발생했다. 🌳 해결 방법 스프링 공식 블로그에 따르면, 스프링부트에서는 에러가 발생하면 /error라는 URI로 매핑을 시도한다. 실제로 해당 URI로 이동하면 아래와 같은 페이지가 나타난다. Whitelabel Error Page 자체는 403 에러와 관련이 없지만 에러가 발생하..
🌳 에러 코드 응답 헤더 (Authorization’, ‘Authorization-refresh) 토큰 관련 헤더가 들어오지 않는 문제. 🌳 해결 방법 🌾 해결 방법 : 응답 헤더 설정은 setExposedHeaders 메소드로 해결! Before Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .cors() // cors 설정 .and() ... return http.build(); } @Bean CorsConfigurationSource corsConfigurationSource() { CorsConfiguration configuration = new CorsConfiguration(); co..
🌱 오늘의 주제 : JWT 토큰 소개와 Spring Security + JWT 코드 공유 🌱 Stateful 서버 vs Stateless 서버 Stateful 서버 stateful 서버는 클라이언트에게 요청을 받을 때 마다, 클라이언트의 상태를 계속해서 유지하고, 이 정보를 서비스 제공에 이용합니다. 예를 들어, 세션이 있습니다. 예를 들어, 유저가 로그인을 하면, 세션에 로그인이 되었다고 저장을 해두고, 서비스를 제공할 때에 그 데이터를 사용합니다. 세션은 서버컴퓨터의 메모리 혹은 데이터베이스 시스템에 담습니다. Stateless 서버 Stateless 서버는 상태를 유지하지 않습니다. 상태정보를 저장하지 않으며, 서버는 클리언트측에서 들어오는 요청만으로만 작업을 처리합니다. 이렇게 상태가 없는 경우 ..
🌱 오늘의 주제 : 포트원 결제 - 카카오페이 (Spring, Java) With 시퀀스 다이어그램 🌱 포트원 정보 및 설치 포트원 정보 및 설치는 아래 링크를 통해 실행하면 됩니다. 포트원 카카오페이 깃헙 : https://github.com/iamport/iamport-manual/blob/master/%EC%9D%B8%EC%A6%9D%EA%B2%B0%EC%A0%9C/sample/kakao.md 포트원 사이트 : https://portone.io/korea/ko 포트원, 온라인 비즈니스를 위한 통합 결제 솔루션 코드 한 줄로 세상 모든 방식의 결제를 경험해보세요 portone.io 🌱 포트원 이란? 국내 PG결제 연동을 쉽게해주는 결제 API 입니다. PG란 Payment gateway의 약자인데, ..
🌱 오늘의 주제 : Kakao 로그인(OAuth 2.0) in Spring Boot With 시퀀스 다이어그램 🌱 OAuth 2.0 이란? OAuth 2.0 을 간단하게 설명하면 어떤 서비스를 만들 때 사용자 개인정보와 인증에 대한 책임을 지지 않고 신뢰할 만한 타사 플랫폼에 위임하는 겁니다. 보안적으로 문제되지 않도록 안전하게 관리해야 하고 ID/PW 에 관련된 지속적인 해킹 공격 등 여러 가지 신경써야 할 부분이 많습니다. 하지만 OAuth 2.0 을 사용해 신뢰할 수 있는 플랫폼 (구글, 페이스북, 네이버, 카카오 등) 에 개인정보, 인증 기능을 맡기면 서비스는 인증 기능에 대한 부담을 줄일 수 있습니다. 🌱 OAuth 2.0 주요 용어 Authentication 인증, 접근 자격이 있는지 검증하는..
🌳 Before 월별 매출에 따른 성별 수 조회 방법을 알아봅니다. 🌳 After 🌾 해결 방법 : COUNT(DISTINCT CASE WHEN C.gender = '남자' THEN B.id END)는 SQL 쿼리에서 사용되는 특별한 표현식입니다. 이 표현식은 다음과 같은 역할을 합니다. CASE WHEN C.gender = '남자' THEN B.id END: 이 부분은 C.gender가 '남자'인 경우에는 B.id 값을 반환하고, 그렇지 않으면 NULL 값을 반환합니다. 즉, '남자'인 환자의 경우에만 해당 환자의 B.id 값을 가지고 오고, 그 외의 경우에는 NULL을 반환합니다. COUNT(DISTINCT ...): 이 부분은 DISTINCT 키워드를 사용하여 중복된 값을 제거한 후, 그 결과의 개..
🌳 에러 코드 Mysql - 년도, 월 따로 조회 되는 경우. 🌳 해결 방법 🌾 해결 방법 : 1. 년도별 월별 매출을 yyyy-MM 형식으로 표현하려면 CONCAT 함수를 사용합니다. 2. LPAD는 "Left Pad"의 약자로, 문자열을 특정 길이로 만들기 위해 왼쪽에 다른 문자를 채우는 함수입니다. 일반적으로 숫자나 문자열을 일정한 길이로 맞추는데 사용됩니다. 예를 들어, LPAD('7', 4, '0')은 문자열 '7'을 길이 4로 맞추고 왼쪽에 '0'을 채워서 '0007'을 생성합니다. 여기서 첫 번째 인수는 대상 문자열이고, 두 번째 인수는 목표 길이이며, 세 번째 인수는 채워질 문자입니다. 년도와 월을 표현할 때 년도는 4자리로, 월은 2자리로 표현하는 경우가 많기 때문에 LPAD 함수를 사용..
🌳 에러 코드 "could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet", 🌳 해결 방법 🌾 원인 :쿼리 문자열의 각 부분이 연결되어 있지 않아서 문법 오류가 발생 🌾 해결 방법 : "FROM reservation AS A "와 "SELECT A.reservationDate AS reservationDate " 의 문자열 간 공백을 추가하고 각 부분을 연결 (\n 추가) Before After