일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- buffer
- 혼자 공부하는 C언어
- 이것이 자바다
- s
- insertion sort
- C 언어 코딩 도장
- coding test
- stream
- 메모리구조
- Algorithm
- R
- Stack
- 알기쉬운 알고리즘
- JSON
- C programming
- 윤성우 열혈자료구조
- Selection Sorting
- list 컬렉션
- 윤성우의 열혈 자료구조
- 이스케이프 문자
- Graph
- datastructure
- Serialization
- Today
- Total
목록전체 글 (514)
Engineering Note
영속성 전이, cascade- 엔티티의 상태를 변경할 때 해당 엔티티와 연관된 엔티티의 상태 변화를 전파시키는 옵션 CASCADE 종류 설명PERSIST부모 엔티티가 영속화될 때 자식 엔티티도 영속화MERGE부모 엔티티가 병할될 때 자식 엔티티도 병합REMOVE부모 엔티티가 삭제될 때 연관된 자식 엔티티도 삭제REFRESH부모 엔티티가 refresh되면 연관된 자식 엔티티도 refreshDETACH부모 엔티티가 detach되면 연관된 자식 엔티티도 detach 상태로 변경ALL부모 엔티티의 영속성 상태 변화를 자식 엔티티에 모두 전이 Order Entity가 있고, OrderItem Entity가 있을 때 Order Entity가 OrderItem Entity를 참조하고 있을 때 Order Entity..
내부 동작 흐름 정리 상황 설명 Order 엔티티가 있고, Order와 일대다 관계를 맺는 orderItem 엔티티를 cascde.all로 설정 해두었다. 이 상태에서 orderRepository.save(order)메서드를 정리하려고 한다.package com.shop.entity;import com.shop.contant.OrderStatus;import jakarta.persistence.*;import lombok.Getter;import lombok.Setter;import java.time.LocalDateTime;import java.util.ArrayList;import java.util.List;@Entity@Table(name = "orders")@Getter@Setterpublic ..
@Enumerated - JPA에서 Enum 타입을 DB에 어떤 방식으로 저장할 지 결정하는 어노테이션이다. 기본값@Enumerated(EnumType.ORDINAL) - Enum의 순서 0, 1, 2 로 DB에 저장 예시public enum OrderStatus { ORDER, CANCEL} 주문 상태를 나타내는 상수 Enum이 있다고 했을 때DB 저장시 ORDER = 0, CANCEL = 1로 DB에 저장된다.나중에 Enum에 새로운 값이 추가되면 DB의 값이 꼬이는 문제가 발생한다. public enum OrderStatus { ORDER, SHIPPED, CANCEL} DB에서 CANCEL이 1로 저장된 값이 있지만, SHIPPED가 추가된 이후에는 SHIPPED가 1이 되어 버린다. ..
상황 설명 프로젝트 초기에는 단일 application.yml 파일에서 MySQL 데이터베이스 연결 정보를 관리했다. 개발을 진행하면서 단위 테스트의 중요성을 깨닫고 H2 인메모리 데이터베이스를 활용한 테스트 환경을 구축하게 되었다. 이를 위해 테스트 전용 설정 파일인 application-test.yml을 추가하여 두 개의 설정 파일로 데이터베이스 정보를 분리 관리했다.프로젝트 규모가 커지고 레거시 코드가 증가하면서 중복 코드 제거 작업을 진행했다. 이 과정에서 기존 application.yml에는 서버 포트와 로그 설정 정보만 남기고, MySQL 로컬 연결 정보는 새로 생성한 application-local.yml로 분리했다.최종적으로 설정 파일은 다음과 같이 구성했다:application.yml: ..
시큐 리티 의존성 추가 maven org.springframework.boot spring-boot-starter-security gradle// https://mvnrepository.com/artifact/org.springframework.security/spring-security-coreimplementation group: 'org.springframework.security', name: 'spring-security-core', version: '6.5.3' package com.shop.config;import org.springframework.context.annotation.Bean;import org.springframework.cont..
문제 상황Spring Security를 사용한 로그인 기능 테스트 중 인증이 실패하는 문제가 발생했습니다. 테스트 실행 시 loadUserByUsername 메소드에 null 값이 전달되어 회원을 찾을 수 없다는 오류가 발생했다.환경 설정HTML 로그인 폼 이메일주소 비밀번호 로그인 Security 설정.formLogin(form -> form .loginPage("/members/login") .defaultSuccessUrl("/") .usernameParameter("email") // 중요: form의 name="email"과 매핑 .failureUrl("/members/login/..
동시성 문제 테스트 환경 구축기문제 정의상품 주문 로직을 개발하다 보면 여러 사용자가 동시에 주문을 하거나, 한 사용자가 네트워크 오류·중복 클릭 등으로 동일한 주문이 여러 번 요청될 수 있습니다. 이런 경우 재고가 음수로 내려가거나, 중복 주문이 발생하는 장애가 생길 수 있습니다.하지만 JUnit 테스트에서 이런 동시 요청 상황을 시뮬레이션할 도구가 마땅치 않아, 직접 간단한 테스트 도구를 구현하기로 했습니다.해결 방법JUnit 환경에서 Thread Pool을 활용해 멀티쓰레딩 동시 요청을 구현했습니다.ExecutorService executor = Executors.newFixedThreadPool(10);ExecutorService를 이용해 직접 new Thread()를 만들지 않고 쓰레드 풀 방식..
문제 정의 상품 조회 기능을 개발할 때, JPA의 쿼리메서드를 사용하여 개발하면 성능의 문제는 없을지 문제의식을 가졌고, 직접 실험해보면서 문제를 해결하였습니다.상품 조회 Pagination 기능을 개발할 때, findall JPA 쿼리 메서드를 사용한 Pagination과 Cursor 기반 Pagination에 대해 실제 실행되는 Query를 비교하고 성능 측정하여, 어떤 문제가 발생하는지 확인하고 적합한 Pagination 기능을 위한 기술을 선택하게 된 과정. 개발환경- Java(17), Spring Boot(3), MySQL(9.0), JPA/Hibernate 상황설명JPA의 Pageable 타입을 매개변수로 받는 findall를 이용한 페이지 조회에서 무한스크롤 지원 API를 위해 조회 성능 ..