호돌맨님의 강의를 정말 열심히 듣고 있는 학생입니다.
다름이 아니라 호돌맨님 강의와는 다른 방향으로 한번 KEY를 세팅해 볼 수는 없을까?? 라는 생각이 들었고 혹시나 저와 같은 문제를 마주친 분들 및 피드백을 받고 싶어서 글을 남깁니다.
@Value 어노테이션을 사용하여 application.yml(프로퍼티) 파일에서 값을 가져오는 방법을 적용해 보았습니다.
//application.yml
spring:
# secret properties
profiles:
include: secret
//application-secret.yml
jwt:
secret: "ZxV0wmgRyU8ZGYBRITUGcaOi03osZK1bsy7qEUUjgBs="
KEY 값을 application.yml 과 분리시키기 위해 별도로 .yml 파일을 생성하여 저장하였습니다.
//AuthController
@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/auth")
public class AuthController {
private final AuthService authService;
@Value("${jwt.secret}")
private String KEY;
~~~~
}
//AuthResolver
@Slf4j
@Component
@RequiredArgsConstructor
public class AuthResolver implements HandlerMethodArgumentResolver {
private final SessionJpaRepository sessionJpaRepository;
/**
* TODO:jwt.secret 이 null 인 문제...
* why???
*/
@Value("${jwt.secret}")
private String KEY;
~~~
}
AuthController 와 AuthResolver 에 @Value 어노테이션을 사용하여 KEY 변수에 .yml 파일에 정의한 secret 값을 주입받게끔 코드를 작성하였습니다.
그러나 AuthController 에서는 정상적으로 .yml 파일에 정의해준 KEY 값이 주입이 되었지만 이상하게 AuthResolver 에서는 KEY 값이 null 이 나오더라구요...
@Component 어노테이션도 적용해서 Bean 객체로 만들어줬는데도 말이죠 ㅠㅠ
https://wildeveloperetrain.tistory.com/143
이 블로그에서 힌트를 얻을 수 있었습니다.
바로 WebMvcConfig 에서 AuthResolver 를 등록할때 new 연산자를 사용하여 새로운 인스턴스를 등록해주었기 때문이었습니다. new AuthResolver(sessionJpaRepository)
//WebMvcConfig
private final AuthResolver authResolver;
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
// resolvers.add(new AuthResolver(sessionJpaRepository));
resolvers.add(authResolver);
}
그래서 new 연산자를 사용하는 것이 아닌 빈으로 등록된 인스턴스를 사용하여서 해결할 수 있었습니다.
다른분들에게 도움이 되셨으면 하는 마음에 글을 남깁니다. 혹시나 개선해야 될 점이 있거나 잘못된 부분이 있으면 댓글로 알려주시면 감사하겠습니다!!
for 문 내부에서 지속적으로 코드를 실행하는 이유는 루프 문으로 알려져 있기 때문입니다 foodle.
답글
귀하의 블로그 게시물에 깊은 인상을 받았습니다. 복잡한 주제를 과도하게 단순화하지 않고 자연스럽게 분류할 수 있습니다. avatar world
답글