분류 전체보기 6

Spring Data JPA에서 NPE를 방지하는 Optional 활용법

들어가며public String getBookTitle(Long id) { Book book = bookRepository.findById(id); return book.getTitle(); // book이 null이면?} Spring Data JPA의 findById()는 Optional를 반환합니다. 위 코드처럼 직접 엔티티를 반환받으려 하면 컴파일 에러가 나죠. 이 글에서는 왜 JPA가 Optional을 선택했는지, 그리고 이를 어떻게 활용해야 하는지 정리합니다. Optional이란?Optional은 "값이 있을 수도 있고 없을 수도 있다"를 명시적으로 표현하는 컨테이너입니다. 맞습니다. 슈뢰딩거의 고양이입니다. 컴파일러는 값의 존재 여부를 알 수 없으니, 런타임에 조치하라고 강제하는 ..

설계 전략 2026.01.28

JPA Auditing과 BaseEntity를 활용하여 Audit 필드 자동 관리

들어가며애플리케이션을 개발하다 보면 대부분의 테이블에 생성 시간(created_at), 수정 시간(updated_at) 컬럼을 추가하게 됩니다. 이러한 메타 정보는 데이터 추적, 장애 대응, 감사 목적으로 필수적입니다. 문제는 모든 Entity에 동일한 필드를 반복적으로 선언해야 한다는 점입니다. Entity가 10개, 20개로 늘어나면 코드 중복이 발생하고, 수정 시점에 updatedAt을 갱신하는 코드를 누락하는 실수도 생깁니다. 심지어 created_by, updated_by 라는 사용자 컬럼이라면 더 어려울 수 있습니다.@Entitypublic class User { @Id private Long id; private String name; private LocalDateTi..

설계 전략 2025.11.24

JPA 영속성 컨텍스트 이해하기

들어가며JPA는 ORM의 일종입니다. 릴레이션을(RDB) 객체와 매핑하여 객체지향적인 데이터 관리를 돕습니다. 이 방식을 자바 영속성 API로 구현하여 JPA라 부릅니다. JPA를 사용할 때 엔티티 객체의 필드 값만 변경해도 별도의 update(save등) 메서드 호출 없이 데이터베이스에 UPDATE 쿼리가 실행됩니다. 이는 영속성 컨텍스트의 변경 감지(Dirty Checking) 기능 때문입니다. 하지만 동일한 방식으로 엔티티를 수정해도 때로는 변경사항이 데이터베이스에 반영되지 않는 경우가 있습니다. 이러한 차이를 이해하려면 영속성 컨텍스트의 동작 원리를 정확히 알아야 합니다. (사실 이런 내용은 김영한이나 백기선의 유튜브와 기타 블로그들에 아주 잘 정리되어있습니다.) 영속성 컨텍스트란?JPA 명세에 ..

설계 전략 2025.11.20

스터디 2 - [Step 1] REST API 기초: HTTP 메서드로 CRUD 구현하기

들어가며Spring Boot로 웹 애플리케이션을 만들 때 가장 먼저 접하는 것이 REST API입니다. API는 프론트와 서버간 통신을 통해 소통할 수 있는 창구 입니다. 이 글에서는 REST API의 핵심 개념과 HTTP 메서드를 사용해 기본적인 CRUD를 구현하는 방법을 다룹니다. 1. REST API란?REST API는 HTTP를 사용해 데이터를 주고받는 웹 API 설계 방식입니다.핵심 아이디어:자원(Resource) 을 URL로 표현: /books, /books/1행위(CRUD) 를 HTTP 메서드로 표현: GET, POST, PUT, DELETE 등데이터를 JSON으로 주고받음구조:[웹 브라우저/앱] ─HTTP 요청→ [Spring Boot API] (클라이언트) ←HTTP 응답─ ..

스터디 기록 2025.11.18

스터디 1 - 커리큘럼과 도메인 소개

자바와 스프링을 정해진 커리큘럼에 따라 배우지는 않았습니다. 우선 일을 시작했고, 필요한 부분이 나오면 먼저 사용한 뒤에 기술을 습득했습니다. 이렇게 만들어진 퍼즐 조각들을 자바의 정석처럼 잘 작성된 책을 통해 다듬으며 청사진을 맞췄습니다.이 스터디는 자바의 정석을 기반으로 Spring Boot 개발을 효율적으로 진행하기 위한 기반 지식과 실습으로 구성되어 있습니다.막연하게 고급 주제를 훑지 않고 개념을 코드로 구현하며 왜 이렇게 동작하는지 왜 이렇게 만들어야 하는지를 실무 중심으로 체득하는 것을 목표로 합니다. 현재 진행하고 있는 스터디 목적은 다음과 같습니다.효과적으로 자바를 사용한다 - 컬렉션, 스트림, 람다를 실무 코드에서 자연스럽게 활용얕은 수준의 디자인 패턴을 이해한다 - 실무에서 자주 쓰이는..

스터디 기록 2025.11.16

컴퓨터 프로그램 만드는 일을 하고 있습니다.

작성일 기준, 3년 반쯤 되는 경력을 가지고 있습니다.대부분 도메인은 금융, 그 중에서도 시계열 데이터를 다루거나 원장 관리, 외환, 증권에 대한 업무 개발을 했고 최근에는 리눅스 시스템 프로그램을 담당하고 있습니다. 생각해보면 이 산업 구조는 참 어렵습니다. 선배들의 기록과 제 경험으로 유추해 볼 때 특정 시기마다 급격하게 인력이 수급되고 전산 드리밍에 빠진 젊은이들이 굉장히 부족한 형태로 시장에 들어옵니다. 전공을 했든 전공을 하지 않았든 시장에는 부푼 기대감으로 들어온 젊은이들이 가득합니다. 산업에 남아 있는 시니어 사이에는 공백이 있습니다. 공백의 이유를 지금은 모르지만 곧 알게 됩니다. 컴퓨터 산업이 그 자체만으로 비즈니스를 이루기는 어렵습니다. 현재까지도 극히 소수만이 안정적인 비즈니스를 내고..

스터디 기록 2025.11.14