오류 정리

wish17·2023년 3월 3일
0

노트

목록 보기
3/4

Gradle Test Executor 1 오류

Gradle Test Executor 1

해결방법

Ctrl + Alt + s (환경설정) -> Build, Exception, Deployment -> Gradle -> Gradle Project 탭 Build and run using 과 Run tests using을 모두 IntelliJ IDEA 로 변경


import문 자동 가져오기 안됨

import static org.hamcrest.MatcherAssert.assertThat;

해결방법
그냥 하드코딩 ㅠㅡㅠ (손으로 칩시다...)
비주류?.. 안되는 애들은 어쩔 수 없다...
자주 써야할 것 같으면 단축키를 활용해 야매로 할 수 있긴 함...


Dto 기본생성자 존재 여부에 따른 mapper 자동생성 오류

@allargument 를 붙인 뒤로 post가 정상적으로 수행되지 않았다.

알고보니 위와 같이 Spring이 자동으로 구성해준 MapperImpl 클래스가 @allargument를 붙이기 전에 빌드되어 기본생성자가 있다고 생각하고 코드가 짜져있다.

따라서 @allargument를 추가해 줌으로써 기본생성자가 자동으로 생성되지 않기 떄문에 위와 같은 오류가 발생했던 것이다.


Gradle오류

Execution failed for task ':test'.
> Process 'Gradle Test Executor 84' finished with non-zero exit value 1

대부분의 Gradle오류는 아래와 같이 인텔리제이를 사용한 빌드방식으로 설정해주면 해결 됐다. 하지만 이번에는 안됐다.

윈도우 계정명이 한글로 되어있어서 발생했던 문제 같다.
새로운 user를 영문명으로 만들어 해결했다.


PasswordEncoder 오류

java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null” 오류

패스워드를 암호화하지 않고 User를 등록 하면 발생하는 오류

  • 암호화 안해도 user 등록은 정상적으로 되지만 로그인 인증 시 해당오류가 발생한다.

Whitelebel Error Page 오류

문제 발생시점 풀코드 GitHub주소

코드 간단 설명

  • 검증에 실패할 경우 AuthenticationException 을 throw
  • AuthenticationException 이 throw 되면 SecurityConfiguration에서 설정한 .failureUrl("/auths/login-form?error") 을 통해 로그인 폼으로 리다이렉트 하면서 인증 실패 메시지를 표시하도록 설정해 뒀음

그런데 회원 가입을 하지 않고 로그인을 시도할 경우에 아래와 같은 오류가 발생했다.

원인 : DBMemberService클래스의 verifyExistsEmail()메서드에서 등록된 회원 정보가 없으면, BusinessLogicException을 throw 하는데 이 BusinessLogicExceptionCusotm AuthenticationProvider를 거쳐 그대로 Spring Security 내부 영역으로 throw 되기 때문이였다.

Spring Security에서는 인증 실패 시, AuthenticationException이 throw 되지 않으면 다른 종류의 Exception에 대한 별도의 처리를 하지 않고, 서블릿 컨테이너인 톰캣 쪽으로 이 처리를 넘긴다.


bean of type '~~' that could not be found.

설정이 빠졌을 때 발생하는 오류다.

2023-03-23 01:02:00.266 ERROR 23520 --- [main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Method filterChain in com.codestates.hello_oauth2.config.SecurityConfiguration required a bean of type 'org.springframework.security.oauth2.client.registration.ClientRegistrationRepository' that could not be found.

Action:

Consider defining a bean of type 'org.springframework.security.oauth2.client.registration.ClientRegistrationRepository' in your configuration.
// // ClientRegistrationRepository라는 Bean이 없으니 SecurityConfiguration에 추가해라

OAuth2 인증과정에서 클라이언트 ID와 클라이언트 보안 비밀번호(Secret)를 설정하지 않았기 때문에 발생한 에러다.


환경변수 오류

오류 발생한 실습 코드 Github주소

처음에는 환경변수에 null값이 들어가는 등 인식이 제대로 안되는 것 같았다.

jwt:
  key: ${JWT_SECRET_KEY}               # 민감한 정보는 시스템 환경 변수에서 로드한다.
  #key: "#{systemEnvironment['JWT_SECRET_KEY']}" # 시스템 환경 변수에서 로드하는 방법(JWT_SECRET_KEY라는 이름의 환경변수를 가져오는 것)
  access-token-expiration-minutes: 30
  refresh-token-expiration-minutes: 420

Intellij 환경변수 등록 방법

위와 같은 방법으로 추가해도 되긴 하는데... 시스템 환경변수 추가 후 인텔리제이 재부팅을 안해서 인식이 안됐던 것 같다.

// 추가로 발생했던 오류문
io.jsonwebtoken.security.WeakKeyException: The specified key byte array is 232 bits which is not secure enough for any JWT HMAC-SHA algorithm.  
The JWT JWA Specification (RFC 7518, Section 3.2) states that keys used with HMAC-SHA algorithms MUST have a size >= 256 bits (the key size must be greater than or equal to the hash output size).
Consider using the io.jsonwebtoken.security.Keys#secretKeyFor(SignatureAlgorithm) method to create a key guaranteed to be secure enough for your preferred HMAC-SHA algorithm.
See https://tools.ietf.org/html/rfc7518#section-3.2 for more information.

환경 변수 인식 후에도 위와 같은 오류가 발생했다.

이 오류는 JWT(JSON Web Token)를 생성하는데 사용되는 Secret Key의 길이가 너무 짧아서 발생하는 오류다.

보안을 위해서 JWT JWA Specification (RFC 7518, Section 3.2)에서는 HMAC-SHA 알고리즘에 사용되는 Secret Key의 길이는 256 비트 이상이어야 한다고 규정하고 있다.

즉, 내가 환경변수 시크릿 키 길이를 너무 짧게 설정한 것이다.


MySQL 비밀번호관련 오류

cmd나 파워쉘에서 mysql 명령어를 사용하면 인식이 안됐다.

찾아보니까 환경변수 설정하라고 해서 봤더니 msql server8.0이 (옛날에 저도 모르게 지웠는지) 저한테는 없어서 재설치를 하게 되었는데
재설치 과정에서 계속 root 비밀번호를 입력하라고 나온다...
(비밀번호 분명 적어뒀고 맞는데 자꾸 틀리다고 나와서 설치 마무리가 안되는 상태ㅠ.ㅠ)

검색해서 찾은 비밀번호 재설정 방법(--skip-grant하고 비번 재설정)을 시도해도 설치가 완료되지 않은 상태라 그런건지... 계속 제대로 동작을 안한다.

완전히 삭제를 해야하는데 일부 데이터가 남아있어서 재설치 과정에서 root비밀번호를 다시 묻는 것이였다.

윈도우 mysql 삭제 과정을 따라하는데 솔직히 2번 레파지토리는 굳이 안지워도 될 것 같고...
3번이 문제였다.

실행중이라고 뜨긴하는데 작업관리자를 보고...재부팅해도 안지워진다.

폴더 강제 삭제 방법을 따라 리소스 모니터로 프로세스 종료하니까 삭제가 됐다.

다시 처음부터 mysql 설치하니까 드디어 해결!!...
비번 설정도 다시할 수 있고...이것저것 잘못만져서 사라지거나 추가된 파일들도 복귀된건지 명령어도 잘먹고 제대로 작동한다!


Docker 실행 안됨 오류

System has not been booted with systemd as init system (PID 1). Can't operate.

위 오류문은 Docker가 실행 안된거다.
Docker Desktop을 키고 Docker 명령어를 사용하면 된다.


0개의 댓글