| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 윤성우의 열혈 자료구조
- stream
- 메모리구조
- 알기쉬운 알고리즘
- Algorithm
- Stack
- C programming
- R
- JSON
- buffer
- 윤성우 열혈자료구조
- s
- C 언어 코딩 도장
- coding test
- datastructure
- Graph
- 이스케이프 문자
- list 컬렉션
- Serialization
- 이것이 자바다
- 혼자 공부하는 C언어
- insertion sort
- Selection Sorting
- Today
- Total
목록Tech (519)
Engineering Note
본 포스팅은 인프런 김영한님의 강의를 보고 정리한 글입니다. 강의의 목표는 지연로딩으로 발생하는 문제(N+1문제)의 원인을 알아보고 해결하는 것입니다. 강의보고 흐름 그대로 정리한 글 Order Entitypackage jpabook.jpashop.domain;import static jakarta.persistence.FetchType.LAZY;import jakarta.persistence.CascadeType;import jakarta.persistence.Column;import jakarta.persistence.Entity;import jakarta.persistence.EnumType;import jakarta.persistence.Enumerated;import jakarta.persi..
이번 포스팅은 인프런의 김영한님의 JPA 컬렉션 최적화 강의를 보고 정리한 글입니다.이커머스 프로젝트에서 Entity는 Order, Member, OrderItem, Item, Delivery Entity가 있고, 주문내역을 조회하는 상황입니다. package jpabook.jpashop.domain;import static jakarta.persistence.FetchType.LAZY;import jakarta.persistence.CascadeType;import jakarta.persistence.Column;import jakarta.persistence.Entity;import jakarta.persistence.EnumType;import jakarta.persistence.Enumerate..
TF-IDF(Term Frequency–Inverse Document Frequency)- 텍스트 데이터를 수치화할 때, 단어의 중요도를 계산하기 위해 사용되는 방법 TF-IDF를 사용하는 대표적인 경우문서 검색 및 정보 검색(IR, Information Retrieval)사용자가 검색한 키워드와 문서의 관련성을 계산할 때 사용예: 검색 엔진에서 “네이버 쇼핑” 검색 시, 문서마다 키워드 중요도를 계산해 순위를 매김문서 요약 / 핵심 키워드 추출문서에서 중요한 단어나 주제를 뽑아내고 싶을 때예: 뉴스 기사에서 핵심 키워드만 추출텍스트 분류 / 머신러닝 입력 데이터 생성문서를 벡터화해서 ML 모델에 넣고 싶을 때예: 이메일 스팸 분류, 감성 분석유사도 계산두 문서 간의 유사도를 계산할 때 TF-IDF 벡터..
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. 문제 상황1.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..
엔지니어는 문제를 해결하는 사람입니다. 문제를 어떻게 정의하느냐에 따라 해결의 방향이 달라집니다. 문제 정의 테스트 코드가 없다 보니 새로운 기능 개발이나 리팩토링을 시도할 때 주저하게 되고, 그 결과 코드가 점점 더 복잡해지는 악순환이 발생했습니다. 리팩토링의 목적은 기존 코드에 영향을 주지 않으면서 유지보수와 확장성이 용이한 구조로 개선하는 것입니다. 하지만 리팩토링 범위를 어디까지 설정할지, 수정 후 어떻게 검증할지 불확실한 상황에서는 설계 범위를 정하는 것 자체가 부담이 되고, 결국 리팩토링이 계속 미뤄지게 됩니다. 핵심 문제는 테스트 코드의 부재로 인해 새로운 기능 적용과 코드 구조 개선에 대한 확신을 가질 수 없다는 것입니다.해결 방안 이 문제의 해결책은 테스트 코드 작성입니다. 테스트 코드를..