본문 바로가기

Spring61

Spring Framework에서 복잡한 비즈니스 로직 구조화하기 Filter Chain 오늘은 스프링 프레임워크에서 복잡한 비즈니스 로직을 구조화해 본 경험을 이야기 해보려고 합니다.제가 실제로 해결하고자 했던 비즈니스를 기반으로 설명하면 좋겠지만 아무래도 보안상 문제가 있을 수 있어 배달 어플에서 사용 가능한 쿠폰 목록을 고객에게 안내하는 비즈니스 도메인이 가장 적절하다고 생각하여 해당 도메인으로 설명을 해보도록 하겠습니다. 우리가 해결하고자 하는 비즈니스 도메인은 다음과 같습니다.1. 고객이 보유한 쿠폰 목록 중 주문에 사용 가능한 쿠폰 목록을 보여준다.2. 사용가능한 쿠폰에 대한 정의는 다음과 같습니다.- 고객이 보유한 쿠폰중 사용기한이 만료되지 않은 쿠폰- 고객이 보유한 쿠폰중 전체 브랜드 또는 주문하고자 하는 가게 브랜드에 적용이 가능한 쿠폰- 고객이 보유한 쿠폰중 전체 지역 또는.. 2025. 4. 20.
Java 객체가 생성과 상태변경을 책임지는 방법 Spring Framework 백엔드 개발업무를 진행하면서 기존에 존재했던 코드들을 확인할 때 가장 힘이 들었던 부분은 객체의 생성과 상태 변경 로직들이 여러 비즈니스 로직에 나뉘어 녹아들어 있을 때였습니다. // 극단적 예시이긴 하지만 홍길동 이름을 가진 Person객체가// checkPerson 메소드에 매개변수로 전달후 name 출력값을 확인하면// 철수라는 이름으로 변경됩니다. 즉 checkPerson메소드에서 상태값을// 변경하는 로직이 있었습니다.Person person = new Person("홍길동");checkPerson(person);String name = person.getName();// 출력값: 철수System.out.println(name);객체의 상태값을 비즈니스 로직 여기저.. 2025. 3. 5.
SpringFramework 버그에 대한 불안감 떨쳐내기 Spock Test 개발자로 첫 취업 후 고객들에게 실질적으로 서비스되는 프로젝트 첫 배포는 정말 인생에서 잊지 못할 기억으로 남을 것 같습니다. 그때 당시 주니어 개발자인 저에게 메인 서비스 리뉴얼을 맡기고 배포할 수 있는 기회는 정말 소중했던 경험으로 죽을 때까지 잊지 못할 기억이 될 것 같습니다.잊지 못하는 기억에 이유는 물론 고객들이 실제로 사용하는 서비스를 배포하고 한다는 점도 있지만 버그가 발생할 것 같은 마음에 코드를 보고 또 봐도 마음 한편에 불안감 때문 이었던 것 같습니다. 지금도 경력이 짧지만 이제는 웬만한 버그없이 안정적으로 서비스를 개발하는 것 같습니다. 이런 안정감을 어떻게 저는 찾게 되었냐면 짧지만 경험을 통해 방어로직을 잘 구성하는 것 도 있지만 중요 로직에 대한 테스트시나리오를 구성하고 테스트.. 2025. 2. 19.
레거시 Spring Framework Project 패키지 리팩토링 오늘은 팀원들과 협의해 리팩토링을 진행했던 이야기를 정리해보려 합니다.새로운 회사, 새로운 팀원, 기존 인원들의 개발 스타일에 적응해 나가며 이것저것 건의하고 의견을들어보고 개선해 나가야할 점들을 피력하고 있습니다.입사초기 Spring Framework와 Mybatis로 구성된 백오피스 서버  추가 기능개발 및 유지보수 업무를 진행했었습니다. 업무를 진행하며 큰 허들을 느꼈던 부분이 있었는데 그부분은 바로 지금은 너무나 당연 Dto 대한 책임분리였습니다.Spring Web Server를 구현한다면 일반적으로 데이터 전달을 위해 Dto를 많이 활용하실 겁니다. 다만제가 기능 추가, 유지보수업무를 받은 프로젝트는 모든 데이터를 HashMap으로 관리하고 상태를 변경하고 영속성에 저장하는 역할까지 책임지고 있.. 2025. 2. 16.
Java 부동소수점 계산시 정확한 계산을 위해 왜 BigDesimal을 사용해야하는가? 오늘은 부동소수점 계산을 정확하게 하려면 왜 BigDesimal을 사용해야 하는지에 대해 한번 생각해 보겠습니다.부동소수점 정확도를 고민하게된건 회사에서 결제 서비스를 도입할 때였습니다.고객이 사용한 금액에 대해 수수료율을 계산하여 결제할 금액을 결정할 때 고객이 사용한 금액이 10원 단위로 딱 떨어지지도 않고 수수료율도 22%였기 때문에 double 자료형으로 수수료율을 계산하게 된다면 나머지가 남게 되어 순환소수가 발생해 버려 근삿값 2진수로 처리되어 오차가 발생할 여지 때문이었습니다.물론 큰 오차는 아니지만 회계, 세법 처리에 있어서 결제금액이 커질수록 작아 보이는 오차도  큰 금액이 되기 때문에 정확한 계산이 필요했었습니다.그래서 정확한 소수점계산을 위해 Java5에서 IBM의 기부로 완성된 Bi.. 2025. 2. 10.
SpringFramework NullPointException 방지법 NullPointException자바 개발자라면 많이 마주치는 오류라고 단언컨데 이야기할 수 있을것 같습니다. 처음 자바 개발을 배우며 매번 만나던 오류였고 개발자로 취업후 2개월정도는 많이 고생했던 기억이 납니다. 이제는 NullPointException 에러방지는 몸에 습관이 되어서 잘 만나보지 못하지만 혹여나 NPE로 고생하시는 개발자분들 위해 간단하게 제가 Java Spring Framework에서 NPE를 방지하는 방법을 공유하도록 하겠습니다. // Db 엔티티 단건조회시 Optional 타입으로 조회Optional optionalBoard = boardRepository.findById(boardId);// 데이터가 존재하지 않을경우 체크if (optionalBoard.isEmpty()) { .. 2025. 1. 13.