전체 글

전체 글

    [Java] Jackson 사용시 Getter를 주의하자

    짧고 담백하게 결론부터 말하자면 자바에서 Jackson 라이브러리를 사용하여 json 문자열로 Serialize 할때는 getter를 주의해야한다. 예를 들어 아래와 같은 클래스가 있다고 하자. @Builder @NoArgsConstructor @AllArgsConstructor @Getter public class Product { private long id; private String name; private long price; public String getProductInfo(){ return name + price; } } 멤버 변수로 정의한 것은 id, name, price이고 편의상 getProductInfo()라는 메서드를 만들어 상품의 이름과 가격을 함께 리턴하도록 했다. 이 상태로 ..

    Spring @Cacheable을 내부 메서드에 쓰면 안되는 이유

    자주 사용되면서 호출이 빈번한 데이터를 메모리에 쉽게 캐싱할 수 있도록 Spring에서는 @Cacheable을 제공한다. 하지만 아래 예제와 같이 내부 메서드에 @Cacheable을 설정하면 캐싱이 작동하지 않는다. @Slf4j @Service @RequiredArgsConstructor public class ProductService { private final productJpaRepository productJpaRepository; public ProductInfo getProductInfo(String productName){ List products = productJpaRepository.findAllByProductName(productName); long allProductCount =..

    단위 테스트는 왜 해야할까

    회사를 옮기고 나서 처음 놀랐던 순간은 테스트 코드를 봤을때였다. 복잡한 비즈니스 로직을 다루면서도 테스트 디렉터리가 말끔히 비워져 있었다. 코드 레벨의 자동화된 단위 테스트보다는 e2e 테스트에 의존하고 있었으며 그래서 초래되는 문제도 적지 않아 보였다. 당연하게도(?) 팀원들은 테스트 코드의 필요성에 대해서 깊이 공감하지는 못하고 있었다. 우선 그들을 설득할 필요가 있어보였는데, 만약 누군가 나에게 왜 꼭 단위 테스트를 해야하는지를 묻는다면 뭐라고 대답할지를 생각해보았다. 내가 그동안 느낀바로는 다음과 같은 이유들이 있다. 개발자 버전의 요구사항 문서 테스트 코드를 작성하면 서비스가 충족해야하는 요구사항을 명문화해 볼수 있다. 개발자라면 요구 사항을 잘못 이해하여 일어난 대참사를 직간접적으로 경험해본..

    5년차 개발자의 이직 이야기

    현재 회사(글을 쓰는 지금 시점에서는 이전 회사)에 재직한지 2년이 넘어가는 시점부터 나는 이직을 생각하기 시작했다. 전반적으로는 회사 생활에 만족했고 돌이켜보면 주니어 개발자로 입사해서 많이 성장할 수 있었던 고마운 회사였지만, 등따시고 배부르니 다른 생각이 들기 시작 시니어가 되어가는 5년차 개발자로서 많은 생각이 들기 시작했다. 나는 왜 이직을 원하는가 나는 이직을 원한다. 적어도 마음속에 그러한 외침이 있다는 것 정도는 분명했다. 그렇다면 내가 이직을 원하는 이유는 무엇일까? 머리에 멤도는 생각들을 정리해보기로 했다. 그 중 우선순위가 높다고 생각되는 두 가지 정도를 뽑아보았다. 처우 IT 업계 종사자라면 게임 업계로부터 시작된 2021년의 매서웠던 연봉 인상 러시를 알고 있을 것이다. 개발자의 ..

    Spark 개발 환경 구축하기 - Scala, IntelliJ, SBT

    Spark 애플리케이션을 개발에는 크게 Scala 또는 Python을 사용할 수 있다. 기존에 자바로 개발을 주로 해왔던 개발자라면 Scala를 선호할텐데 개발 환경 세팅을 할때 참조할만한 자료가 많지 않아 직접 프로젝트 세팅을 하며 정리해봤다. 시작하기에 앞서 세 가지 선결 사항이 있다. Spark 설치, 환경변수 설정 Scala 설치 IntelliJ Scala plugin 설치 설치 방법은 구글에서 쉽게 찾을 수 있다. 본 게시물 최하단에도 참고 링크를 걸어두었다. 1. 프로젝트 생성 이제 Scala, Spark, IntelliJ Scala plugin 설치는 모두 되어있다고 가정하고 IntelliJ 새프로젝트를 생성해보자. build tool을 선택하면 되는데 sbt가 recommended라고 되어..