본문 바로가기

spring

(5)
Spring Security에서 많이 쓰는 패스워드 암호화(Bcrypt) 계기최근 사내에서 유지보수하는 legacy 시스템 중 개발계 admin 사이트의 관리자 계정 패스워드를 모르는 경우가 발생했다. 인수인계 받은지 얼마 안되어 관리자 계정이 현업 1명에게만 부여되어 있다는 사실을 발견했는데, 나도 관리자로 넣어서 테스트해보고자 현업에게 요청했으나 비밀번호를 까먹었다는 답변이 돌아왔다.비밀번호 재설정에 대한 프로세스가 없어서 인증 프로세스를 skip하게 만들 생각도 해보았으나 리소스가 많이 들 것 같아 우선 배제해두었다. legacy 시스템의 유지보수는 외부 협력업체가 담당하고 있어서 개발계라 해도 내 마음대로 소스코드를 고치고 배포하고 하지 못하게 하였는데, 시간도 좀 걸리고 소스코드 분석도 해야하고 배포 프로세스도 새로 파악해야 하는 리소스가 꽤 드는 일이었기에 이건 최..
spring rabbitmq 무작정 따라하기 목표RabbitMQ server 구성consumer(receiver) 구현producer(sender) 구현메시지 발행 및 수신 테스트풀어서 설명하자면, rabbitmq 라는 메시지 브로커 서버가 존재하면, consumer는 어떤 메시지를 받을 것인지 구현하고, producer는 특정 메시지를 발행하는 것이다.RabbitMQ server 구성macOS 환경에서 간단하게 homebrew를 통해 설치하였다. `brew info rabbitmq` 명령어를 통해 확인하면 Dependencies > required erlang 이라고 나오는데, 윈도우에서 설치할 경우 erlang을 버전에 맞게 설치해주어야 한다. homebrew를 통해 설치하였으므로 erlang도 자동으로 설치된다.rabbitmq 공식 docs에..
chaos engineering과 chaos monkey 사용법 chaos engineering이란?chaos engineering은 시스템의 안정성을 테스트하고 향상시키기 위한 실험적인 방법론입니다. 다양한 장애 상황을 인위적으로 만들어 시스템이 어떻게 반응하는지 관찰하고, 예측하지 못한 장애 상황에서도 시스템이 정상적으로 동작하게 만들도록 준비할 수 있습니다.chaos engineering이 필요한 이유꼬리 지연 등으로 인해 한 시스템의 장애가 다른 시스템으로 전파될 수 있는데, 장애 상황을 미리 경험하고 대응책을 마련함으로써 실제 장애 발생 시 효율적으로 대응할 수 있습니다. 또한 시스템의 고가용성을 유지하고 서비스 중단 시간을 최소화하여 안정적인 서비스를 제공할 수 있습니다.Chaos MonkeyNetflix에서 chaos engineering을 위해 개발한 ..
REST clients(feat. http interface) https://youtu.be/Kb37Q5GCyZs?si=OPyiQb3Yz0MZdNnT 토비님 유튜브를 보고 한 번 따라해보았습니다. api 호출을 할 때 쉽게는 RestTemplate을 이용하는데요. 현재 업무를 진행하는 곳에서는 스프링 기반의 프레임워크가 아니라 다른 방식으로 api 호출을 하는데, 친구들 이야기를 들어보면 FeignClient, WebClient 등을 이용하는 것 같습니다. 토비님이 제시한 3가지 REST clients는 RestTemplate, WebClient, 그리고 spring 6부터 나오게 된 HTTP interface 입니다. RestTemplate과 WebClient는 실습 코드만 간단히 올리고, HTTP interface에 대해서 좀 더 자세히 살펴보겠습니다. 기본 환..
Spring boot 도커 hub에 올리고 로컬 DB(MySQL)와 연동하기(feat. github actions) Spring Boot(2.7.11)와 MySQL(8.0.32) 기반으로 애플리케이션을 만들기로 했다. 이 때 github actions를 활용해 CI/CD(CD까진 아니고 deploy를 하기 위한 환경을 준비했다고 해두자) 이 때 다음과 같은 요구사항을 만족하고자 했다. 전제 조건: github에 올린 소스를 clone 받아서 로컬 MySQL 서버와 연동하는 것이 아니라 docker hub에 업로드 한 app image를 pull 받아서 로컬에 이미 설치해 둔 MySQL과 연동한다. 이는 배포한 docker image를 다른 개발자들이 pull 받아서 로컬 MySQL 서버와 연동해 테스트하기 위함이다. 1. spring app은 docker image로 만들어 docker hub에 push 한다. 2. ..