스프링부트에서 프로퍼티 파일들은 어떻게 로드되는가?
·
Spring/Spring 설정
안녕하세요. stark입니다!스프링부트는 애플리케이션의 설정을 관리하기 위해 프로퍼티 파일(properties 파일) 또는 YAML 파일을 주로 사용합니다. 이러한 설정 파일들은 애플리케이션이 실행될 때 특정 규칙과 우선순위에 따라 로드되며, 다양한 환경에서 유연하게 동작할 수 있도록 설계되어 있습니다. 이번 글에서는 프로퍼티 파일이 어떤 규칙으로 로드되는지, 이를 어떻게 활용할 수 있는지를 상세히 알아봅시다.  1. 기본적인 프로퍼티 파일 로드 규칙스프링부트 애플리케이션은 실행 시, 특정 경로에서 설정 파일을 자동으로 탐지합니다. 가장 기본적으로 사용되는 파일은 application.properties 또는 application.yml이며, 다음과 같은 경로에서 찾습니다.1. classpath 경로일반..
스프링의 심장, 컨테이너 초기화를 통한 빈의 탄생과 프록시의 완성과정
·
Spring/프레임워크 분석
안녕하세요. 개발자 Stark입니다. 2025년 첫 글입니다. 모두 새해 복 많이 받으세요~이번 포스팅은 정말 길게 준비하고 있던 Spring 트랜잭션 시리즈의 시작을 알리는 글입니다. 한 달간 천천히 시간이 날 때마다 디버깅을 하면서 내부 동작을 분석하고 정리만 진행하고 있었는데 신년이 되었으니 새로운 시작을 알리기 위해 제가 선택한 첫 시리즈는 바로 프레임워크 분석이며 "스프링은 어떻게 @Transactional을 사용한 클래스나 메서드를 빈으로 등록하면서 Proxy 객체로 만들까?"입니다.  이를 위해 가장 기초가 되는 스프링 컨텍스트의 빈 등록 과정부터 시작해서 실제 트랜잭션 인터셉터의 동작까지 이번 시리즈를 통해 모든 것을 상세히 분석하고 정리할 예정입니다. 이번 포스팅에서는 스프링의 복잡한 "..
[Spring] 직접 개발한 라이브러리 Fortune Cookie : API 응답에 재미 더하기
·
Spring/Spring에서 Java 활용하기
안녕하세요. 개발자 Stark입니다!저는 개발자가 된 후 지금까지 꾸준히 나만의 오픈소스 라이브러리를 만들고자 생각해 왔습니다. 이렇게 생각만 하던 중 갑자기 이런 생각이 들었습니다. "이렇게 오픈소스 만든다는 생각만 하다가 늙어 죽을 때까지 시도도 못해보고 똥 되겠다!"  시작하며위의 서론에서 이어집니다. 그래서 저는 바로 집에 가서 GPT를 켜고 이렇게 물어봤습니다. "내가 정말 멋진 오픈소스 프로젝트를 만들고 싶은데 어떻게 하면 될까?"이 질문에 대한 답변을 받은 순간 이런 생각이 들었습니다. 이제 최고의 두뇌이자 선생님인 AI가 있으니 Google에서도 원할만한 최고의 개발자가 되기 위해서는 '무언가를 만들고자 하는 본인의 강한 의지와 실행력'만 있으면 되는 게 아닐까?  왜냐하면 gpt에게 너무..
스프링 Enum 바인딩: 커스텀 Converter로 대소문자 문제 해결
·
Spring/Spring에서 Java 활용하기
안녕하세요 개발자 stark입니다! 오늘은 Enum을 우아하게 사용하는 방법을 소개드리고자 합니다. 스프링 MVC에서 @RequestParam이나 @PathVariable로 enum을 받을 때는 스프링 내부에서 StringToEnumConverter가 동작하게 됩니다. 그리고 이 Converter는 문자열과 enum 상수가 정확히 일치해야만 매핑됩니다. 그러나 개발을 하다 보면 소문자를 허용해야 할 수도 있고, 잘못 들어온 값에 대해 일관된 에러 메시지를 내려줄 필요도 있습니다. 이를 해결하기 위해 아래와 같이 커스텀 컨버터 + 전역 예외 처리를 구성하면, 원하는 대로 Enum을 바인딩하고 에러 응답을 깔끔하게 제어할 수 있습니다.  저도 이것을 잘 몰랐는데 제가 enum을 대문자로만 받도록 로직을 구성..
[Spring] 의존성과 결합도 제대로 알기
·
Spring/Spring에서 Java 활용하기
안녕하세요. 스프링 백엔드 개발자 stark입니다!백엔드 업무를 하면서 개발자들끼리 코드 구조에 대한 대화를 하다 보면 의존성과 결합도라는 용어를 정말 많이 사용합니다. 개발에서 얘기하는 의존성 그리고 결합도는 뭘 의미하는 걸까요? 이 궁금증을 해소하기 위해 이번 포스팅에서는 의존성과 결합도에 대해 가볍게 알아보고 의존성 주입(DI: Dependency Injection)을 통해 어떻게  높은 의존성을 풀어나가는지 알아봅시다.  의존성이란 무엇인가?의존성은 쉽게 말해 한 클래스가 다른 클래스의 기능에 의존한다는 것을 의미합니다. 예를 들어, OrderService 클래스가 주문 처리를 위해 PaymentService의 기능(메서드)을 필요로 한다면, OrderService 클래스는 PaymentServi..
[Spring] 왜 @Transactional 내부에서 호출한 @Transactional은 안 먹힐까?
·
Spring/Spring 기초 지식
안녕하세요. 트랜잭션이 흥미로운 개발자 stark입니다!최근 트랜잭션에 대해서 공부하다 보니 좀 더 궁금한 것들이 있어서 포스팅을 작성하게 되었습니다. 이번 포스팅에서는 같은 클래스 내에서 메서드를 호출할 때 프록시 기반 트랜잭션이 동작하지 않는 문제를 다뤄봤습니다. Spring에서 트랜잭션 관리는 데이터의 무결성을 보장하는 중요한 기법입니다. 잘못된 트랜잭션 관리로 인해 발생할 수 있는 데이터 손실이나 오류를 방지하기 위해서는 트랜잭션의 동작 방식을 제대로 이해해야 합니다. 특히 같은 클래스 내에서의 메서드 호출 시 트랜잭션이 의도한 대로 동작하지 않는 경우가 있어 이를 이해하고 적절히 대응하는 것이 중요합니다.  프록시 기반 트랜잭션이란?Spring에서 트랜잭션 관리를 위해 @Transactional..
[Spring] @TransactionalEventListener(AFTER_COMMIT)에서 업데이트가 반영되지 않는 문제 해결
·
Spring/JPA
안녕하세요. 매일 성장하는 개발자 stark입니다!저는 실무에서 스프링 내부 이벤트를 발행할 때 @TransactionalEventListener(AFTER_COMMIT)를 정말 많이 사용합니다. 근데 after_commit 내부에서 트랜잭션을 사용해서 업데이트 처리를 해야 하는데 제대로 동작하지 않는 문제가 발생했습니다.분명 트랜잭션도 제대로 걸어줬는데 왜 업데이트가 안되는지 이 상황이 도저히 이해가 되지 않았고 저는 이해되지 않은 채로 넘어가는 것이 싫어서 정말 오랜 시간 동안 그 이유를 찾아 헤매었습니다. 조금 오래 걸렸지만 결국은 답을 얻었고 그 과정을 정리해 봤습니다.  문제 상황 이해하기게시글 저장 API를 호출하면 게시글을 저장하고, 그 과정에서 이벤트를 발행합니다. 이 이벤트는 @Tran..
[Java] Enum NPE 문제 빠르게 해결하기 (feat. equals, switch, AttributeConverter)
·
Spring/Spring에서 Java 활용하기
안녕하세요. 기록이 즐거운 개발자 stark입니다!이번 포스팅은 제가 직접 겪은 Enum 오류와 그 해결 과정을 기록해 두고자 작성했습니다. 스프링 프로젝트에서는 DB에 저장되는 타입을 문자열(String)이 아닌 Enum으로 관리하는 것을 권장합니다. Enum을 사용하면 임의의 값이 DB에 저장되는 것을 방지할 수 있으며, 코드 내에서 타입을 쉽게 검색해 빠르게 확인할 수 있는 장점이 있기 때문입니다. 하지만, Enum을 사용한다고 해서 문제가 없는 것은 아닙니다. 프로젝트를 진행하면서 예상치 못한 문제에 직면할 수 있습니다. 제가 겪은 문제 상황은 다음과 같습니다. 비즈니스 로직에서 Enum을 사용해 DB에 저장된 특정 타입 값을 확인하고, 일치할 경우 데이터를 처리하는 로직을 작성했습니다. 그러나,..