본문 바로가기

전체 글

(178)
[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..
[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] 테스트 주도 개발 (Test-Driven Development) 테스트 주도 개발 (Test-Driven Development) TDD란 Test-Driven Development의 줄임말로 '테스트 주도 개발'이라는 의미를 가지고 있습니다. 테스트 주도 개발은 반복 테스트를 이용한 소프트웨어 개발 방법론으로서 테스트 코드를 먼저 작성한 후 테스트를 통과하는 코드를 작성하는 과정을 반복하는 소프트웨어 개발 방식입니다. 애자일 방법론 중 하나인 익스트림 프로그래밍(eXtream Programming)의 Test-First 개념에 기반을 둔, 개발 주기가 짧은 개발 프로세스로 단순한 설계를 중시합니다. 애자일 소프트웨어 개발 방법론(Agile Development)과 익스트림 프로그래밍(Extreme Programming) 애자일은 신속한 반복 작업을 통해 실제 작동 가..
[개발 일기] 이게 왜 null이 아니야 (영속성 컨텍스트에서 같은 Entity를 참조!) 테스트 코드 공부 중에 의아한 점.Product givenProduct = Product.builder() .name("note") .price(1000) .stock(500) .build(); System.out.println("before save = " + givenProduct.getNumber()); // when Product savedProduct = productRepository.save(givenProduct); // then System.out.println("after save = " + givenProduct.ge..
[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..
[Java] Logback - 로깅 라이브러리 Logging Logging(로깅)이란 애플리케이션이 동작하는 동안 시스템의 상태나 동작 정보를 시간순으로 기록하는 것을 의미합니다. 로깅은 개발 영역 중 '비기능 요구사항'에 속합니다. 즉 필수적인 기능은 아니나, 로깅은 디버깅하거나 갭라 이후 발생한 문제를 해결할 때 원인을 분석하는 데 유용합니다. 자바 진영에서 가장 많이 사용되는 Logging 프레임워크는 Logback입니다. Logback Logback은 *log4j 이후에 출시된 로깅 프레임워크로서 *slf4j를 기반으로 구현됐으며, 과거에 사용되던 Log4j에 비해 월등한 성능을 자랑합니다. *log4j: Apache log4j는 Java 기반의 로깅 유틸리티로서, 로그를 파일, 콘솔, HTML, 데이터베이스 등 다양한 대상에 출력할 수 있습..
[Java] immutable(불변) 객체란? 자바에서 불변(Immutable) 객체에 대한 이해 가변 객체는 상태 정보를 변경할 수 있어 불안정하고, 작업 전후에 일일이 코드를 확인하거나 DB를 호출해야한다. 하지만 불변 객체는 한번 만들어지면 상태가 변경되지 않아 안정적인 개발이 가능하다. 불변(Immutable)객체는 생성 이후에 상태가 변하지 않는 객체이다. 불변 객체는 중복 제거의 장점을 가지며, 안전한 서비스 개발에 도움이 된다. 예를 들어 DB에서 객체 정보를 받아와 작업할 때, 의도치 않게 불변 객체의 정보를 변경하려는 경우 불변 객체를 사용하면 이를 방지할 수 있다. 또한 map, set, cache에 쓰기에 적절하다. 불변 객체를 사용하면 Thread-safe의 장점이 있다. 데이터 불일치 역시 없어, 안전하게 여러 셀에서 상태정보..