스프링9 [Spring test] mockito, controller에서 null을 반환한다 컨트롤러 테스트 작성 중 이슈가 생겼다. Mock 객체를 생성하기 위해 Mockito 라이브러리를 활용하여 컨트롤러의 반환값을 지정해 주었다. 하지만 실제 테스트 결과에서는 반환값으로 지정한 객체가 들어있지 않고 null이 포함되어 있다. 이게 대체 무슨 일…?Expected to find an object with property ['accessToken'] in path $['data'] but found 'null'. This is not a json object according to the JsonProvider: 'com.jayway.jsonpath.spi.json.JsonSmartJsonProvider'.com.jayway.jsonpath.PathNotFoundException: Expect.. 개발일기/Spring 2025. 3. 20. Spring-projects에 내 지문을 남겨버리기 조금 특별한 경험을 했다… 😆😆얼마 전에 Spring batch의 wiki 문서인 “Spring Batch 5.0 Migration Guide”을 읽다가 오탈자를 발견했었다.Up until version 4.3, the @EnableBatchProcessing annotation exposed a tranasaction manager bean in the application context. While this was convenient in many cases, the unconditional exposure of a tranasaction manager could interfere with a user-defined transaction manager.눈썰미가 좋은 사람은 바로 보일 것이다. tr.. 오픈 소스 2024. 12. 4. API versioning 방법론 세상에 완벽한 소프트웨어는 존재하지 않는다.애플리케이션은 요구 사항이 변경될 때마다 새로운 버전을 릴리즈합니다. 이때, 다양한 버전을 동시에 사용하는 유저들의 안정적인 활동을 보장하기 위해서 backend engineer는 하나의 API에서 다양한 버전을 관리해야 할 때가 있습니다. 이번에는 Spring과 Kotlin 환경을 기준으로 API version을 관리하는 몇 가지 방법론을 제시해보겠습니다.들어가기 앞서 대부분의 문제가 그렇듯, 정답이란 없습니다. 본인의 팀 상황에 맞는 방법을 선택하시되 중요한 것은 팀 전체가 하나처럼 움직이는, 모든 코드가 공통성을 가지는 “일관성”이지 않을까 싶습니다.API 버전 관리 전략1. URL Versioning가장 대중적으로 알려진 방식이다. 접근 방법도 단순하다... 개발일기/Spring 2024. 11. 20. Spring security Architecture 애플리케이션 개발자가 모든 보안 및 인증 관련 사항을 하나하나 구현하고 신경을 쓰기엔 현실적으로 시간과 자원이 많이 든다. 이에 스프링은 하위 라이브러리로 스프링 기반 애플리케이션의 보안(인증, 권한, 인가)을 담당하는 Spring security를 개발하여 애플리케이션 개발자들에게 편의를 제공한다.다만, 보안에 관련된 개발 특성상 코드 변화가 잦고 버전마다 차이가 있을 수 있으므로 레퍼런스는 공식 docs에서 얻는것이 가장 확실한 방법이다.아래 블로그 본문은 Spring Security의 6.3.4 버전 공식 docs를 필자의 생각과 함께 재구성하였다.Spring Security “사용”하기Security를 “사용”만 하는 방법은 정말 간단하다.@EnableWebSecurity@Configuration.. 개발일기/Spring 2024. 11. 12. [Spring batch] meta data table을 public이 아닌 다른 schema에 생성 실행환경Spring batch는 버전마다 편차가 심하다. 본 포스팅의 실행 환경을 반드시 확인하자.Spring boot: 3.3.5Spring batch: 5.1.2RDBMS: postgreSQLSpring batch meta data table 수동 설정스프링 배치는 그 실행과 관리를 위해 Job, Step, JobParameter 등의 정보를 주로 데이터베이스에 저장하고 관리한다. Spring batch는 DB에 저장된 batch관련 정보들을 활용하여 작업 재실행, 중단 후 재시작, 상태 추적 등의 기능을 효과적으로 지원하게 된다.Spring batch는 데이터의 스키마를 RDBMS의 종류에 맞게 정의해두었고 application.yml에서 설정을 통해 이 schema를 생성하는 sql 스크립트를 자.. 개발일기/Spring 2024. 11. 7. Spring batch 5.0 Migration Guide - 국문 번역 본문은 Spring-project의 spring-batch에서 소개하는 Spring Batch 5.0 Migration Guide를 국문 번역 해놓은 글이다. v4와 v5가 정말 많이 바뀌었다. v5로 migration 하는 개발자들에게 조금이나마 도움이 되기를 바라는 마음으로 국문으로 옮겨본다.최대한 github Wiki 작성자의 의도를 옮기기 위해서 형식도 그대로 가져왔다. 혹여나 해소되지 않은 의문이 있다면 영어 본문(아래 링크)을 참고하자.https://github.com/spring-projects/spring-batch/wiki/Spring-Batch-5.0-Migration-Guide본 문서는 Spring Batch 5.0으로 애플리케이션을 마이그레이션하는 개발자를 돕기 위해 작성되었다.Ma.. 개발일기/Spring 2024. 10. 31. “Spring Event”, 세부적으로 조작해보자. 바로 직전 포스팅의 일부분을 복습해보자.Spring Event를 활용하게 되면 SRP, OCP 등 객체 지향 원칙을 준수하며 확장성 있는 서비스를 구축할 수 있다. 이벤트를 손쉽게 추가하거나 수정하여 새로운 기능을 도입하기도 쉽고 코드가 더 명확해진 것을 볼 수 있다. 하지만 Spring Event의 도입이 무조건 장점만 있는 것은 아니다. Spring Event의 여러 특성을 잘 알고 활용해야 한다.멀티 캐스팅 관계Spring Event는 기본적으로 “멀티 캐스팅” 관계이다. 하나의 이벤트 발행자의 반대편에는 다수의 소비자가 존재할 수 있다는 뜻이다. 따라서 동일한 타입의 여러 리스너가 등록되었다면 모든 리스너가 이벤트를 받게 된다.단순히 ‘오.. 훌륭한데?’라고 감탄만 할 문제가 아니다. Spring.. 개발일기/Spring 2024. 9. 25. 결합도를 낮추고 응집도를 높히자. “Spring Event” 객체 지향 프로그래밍의 5가지 설계 원칙을 다시 되새겨보자. 오늘의 주제 Spring Event도 이 5원칙에서 출발한다.1. SRP(Single Responsibility Principle) 단일 책임 원칙2. OCP(Open-Closed Principle) 개방 폐쇄 원칙3. ISP(Interface Segregation Principle) 인터페이스 분리 원칙4. LSP(Liscov Substitution Principle) 리스코프 치환 원칙5. DIP(Dependency Inversion Principle) 의존 역전 원칙흔히 말하는 SOLID 원칙(https://dev-ignuy.tistory.com/14)에 의해 객체지향은 계속 발전해왔다. 이 중에서도 SRP는 “하나의 메서드나 클래스는 한.. 개발일기/Spring 2024. 9. 23. [이슈 로그] com.mysql.jdbc.Driver와 com.mysql.cj.jdbc.Driver 스프링 서버와 mysql을 연동하기 위해 application.yml에 DB 정보를 다음과 같이 작성하였다. 서버 구동에는 크리티컬한 문제가 없지만 유독 불편하게 빨간색으로 눈에 띄는 한줄이 있다. Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary. "com.mysql.jdbc.Driver"가 deprecated 되었다고? "com.mysql.cj.jdbc.. 개발일기/이슈 로그 2023. 10. 10. 이전 1 다음