끝을 보는 용기 154

Day 122 - 게임 아이템 거래소 프로젝트 70%, 삽질로 하루를 허비해 버렸다

1. 프로젝트 진행 상황 및 계획🥇 비관적 락 사용하기 (완료) 🥈 낙관적 락 사용하기 (완료)🥉 분산 락 구현하기 (진행 중, 25.02.06 완료 목표)4️⃣ 분산 락 구현 이후 테스트 코드 실행하기 (진행 전, 25.02.06 완료 목표)5️⃣ 동시성 제어 관련 공부하기 (진행 중, 25.02.06 완료 목표)  2. 삽질로 하루를 허비했다.(1) 스레드 20개, 입찰 요청 1,000건일 때 ▼ (2) 스레드 20개, 입찰 요청 500건일 때 ▼(3) 스레드 20개, 입찰 요청 249건일 때 ▼ 비관적 락(pessimistic lock)이나 낙관적 락(optimistic lock)을 적용했을 때 동시성이 잘 제어되는지를 보려고 테스트 코드를 작성하고 여러 번 실행했는데, 너무 '성능 개선'에 ..

Day 121 - 게임 아이템 거래소 프로젝트 55%, 한 사용자가 연속으로 입찰하지 못하도록 막아야 할까?

1. 프로젝트 진행 상황 및 계획🥇 동시성 문제를 검증할 수 있는 테스트 코드 작성하기 - 락(Lock)이 없을 때 (완료) 🥈 낙관적 락 사용하기 (진행 중, 25.02.05 완료 목표) 🥉 비관적 락 사용하기 (진행 중, 25.02.05 완료 목표) 4️⃣ 동시성 문제를 검증할 수 있는 테스트 코드 작성하기 - 낙관적 락 적용 후 (완료) 5️⃣ 동시성 문제를 검증할 수 있는 테스트 코드 작성하기 - 비관적 락 적용 후 (완료) 6️⃣ 동시성 제어 관련 공부하기 (진행 중, 25.02.06 완료 목표)  2. 한 사용자가 연속으로 입찰하지 못하도록 막아야 할까?고민 끝에 우리 팀의 게임 아이템 거래소에서는 한 사용자가 연속으로 입찰하지 못하도록 했다. '사용자 A-B-A' 순으로는 가능해도 'A..

Day 120 - 게임 아이템 거래소 프로젝트 45%, 자물쇠를 걸기도 전에 데드락(Deadlock)이 발생했을 때 심정이란

1. 프로젝트 진행 상황 및 계획🥇 종료된 경매에 입찰할 수 없도록 코드 리팩토링(refactoring)하기 (완료) 🥈 동시성 문제를 검증할 수 있는 테스트 코드 작성하기 - 락(Lock)이 없을 때 (진행 중, 25.02.04 완료 목표)🥉 낙관적 락 사용하기 (진행 전, 25.02.04 완료 목표)4️⃣ 비관적 락 사용하기 (진행 전, 25.02.04 완료 목표)5️⃣ 동시성 문제를 검증할 수 있는 테스트 코드 작성하기 - 낙관적 락 적용 후 (진행 전, 25.02.04 완료 목표)6️⃣ 동시성 문제를 검증할 수 있는 테스트 코드 작성하기 - 비관적 락 적용 후 (진행 전, 25.02.04 완료 목표)7️⃣ 동시성 제어 관련 공부하기 (진행 중, 25.02.05 완료 목표) 2. 자물쇠를 걸기..

Day 119 - 게임 아이템 거래소 프로젝트 35%, 낙낙(Knock Knock) 대신 락락(Lock Lock), 제대로 골머리 앓는 중

1. 프로젝트 진행 상황 및 계획🥇 경매 단건 조회하는 R 구현하기 (완료) 🥈 경매장 R에 예외 처리하기 (완료)🥉 종료된 경매에 입찰할 수 없도록 코드 리팩토링(refactoring)하기 (진행 중, 25.02.03 완료 목표)4️⃣ 동시성 제어 관련 공부하기 (진행 중, 25.02.03 완료 목표) 2. 여태까지 처리한 예외만 5가지인데, 내일부터는 동시성까지 제어해야 한다. 더보기package no.gunbang.market.domain.auction.entity;import jakarta.persistence.Column;import jakarta.persistence.Entity;import jakarta.persistence.EnumType;import jakarta.persistenc..

Day 118 - 게임 아이템 거래소 프로젝트 25%, 코드 한 줄 쓸 때마다 '지금이 최선일까?' 고민하다

1. 프로젝트 진행 상황 및 계획🥇 경매장에 아이템을 등록하는 C 구현하기 (완료) 🥈 경매장에서 아이템을 입찰하는 U (Patch) 구현하기 (완료)🥉 경매장에 등록한 아이템을 취소하는 D 구현하기 (완료)4️⃣ 동시성 제어 관련 공부하기 (진행 전, 25.02.02 완료 목표)5️⃣ 경매장 CUD에 각각 예외 처리하기 (완료) 2. 코드 한 줄 쓸 때마다 '지금이 최선일까?' 고민했다.더보기package no.gunbang.market.domain.auction.service;import lombok.RequiredArgsConstructor;import no.gunbang.market.common.Item;import no.gunbang.market.common.ItemRepository;im..

Day 117 - 게임 아이템 거래소 프로젝트 10%, 기록 팀장은 감기에 걸려도 기록을 포기하지 못한다.

1. 프로젝트 진행 상황 및 계획🥇 경매장에 아이템을 등록하는 C 구현하기 (진행 전, 25.02.01 완료 목표) 🥈 경매장에서 아이템을 입찰하는 U (Patch) 구현하기 (진행 전, 25.02.01 완료 목표)🥉 경매장에 등록한 아이템을 취소하는 D 구현하기 (진행 전, 25.02.01 완료 목표)4️⃣ 동시성 제어 관련 공부하기 (진행 전, 25.02.02 완료 목표)5️⃣ 경매장 CUD에 각각 예외 처리하기 (진행 전, 25.02.01 완료 목표) 2. ERD(Entity Relationship Diagram) 3. 와이어프레임(Wireframe) 4. 기록 팀장은 감기에 걸려도 기록을 포기하지 못한다.집에서만 지낸 탓인지 한 달 넘게 운동하지 못한 탓인지 아침부터 코를 훌쩍였다. 재채기를..

Day 116 - 휴식 후 JVM을 간단하게 복습하다.

[인용 및 참고 출처]1. 단행본: "자바 프로그램 개발 과정", 신용권, 『혼자 공부하는 자바』, 한빛미디어, 2021, 23쪽~24쪽, (2025.01.30)2. 단행본(1번과 동일): "6가지 키워드로 끝내는 핵심 포인트", 13쪽, (2025.01.30)3. 사전: "compile", Longman Dictionary, (2025.01.30) [DAY 036 TIL 링크] Java Virtual Machine, 일명 '자바 가상 기계'란 개념을 예전에 학습한 느낌이 들어 찾아보니 개발 분야 공부에 막 돌입한 시기에 정리했다. 다른 개념은 정리하는 데 시간이 많이 걸릴 듯하여 우선 오늘은 좀 쉬고 JVM을 간단하게 복습했다. 여기서 바이트 코드 파일은 개발이 완료된 자바 프로그램 형태를 의미한다. ..

Day 115 - '왜 생겼을까?' 계속 물어보며 TCP와 HTTP를 공부하다.

['프로토콜(Protocol), OSI, IP, TCP, HTTP, DNS' 링크]공부하는 중간중간 블로그 글을 몇 번 읽고 정리하고 싶은 마음이 들었지만, 쉽게 해결하고 싶은 마음을 꾹 누른 채 출간된 책을 뒤적였다. 적어도 책은 인쇄소에 들어가 독자를 만나기까지 검토를 여러 번 거쳤을 테니 좀 더 믿음이 갔다. 공부하는 중간중간 블로그 글을 몇 번 읽고 정리하고 싶은 마음이 들었지만, 쉽게 해결하고 싶은 마음을 꾹 누른 채 출간된 책을 뒤적였다. 적어도 책은 인쇄소에 들어가 독자를 만나기까지 검토를 여러 번 거쳤을 테니 좀 더 믿음이 갔다. 원래 공부하는 방식이기도 했고. 문득 예전에 해낸 과제 두 가지가 떠올랐다. 첫 번째 과제를 할 때는 참고할 책 일곱 권을 책상에 쭉 펼쳐놓고 책장을 넘기며 20..

Day 114 - 느긋하게 테스트 코드를 공부하고, 이름이 신기해서 @Slf4j를 알아보다.

[인용 및 참고 출처]1. 구글 검색: SLF4J Manual, "Spring Slf4j docs", SLF4J user manual, (2025.01.28)2. 단행본: "테스트 코드 작성하기", 장정우, 『스프링 부트 핵심 가이드』, 위키북스, 2022, 177쪽, (2025.01.28)3. 구글 검색: Spring, "WebMvcTest docs", Annotation Interface WebMvcTest, (2025.01.28)4. 사전: "mock", "facade", 네이버 영어사전, (2025.01.28)5. 단행본: "디자인 패턴", 장정우, 『스프링 부트 핵심 가이드』, 위키북스, 2022, 22쪽~24쪽, (2025.01.28) 1. 느긋하게 테스트 코드를 공부했다. [깃허브 링크] [..

Day 113 - 플러스 프로젝트 과제 제출, 예비 개발자로서 휴일을 보내는 가장 완벽한 방법

1. 🌱 Spring Boot 공부 계획① IoC (Inversion of Control: 제어의 역전)② DI (Dependency Injection: 의존성 주입)③ AOP (Aspect-Oriented Programming: 관점 지향 프로그래밍)④ SOLID 원칙⑤ 트랜잭션 격리 수준 (Transaction Isolation Level)⑥ ACID 원칙⑦ 디자인 패턴 (Design Pattern) 2. 🌐 네트워크 공부 계획 ① HTTP (HyperText Transfer Protocol)② TCP (Transmission Control Protocol) 3. ☕ JVM 공부 계획① JVM 정의 (Java Virtual Machine)② JVM의 메모리 구성 (Heap, Stack, Metho..