| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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
- 알기쉬운 알고리즘
- 윤성우 열혈자료구조
- Selection Sorting
- stream
- 이것이 자바다
- coding test
- list 컬렉션
- C programming
- Stack
- C 언어 코딩 도장
- s
- Serialization
- JSON
- 메모리구조
- 혼자 공부하는 C언어
- 윤성우의 열혈 자료구조
- datastructure
- Algorithm
- insertion sort
- Graph
- 이스케이프 문자
- R
- Today
- Total
목록전체 글 (520)
Engineering Note
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(); ..
이커머스 쇼핑몰 서비스 프로젝트를 하면서 도메인 모델을 설계한 경험을 공유합니다. 단순히 "이렇게 만들었다"가 아닌, 왜 이런 선택을 했는지에 초점을 맞춰 설명합니다. 전체 도메인 모델 개요 Member (회원) ↓ 1:1Cart (장바구니) ← N:1 → CartItem (장바구니상품) → N:1 → Item (상품) Member (회원) ↓ 1:NOrder (주문) ← N:1 → OrderItem (주문상품) → N:1 → Item (상품) 핵심 엔티티:Member: 회원 정보Item: 상품 정보Cart / CartItem: 장바구니 (주문 전 임시 보관)Order / OrderItem: 주문 (구매 확정) 1. Item 엔티티: 기본 설계 결정설계 의도상품은 쇼핑몰의 핵심 엔티티로, 독..
이미 추적 중인 파일을 더이상 git이 추적하지 않게 하려고 git rm --cached 명령을 사용했는데 파일이 삭제 된 경험이 있어서 복구 과정을 정리하고, 이미 추적 중인 파일을 삭제하지 않으면서 .gitignore에 추가하는 방법과 삭제된 파일을 복구하는 방법을 공유하려고 한다. 파일 추적 중단 시 안전한 순서올바른 방법 (파일 유지)# 1. gitignore에 먼저 추가echo "src/main/resources/application-local.yml" >> .gitignoregit add .gitignoregit commit -m "Add application-local.yml to gitignore"# 2. 추적 중단git rm --cached src/main/resources/applica..