1. Grafana Your observability stack, faster and easier 2. Grafana는 무엇인가? 그라파나는 프로메테우스를 통해 수집한 메트릭을 보여주는 도구이다.spring actuator가 측정한 메트릭을 프로메테우스가 저장하고 그것을 그라파나가 시각화하는 것이다. 3. Grafana 설치설치는 1. 로컬에 직접 설치, 2. 도커로 설치가 있는데,나는 도커로 설치했다. docker run -d --name=grafana -p 3000:3000 grafana/grafana 기본 포트가 3000번이다. 4. Grafana Web UI localhost:3000 번으로 접근하면 로그인 창이 뜬다. username: adminpassword: admin로그인 해준다.pass..
1. 물류 관리 및 배송 시스템을 위한 MSA 기반 플랫폼 개발 MSA(Microservices Architecture) 기반의 시스템을 설계하고 구현한다.MSA 애플리케이션을 구성하면서 실무에서 발생할 수 있는 다양한 상황을 경험해본다.API 연동, 데이터 무결성 유지, 서비스 간 통신의 신뢰성을 확보하는 방법에 대해 집중적으로 고민한다.Gemini API를 사용하여 AI를 활용하는 경험을 쌓는다. 2. 인프라 설계서 auth servicedelivery service(배송, 배송 경로 기록, 배송 담당자)hub service(허브, 허브간 이동 정보)product service(업체, 상품)order service(주문)notification service(Gemini AI, Slack) 3. ERD..
1. 자바에서 동일성과 동등성 이해하기 객체 지향 프로그래밍에서 동일성(Identity)과 동등성(Equality)은 객체를 비교하는 두 가지 중요한 개념이다. 2. 동일성(Identity) 동일성은 두 객체가 메모리 상에서 같은 위치를 차지하고 있는지, 즉 같은 객체인지를 판단한다.자바에서는 `==` 연산자를 사용하여 동일성을 확인한다. 예를 들어,Integer a = new Integer(1);Integer b = a;System.out.println(a == b); // true 이 경우 a와 b는 동일한 객체를 참조하므로 true를 반환한다. 3. 동등성(Equality) 동등성은 두 객체의 내용이나 상태가 같은지를 비교한다.자바에서는 `equals()` 메소드를 사용하여 동등성을 확인한다. 예..
1. 객체 비교의 일관성 equals()가 true를 반환하는 두 객체는 반드시 같은 hashCode 값을 반환해야 한다.만약, equals()가 true를 반환하는 데 hashCode 값이 다르다면, 예상치 못한 결과가 발생할 수 있다.대표적인 예로, 해시값을 사용하는 HashSet, HashMap에서 문제가 발생할 수 있다. 2. equals()와 hashCode()의 동작 순서 2 - 1. HashMap 에서 데이터가 추가될 때추가되는 데이터의 hashCode()의 반환 값이 HashMap에 존재하는지 비교한다.같은 값이 있다면, equals()를 통해 true가 나오는지 비교한다.true이면 동등한 객체로 판단한다. 따라서, equals() true가 나오는 동등한 객체라고 하더라도 hashC..
1. @ColumnDefault만 붙이면 자동으로 default 값이 저장될 줄 알았다고요 User라는 엔티티가 있다. 기본적인 필드들이 있다. package com.spring.dozen.auth.domain.entity;import com.spring.dozen.auth.domain.enums.Role;import jakarta.persistence.*;import lombok.*;import org.hibernate.annotations.ColumnDefault;@Getter@NoArgsConstructor(access = AccessLevel.PROTECTED)@AllArgsConstructor(access = AccessLevel.PRIVATE)@Builder(access = AccessLeve..
1. Spring Boot Application을 GitHub Actions로 배포하기개념도 코드를 GitHub에 push하면 Github Actions가 cloudtype에 배포해준다. 2. pull request 생성할 때 테스트하고, main에 push 할 때 배포하기feature/* 브랜치를 만들어서 test 코드를 포함한 수정 작업을 완료한 뒤 pull request 생성Github Actions가 pull request 이벤트를 감지하고 해당 브랜치에 대해 gradle test를 수행test가 실패한 경우, test 코드를 수정하여 pull request에 반영pull request가 승인되면 main 브랜치에 merge되고 cloudtype 서버에 배포 3. cloudtype이란?cloud..
1. JPA에서 ID 생성 전략 JPA에서는 엔티티의 기본 키(ID)를 생성하기 위한 여러 전략을 제공한다. 2. IDENTITY 전략 IDENTITY 전략은 기본 키 생성을 데이터베이스에 위임한다.MySQL에서는 AUTO_INCREMENT와 같은 데이터베이스 자동 증가 컬럼을 사용한다.엔티티가 영속화될 때 즉시 INSERT SQL이 실행되어 ID 값을 얻는다.엔티티가 영속화될 때 즉시 INSERT SQL이 실행된다는 의미는 영속성 컨텍스트의 쓰기 지연이 적용되지 않는다는 것이다. 영속성 컨텍스트는 트랜잭션이 끝날 때 까지 실행될 SQL을 쓰기 지연 저장소에 모아두고, 커밋 시점에 데이터베이스로 모아둔 쿼리를 날린다. 하지만, IDENTITY 전략을 사용한 경우, 식별자가 데이터베이스에서 할당이 되기 때..
1. 개요2개의 스프링 컨테이너를 생성하고, 통신이 원활한지 확인한다. 2. service-bservice-a 보다 service-b를 먼저 작성하는 이유는 a가 b를 호출하는 구조이기 때문이다. 2 - 1. build.gradleplugins { id 'java' id 'org.springframework.boot' version '3.3.6' id 'io.spring.dependency-management' version '1.1.6'}group = 'com.study'version = '0.0.1-SNAPSHOT'java { toolchain { languageVersion = JavaLanguageVersion.of(17) }}configurations { compileOnly { extend..