전체 글 57

[JPA] JPA로 페이지네이션 구현하기

페이지네이션(Pagination)은 대량의 데이터를 나눠서 클라이언트에게 전달할 수 있도록 하는 중요한 기능입니다. 이번 글에서는 Spring Data JPA를 활용하여 페이지네이션을 간단히 구현하는 방법입니다.1. 페이지네이션이란?페이지네이션은 데이터베이스로부터 데이터를 한 번에 모두 가져오지 않고, 원하는 크기만큼 나눠 가져오는 기능을 말합니다. 이를 통해 서버 성능을 최적화하고, 클라이언트에서는 필요한 만큼의 데이터를 효율적으로 처리할 수 있습니다.예시한 번에 1000개의 데이터를 가져오는 대신, 한 페이지에 10개의 데이터를 표시하고, 원하는 페이지 번호를 선택해 데이터를 나눠서 가져옵니다.2. JPA에서 페이지네이션 기본 구조Spring Data JPA는 페이지네이션을 지원하는 기본 메서드를 제..

Spring 2025.01.04

[Spring JPA] 영속성 동작하지 않을 때의 원인과 해결법

이전에 작업했던 프로젝트를 마이바티스에서 JPA로 전환하는 작업 중 데이터를 호출한 후 값을 변경했지만, 실제 데이터베이스에는 save()를 직접 사용하지 않으면 변경된 값이 저장되지 않는 문제가 발생했습니다.JPA를 사용하면서 트랜잭션 어노테이션을 생략한 실수를 통해 영속성 컨텍스트와 트랜잭션의 상호작용을 깊이 이해할 수 있었습니다. 이 글에서는 그 경험을 바탕으로 트랜잭션 어노테이션이 필요한 이유와 깨달은 점을 공유합니다.1. 문제가 발생한 상황JPA를 사용하는 메서드에 평소처럼 데이터를 수정하는 작업을 수행했습니다. 코드 예시는 다음과 같습니다:@Servicepublic class UserService { @Autowired private UserRepository userReposito..

문제 및 해결 2024.12.16

코드 커버리지(Code Coverage)란 무엇일까?

오늘 코드를 테스트하면서 "내가 작성한 테스트가 얼마나 효과적으로 작동하고 있을까?"라는 생각이 들었습니다. 이 질문에 답을 찾던 중, 코드 커버리지(Code Coverage)라는 개념을 알게 되었고, 이를 공부하며 배운 점들을 정리해 보았습니다.1. 코드 커버리지란?코드 커버리지는 테스트 코드가 애플리케이션의 소스 코드를 얼마나 실행했는지를 측정하는 지표입니다. 즉, "테스트가 코드의 몇 퍼센트를 실행했는가?"를 숫자로 나타내는 도구라고 이해하면 됩니다.예를 들어, 100줄짜리 코드 중 테스트가 70줄을 실행했다면, 코드 커버리지는 70%입니다.코드 커버리지를 측정하면 아래와 같은 질문에 답을 얻을 수 있습니다:테스트가 코드의 중요한 부분을 충분히 검증하고 있는가?테스트되지 않은 코드가 존재하는가?2...

궁금증 2024.12.16

[SQL] JOIN의 종류와 각 JOIN의 성능차이

데이터베이스를 다루다 보면, 여러 테이블에서 데이터를 가져와야 할 때가 있습니다. 이때 사용하는 것이 JOIN입니다. 하지만 JOIN의 종류에 따라 처리 방식이 다르고, 성능에도 영향을 미칠 수 있습니다. 이번 글에서는 SQL JOIN의 종류와 성능 차이에 대해 알아보겠습니다1. SQL JOIN의 종류1) INNER JOIN정의: 두 테이블 간의 공통값이 있는 행만 반환합니다.특징: 조건에 맞는 데이터만 반환하므로 불필요한 데이터가 적습니다.SELECT A.col1, B.col2FROM TableA AINNER JOIN TableB BON A.id = B.id;id 값이 일치하는 행만 결과에 나옵니다.2) LEFT JOIN (또는 LEFT OUTER JOIN)정의: 왼쪽 테이블의 모든 행을 반환하며, 오..

DB 2024.12.16

DDD에서 팩토리(Factory)를 왜 사용하는거죠?

도메인 주도 설계(DDD, Domain-Driven Design)를 공부하다 보면 "팩토리"라는 개념을 만나게 됩니다. 팩토리는 단순히 객체를 생성하는 역할을 넘어, 객체 생성 과정에서 발생하는 복잡성을 캡슐화하여 코드의 응집도를 낮추고 가독성을 높이는 설계 도구입니다. 이번 글에서는 제가 이해한 DDD에서 팩토리가 왜 필요한지, 언제 사용해야 하는지, 그리고  실제 예제를 통해 이해하기 쉽게 설명드리겠습니다.1. 팩토리는 무엇인가요?팩토리는 DDD에서 복잡한 객체 생성을 담당하는 클래스나 메서드를 의미합니다. 단순한 객체 생성은 생성자(Constructor)로 충분할 수 있지만, 다음과 같은 상황에서는 팩토리를 사용하는 것이 더 적합합니다:객체 생성 과정이 복잡하거나 외부 데이터를 참조해야 할 때생성 ..

궁금증 2024.12.15

TDD vs DDD: 개발을 바라보는 두 가지 시선

프로젝트를 진행하면서 TDD(Test-Driven Development)와 DDD(Domain-Driven Design)에 대해 궁금증이 생겨 스스로 공부한 내용을 공유하고자 합니다. 이 글에서는 TDD와 DDD의 정의와 차이를 설명하고, 실제 프로젝트에서 사용할 수 있는 CRUD 코드 예시를 통해 각 방법론의 적용 방식을 소개하겠습니다. 또한, 어제 TDD를 지향하는 개발자분과 나눈 이야기를 바탕으로 TDD를 실제 어떤식으로 적용하는지도 다뤄보겠습니다.1. TDD란 무엇인가?TDD는 "테스트를 먼저 작성하고, 이를 통과시키기 위해 코드를 작성하는" 개발 방법론입니다. 코드의 안정성과 신뢰성을 높이고, 리팩토링 과정에서도 기존 기능이 정상적으로 동작하는지 확인할 수 있다는 장점이 있습니다.TDD의 세 가..

궁금증 2024.12.15

@Transactional(readOnly = true)란?

트랜잭션은 데이터베이스 작업에서 데이터의 일관성을 유지하고 오류 발생 시 롤백을 보장하는 중요한 개념입니다. Spring Framework는 이러한 트랜잭션 관리를 단순화하기 위해 @Transactional 어노테이션을 제공합니다.그중에서도 @Transactional(readOnly = true)는 읽기 전용 작업에서 성능을 최적화할 수 있는 옵션으로, 데이터 조회를 최적화하고 불필요한 쓰기 락을 방지하는 데 유용합니다.@Transactional(readOnly = true)란 무엇인가?기본 정의:readOnly = true는 트랜잭션을 읽기 전용 모드로 설정하는 옵션입니다. 이는 데이터 변경 없이 조회 작업만 수행할 때 사용됩니다.기본 동작:데이터 조회 성능 최적화: Hibernate와 같은 ORM에서..

Spring 2024.12.13

JPA (Java Persistence API)란?

JPA(Java Persistence API)는 Java 개발자가 데이터베이스 작업을 객체 지향적으로 처리할 수 있도록 지원하는 표준 사양입니다. SQL을 직접 작성하는 대신, 데이터베이스 테이블과 자바 객체(Entity)를 매핑하여 작업할 수 있도록 돕습니다. JPA는 인터페이스를 정의한 스펙이며, Hibernate, EclipseLink 등 다양한 구현체가 존재합니다.1. JPA의 핵심 개념(1) ORM (Object-Relational Mapping)객체와 관계형 데이터베이스를 자동으로 매핑합니다.SQL 중심이 아닌, 엔티티 객체 중심으로 데이터를 다룹니다.(2) Entity데이터베이스 테이블과 매핑되는 클래스입니다.예: @Entity 어노테이션을 통해 매핑 선언.@Entitypublic class..

Spring 2024.12.10

[SQL] Join vs SubQuery: 언제, 왜, 어떻게 선택할까?

며칠 전, 다대다 면접에서 면접관 한 분이 저에게 물었습니다."혹시 조인과 서브쿼리 중 어떤 것이 성능이 더 좋나요?"순간 잠시 생각을 한 뒤 이렇게 대답했습니다:"많은 양의 데이터를 다루지 않는 이상 서브쿼리와 조인의 성능 차이를 알아채는 것은 어렵다고 생각합니다. 하지만, outer join처럼 테이블 간의 데이터를 결합해야 하는 경우에는 서브쿼리는 내부 함수를 사용하거나 조건문을 작성해야 해서 SQL 구조가 직관적이지 않을 수 있습니다. 이는 성능뿐만 아니라 코드의 협업 측면에서도 JOIN보다 적합하지 않다고 생각합니다."당시에는 비교적 자신 있게 대답했지만, 며칠이 지나고 문득 궁금해졌습니다. 정말 내 대답이 옳았을까? JOIN과 서브쿼리의 차이점과 성능은 실제로 어떻게 다를까? 그래서 이번 기회..

궁금증 2024.12.09

[VUE] 카카오 맵 api... 로딩 안되는 문제 해결

카카오 맵이 갑자기 로딩되지 않고 화면에 표시되지 않는 문제가 발생했습니다. 이전에 분명 정상 작동하던 코드였기에, 혹시 버전 변경으로 인한 문제일까 싶어 코드를 수정하고 다시 실행해봤지만 결과는 달라지지 않았습니다. 이 문제를 해결하기 위해 3~4시간 동안 검색하고 코드를 수정해봤지만 소용이 없었습니다. 결국 API 키와 관련 문서를 다시 확인하러 카카오 디벨로퍼스 사이트에 들어갔는데, 문제의 원인을 발견했습니다. 오랜 기간 사용하지 않은 탓에 API Key가 비활성화되어 있던 것입니다. (그것도 6일전에..)만약 카카오 맵이 표시되지 않는 문제를 겪으신다면, 코드 수정 전에 API Key의 활성 상태를 먼저 확인해보시길 권장합니다. 이 단순한 점검이 시간과 스트레스를 크게 줄여줄 수 있습니다.  어쩐..

문제 및 해결 2024.12.07