| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 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 | 
- stream
 - Stack
 - insertion sort
 - s
 - 메모리구조
 - datastructure
 - Serialization
 - 윤성우 열혈자료구조
 - coding test
 - R
 - 혼자 공부하는 C언어
 - list 컬렉션
 - 윤성우의 열혈 자료구조
 - Algorithm
 - 알기쉬운 알고리즘
 - buffer
 - 이것이 자바다
 - JSON
 - C 언어 코딩 도장
 - C programming
 - 이스케이프 문자
 - Selection Sorting
 - Graph
 
- Today
 
- Total
 
목록Server (74)
Engineering Note
내부 동작 흐름 정리 상황 설명 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이 되어 버린다. ..
시큐 리티 의존성 추가 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..
Entity- 데이터 베이스 테이블에 대응하는 클래스- @Entity 어노테이션이 붙은 클래스는 JPA에서 관리하는 엔티티가 된다. Entity Manager Factory- Entity Manager instence를 관리하는 주체- 애플리케이션 실행 시 한 개만 만들어지며 사용자로부터 요청이 오면 Entity Manager Factory로 부터 Entity 매니저를 생성한다. Entity Manager- Persistence Context(영속성 컨텍스트)에 접근하여 Entity에 대한 데이터베이스 작업을 제공- 내부적으로 데이터베이스 커넥셔능ㄹ 사용해서 데이터베이스에 접근 Entity Manger의 메서드1. find() : Persistence Context에서 Entity를 검색하고, ..
스프링 부트는 WAS Tomcat을 내장하고 있고 HTTP 요청을 멀티쓰레딩으로 방식으로 처리 할 수 있다.사용자의 요청이 오면 쓰레드를 통해 처리한다. 이때 DB 요청이 필요한 로직이 있다면 DB 커넥션을 통해 DB에 쿼리를 통해 데이터를 조회하거나 업데이트한다.톰캣 최대 쓰레드보다 사용자의 요청이 많다면 요청된 쓰레드가 반환 될때 까지 큐에 대기하가가 자신의 순서가 되면 요청이 처리된다.마찬가지로 DB 커넥션 풀보다 DB에 요청할 커넥션이 많다면 이미 사용중인 커넥션이 반환될 때까지 대기하고 커넥션을 사용할 수 있다.DB 커넥션은 DB에 요청할 때 WAS의 힙메모리와 DB 서버의 각 커넥션에 대한 세션정보를 관리하기 위해 메모리를 사용한다.그래서 DB 서버의 메모리용량과 커넥션 사용시 필요한 메모리용..
1. 페이징이란데이터베이스의 레코드를 개수로 나눠 페이지를 구분하는 것ex) 25개의 레코드가 있다면 7개씩, 총 4개의 페이지로 구분하고 그중에서 특정 페이지를 가져오는 것1-1. JPA에서 페이징 처리Page, Pageable 사용//페이징 처리가 가능한 쿼리메서드 예시Page findByName(String name, Pageble pageable);리턴 타입으로 Page 타입을 설정하고 매개변수로 Pageable 타입의 객체를 선언한다. //페이징 쿼리 메서드 호출 방법Page productPage = productRepository.findByName("펜", PageRequest.of(0,2));Pageable 파라미터를 전달하기위해 PageRequest 클래스 사용할 수 있고, PageRe..
Kafka를 사용하는 이유1. 비동기 처리가 가능한 메세징 플랫폼주문 시스템처럼 여러 단계(주문 접수, 배송, 알림, 결제 등)가 연계된 복잡한 로직을 모두 동기 트랜잭션으로 처리하면, 중간 단계(예: 배송, 알림 등)에서 장애나 지연이 발생할 때 전체 주문 흐름이 느려지고, 클라이언트는 응답을 기다리며 UX도 나빠집니다. Kafka 같은 메시지 브로커를 도입하면 ‘주문 접수’만 빠르게 처리하고 곧바로 클라이언트에 응답을 반환, 나머지(배송, 알림, 결제 등)는 각자의 Consumer가 독립적으로 비동기 처리하게 할 수 있습니다. 이렇게 하면 서비스의 UX와 안정성이 크게 높아지고, 각 단계별 서비스도 확장성과 장애 격리에 유리하게 구축할 수 있습니다. 2. 느슨한 결합으로 확장성 있는 플랫폼Kafka는..
1. docker-compose.yml 파일 만들기2. docker-compose.yml 파일 작성version: '3'services: zookeeper: image: bitnami/zookeeper:latest ports: - "2181:2181" environment: - ALLOW_ANONYMOUS_LOGIN=yes kafka: image: bitnami/kafka:3.4 ports: - "9092:9092" environment: - KAFKA_BROKER_ID=1 - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181 - KAFKA_CFG_LISTENERS=PLAINTEXT://:..