개발일기41 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. ubuntu환경에서 node 버전 올리기 ubuntu 초기 설정에서 신기한 일을 발견했다.apt install nodejsnpm을 사용할 일이 있어서 ubuntu환경에서 npm을 설치하고 버전을 확인해보면 아래와 같이 나온다.node -v# v12.0.~~현시점 nodejs 의 최신 LTS 버전은 v20.17.0이다. 한참 낮은 버전이 설치되는 이유는 뭘까? Ubuntu 리포지토리에서는 장기 지원(LTS) 버전에 대한 안정성을 중시하여 새로운 버전이 빠르게 반영되지 않는 경우가 많다. 특히, Nodejs와 같은 패키지는 업그레이드 시 호환성 문제를 최소화하기 위해 레포지토리에서 오래된 버전을 유지하는 경우가 많다.해결법해결법이 상당히 많다. 그중 하나만 소개해보겠다.sudo apt update# apt 에서 제공하는 node 설치sudo apt.. 개발일기/Linux 2024. 10. 1. “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. [이슈로그] Alpine Linux에서 Nessus 다운로드 2 - 트러블 슈팅 .deb 파일을 디패키징나는 Alpine Linux 환경에 설치할 파일로 .deb 파일을 골랐다. .rpm을 골라도 상관없다. 우회가 목적이므로 정확한 원리와 함께 Linux 환경에서 .deb 파일을 디패키징하는 방법을 설명하겠다.Linux- Ubuntu-amd64 설치 파일 다운로드curl --request GET \\ --url '' \\ --output 'Nessus-10.8.2-ubuntu1604_amd64.deb'아카이브 추출.deb파일도 ar (Unix 아카이브) 형식을 사용하여 여러 파일을 하나로 묶는 방식으로 구성된다. 따라서 binutils 라이브러리를 이용하여 .deb라는 아카이브 파일에서 내용을 추출하는 방법을 활용한다.ar x Nessus-10.8.2-ubuntu1604_amd6.. 개발일기/이슈 로그 2024. 9. 9. [이슈로그] Alpine Linux에서 Nessus 다운로드 1 - 사건의 발단 취약점 분석 & Nessus란?취약점 분석이란 타겟 시스템에 공격(Exploitation)을 수행하기 전 타겟 시스템의 취약점에 대한 정보를 얻어내는 과정.Penetration Test Phases정보 수집(Reconnaissance) : 타겟에 대한 예비 데이터나 정보를 수집하는 것스캐닝(Scanning) : 실제 툴을 사용하여 타겟에 대해 더욱 자세한 정보를 얻고자 하는 것.공격(Exploitation) : 타겟으로부터 데이터를 뽑아내거나 다른 타겟을 공격하기 위해 그 장치를 이용하는 등 네트워크 장치의 주도권을 빼앗아 오는 것.후속 공격(Post-Exploitation) : 다음 사용을 위해 공격을 시행했던 장치의 주도권을 유지하거나 장치의 유용성을 판단하는 것.흔적 지우기(Covering Trac.. 개발일기/이슈 로그 2024. 9. 9. 이전 1 2 3 4 다음