전체 글 454

[MySQL] MySQL 8.0.45-arm 64 켜졌다 꺼졌다 반복 on MacOs

문제 상황💡 문제 상황맥 8.0.45-arm 64 환경에서 MySQL 서버가 켜졌다 꺼졌다를 반복하는 오류 발생💡 문제 증상원인 분석💡 원인 1 : HomeBrew 로 설치한 MySQL 과 Community Server 에서 설치한 dmg 버전 충돌 1) bash : HomeBrew 에 MySQL 설치되어있는지 확인which mysqlmysql --versionbrew list | grep mysql ➡️/opt/homebrew/bin/mysqlmysql Ver 9.0.1 for macos15.1 on arm64 (Homebrew)mysqlMySQL 클라이언트는 Homebrew 버전(9.0.1)을 쓰고 있다는 의미2) bash : MySQL 서버가 동작 중인지 확인ps aux | grep mysq..

Tips ✨ 2026.02.07

[동시성 처리] Trouble Shooting : 테스트 코드 Config Client 오류 (해결중..)

문제 상황💡 문제 상황Stock 테스트 코드에서 yml 설정으로 config server 를 false 설정 했음에도 관련 오류로 인해 테스트 실행이 안되는 상황 발생💡 문제 코드 - StockServiceTest.java@ActiveProfiles("local")@SpringBootTestclass StockServiceImplTest { ... } - application-local.ymlspring: cloud: config: enabled: false datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/hubeleven_test?useSSL=fals..

Projects/HubEleven 2026.02.06

[동시성 처리] 동시성 문제 (Race Condition) 해결 방법 3가지 관점

동시성 문제 (Race Condition)💡해결 방법레이스 컨디션을 해결하는 방법에는 크게 3가지 관점이 있다.첫번째는 Java에서 지원하는 Synchronized 방법으로 해결하기두번째는 DB가 제공하는 Lock 을 이용하여 데이터 정합성 맞추기세번째는 Redis 를 활용하여 대표적인 라이브러리 Lettuce 와 Ressison 으로 해결하기💡동시성 문제 (Race Condition) 이란?https://annovation.tistory.com/508 [동시성 처리] Java 에서 발생하는 동시성 문제란?Java 동시성 문제 (Race Condition, 레이스 컨디션)💡Java 동시성 문제란?Java에서 여러 스레드가 같은 데이터(필드/객체 상태) 를 공유하며 실행될 때, 올바른 제어 없이 접근..

Projects/HubEleven 2026.02.05

[동시성 처리] Java 에서 발생하는 동시성 문제란?

Java 동시성 문제 (Race Condition, 레이스 컨디션)💡Java 동시성 문제란?Java에서 여러 스레드가 같은 데이터(필드/객체 상태) 를 공유하며 실행될 때, 올바른 제어 없이 접근하면 오류가 생긴다.이렇게 여러 스레드가 공유 메모리(객체, 필드, 배열 등)에 접근할 때 명확한 동기화 규칙이 없어서, 값이 다르게 보이거나 실행 순서가 뒤틀리는 현상을 뜻한다.💡동시성 문제가 발생하는 이유 1) Thread interference (스레드 간 간섭)여러 스레드가 같은 데이터에 접근/수정하면서 연산이 서로 끼어들어 결과가 깨지는 문제 (전형적인 race condition의 형태)Java의 모든 객체의 필드, static 변수, 배열 요소는 힙 메모리에 존재하는데, 이 영역은 여러 스레드가 동..

Projects/HubEleven 2026.02.04

[Java] 변수(Variables) 헷갈리는 문법 정리

변수의 값변수에 값을 대입하는 것은 변수에 들어있는 값을 복사해서 대입하는 것이다.💡기본형 1) int a = 10;int b = a;a = 20; // a 값 변경이때 b는 그대로 10이 나온다.2)public static void main(String[] args) { int a = 10; changePrimitive(a); static void changePrimitive(int x) { x = 20; } }a = 10, x에 int 값 10이 복사되어 넘어가므로 x = 10changePrimitive에서 x = 20으로 바뀌므로 최종 결과는 a = 10, x = 20💡참조형Data dataA = new Data();dataA.value = 10;Data dataB = dataA;..

[동시성 처리] 재고 감소 통합 테스트 코드 6 - test DB

테스트 코드를 위한 DB 연결💡테스트 코드를 위한 DB 연결MySQL 보다 가벼운 H2 DB 를 사용해도 되지만, 실제 서비스 환경에서는 MySQL 을 사용하기 때문에 테스트의 신뢰성을 높이기 위해 MySQL DB 를 연결하기로 했다.Docker 로 테스트용 MySQL 을 팀원 공용으로 사용하면 DB 버전이나 설정 차이 없이 동일한 환경에서 테스트 가능하지만, 동시에 테스트를 진행하게될 경우 간섭을 받을 수 있어 우선 로컬에서 MySQL 을 생성하여 테스트하기로 했다.테스트 코드를 위한 MySQL 생성💡Local MySQL 생성 1) MySQL 과 DBeaver 연결설치 방법https://codingapple.com/unit/sql-mysql-dbeaver-install/ MySQL & DBeaver..

Projects/HubEleven 2026.01.31

[동시성 처리] 재고 감소 통합 테스트 코드 5 - 단일 스레드

단일 스레드 환경 리팩토링 with TestFixture💡Test Fixture 도입 전 단일 스레드 테스트 코드 1) @BeforeEach@BeforeEach public void setUp() { // 테스트용 고정 ID 생성 (각 테스트마다 새로 생성) testProductId = UUID.randomUUID(); // TODO : Test Fixture testCompanyId = UUID.randomUUID(); testHubId = UUID.randomUUID(); Stock stock = Stock.create(testProductId, testCompanyId, testHubId, 100); jpaStockR..

Projects/HubEleven 2026.01.30

[동시성 처리] 재고 감소 통합 테스트 코드 4 - 단일 스레드

단일 스레드 환경 with Test Fixture💡test/java/com.hubeleven.product/stock/application/fixtures/StockFixture.javaStock 도메인 테스트용 StockFixture 클래스 생성// fixtures/StockFixture.javapublic class StockFixture { // ===== Factory Methods ===== public static Stock createDefault() { return Stock.create(PRODUCT_ID, COMPANY_ID, HUB_ID, 100); } public static Stock createWithQuantity(int quantity) {..

Projects/HubEleven 2026.01.29

[Spring] 객체 지향 설계와 스프링

객체 지향 설계와 Spring 연관성💡Spring 애기에 왜 객체 지향 이야기가 나오는가? Spring 은 아래 기술로 객체 지향의 특징인 다형성과 OCP, DIP 를 가능하게 지원한다.DI (Dependency Dependency) : 의존 관계, 의존성 주입DI 컨테이너 제공Java 객체들을 어떤 컨테이너 안에 넣어 놓고 이 안에서 의존 관계를 서로 연결해주고 주입해주는 기능위와 같은 기술을 활용하면, 클라이언트 코드 변경 없이 기능 확장 가능쉽게 부품을 교체하듯이 개발 가능Spring이 없던 시절..어떤 개발자가 좋은 객체 지향 개발을 하려고 OCP, DIP 원칙을 지키며 개발을 해보니, 만들어야할 것들이 너무 많아서 배보다 배꼽이 큰 상황이 되어버렸다.그래서 OCP, DIP 원칙들을 프레임워크로..