[개발 일기] 2025.05.14 - ConfigurationProperties와 Setter
·
개발 일기
💡 개요 @Setter @ConfigurationProperties(prefix = "naver") 확실한 이유는 모르겠지만, @Setter가 없다면 @ConfigurationProperties를 사용하더라도 application.yml에 정의된 값을 객체에 바인딩할 수 없다. 오늘은 그 이유에 대해 정리해 보자. 🛠️ ConfigurationProperties 일단 ConfigurationProperties가 뭔지부터 정리 해보자. @ConfigurationProperties는 *.properties 또는 *.yml 파일에 정의된 설정 값을 자바 클래스의 필드에 바인딩해 주는 애노테이션이다. 위 코드를 보면 prefix가 naver로 설정되어 있는데, 이것은 설정 파일에 있는 naver ..
[개발 일기] 2025.05.13 - 자바 Optional 정리
·
개발 일기
💡 개요 오늘은 자바에서 사용되는 Optional에 대해 정리해 보자. 🛠️ Optional Optional이란 자바에서 NullPointException을 방지하기 위해 사용되는 타입이다. 보통 JPA을 사용해 엔티티를 조회할 때 Optional로 엔티티를 한번 감싸고 사용하면, 더 안전하게 객체를 다룰 수 있다. Optional findMember = memberRepository.findByEmail(email); ⚙️ Optional 제공 메서드 Optional에는 다양한 메서드가 제공된다. 📌 생성 관련 메서드설명Optional.of(value)절대 null이 아닌 값을 포함한 Optional 생성 (null이면 NullPointerException)Optional.ofNullab..
[개발 일기] 2025.05.12 - 분산 저장 (파티셔닝, 샤딩)
·
개발 일기
💡 개요 오늘은 DB의 안정성과 성능을 향상하는 방법인 분산 저장 기법(파티셔닝과 샤딩)에 대해 정리 해보자. 🛠️ 파티셔닝 파티셔닝이란 데이터베이스를 특정 조건을 적용해 여러 부분으로 분할하는 것이다. 하나의 DBMS에 너무 큰(많은 컬럼을 관리) 테이블이 들어가면 성능 측면에서 문제가 발생할 수 있다. 이를 방지하기 위해 테이블이나 인덱스를 작은 파티션 단위로 나누어 사용하는 방법을 의미한다. 파티셔닝을 통해 얻을 수 있는 장점은 다음과 같다. ✅ 성능 향상쿼리를 수행하는 테이블의 데이터 수가 감소하기 때문에 검색 속도가 향상된다. ✅ 관리 용이전체 테이블을 대상으로 백업이나 복원을 진행하는 것이 아니라 파티션 단위로 관리를 하기 때문에 데이터 관리가 더 편해진다. 🛠️ 샤딩 샤..
[개발 일기] 2025.05.11 - Redis 만료 원리
·
개발 일기
💡 개요 오늘은 Redis에서 키가 삭제되는 원리에 대해 정리해 보자. 🛠️ Redis 키 삭제 원리 Redis의 키 삭제 방법은 크게 Lazy Expiration (지연 만료)와 Active Expiration (적극 만료)가 있다. ⚙️ Lazy Expiration (지연 만료) 지연 만료란, 클라이언트가 키에 접근할 때, 해당 키가 만료되었으면 그때 삭제하는 것이다. 그렇기 때문에 따로 삭제하는 작업을 수행할 필요가 없다. ⚙️ Active Expiration (즉시 만료) Redis 서버는 초당 10번(기본 값) expire cycle을 실행한다. 각 사이클 과정은 다음과 같다. TTL이 설정된 키 공간에서 임의의 키 20개를 조사한다.만료된 키들을 삭제한다.만약 삭제된 키가 25..
[개발 일기] 2025.05.10 - Bulk을 사용한 저장이 하나씩 저장하는 것 보다 빠른 이유
·
개발 일기
💡 개요 Bulk을 사용한 저장이 하나씩 저장하는 것보다 빠른 이유에 대해 정리해 보자. 🛠️ Bulk Bulk을 사용한 저장이란, 여러 데이터를 한번에 모아 저장하는 것을 말한다. 일반적으로 Batch Insert나 Bulk Insert 등으로 표현된다. 하나씩 저장for (User user : userList) { userRepository.save(user);} 한번에 모아 저장userRepository.saveAll(userList); 한 번에 저장하는 방식이 성능 면에서 유리한 이유는 무엇일까? 가장 큰 이유는 지연 시간 감소에 있다. 일반적으로 데이터베이스는 데이터를 저장할 때 트랜잭션을 사용한다. 데이터를 하나씩 저장하면 그에 따라 커밋도 여러 번 발생하게 되고, 이..
[개발 일기] 2025.05.09 - MIME
·
개발 일기
💡 개요 오늘은 데이터를 주고받을 때 사용되는 데이터 타입인 MIME에 대해 정리해 보자. 🛠️ MIME MIME(Multipurpose Internet Mail Extensions)은 이메일을 비롯한 인터넷을 통한 데이터 전송에서 텍스트 이외의 다양한 형식의 데이터를 전송할 수 있게 해주는 표준이다. 보통 이메일을 전송할 땐 내부에 텍스트 뿐만 아니라 파일을 전송하는 경우가 많다. 그래서 첨부파일과 같은 데이터는 MIME을 사용해 영문과 숫자 조합으로 변환하여 메일 본문 내부에 포함하면, 마치 첨부파일을 텍스트 데이터처럼 처리한다. 한글로 작성된 메일은 7비트 US-ASCII로 표현을 못하기 때문에 위와 같은 방법으로 MIME을 활용하고 있다. 실제로 MIME을 사용한 메일 데이터를 보면..