Spring) 필드 인젝션의 해로움 _생성자 주입을 사용해야 하는 이유

Intro 스프링을 처음 접하며 의존성 주입이라는 개념을 배운 이후로 한참을 필드 인젝션만 사용 해 왔습니다. 영한님의 스프링이나 JPA 강의에서는 생성자주입을 사용하라고 하고, 학습할때는 항상 생성자 주입을 사용하는 습관을 들여 왔지만 이미 기존에 @Autowired 로 작성된 프로젝트들을 손대기에는 충분한 명분도 스스로의 확신도 사실 없었습니다. 단일 테스트 작성에 어려움을 느꼈을때에도, 아직 테스트 코드를 본격적으로 작성하던 건 아니었기 때문에 스프링 컨테이너를 일일히 띄워가며 테스트를 진행 하기도 했었습니다. 생성자 주입으로 바꾼 계기 그러던 중 꽤나 오래된 프로젝트에서 필드 인젝션을 싹 다 걷어내고 생성자 주입으로 바꾸게 된 계기가 있었습니다. 스프링 부트 1.5 버전을 사용하며 여러가지 불편을..

Programming/JPA ⁄ Spring 2022.05.12
JAVA) Private method를 테스트 하는법

Intro 간단하게 만든 private 메서드가 잘 작동하는지 궁금했습니다. 기존에 이미 작동하고 로직의 계속 반복되던 부분을 private 메서드로 따로 추출해서 반복을 제거 하려는 의도 였는데.. 이게 쏘아올린 작은 공이 생각보다 많은 생각을 하게 만들었습니다. 일단, 일반적인 방법으로는 private 메서드를 테스트 해 볼 수 없었는데요, 애초에 호출을 하지 못하니 테스트도 불가능한게 당연합니다. private method를 테스트 해야할까? TDD의 아버지이자, Junit의 창시자인 켄트벡은 2020년 어느날 트위터에 아래의 링크를 남겼습니다. http://shoulditestprivatemethods.com/ 해당 링크에 방문 해 보면, 하얀 바탕의 한 가운데에 NO라고 96px의 큰 글자만을 ..

Programming/Java 2022.05.09
Java) new int[Integer.MAX_VALUE]

Large arrays public static void main(String[] args) { int[] arr = new int[Integer.MAX_VALUE]; } 카운팅 정렬(Counting sort)를 실습해 보려고 이것 저것 배열을 만들어 보던 도중, 위의 코드를 실행하자 에러가 발생 했습니다. Exception in thread "main" java.lang.OutOfMemoryError: Requested array size exceeds VM limit 2,147,483,647 의 크기로 생성을 시도 했는데, Java Virtual Machine이 배열의 크기에 제한을 걸어 두었다며 에러가 던져졌습니다. 실제 openjdk 의 코드를 조금 살펴보니, VM마다 각기 다른 배열 크기 제한을..

Programming/Java 2022.04.29
SpringBoot의 JSON 직렬화시 날짜 처리

Intro SpringBoot 버전을 1.5에서 2.5로 마이그레이션 한 이후로 인지하지 못했던 여러가지 변화 들이 하나 둘 씩 더 발견되고 있습니다. 이번에 발견된 변화는 꽤나 당황스러웠는데.. Date 객체를 JSON으로 직렬화 할 때, 그 형태가 달라졌다는 겁니다. API 를 제공하는 입장에서는 일관적인 포맷으로 제공해주는게 굉장히 중요한데 API 스펙 자체가 변경되어 버릴 수 있는 큰 문제 입니다. 비교를 해 보면 Spring Boot 1.5 에 의존하는 프로젝트 Spring Boot 2.5 에 의존하는 프로젝트 스프링 부트 버전이 달라졌을 뿐인데 반환하던 API의 포맷이 변경 되어 버렸습니다. 이 변경을 추적 해 보겠습니다. 다소 내용이 길기 때문에 과정을 건너 띄고 설정 방법만 보려면 Spri..

Programming/JPA ⁄ Spring 2022.04.28
Gradle 소개 및 Maven 프로젝트를 Gradle로 변경하기

Gradle 소개 Gradle은 다양한 프로그래밍 언어를 지원하는 빌드 자동화 도구 입니다. 빌드는 소스코드로 작성된 파일을 컴퓨터나 휴대폰 등 에서 실행가능한 소프트웨어 가공물로 변환하는 과정을 말하는데요, 자바의 예를 들면 아래의 과정을 거칩니다. 소스 코드 작성 자바 컴파일러가 소스코드.java를 -> 바이트코드.class로 컴파일 테스트 소스 컴파일 테스트 실행(유닛테스트, 통합테스트 등) jar 혹은 war 파일로 패키징 헬스체크 후 빌드 결과 출력 Apache Ant 및 Apache Maven의 컨셉을 기반으로 하지만, XML로 설정파일을 작성하는 Maven과는 대조적으로 훨씬 간단한 Groovy 언어를 사용 합니다. 또한 Gradle은 Apache License 2.0 기반의 오픈소스 이며 ..

Programming/Java 2022.04.23