분류 전체보기 243

[Spring] JPA Auditing, BaseEntity

JPA Auditing 'Audit'란 '감시하다'라는 뜻으로, 각 데이터마다 '누가', '언제' 데이터를 생성했고 변경했는지 감시한다는 의미로 사용됩니다. 엔티티 클래스에는 공통적으로 들어가는 필드가 있을 수 있습니다. 예를 들어, '생성 일자'와 '변경 일자', '생성 주체'와 '변경 주체' 같은 것 입니다. 이러한 필드들은 매번 엔티티별로 생성하거나 변경할 때 값을 주입해야 하는 번거로움이 있습니다. 이 같은 번거로움을 해소하기 위해 Spring Data JPA에서는 이러한 값을 자동으로 넣어주는 기능을 제공합니다. JPA Auditing 기능 활성화 @EnableJpaAudting @EnableJpaAuditing 어노테이션은 JPA Auditing을 활성화하는 역할을 합니다. 이 어노테이션은 @..

Development/Spring 2024.03.03

[Spring] QueryDSL

QueryDSL QueryDSL은 정적 타입을 이용해 SQL과 같은 쿼리를 생성할 수 있도록 지원하는 프레임워크 문자열이나 XML파일을 통해 쿼리를 작성하는 대신 QueryDSL이 제공하는 플루언트(Fluent) API를 활용해 쿼리를 생성할 수 있다. QueryDSL의 장점 IDE가 제공하는 코드 자동 완성 기능을 사용할 수 있다. 문법적으로 잘못된 쿼리를 허용하지 않는다. 따라서 정상적으로 활용된 QueryDSL은 문법 오류를 발생시키지 않는다. 고정된 SQL 쿼리를 작성하지 않기 때문에 동적으로 쿼리를 생성할 수 있다. 코드로 작성하므로 가독성 및 생산성이 향상된다. 도메인 타입과 프로퍼티를 안전하게 참조할 수 있다. QueryDSL 의존성 추가하기 Spring 3.x.x이상, Java 21, Gr..

Development/Spring 2024.03.01

[Spring] JPA의 정렬과 페이징 처리

정렬 처리하기 일반적인 쿼리문에서 정렬을 사용할 때는 ORDER BY 구문을 사용합니다. 쿼리 메서드도 정렬 기능에 동일한 키워드가 사용됩니다. // ASC: 오름차순, DESC: 내림차순 List findByNameOrderByNumberAsc(String name); List findByNameOrderByNumberDesc(String name); 위와 같이 기본 쿼리 메서드를 작성한 후 OrderBy 키워드를 삽입하고 정렬하고자 하는 칼럼과 오름차순/내림차순을 설정하면 정렬이 수행됩니다. 여러 정렬 조건을 사용하기 위해선 다음과 같이 작성할 수 있습니다. List findByNameOrderByPriceAscStockDesc(String name); 위 코드에서 먼저 Price를 우선으로 오름차순..

Development/Spring 2024.02.29

[Database] 인스타그램의 Justin Bieber 문제

️Justin Bieber 문제Justin Bieber 문제는 인스타그램에서 저스틴 비버가 사진을 업로드할 때 마다 인스타그램이 다운되거나 매우 느려지는 현상을 말합니다.이는 그 당시 인스타그램의 '좋아요' 수를 계산하는 방식 때문이었습니다. 인스타그램에서는 어떤 유저가 언제 어떤 사진에 '좋아요'를 클릭했는지 알 수 있습니다.그래서 저스틴 비버의 팔로워들에게 그의 최신 사진을 표시할 때 해당 사진을 본 모든 사람에 대해 '좋아요' 수를 최신화된 수치로 보여주어야 했습니다.  '좋아요' 수를 계산하기 위한 테이블로 다음과 같은 DB 테이블를 구성해보겠습니다.Photosidtitleuser_idfile_url1Photo A2http://example.com/photo1.jpg2Photo B3http://e..

[Spring] JPQL (JPA Query Language)과 쿼리 메서드

JPQL (JPA Query Language) JPQL은 JPA Query Language의 줄임말로 JPA에서 사용할 수 있는 쿼리를 의미합니다. JPQL의 문법은 SQL과 매우 유사하여 데이터베이스 쿼리에 익숙하다면 쉽게 사용할 수 있습니다. SQL과의 차이점은 SQL에서는 테이블이나 칼럼의 이름을 사용하는 것과 달리 JPQL은 엔티티 객체를 대상으로 수행하는 쿼리이기 때문에 매핑된 엔티티의 이름과 필드의 이름을 사용해야 합니다. SELECT p FROM Product p WHERE p.number = ?1; 위 문장에서 Product는 엔티티 클래스 이름, p.number는 엔티티의 속성입니다. 리포지토리 쿼리 메서드 생성하기 쿼리 메서드는 크게 동작을 결정하는 주제(Subject)와 서술어(Pre..

Development/Spring 2024.02.28

[Database]DB 정규화(normalization)개념과 정규화 과정(Normal form), 1NF ~ BCNF

데이터베이스 정규화와 Normal Form 테이블 정규화는 중복 데이터와 데이터 업데이트 충돌을 최소화하기 위해, 일련의 normal forms(NF)에 따라 relational DB를 구성하는 과정 Normal Form(NF)이란 정규화 과정에서 준수해야 하는 규칙들이며, 처음부터 순차적으로 진행하며 normal form을 해당 규칙을 모두 만족할 때 1NF부터 BCNF까지 적용할 수 있다. 1NF와 BCNF는 functional dependency와 key로만 정의될 수 있다. 1NF부터 BCNF까지 를 만족하면 데이터베이스가 정규화됐다고 말하기도 하며, 일반적으로 실무에서는 3NF 혹은 BCNF까지만 진행하는 경우가 많다. 5NF나 6NF 같은 경우에는 대부분의 경우 발생하지 않으며, 상당히 복잡하..

[Tip] KPT(Keep, Problem, Try) 방식으로 프로젝트 회고하기

회고(retrospective)를 해보자 프로젝트가 끝나면 회고를 하는 것이 중요합니다. 이번에 한 프로젝트의 좋은 점과 고칠 점을 파악하여, 다음 프로젝트에서 더 나은 결과물을 만드는데 도움이 되기 때문입니다. 과거에 발생한 문제를 미래에 대비하기 위해 새로운 방법과 넓은 시야를 얻을 수 있고, 스스로 성장할 기회를 얻을 수 있습니다. 이 글에서는 회고를 하는 방법중 하나인 KPT(Keep, Problem, Try) 회고 방법에 대해서 소개하려 합니다. K-P-T(Keep, Problem, Try) Keep 이 단계에서는 프로젝트를 진행하면서 실용적이거나, 성공적인 성과들을 나열합니다. 긍정적인 요소들, 가치있는 배움들이 포함될 수 있습니다. 예를 들어, 다음 내용이 포함될 수 있습니다. 꾸준히 테스트..

Development/Tip 2024.02.25

[Development] 테스트 주도 개발 (Test-Driven Development)

테스트 주도 개발 (Test-Driven Development) TDD란 Test-Driven Development의 줄임말로 '테스트 주도 개발'이라는 의미를 가지고 있습니다. 테스트 주도 개발은 반복 테스트를 이용한 소프트웨어 개발 방법론으로서 테스트 코드를 먼저 작성한 후 테스트를 통과하는 코드를 작성하는 과정을 반복하는 소프트웨어 개발 방식입니다. 애자일 방법론 중 하나인 익스트림 프로그래밍(eXtream Programming)의 Test-First 개념에 기반을 둔, 개발 주기가 짧은 개발 프로세스로 단순한 설계를 중시합니다. 애자일 소프트웨어 개발 방법론(Agile Development)과 익스트림 프로그래밍(Extreme Programming) 애자일은 신속한 반복 작업을 통해 실제 작동 가..

[Spring] 스프링 부트에서 테스트 코드 작성하기

스프링 부트의 테스트 설정 스프링 부트는 테스트 환경을 쉽게 설정할 수 있도록 spring-boot-starter-test 프로젝트를 지원한다. 이 프로젝트를 사용하려면 의존성을 추가해야 한다. Gradle (build.gradle) dependencies { ... testImplementation 'org.springframework.boot:spring-boot-starter-test' } Maven (pom.xml) org.springframework.boot spring-boot-starter-test test 스프링 부트에서 제공하는 spring-boot-starter-test 라이브러리는 JUnit, Mockito, assertJ등의 다양한 테스트 도구를 제공한다. spring-boot-st..

Development/Spring 2024.02.23