개발일기34 [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. [이슈 로그] 리액트 애플리케이션 백그라운드 실행 리액트 애플리케이션을 백그라운드로 실행하기 위해 아래 커맨드를 입력했다.$ yarn dev --host 0.0.0.0 --mode production & 정상적으로 실행될 것이라는 기대와 다르게 에러가 발생한다.[5]+ Stopped (tty input) yarn dev --host 0.0.0.0 --mode production원인이 무엇일까?React 개발 서버(yarn dev)는 실행 중 터미널 입력을 필요로 하지만 이를 백그라운드에서 실행시켰으므로 터미널 입력을 처리하지 못하고 동작을 멈춘 것이다. 따라서 이는 TTY 입력 문제로 React 개발 서버는 백그라운드 실행 시에도 TTY 입력을 기본적으로 기다리는 특징을 이해해야 한다.해결은 nohup해결을 위해 nohup을 사용한다. n.. 개발일기/이슈 로그 2024. 12. 2. K8S Pod와 Deployment 간단 이해 “쿠버네티스에서 배포할 수 있는 가장 작은 컴퓨터 오브젝트인 Pod와 이를 실행하는데 도움이 되는 고수준 추상화” = 쿠버네티스 워크로드쿠버네티스의 워크로드는 클러스터에서 실행되는 애플리케이션과 서비스를 나타낸다. 이는 컨테이너화된 애플리케이션을 배포, 관리 및 확장하기 위해 정의된 객체들로 구성된다. 워크로드의 주요 유형은 아래와 같다.Pod : 하나 이상의 컨테이너를 포함하는 쿠버네티스의 가장 작은 배포 단위Deployment : 무중단 배포와 롤백을 관리하며, 애플리케이션을 선언적으로 배포StatefulSet : 상태를 가진 애플리케이션을 관리하며, 안정적인 네트워크 ID를 제공DaemonSet : 각 노드에서 실행되는 워크로드를 관리Job & CronJob : 일회성 또는 주기성을 띄는 작업을 수.. 개발일기/K8S 2024. 11. 28. [이슈 로그] 네트워크 이슈 + 'yarn dev --host 0.0.0.0' 진짜 별거 아닌 이슈 로그이다. 근데 2시간 동안 삽질해서 한번 정리해본다. 상황현재 사내 온프렘 서버로 바로 접근해서 작업하지 않고 router에 접근해서 작업하고 있다. router로 요청을 보내면 자동으로 라우팅된 요청이 내가 사용하는 서버로 가는 구조이다. 192.168.y.y 에 단순히 yarn dev로 react 애플리케이션을 실행했다. 그리고 라우터의 8051번 포트를 vite 애플리케이션이 사용하는 5173번 포트로 포트포워딩 해두었다.결과는? 아니 내 네트워크 지식으론 이론상 완벽한데? 라고 생각했지만 문제는 네트워크 연결이 아니라 yarn dev에 있었다.yarn dev 기본설정대부분의 경우, 개발 서버는 localhost(또는 127.0.0.1)에서만 실행된다. 이는 개발 서버가 로컬.. 개발일기/이슈 로그 2024. 11. 22. 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. K8S 무작정 초기 설정하기(Ubuntu 20.04 LTS온프레미스)_ 2024.11.05 본 글은 K8S를 처음 다루는 개발자의 테스트용 환경구축을 위한 글이다. 아직 K8S에 익숙하지 않은 개발자라면 여러 대의 인스턴스를 왔다 갔다 다루고 있으므로 반드시 본문을 꼼꼼히 읽으면서 흐름을 따라오길 바란다. 혹시라도 K8S 설정을 틀렸다 하더라도 오른쪽 북마크를 통해 “초기설정 돌아가기”로 가서 안내하는 명령을 따르면 된다.또한, 이는 작성 당시 24년 11월 5일을 기준으로 작성된 글이다. 쿠버네티스나 기타 서드파티 라이브러리의 버전 차이로 스크립트가 동작하지 않을 수도 있으므로 공식문서를 확인하거나, 댓글로 알려주길 바란다. 문서를 수정하겠다. 아래 설정을 확인하자.OS : Ubuntu 20.04 LTS(22.04 LTS 버전은 커널 드라이버 차이로 아래 전문의 방법이 안먹히는 것으로 안다... 개발일기/K8S 2024. 11. 5. 도커와 도커 사이의 통신(도커 네트워크) Spring boot 프로젝트를 로컬에서 바로 실행하지 않고 docker로 프로젝트 디렉터리를 마운트하여 컨테이너로 실행하면서 이슈를 하나 마주쳤다. postgre SQL 을 실행하고 있는 또 다른 Docker 컨테이너와 Spring boot 프로젝트가 커넥션을 맺지 못한다. 무슨 일이었는지 알아보자.일단 해결부터문제의 원인과 해결은 정말 간단하다. 우선 같은 로컬 환경에서 실행 중인 Docker 컨테이너끼리는 localhost:{port}로 직접 통신할 수 없다. Docker는 각 컨테이너가 독립적인 네트워크 네임스페이스를 가지므로, localhost는 각 컨테이너의 내부 주소를 의미하게 되어 서로를 인식하지 못하게 된다. 따라서, 브릿지 네트워크를 사용하여 두 컨테이너가 같은 사용자 정의 브릿지 네트.. 개발일기/Docker 2024. 11. 4. 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. Docker로 Sonarqube 설치 및 실행(Spring & react.js + ts) SonarQube소스 코드 품질 관리 도구로, 소나 소스(SonarSource)에서 개발하여 오픈소스로 관리되고 있는 툴이다. 정적 코드 분석, 코딩 규칙 준수, 버그 및 취약점 탐지, 코드 복잡성 측정 등의 기능을 제공하고 또한 다양한 프로그래밍 언어, 프레임워크, 개발 도구와 통합되어 사용할 수 있다.소나큐브를 사용함으로 개발과정에서 놓친 소스 코드 품질 문제를 식별하고 해결하기 위한 통찰력을 얻을 수 있다. 이를 통해 개발 프로세스에서 발생할 수 있는 보안, 에러 등 잠재적인 위험을 사전에 예방하고 코드의 유지 관리성을 향상할 수 있다.현재, Community 버전은 무료로 사용할 수 있으며, 커뮤니티에서 다양한 지원 및 업데이트가 제공되고 있다. 더 고도화된 기능을 사용하고 싶다면 Develope.. 개발일기/Docker 2024. 10. 28. Spring Boot에서 JNI 사용하기(linux 환경) Java와 Spring은 거대한 커뮤니티를 바탕으로 다양한 라이브러리와 프레임워크를 지원하는 하나의 생태계를 구축하고 있다. 정말 오랫동안 꾸준히 사랑받아온 프로그래밍 언어와 프레임워크로 다양한 장점이 존재한다. 대표적으로 “Write Once, Run Anywhere”라는 원칙으로 플랫폼 독립성을 지향하며 가비지 컬렉션이라는 엄격한 메모리 관리 기능으로 메모리 릭 문제를 줄일 수 있다. 뿐만 아니라 OOP에 특화된 언어 특성상 코드 재사용성과 유지보수성이 향상되어 대규모 애플리케이션 개발에 적합하다는 평가를 받고 있다.하지만,,,, 지금까지 Java와 Spring과 함께라면 무엇이든 할 수 있는 강력한 조합이라고 생각했지만 의외로 간단하게 난관에 부딪혔다. “Java는 시스템을 직접 제어하지 못한다.”.. 개발일기/Spring 2024. 10. 14. 이전 1 2 3 다음