LOG
- 웹 자동차 경주 미션 PR을 보냈다. 조금만 리팩토링하려고 했는데 너무 커져버렸다... DB 설계도 바뀌고 코드도 많이 바뀐 거 같다. 이번에도 리뷰어는 다니인데 어떤 리뷰를 받게 될 지 궁금하다.
- 키아라의 생일파티에 참여했다. 원래 토리랑 채채랑 같이 간맥할 생각이었는데 초대를 받게 돼서 (사실 초대해달라고 했음) 6시에 범맥주에 갔다. 역시 재밌었고 나름대로(?) 절제하면서 마신 것 같다. 키아라 생일 축하했어~~
배운 것
assertAll()
로 해당 함수들을 묶을 시 중간에 assert함수
가 실행이 되지 않더라도 assert의 모든 함수를 실행할 수 있다.
@Repository
에 final을 쓰면 안 된다. 스프링 내부적으로 Respository를 생성할 때 프록시 객체를 생성하기 때문에 Repository는 final이나 invisible한 클래스면 안 된다.
SqlParameterSourceUtils.createBatch()
로 NamedParameter를 한 번에 매핑해줄 수 있다.
@SpringBootTest
의 webEnvironment 옵션을 넣은 테스트 클래스와 넣지 않은 테스트 클래스를 동시에 실행할 때만 데이터베이스가 중복 생성되는 이유: webEnvironment 옵션을 사용하지 않은 테스트 클래스는 자바 애플리케이션의 일반적인 테스트를 수행하는 것이다. 이 경우에는 스프링 애플리케이션 컨텍스트가 단 하나만 생성되어 모든 테스트에서 공유된다. 그러나 webEnvironment 옵션을 사용한 테스트 클래스는 스프링 부트 애플리케이션을 실행하는 것으로, 이 경우 각각의 테스트에서 새로운 스프링 애플리케이션 컨텍스트가 생성된다.
@SpringBootTest
와 @SpringBootTest(webEnvironment = WebEnvironment.NONE)
가 달려있는 두 개의 테스트 클래스를 동시에 수행하면 데이터베이스가 중복 생성되는 이유: @SpringBootTest(webEnvironment = WebEnvironment.NONE)
는 스프링 애플리케이션을 실행하지 않고, 내장 서버를 사용하지 않도록 설정한다. 따라서 스프링 애플리케이션 컨텍스트는 생성되지만, 웹 환경에서 실행되지 않는다. 반면, @SpringBootTest
는 스프링 부트 애플리케이션을 실행하고 내장 서버를 사용한다. 이 경우에는 웹 환경에서 애플리케이션을 실행하므로, 스프링 애플리케이션 컨텍스트와 함께 웹 환경에서 데이터베이스가 생성된다. 따라서 스프링 부트 애플리케이션 컨텍스트가 생성되면서 DB가 중복 생성되게 된다. (아마도 내장 DB는 단 하나 존재하는 모양이다.)
궁금한 것
어려웠던 것
느낀 것
- 술을 안 마시려고 했는데 역시 즐거운 자리를 참기 힘들다. 그래도 일주일에 1회만 술을 마실 생각이다. 술 마시고 잠만 어느 정도 잘 수 있다면 그 다음 날 컨디션이 안 좋은 건 아니라서 괜찮을 것 같다.
- chat-GPT 생각보다 진짜 좋다. 배운 것 중에 Repository에 final을 쓰면 안 되는 이유나, SpringBootTest에 대한 내용도 chat-GPT 한테 물어본 내용이다. 질문을 어떻게 해야 할 지 모를 때, 어떻게 설명해야 할 지 모를 때 그냥 아무렇게나 써도 잘 이해해준다는게 되게 좋은 것 같다. 문제는 얘가 이상한 말을 할 때 내가 알 수 없다는 거? 확실한 지식을 쌓을 수 있을지는 잘 모르겠다. 가끔 얘가 거짓말을 해서 믿어야 될 지 말아야 할 지... 키워드를 얻는 용도로는 확실히 좋은 거 같다.