1. 모니터링이란? 모니터링은 시스템의 상태나 변화를 지속적으로 관찰하고 기록하는 것이다. 개발이 끝나면 개발자의 할 일이 끝날까? 전혀 그렇지 않다. IT 서비스에서 모니터링은 시스템의 안정성과 성능을 보장하기 위해 필수적인 요소로, 장애 상황이 발생했을 때 곧바로 처리할도록 돕는다. 만약 장애가 발생했는데 모니터링 시스템을 갖추지 않고 있다면? ... 2. Spring Actuator Spring Actuator는 애플리케이션의 운영 단계에서 필요한 모니터링과 관리 기능을 제공한다. 흔히 말해, "프로덕션 준비 기능"을 미리 만들어 두어 개발자의 짐을 덜어주는 고마운 존재인 것이다. 주요 특징으로는 애플리케이션의 상태, 메트릭, 로그 등 다양한 운영 정보를 제공한다. 마이크로미터, 프로메테우스, 그라..
분류 전체보기
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. Redis란? Redis(REmote Dictionary Server)는 인메모리 데이터 구조 저장소이다.Key-Value 형태의 방식으로 데이터를 저장한다.데이터를 RAM에 직접 저장하므로 매우 빠른 읽기/쓰기 성능 2. 인메모리 데이터베이스의 필요성일반적으로 데이터베이스하면, 관계형 데이터베이스가 대표적이다. 관계형 데이터베이스의 주된 목적은 HDD, SSD 같은 파일 시스템에 데이터를 저장함으로써 서비스가 종료되어도 데이터를 안전하게 보관하는 것이다. 파일 시스템에 데이터를 저장하다보니, 데이터를 쓰거나, 읽을 때 속도가 느릴 수밖에 없다. 특정 서비스는 빠른 응답을 요구하기도 하고, 대규모 시스템에 경우 데이터베이스에 부하가 급격히 늘어날 수도 있는데, 인메모리 데이터베이스를 사용하면 데이터..
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. Workflow 설명develop 이나 feature 로 시작하는 브랜치에 코드가 push 되거나 develop 에 pull request가 생성되면,./gradlew clean test를 실행한다. 2. 간단한 Spring Boot Application// ItemController.javapackage com.github_actions.ci_cd;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;import java.util.Arrays;import java.util.List;@RestControllerpublic class Item..