| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
- 윤성우 열혈자료구조
- C 언어 코딩 도장
- buffer
- Serialization
- Stack
- insertion sort
- list 컬렉션
- 윤성우의 열혈 자료구조
- 알기쉬운 알고리즘
- C programming
- 이것이 자바다
- Selection Sorting
- Algorithm
- 이스케이프 문자
- 메모리구조
- JSON
- coding test
- Graph
- datastructure
- 혼자 공부하는 C언어
- R
- s
- stream
- Today
- Total
목록전체 글 (516)
Engineering Note
CommandLineRunner- 스프링부트가 실행되고 트래픽을 받기전 실행하고 싶은 코드가 있을 때 사용하는 인터페이스 사용 예시package com.example.demo;import com.example.demo.entity.Member;import com.example.demo.repository.MemberRepository;import lombok.RequiredArgsConstructor;import org.springframework.boot.CommandLineRunner;import org.springframework.stereotype.Component;import java.time.LocalDateTime;@Component@RequiredArgsConstructorpublic c..
Native Query로 작성한 코드를 QueryDsl로 리팩토링하는 과정에서 테스트코드를 작성하고 성능 측정하는 상황에서 N+1문제 상황을 발견하여 문제를 해결한 과정을 정리하려고 한다. 문제 상황을 먼저 소개하면 사용자가 주문내역을 조회 하는 코드에서 여러 테이블을 조인하고 있었고 이 과정에서 쿼리가 예상보다 많이 요청되는 JPA의 N+1문제라고 하는 문제가 발생해서 코드를 개선한 과정을 정리하였습니다. N+1문제를 통한 현재의 직접적인 성능의 문제는 없었지만, 데이터가 늘어나면 결국 Disk I/O로 인한 성능 저하 문제가 발생할 것으로 예상하여 코드를 개선하기로 결정하였습니다. 목차1. 문제 상황2. N+1 문제 발생 원인3. 1차 해결 시도(실패)4. 최종 해결 방법5. 성능 테스트 1. 문제 ..
OCP(Open Closed Principle): 개방-폐쇄 원칙은 소프트웨어 구성요소(클래스, 모듈, 삼수 등)는 확장에는 개방적이어야 하고, 수정에는 폐쇄적이어야 한다는 원칙입니다. 즉, 기존의 코드를 변경하지 않고도 시스템의 기능을 확장할 수 있어야 합니다.OCP를 적용하면, 기존 코드를 변경하지 않고도 새로운 기능을 추가할 수 있습니다. 이는 유지보수성과 재사용성을 향상시키는데 도움이 됩니다. 구현 방법: OCP를 적용하기 위해선 다형성을 활용하는 것이 일반적입니다. 인터페이스나 추상 클래스를 사용하여 확장 가능한 부분을 정의하고, 구체적인 구현은 별도의 클래스에서 제공하는 방식입니다. public interface PaymentMethod{ void pay(amount);}public clas..
DIP(Dependency Injection Principle): 의존성 역전 원칙은 객체지향 소프트웨어 설계원칙인 SOLID 원칙 중 하나로, 어떤 모듈이 다른 모듈에 의존해야할 때 구체화(구현)가 아니라 추상화(인터페이스)에 의존하도록 설계하는 원칙(추상클래스나 인터페이스에 의존하도록 설계) DIP의 구현 방법: 의존성 역전 원칙을 구현하는 방법에는 인터페이스나 추상 클래스를 사용하여, 구현 세부 사항에 대한 의존성 대신 추상화에 의존하도록 할 수 있습니다. public interface DataRepository{ void save(Object object);}public class FileDataRepository implements DataRepository{ public void save..
엔지니어는 문제를 해결하는 사람입니다. 문제를 어떻게 정의하느냐에 따라 해결의 방향이 달라집니다. 문제 정의 테스트 코드가 없다 보니 새로운 기능 개발이나 리팩토링을 시도할 때 주저하게 되고, 그 결과 코드가 점점 더 복잡해지는 악순환이 발생했습니다. 리팩토링의 목적은 기존 코드에 영향을 주지 않으면서 유지보수와 확장성이 용이한 구조로 개선하는 것입니다. 하지만 리팩토링 범위를 어디까지 설정할지, 수정 후 어떻게 검증할지 불확실한 상황에서는 설계 범위를 정하는 것 자체가 부담이 되고, 결국 리팩토링이 계속 미뤄지게 됩니다. 핵심 문제는 테스트 코드의 부재로 인해 새로운 기능 적용과 코드 구조 개선에 대한 확신을 가질 수 없다는 것입니다.해결 방안 이 문제의 해결책은 테스트 코드 작성입니다. 테스트 코드를..
에러메세지jakarta.persistence.TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process 'flush' call at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:304) at jdk.proxy2/jdk.proxy2.$Proxy157.flush(Unknown Source) at com.shop.repository.ItemRepositoryT..
Spring Data JPA를 이용해서 별도의 코드 없이도 CRUD가 실행 가능한 기능뿐 아니라 개발자들에게는 개발 속도를 빠르게 하는 페이징 처리 기능을 제공합니다.페이징 처리는 Pageable이라는 타입의 객체를 구성해서 파라미터로 전달하면 됩니다. Pageable은 인터페이스로 설계되어 있고, 일반적으로는 PageRequest.of()라는 기능을 이용해서 개발이 가능합니다. PageRequest.of(페이지 번호, 사이즈): 페이지 번호 0 부터PageRequest.of(페이지 번호, 사이즈, Sort): 정렬 조건 추가PageRequest.of(페이지 번호, 사이즈, Sort.Direction, 속성): 정렬 방향과 여러 속성 지정 파라미터로 Pageable을 이용하면 리턴 타입은 Page 타입을..
연관관계 주인JPA에서 양방향 관계로 Entity가 있을 때 외래키를 관리해줄 주인을 정해주어야 한다. JPA는 연관관계의 주인이 어떤 Entity라고 지정하지 않고 연관관계 주인이 아니라는 의미로 'mapped by' 옵션으로 외래키를 관리 하지 않는다고 지정한다.Book과 BookStore 엔티티를 예시로 생각해볼 수 있다. Book과 BookStores는 다대일 관계고, 양방향으로 세팅을 해주었다. Book Entity@Entity@Getter @Setterpublic class Book { @Id @GeneratedValue private Long id; private String isbn; private String title; @ManyToOne priva..