일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- s
- stream
- 윤성우 열혈자료구조
- Serialization
- datastructure
- Selection Sorting
- 알기쉬운 알고리즘
- 메모리구조
- Graph
- 이것이 자바다
- C 언어 코딩 도장
- 이스케이프 문자
- Stack
- JSON
- insertion sort
- list 컬렉션
- R
- buffer
- coding test
- C programming
- 윤성우의 열혈 자료구조
- 혼자 공부하는 C언어
- Algorithm
- Today
- Total
목록전체 글 (514)
Engineering Note
상황 설명OrderDto주문을 위해 상품 id와 상품 주문 수량 count값을 담는 DTO 클래스@Getter @Setter@AllArgsConstructor@NoArgsConstructorpublic class OrderDto { @NotNull(message = "상품 아이디는 필수 입력 값입니다.") private Long itemId; @Min(value = 1 ,message = "최소 주문 수량은 1개입니다.") @Max(value = 999, message = "최대 주문 수량은 999개입니다.") private int count;} OrderItem Entity- Order Entity와 Item Entity의 릴레이션 테이블이면서 주문 상품 정보를 담는 Ent..
들어가며장바구니에 담긴 OrderItem을 주문으로 처리하는 코드를 리팩토링하면서 겪은 여정을 공유합니다. 단순히 코드를 깔끔하게 만들려던 시도가 N+1 문제 발견과 성능 개선으로 이어진 과정을 담았습니다. 문제의 시작: forEach의 한계초기 코드는 stream().forEach()를 사용해 주문 정보를 처리했습니다. 문제의 시작: forEach의 한계초기 코드는 stream().forEach()를 사용해 주문 정보를 처리했습니다.public Long orders(List orderDtoList, String email) { // 1. 회원 조회 (1st Query) Member member = memberRepository.findByEmail(email); ..
1. 영속성 컨텍스트 생명주기JPA를 사용하는 환경(주로 Spring Boot의 Service Layer)에서 @Transactional 어노테이션이 붙은 메서드가 호출될 때 영속성 컨텍스트는 다음과 같은 생명주기를 가집니다. 1-1. 트랜잭션 시작 (생성)@Transactional 메서드가 호출되면 데이터베이스 트랜잭션이 시작됩니다.이와 동시에 JPA의 영속성 컨텍스트가 생성되어 현재 실행 중인 쓰레드의 트랜잭션에 바인딩됩니다.이 영속성 컨텍스트가 1차 캐시 역할을 하며, 트랜잭션 내에서 조회되거나 저장된 모든 엔티티 객체들을 관리합니다. 1-2. 비즈니스 로직 실행 (유지)메서드 내에서 JPA 관련 작업(조회, 저장, 수정 등)이 실행되는 동안 영속성 컨텍스트는 유지됩니다.엔티티를 수정하더라도, 이 ..
Entity와 DTO 변환 과정을 for문 대신 Stream으로 변환하면서 알게된 내용을 정리하려고 한다. 1. 초기 forEach를 사용한 비효율적인 방식 코드public List converWithForEach(List orderEntities) { List orderDtos = new ArrayList(); orderEntities.stream().forEach(order ->{ OrderDto dto = OrderDto.from(order); orderDtos.add(dto); }); return orderDtos;} forEach 방식의 문제점함수형 프로그래밍 위반: 스트림 파이프라인 외부에서 선언된 orderDtos라는 변이 가능한 상태를 스트림 내부에서 변경해야 하는데 이는 함수형 프로..
스프링에서 HTTP 메세지를 처리할 때 자주 사용하는 어노테이션 @RequestParam, @ModelAttribute, @RequestBody와 HTTP POST 요청에 대해 정리하려고 합니다. 먼저 클라이언트에서 HTTP POST 요청을 전송할 때 사용되는 form 데이터와 json/xml에 대해 정리하고 스프링 어노테이션을 정리하겠습니다. POST 요청의 본문(body)에 데이터를 넣을 때, 가장 흔하게 사용되는 두 가지 포장방식(content-type)과 그 특징은 다음과 같습니다. POST 요청 전송 방식 1. Form Data(폼 데이터)클라이언트에서 HTML 태그를 사용할 때 기본적으로 사용되거나, 파일 업로드를 위해 사용됩니다.Content-Type특징스프링 연관 어노테이션applicat..
프로젝트에서 JPA를 사용하면서 기본적인 쿼리도 같이 익혀야 겠다고 생각해서 정리하고 있습니다. JPA가 대부분 해주지만 문제를 파악하거나 직접 DB에 접근해서 문제를 해결해야할 일도 있기 때문에 SQL도 같이 익혀두는 과정도 필요하다고 생각합니다. 기본적인 게시판의 테이블을 설계해보고 workbench에서 쿼리문을 실행해보면서 SQL을 정리하고 있습니다. 오늘은 DDL을 연습했습니다.CREATE DATABASE blog_test;use blog_test;-- 1. Member 테이블 (회원)CREATE TABLE member ( member_id BIGINT PRIMARY KEY AUTO_INCREMENT, email VARCHAR(100) UNIQUE, name VARCHAR(50)..
이 글은 게시판의 댓글 좋아요 기능의 DB를 설계하면서 UNIQUE 제약조건을 알게 된 과정을 정리한 글입니다. 요구사항댓글 좋아요 기능에 필요한 요구사항은 다음과 같았습니다.로그인한 유저만 좋아요 가능중복 좋아요 방지 (한 댓글에 한 번만 좋아요 가능)특정 댓글의 좋아요 수 조회특정 유저의 좋아요 목록 조회 테이블 설계 과정기존 테이블 구조Member (회원)Board (게시글)Comment (댓글)고민: 좋아요 데이터를 어디에 저장할까?처음엔 Comment 테이블에 like_count 같은 컬럼만 추가하면 되지 않을까 생각했습니다.하지만 문제가 있었습니다:누가 좋아요를 눌렀는지 알 수 없음로그인 후 "내가 좋아요 누른 댓글"을 표시할 수 없음좋아요 취소 기능을 만들 수 없음 해결: Like 테이블 분..
1. 의존성 주입이란?의존성 주입(Dependency Injection, DI)은 객체가 사용할 다른 객체를 직접 생성하지 않고, 외부에서 주입받는 방식을 말합니다.스프링에서는 컨테이너(ApplicationContext)가 객체를 Bean으로 관리하고, 필요한 곳에 자동으로 주입해주기 때문에 @Autowired나 생성자 주입을 통해 쉽게 DI를 구현할 수 있습니다. 2. 왜 필요한가? (순수 자바 관점)순수 자바에서 보자면, 클래스가 의존 객체를 직접 생성하는 경우 테스트와 유지보수가 어렵습니다. 의존성을 직접 생성하는 경우class A { private B b = new B(); // A가 B를 직접 생성 public void doSomething() { b.work(); ..