[스프링 부트] 외부 설정값으로 간단하게 복잡한 커스텀 빈 주입 받기

intro 웹 프로젝트를 진행하다보면 외부 설정값을 어플리케이션 내에서 활용할 일이 많다. 하드코딩을 해두면 후에 변경하기 쉽지 않기 때문에 외부에 설정값으로 빼는게 좋은데, 설정값이 한두개 일 때야 크게 어렵지 않지만 설정값이 점점 늘어나고 심지어 계층형 구조를 가진다면 점점 복잡해진다. 스프링에서는 편리하게 여러가지 설정값을 관리하기 위한 방법을 제공하는데 그 중 @ConfigurationProperties는 특히 프로퍼티의 값을 Bean으로 매핑하는 강력하고 직관적인 기능을 제공한다. 본 글에서는 @ConfigurationProperties의 기본 사용법과 주요 특징 및 주의할 점에 대해 다루어보려고 한다. main 프로젝트 생성 스프링부트 3.x 버전으로 먼저 생성하고 추후 2.x 버전으로 낮추며..

Programming/JPA ⁄ Spring 2023.10.05
스프링부트 프로젝트에서의 엑셀 및 압축파일에 대한 스트리밍

Intro 엑셀파일이나 zip 압축파일을 서버에서 생성해 다운로드를 제공할 때, 최초 응답시간에 대한 고려가 필요하다. 물론 미리 준비되어 있는 파일이라면 브라우저에 바로 응답을 보낼 수 있겠지만 DB에서 데이터를 조회하고, 이를 바탕으로 엑셀 파일을 생성하는 경우 사용자에게 여러 개의 파일을 압축된 형태로 제공하는 경우 이러한 상황에서는 파일을 준비하는 데 시간이 상당히 소요될 수 있다. 데이터의 크기에 따라 응답시간이 크게 달라지기 때문에 예상되는 응답 시간을 구체적으로 제공하기도 어려운 상황에서, 화면에 스피너만 딸랑 띄워놓는 것 만으로는 어지간한 사용자들의 인내심을 달래기 쉽지 않다. 서버에서 아무리 바쁘게 준비하고 있다고 뜨거운 열을 뿜어내며 소리쳐도 사용자는 서버가 멈춘 것으로 오해할 수 있다..

Programming/JPA ⁄ Spring 2023.09.14
[Git] 과거 커밋 일괄 이메일 주소 변경

Intro 가끔씩 Git을 사용하다 보면 이메일 주소가 잘못 입력되어 커밋되는 경우가 생길 수 있다. 혹은 회사에서 개인 이메일로 잘못 커밋한 경우도 발생하는데 금방 알아차렸다면 수정하기 쉽지만 커밋을 꾸준히 잘못해왔다면 수정하기가 쉽지 않다. 이 글에서는 Git 저장소에서 특정 이메일 주소로 커밋된 목록을 확인하고, 해당 커밋들의 이메일 주소를 한번에 모두 변경하는 방법에 대해 알아볼 것이다. 단, 주의할 점이 많으니 명령어를 날리기 전에 항상 신중해야한다. 특정 이메일로 커밋한 목록 확인 먼저, 잘못 지정한 이메일 주소로 커밋한 내용이 얼마나 많은지 확인해보자. git log --author="{찾아볼_이메일_주소@example.com}" 지금 상황은 총 1건이 발견되었다. 해당 커밋의 해시값 6b5..

Development/DevOps 2023.08.08
리눅스에서 하드디스크 NTFS 시스템 으로 포맷

Intro 윈도우와 리눅스 두가지 OS에서 모두 사용할 수 있는 파일 시스템으로 하드디스크를 포맷을 해야 할 필요가 있었다. FAT32, exFAT, NTFS 등 선택할 수 있는 몇가지 파일시스템이 있지만 각각의 장단점이 있다. FAT32는 거의 모든 기기와 호환되는 장점이 있지만, 4GB 이상의 큰 파일을 저장할 수 없으며 파티션 크기에도 제한이 있다. 그래서 exFAT과 NTFS 중 하나를 선택해야 하는데 안정성이 중요한 상황이라 NTFS를 선택했다. 파티션 생성 먼저, 연결된 모든 디스크 목록을 확인한다. 디스크 이름을 알아내기 위함이다. sudo fdisk -l 여기 보이는 14.57 TiB짜리 하드디스크 /dev/sda를 NTFS 파일 시스템으로 포맷할 예정이다. 이어 아래의 명령어를 입력한다...

IT ⁄ Computer/Linux 2023.08.07
[Maven/Gradle] 의존중인 모든 라이브러리의 라이센스 정보 불러오기

Intro 소프트웨어 개발을 하는 과정에서는 다양한 서드파티 라이브러리를 사용하게 된다. 이들 라이브러리는 우리가 직접 작성해야 할 코드의 양을 획기적으로 줄여주며 이미 검증된 라이브러리를 사용하면 코드의 안정성 향상에도 많은 도움을 준다. 하지만 각 라이브러리는 자체 라이센스 정책을 가지고 있으며, 개발자로서 이를 이해하고 준수하는 것은 법적이나 윤리적인 측면에서 매우 중요하다. 이번에 사용중인 모든 서드파티 라이센스 정보를 프로젝트에 기입해야 하는 일이 필요했다. 수동으로 관리하고 문서화 하는 것은 실수하기도 쉽고 시간도 많이 소요되기 때문에 자동화 할 수 있는 도구를 찾아보았고, 다행히도 제법 잘 만들어진 몇 도구들이 있어 어렵지 않게 라이센스 정보를 한번에 생성할 수 있었다. 지금부터 이 글을 통..

Programming/Java 2023.07.21