스터디/스프링

Spring Boot에서 properties 값 주입받기

개요 Spring Boot를 이용해서 어플리케이션을 만들다 보면 외부에서 특정 값들을 주입받아야 하는 경우가 있습니다. 예를 들면 AWS의 특정 컴포넌트를 사용하기 위한 secret key가 될 수도 있고 외부 API를 사용하기 위한 API key가 될 수도 있습니다. 이러한 값들을 소스 코드에 하드 코딩한다면 악의적인 의도를 가진 사람이 값을 탈취하여 사용하면서 큰일로 이어질 수 있습니다. 따라서 이렇게 중요한 값들을 application.properties 혹은 application.yml 과 같은 외부 설정값을 관리하는 파일에 적어두고 사용하기도 하고 .jar 파일을 실행하기 위한 커맨드에서 직접 값을 넘겨주기도 합니다. 이번 글은 Spring Boot에서 외부 파일(ex.application.pr..

2020.10.15 게시됨

스터디/JPA

fetch join 과 limit 을 같이 쓸 때 주의하자. (firstResult/maxResults specified with collection fetch)

결론부터 말하면 One에서 Many를 fetch 해야하는 경우 limit과 같은 절(Pagination을 위한)을 포함하면 원하는 대로 결과나 나오지 않는다. 예제코드(+ 테스트코드)는 Github에서 확인할 수 있다. LIMIT 그리고 SET_MAX_RESULT JPQL Pagination을 위해서는 MySQL 기준 limit (그리고 offset) 을 사용해야 한다. 그런데 JPA은 DB에 따라서 방언을 바꾸어 Query를 생성하기 때문에 MySQL 방언에 속하는 LIMIT 절을 JPQL에서 직접 사용할 수 없다. 따라서 아래와 같이 쿼리를 작성하면 QuerySyntaxException, IllegalArgumentException 이 발생한다. @Query("SELECT a FROM Article ..

2020.10.08 게시됨

스터디/JPA

[JPA] nullable = false와 @NotNull의 차이점

지금 보시는 이글은 정확하지 않습니다. 곧 수정예정입니다. nullable = false vs. @NotNull 친구들과 스프링 부트를 공부하던 도중 한 친구가 내 코드를 보고 저번에는 @NotNull을 쓰던데 이번에는 nullable = false를 쓴 이유가 무엇이냐고 물어봤다. 둘다 내가 원하는 대로 동작한다고 생각만했다. 와,, 깊이 생각해 본적이 없었다! 그래서 바로 찾아봤다! nullable = false 관련 레퍼런스에서 설명을 보려했는데 JPA레퍼런스가 다 영어라서 어디로 가야할지 모르겠다.. 그래서 코드에서 정의되어있는 부분을 확인해 보았다. /** * (Optional) Whether the database column is nullable. */ boolean nullable() de..

2019.05.06 게시됨