전체 글 9

AI 쓰면서 하는 책임 분리 고민

AI로 코드 쓰기처음 개발을 할 때는 지피티로 코드를 써가면서 기능을 구현해가기 시작했다. 그때는 좋은 설계가 뭔지에 대해 감이 없었다.하지만 프로젝트가 진행될수록, ‘코드를 잘 쓰는 것’과 ‘설계를 잘하는 것’은 전혀 다른 문제라는 걸 느끼게 되었다.설계문서를 쓰고 구현을 시작하면서, 내가 만든 서비스이니 누구보다 도메인 이해가 잘 되어 있을 거라 생각했다. 엔티티를 재설계하다초반에 엔티티 A, 엔티티 B를 다른 책임이라 보고 다른 엔티티로 분리했다.그러다보니 외부 api를 호출하고 이를 객체로 매핑하는 과정에서 A, B는 생명주기가 같다는 점을 발견했고 이후 도메인을 재설계했다.처음 분리는 역할 기준이었지만, 실제 변경 이유는 항상 함께 움직이고 있었다. SRP를 다시 이해하게 되다이때 SRP란 무작..

JAVA 2026.02.07

Spring DataSource, config server 에러 : Access denied for user

1️⃣ “로컬 실행이 안된다”입사 한 달 차, 로컬에서 테스트하려는데 앱이 뜨질 않았다.Access denied for user ''@'123.456.789.10' (using password: NO)username, password가 인식이 안되었다.“비밀번호가 틀렸다”가 아니라,“비밀번호를 보내지도 않았다”는 뜻이었다. 2️⃣ 문제 파악 : 로그를 찍자application.yml에 username, password를 정확히 넣고,Config Server도 꺼봤지만 여전히 안 됐다.그래서 결국 Bean에 로그를 박았다.@PostConstructpublic void debugDatasource() { HikariDataSource ds = (HikariDataSource) dataSource();..

Spring 2025.10.25

Spring WebClient block() vs subscribe(): 계층별 사용법 정리

Spring WebFlux나 WebClient를 처음 사용할 때 가장 많이 고민하게 되는 포인트 중 하나는 바로 block()과 subscribe() 중 무엇을 써야 하는가이다. 특히 테스트 코드, 서비스 코드, 컨트롤러, API 응답부 등 **계층마다 요구되는 특성이 다르다.이번 포스트에서는 WebClient를 사용하는 각 계층에서의 전략적 선택 기준을 정리해본다.기본 개념: block() vs subscribe()메서드 설명 특징block()Mono/Flux의 결과를 동기적으로 대기하여 반환블로킹 (스레드 점유), 흐름 제어 쉬움subscribe()Mono/Flux를 비동기적으로 실행하고 콜백으로 결과를 처리논블로킹, 백그라운드 실행, 흐름 관리 어려움 계층별 전략 정리계층 사용 추천 이유✅ 단위 테..

Spring 2025.06.18

Spring 테스트가 끝나지 않던 이유: subscribe(), @Value, MockWebServer

배경최근 프로젝트에서 Slack 알림 기능을 WebClient로 구현하고, 그에 대한 단위 테스트를 작성했다.Slack API를 직접 호출하지 않기 위해 MockWebServer를 활용했고,비즈니스 로직에서는 Spring의 @Value를 이용해 외부 설정값을 주입했다.@Value("${slack.enabled:true}")private boolean slackEnabled;그러나 테스트를 실행하자 문제가 발생했다.✅ 테스트는 통과하지 못하고 무한히 실행 중인 상태로 멈춰 있었다.✅ GitHub Actions에서는 6시간 제한 초과로 build가 자동 취소되었다.✅ 로그에는 특별한 에러도 없고, WebClient 요청도 정상처럼 보였다. 도대체 왜 테스트가 끝나지 않았던 걸까?원인SlackNotifica..

AWS Docker와 JMeter 연동 문제(빈 등록 안 됨) 디버깅

1. 문제 상황JMeter를 활용해 Spring Boot 프로젝트를 AWS EC2 위 Docker 환경에서 테스트하는 중, 예상치 못한 문제가 발생했다.하나의 Test Group 안에는 현재 Thread Group1, Thread Group2가 있는데 하나는 성공, 하나는 실패하는 것이다. JMeter 시나리오 구성:Thread Group 1: Slack 메시지 수신 API 테스트( /slack/events ) → 성공, 200 OK Thread Group 2: 스케줄러 수동 트리거 API 테스트( /test/run-daily-scheduler )→ 실패, 500 Internal Server Error Docker 로그에는 해당 컨트롤러( TestSchedulerController 라는 이름이다) 관..

[Spring Boot + Prometheus] /actuator/prometheus 안 뜰 때 해결

프로젝트에서 애플리케이션 메트릭을 Prometheus로 수집하기 위해 Spring Boot에 Prometheus를 연동했습니다. 이 글에서는 제가 마주했던 문제와 그 원인, 그리고 어떻게 해결했는지를 기록합니다. 시작: Spring Boot Actuator만으로는 충분할까?보통 Prometheus와 Spring Boot를 연동할 때는 다음 의존성을 추가합니다:implementation 'org.springframework.boot:spring-boot-starter-actuator'그리고 application.yml에 아래와 같이 설정하면 /actuator/metrics 등의 엔드포인트가 활성화됩니다:management: endpoints: web: exposure: inc..

도구, 설정 2025.05.22

에프랩(F-Lab) 자바 코스 2개월 후기

뭐하는지?1달 동안은 주로 이론을 공부했다. 그리고 2달째 부터 현재까지 지금은 프로젝트를 만들고있다. 초보자, 비전공자이고 처음 프로젝트 만드는건데 괜찮을까?나는 깃헙을 써보지 않은, pr도 모르던 비전공자였다. 프로젝트는 아주 간단한거 정도 만든 상태였다. 생각보다 깃헙을 다루고, 프로젝트 하는 것이 크게 어렵지는 않았다! 에프랩에는 깃헙을 어떻게 다루는지에 대해서 알려줘서 이 부분에서 큰 도움을 받았다.깃헙 가이드라인은 에프랩에 상세하게 잘 나와 있으니까, 꼭 확인하길 바란다!!! 내가 한 실수들 - 자기주도적 생각의 중요성을 몰라서 생긴 실수들ai에 너무 과하게 의지하기지피티가 만들어주는 코드를 대부분은 이해하고 프로젝트에 넣으려하지만 급한 상황이나, 무의식 중에 완전한 이해없이 그냥 소스..

개발자 커리어 2025.05.11

에프랩(F-lab) 자바 백엔드 코스 1개월 후기 : 비전공자 리뷰

TLDR : 좋았다. 어렵지만 그만큼 배우는게 많다. 내가 포기하지 않아서 다행이다.   왜 F-Lab을 신청했는지 :나는 비전공자이다. 전공이 정말 정말 지루했고 뭘 공부해야하는지 고민이었다. 그러다가 우연히 컴퓨터를 공부해봤고, html, css, 그리고 자바 공부가 꽤 잘맞는다고 생각했다. 그렇게 독학을 몇달 하던 중에, 온라인에 있는 사람들이 추천하는 커리큘럼을 따라가자니, 위험성도 있고, 내 자신도 믿을 수가 없었다. 그리고 그 커리큘럼을 다라갔다가, 내가 책을 이해하지 못하기도 했다. 특히 나는 영어에 자신있다고 생각해서 영어로도 공부해봤는데, 책이 어려웠어서 땅을 많이 팠다.그렇다고 국비학원에 가기는 싫었다. 너무 많은 국비 학원 중 좋은 학원은 어떻게 찾을 것인가? 나는 너무 게으르고 서칭..

개발자 커리어 2025.03.28

소프트웨어 장인

소프트웨어 장인을 한단어로 요약하면 ‘열정’이다가는 모든 직장, 프로젝트 하나하나가 투자이다. 커리어의 큰 목표를 향해 다가가는 단계다.이 책은 인재를 채용하는 방법에 대해서도 기술한다. 나중에 팀 리더가 되어서 팀 운영, 면접을 해야할때 한번 더 읽으면 좋을 것 같다. 감상평 : 본격적으로 신입 자바 개발자가 되기 전에 개발자가 무엇인지에 대해 알 수 있었던 좋은 책이었다. 코딩은 혼자 하는게 아니라 여럿이서 하는 것이다. 고객을 만족시키는 전문가가 되고 싶다고 동기부여가 되었다.   1 소프트웨어 개발개발자들은 다음과 같은 여럿을 할 수 있어야한다.고객과 대화하기테스트 / 배포 자동화하기전체 비즈니스에 영향을 미칠 기술 선정하기지리적으로 분산된 팀들과 협업하기고객을 도와 필요한 작업을 정의하기우선순위..

책 리뷰 2025.02.22