전체 글

Github 주소: https://github.com/ko-inseoklee
끄적끄적

[풀스택 서비스 개발 - 4] 전략 변경, contextLoads() FAILED

들어가며공통 모듈의 개발에서는 부분부분 Low Level 최적화를 할 수 있겠지만, 현 시점에서 오버 엔지니어링이라는 생각이 들어 우선 코어 기능 설계와 구현을 목표로 전략을 변경했다.목표 설정목표 1: 고가용성 알림 스케줄링 엔진 구축핵심 지표: 전송 지연 시간(Latency) 1초 미만 유지 및 성공률 99.9% 달성.검증 내용: Kafka의 파티셔닝을 활용해 알림 워커를 수평 확장(Scale-out)하고, 특정 워커 장애 시에도 메시지 유실 없이 재처리되는지(Fault Tolerance) 확인.목표 2: 비동기 데이터 파이프라인 최적화핵심 지표: 파일 업로드 후 '부분 선행 노출'까지의 소요 시간 30초 이내 보장.기술적 메커니즘: 사용자의 요청을 즉시 큐잉하고, 백그라운드 워커가 AI 연산을 수행..

Computer Science/자료구조

Trie 자료구조 구현 시 메모리 문제를 해결하는 방법 (Java HashMap vs Soft Delete)

1. 특징자료구조 안에 데이터를 한 글자 단위로 저장.EOW(end of word): 문자가 끝나는 위치ex) app, appl.a -> p -> p(EOW) -> l(EOW)두 단어의 끝을 표시해줘야 함.탐색 시, 접두사가 어디까지 오는지 확인하기 위한 용도로 사용 => prefix tree라고도 함.2. 구현class Trie { char c; boolean isEndOfWord; Map children; public Trie(char c) { this.c = c; this.isEndOfWord = false; this.children = new HashMap(); } public Trie insert (String value) {..

끄적끄적

[풀스택 서비스 개발 - 3] 공통모듈 개발, @Transient 어노테이션, 성능 최적화 기법

들어가며지난 포스팅까지 프로젝트 기본 구조 세팅을 한 뒤에 앱 기획을 바탕으로 ERD 설계를 하다보니, 공통 모듈의 필요성을 느꼈다. 어떤 앱을 만들던, 필수 요소는 존재할 것이고, 그 필수 요소를 갖춰 놓는다면 나중에 아이디어가 생겨 앱을 구현할 때 도메인과 비즈니스 로직에 더욱 집중할 수 있겠다는 생각을 했다. 그래서, 필수요소가 무엇일지 정의하고 그것부터 개발을 시작해야겠다는 생각이 들었다.공통 모듈에 필수 요소는 무엇일까?요즘은 대 바이브 코딩과 프롬프트 엔지니어링의 시대라고 생각한다. 그렇기 때문에 요즘은 본능적으로 생각하기를 차단하고 먼저 프롬프트부터 열지만, 문제를 고민하고 거기에 대한 올바른 답을 내리는지 판단해야 한다는 점에서 내 머리도 계속해서 단련을 시켜줘야 한다는 생각이 들었다. 그..

BE/Spring Boot

[Spring Boot] @PostConstruct - 안정적인 운영을 위한 Fail Fast 전략

문제 상황서비스 기능 중 알림 대상자가 사용자의 역할에 따라 달라지는 상황이 발생했다. 그런데, 컴파일 타임에 대상자를 결정지을 수 있는 상황과 DB 조회 이후에 대상자를 결정지을 수 있는 상황 두 가지가 있었다. 이를 위해 공통 기능을 가진 추상 클래스를 만들고, 하위 클래스에서 각 채널에 맞는 Resolver를 구현했다.하지만, 각 Resolver마다 공통 모듈인 빈 생성 검증 로직에 필요한 메타데이터의 일부가 DB 데이터에 의존해야 하는 문제가 발생했고, 만약 휴먼에러가 발생해서 특정 채널에 관련된 DB 태그가 존재하지 않는다면 런타임 시점에 시스템이 터지는 문제가 발생할 수 있다는 점을 사전에 인지했다.---원인처음에는 생성자에서 검증을 수행하려 했다. 하지만 클래스 생성 시점에는 DI가 완료된 ..

끄적끄적

[풀스택 서비스 개발 - 2] Git Error: RPC failed; HTTP 400 curl 22 The requested URL returned error: 400

저 에러는 뭐야? (문제 상황)깃허브에 자료를 푸시하려고 하는데, 아래 사진과 같은 에러가 떠서 리모트 레포지토리에 푸시할 수 없었다. 원인은? (원인 분석)원인은 모노레포 구조에 있었다. 모노레포 구조 특성상 다량의 코드가 들어가서 파일 크기가 크다.(물론 이것 때문은 아니었다.) 그 중 인프라를 구축하기 위해 docker-compose에 Mysql과 Redis를 setup 해두었는데, 컴포즈가 실행되면서 몰랐던 mysql 폴더가 모노레포 구조 안으로 들어온 것을 깜빡했기 때문이다. Mysql컨테이너가 죽게 되면 DB 데이터가 유실되기 때문에, 해당 볼륨을 로컬 스토리지에 저장을 하게 되고, 그 볼륨 위치를 모노레포 안으로 잡아서 생긴 것이었다. 그래서? (해결 방안)일단 이미 커밋이 되어 있어,..

끄적끄적

[풀스택 서비스 개발 - 1] 프로젝트 시작

들어가며이전 직장을 나오면서 무형의 자산들은 많이 생겼지만, 기술 스택의 발전이 저조하지 않았나 돌아보게 되었다. 각 파트별 업무를 조율하는 것, 기능을 정확히 정의하는 것과 파트별로 분류할 수 있는 것, 회식지대에 문제가 생겼을 때 해결하는 것, 고객사의 요청과 리소스의 한계를 판단하고 조정하는 것등일 것이다.그래서 기술 스택의 부족함을 채우기 위해, 앱을 개발해보려고 한다. 기술 스택을 완벽하게 배우고 시작하고자 하는 마음이 항상 1순위로 들었지만, 시간이 지나며 점점 완벽하지 않다는 두려움에 갇혀있기 보다는 뭐라도 하나 해내는게 중요하다고 생각했다.서비스 소개서비스명: (배포하면 적겠다)서비스 소개: (배포하면 적겠다)주요 기술 스택Flutter(App)Java/Spring(Server)Redis(..

Computer Science/데이터베이스

FK(Foreign Key)가 DB 성능에 영향을 미칠까?

FK란?왜래 키는 특정 테이블에 외부 테이블의 컬럼을 참조하는 키를 의미한다.왜래 키를 물릴 경우, 레코드를 수정, 삭제 시 제약이 생기기 때문에 데이터 무결성을 지킬 수 있다.FK가 과하게 물려있을 경우, 대용량 트래픽 발생 시 성능 저하를 일으킬 수 있다.FK의 유무가 성능에 영향을 어떻게 미칠까?FK가 성능에 어떤 영향을 미치는지 알기 위해서, 테스트를 진행하려고 한다.단순 쿼리 기준, 부모 테이블 1000개 레코드, 자식 테이블 10만개 레코드조회, 생성, 수정, 삭제 순으로 진행테스트erDiagram PARENT ||--o{ CHILD : has PARENT { BIGINT id PK VARCHAR name TIMESTAMP created_at ..

언어/Typescript

undefined vs null 차이

console.log(undefined === null) // falseconsole.log(undefined == null) // trueundefind: 변수만 선언하고, 값을 할당하지 않은 상태.null: 변수를 선언하고, 빈 값을 할당한 상태. - 두 차이는 무엇일까 ?아래 코드블럭을 보자.let x;console.log(x); // undefinedlet y = null;console.log(y); // object x와 y의 타입이 서로 다른 것을 볼 수 있다.  javascript에서는 return ; 이나, 몇몇 내장 메소드에서는 반환할 값이 없을 때 undefined를 반환한다. 얕은 비교(Shallow compare), 깊은 비교 시 차이가 있다.console.log(undefi..

inseoking
내 두뇌의 외장하드.