Gemini CLI - 백엔드 개발자가 React를 빠르게 학습할 수 있었던 이유
·
Vibe Coding(with AI)
들어가면서저는 거의 자바 스프링을 기반으로 한 백엔드 개발만 해왔습니다. 하지만 언제까지고 API만 만들고 있을 순 없죠. 제가 만든 서버를 지인들이, 그리고 제가 더 편하게 쓸 수 있도록 간단한 프론트엔드를 직접 만들고 싶다는 욕심이 생겼습니다.수많은 기술 스택 속에서 제가 선택한 도구는 `React + TypeScript`였습니다. 채용 시장의 목소리도, 대중성도 이 조합을 가리키고 있었죠.문제는 `어떻게`였습니다. HTML, CSS, JavaScript를 만져본 게 언젯적인지... 바로 그때, 제 눈에 들어온 것이 `Gemini CLI`였습니다.이 글은 'Gemini CLI'라는 강력한 AI 페어 프로그래머와 함께, 제가 어떻게 프론트엔드의 벽을 넘고 있는지에 대한 기록입니다. 1. JavaSc..
스프링 통합 테스트에서 Kafka를 지원하는 방법 (@EmbeddedKafka, @ConditionalOnProperty)
·
EtcTech
들어가면서경매 시스템의 입찰 로직에 Kafka 기반 비동기 이벤트 전송 기능을 도입하게 되었다.입찰 등록 시 Kafka로 이벤트를 발행하고, 이를 Consumer가 받아서 후속 처리하는 구조로 변경하면서,이벤트 기반 아키텍처의 이점을 실제로 적용하고 검증해보고자 했다.이후 통합 테스트를 작성하면서 Kafka까지 포함된 end-to-end 테스트를 수행하려고 했고,이를 위해 spring-kafka-test 라이브러리의 @EmbeddedKafka를 사용하여 내장 브로커 기반 테스트 환경을 구성했다. Embedded Kafka vs Testcontainers`Embedded Kafka`는 JVM 안에 Kafka 브로커를 띄우는 방식이라 속도가 빠르고 설정이 간단하지만, 실제 Kafka와 완벽히 동일하..
불필요한 에러 로그는 이제 그만 – Docker Compose 환경에서 의존성을 보장하는 법
·
Infra & Messaging
들어가면서 MSA 환경이나 모놀리식 환경에서 여러 서비스를 한 번에 실행시키기 위해 docker-compose를 사용하다 보면, 서비스 간의 실행 순서를 보장해야 하는 상황이 발생합니다. 저는 최근 MySQL과 연동되는 애플리케이션을 docker-compose로 배포하면서, 단순히 컨테이너 실행 여부만으로는 서비스 준비 상태를 확실히 보장할 수 없다는 문제를 경험했습니다. 이번 포스팅에서는 그 문제 상황과 해결 방법, 그리고 마무리 정리를 통해 비슷한 문제를 겪는 분들께 도움이 되고자 합니다. 문제 상황 기존에는 docker-compose의 `depends_on` 옵션을 사용하여 애플리케이션 컨테이너가 MySQL 컨테이너 실행 후에 시작되도록 구성했습니다. 그러나 `depends_on`은 단..
슬랙(Slack) 봇이 배포 알람을 보내도록 만들어보자.
·
Infra & Messaging
들어가면서요즘 인프라 관련해서 여러 가지 만들어보는 중이다. 팀 단위로 CI/CD를 구축했다고 치자. 팀원들은 각자 통합 및 배포 타이밍이 다를 것이다. 이를 팀 전체에게 실시간 알람으로 보낸다면 프로젝트 진행에 큰 도움이 될 것이다.`개발하면서 발생하는 이벤트에 대한 정보`를 실시간 알람으로 보내도록 구현해 보자. 이번 포스팅에서는 배포 알람 전 단계로서, 수동으로 알람을 보낼 수 있도록 구현한다.   이번 포스팅은 인프런에서 `이준형 강사님의: 안정적인 서비스 배포를 위한 배포 전략과 팁`강의를 보며 실습하는 내용이다.    슬랙 알람이 필요한 이유이 글에서 소개할 `Slack`이라는 업무 플랫폼으로 특정 이벤트 발생 시 알람을 보내도록 구현할 수 있다.아래에서는 `배포`라는 이벤트에서 슬랙 알람이 ..
[Docker + MySQL] DBeaver에서 Access Denied 문제 해결기
·
Infra & Messaging
문제 상황`도커로 MySQL을 실행`하기 위해서 비밀번호를 1108로 설정하고 `호스트 포트와 컨테이너 포트를 연결해서 RUN`을 해준 상황이다.docker ps로 실행 중인 컨테이너를 확인해 보니 c64 MySQL 컨테이너가 정상적으로 실행 중이다. `실행 중인 해당 컨테이너에 접속`해보았다.`환경변수 MYSQL_ROOT_PASSWORD`를 확인해 보니 RUN에서 지정해 준 1108로 세팅되어 있음을 확인했다. 그러나 dbeaver에서 해당 MySQL컨테이너에 연결하려고 하니패스워드가 틀려서 Access denied가 된 것으로 보이는 상황이 발생했다. 혹시나 해서 기존 로컬 MySQL에서 사용하던 비밀번호를 입력하니 연결이 된다. 따라서 두 가지 경우의 수를 의심해보았다. 원인 1이전에 도..