맞춤법 검사기 클래스를 구현한다고 가정하자. 검사기는 사전(Dictionary) 클래스에 의존하고, 이를 구현할 때 정적 유틸리티 클래스나 싱글톤 클래스로 구현하는 모습을 많이 볼 수 있다. // Singletonpublic class SpellChecker { private final Dictionary dictionary = new Dictionary(); private SpellChecker() { // 객체 외부 생성 방지 ... } public static SpellChecker INSTANCE = new SpellChecker(); public boolean isValid(String word) { ... return dictionary.contains(word)..
문제 발생 프로젝트 테스트 코드를 작성 후 gradle test로 모든 테스트를 실행시키는데 실패를 했습니다. 분명히 클래스 하나하나 테스트에는 문제가 없었는데 전체 테스트를 돌릴 때만 실패를 했습니다. 이 상태에서 다시 gradle test를 하면 실패한 테스트부터 실행하는데 신기하게도 모든 테스트가 통과되었습니다. 일시적인 오류로 실패를 했나싶어 다시 테스트를 돌렸지만 실패를 했고 원인을 찾아봤습니다. 우선 UserFactoryTest만 실패를 하고 원인은 값이 제대로 들어가지 않아 null 인 점, 테스트 순서에 따라 결과가 달라지는 점을 고려해 혹시 다른 테스트에서 UserFactory를 사용하는 부분에서 문제가 생기지 않았나 하며 다른 코드를 찾아봤습니다. @Test void OAuth2_로그인..
2022년 11월 Spring boot 3 가 릴리즈되었고, 현재는 spring boot 3.1.x 까지 릴리즈 되었습니다. 새로운 프로젝트를 시작하기에 앞서 spring boot의 변경사항에 알아보기 위해 포스팅을 하게되었습니다. 스프링 부트 3은 4.5년 전 2.0이 릴리즈 된 이후 선보인 개정판입니다. 새 릴리즈 버전의 주요 사항은 다음과 같습니다. Java17 기반 Spring Native 프로젝트를 대체하는 GraalVM을 통한 네이티브 이미지 생성 지원 Spring Framework 6.0 기반 EE 9 기반의 Jakarta EE 10 지원 스프링 문서에 따르면 보안 업데이트, 버그 수정은 23년 말까지 지원합니다. Java 17 spring boot 3은 Java 17을 기반으로 하기 때문에..
다들 아시다시피 jpa의 ddl-auto는 create, create-drop, update 옵션을 사용하면 엔티티를 만들면 자동으로 DDL을 작성하여 테이블을 생성하고 수정하는 편리한 기능입니다. 하지만 운영환경에서도 이 기능을 적용하면 실수로 테이블이 삭제되거나 변경사항이 적용되지 않은 채 배포되는 등 문제를 일으킬 수 있기때문에 validate 나 none 옵션을 사용합니다. 프로젝트를 진행하다 테이블 컬럼을 추가해야되는 일이 생겼는데 구글링을 하던 도중 flyway라는 라이브러리를 알게되어 적용시켜 보았습니다. Flyway 란 flyway는 데이터베이스의 형상관리를 목적으로 사용하는 툴입니다. Git을 사용하여 코드를 관리하는 것 같이 flyway는 데이터베이스의 DDL 버전을 쌓아가면서 이력을 ..