커밋츄 개발일지 #4 - 레벨업 로직
·
프로젝트 개발일지/커밋츄
이번에는 캐릭터 레벨업 스케줄러 로직에 안정성을 강화하는 작업을 진행했습니다.기존에는 가장 최신 스냅샷 데이터 1건만 가져와서 경험치를 계산했는데,스냅샷 생성이 지연되는 상황에서 잘못된 날짜의 데이터를 반영하는 문제가 있었습니다.📍 문제 상황스냅샷 생성 스케줄러: 매일 KST 23:59레벨업 스케줄러: 매일 KST 00:05정상적인 경우에는 어제자 스냅샷이 잘 생성되지만,만약 스냅샷 생성이 늦어지면 레벨업 스케줄러는 그저께 데이터를 또 가져와서경험치를 두 번 누적하는 문제가 발생했습니다.8/10 23:59 → 스냅샷 지연8/11 00:05 → 최신 데이터 = 8/9 스냅샷 → 중복 반영8/11 00:06 → 8/10 스냅샷 생성 (이미 늦음)⚙️ 해결 방법1) KST 기준 '어제 하루' 범위 조회DB는..
커밋츄 개발일지 #3 - 왜 맘대로 바꾸세요
·
프로젝트 개발일지/커밋츄
이번 개발일지에서는 개발 중에 있던 문제를 소개하고 어떻게 해결했는지 써보려고 합니다. 처음에 배포된 사이트에서 해금된 언어가 분명히 있는데 다 해금되지 않았다고 뜨길래 왜 이런지에 대해 프론트엔드 팀원과 서로의 코드를 검토 중이었는데 제 DTO의 변수명은 isMain인데 main으로 응답을 보내고 있는 겁니다..? 이번은 그 원인과 해결 방법, 그리고 해결 과정에서 @JsonProperty를 잘못 붙여 중복 필드가 발생했던 추가 사례까지 정리했습니다.1. 문제 상황@Getter@Builderpublic class Dto { private Integer id; private boolean isMain; private boolean isUnlocked;}위와 같은 DTO를 정의했을 때, 실..
커밋츄 개발일지 #2 - 언어 해금 기능 구현
·
프로젝트 개발일지/커밋츄
이전 개발 일지https://hxngpy.tistory.com/81/#comment18220987 커밋츄 개발일지 #1 – GitHub 활동으로 캐릭터 상태 바꾸기1️⃣ 커밋츄란?커밋츄(ComitChu)는 사용자의 github 활동 내역에 따라 먹고 자라는 다마고치 컨셉의 캐릭터입니다.유저의 github 프로필에 등록해놓으면 내 레포지토리를 평가하는 지표를 귀엽게 볼hxngpy.tistory.com 1. 커밋츄란?커밋츄는 내 GitHub 활동을 가상 펫으로 시각화하는 서비스입니다.오늘은 새로 사용한 언어를 자동으로 감지해 언어 스킨을 잠금 해제하는 기능을 추가하기로 결정했습니다.이제 츄의 모습이 다양해질 수 있겠군요언어 목록을 미리 DB에 넣어두고, 사용 통계만 수집해 잠긴 언어를 해제하는 흐름을 설계..
커밋츄 개발일지 #1 – GitHub 활동으로 캐릭터 상태 바꾸기
·
프로젝트 개발일지/커밋츄
1️⃣ 커밋츄란?커밋츄(ComitChu)는 사용자의 github 활동 내역에 따라 먹고 자라는 다마고치 컨셉의 캐릭터입니다.유저의 github 프로필에 등록해놓으면 내 레포지토리를 평가하는 지표를 귀엽게 볼 수 있는 느낌으로 봐주시면 좋을 것 같습니다.chu의 상태변화는 간단하게 다음으로 설정했습니다. 활동을 안 하면 → HUNGRY 적당히 하면 → NORMAL 활발히 하면 → HAPPY이번 개발일지에서는 GitHub 활동 데이터를 수집하고,이를 기반으로 chu의 상태를 자동으로 업데이트하는 시스템을 설계한 과정을 정리합니다.2️⃣ 하루 단위 활동량 수집처음에는 GitHub GraphQL API의 totalContributions 값을 사용했는데,이건 최근 1년의 누적 커밋 수만 제공해 줍니다.그래서 오..
Monolithic Architecture vs Microservice Architecture
·
카테고리 없음
전 글에서는 Scale up과 Scalue out에 대해 알아보고 비교하는 글을 썼었습니다. 이번에는 이와 관련된 시스템 아키텍처에 대해 써보려고 합니다. 1. Monolithic Architecture (모놀리식 구조)무엇인가요?모든 기능(웹, API, DB 접근, 비즈니스 로직 등)이 하나의 애플리케이션(프로세스)으로 묶여 있는 구조입니다.확장 방식Scale Up(수직 확장)이 주로 사용됩니다.이유: 하나의 프로세스로 묶여 있어 서버 하나 성능을 올려야 전체 기능 성능이 올라감.Scale Out(수평 확장)도 가능하지만,하나의 실행 단위가 같으므로 모두를 동시에 복제해야 해 관리가 복잡하고 비용이 커집니다.장단점 요약장점단점개발·배포가 단순(하나의 패키지, 하나의 서버)변경 시 전체 애플리케이션 재배..
Scale up vs Scale out
·
BackEnd
Scale Up (수직 확장)무엇인가요?한 대의 서버(컴퓨터)에 CPU·메모리·저장 공간을 더 달아 성능을 높이는 방법입니다.어떨 때 쓰나요?예를 들어, 한 서버에서만 작동하는 데이터베이스가 메모리가 부족할 때 메모리 용량을 늘리는 식입니다.주의할 점서버 사양(성능)을 바꿀 때 다운타임(서비스가 일시 정지될 수 있음)이 생길 수 있어요.처음에는 비용이 적게 느껴져도, 고성능 부품일수록 비용이 훨씬 더 많이 듭니다.아무리 올려도 물리적 한계가 있어 언젠가는 더 이상 올릴 수 없습니다.Scale Out (수평 확장)무엇인가요?같은 사양의 서버를 여러 대 더 추가해서 일을 분담시키는 방법입니다.어떨 때 쓰나요?예를 들어, 웹사이트에 접속자가 많아지면 서버 1대 대신 똑같은 서버 3~5대를 두고, 접속을 골고루..
Stack을 만들 때는 ArrayDeque으로?
·
알고리즘
Java 표준 라이브러리에는 Stack라는 스택 클래스가 있지만, 단일 스레드 환경에서는 ArrayDeque를 스택 용도로 사용하는 것이 훨씬 효율적입니다. 이유를 네 가지로 정리했습니다.1. 불필요한 동기화 오버헤드 제거Stack(Vector 기반)Stack은 내부적으로 java.util.Vector를 상속받아 구현되어 있습니다.Vector의 주요 메서드(add(), remove(), push(), pop() 등)는 모두처럼 synchronized 키워드를 붙여 두었습니다.synchronized 메서드가 호출될 때마다 JVM은객체의 모니터 락을 획득(lock)실제 작업 실행모니터 락을 해제(unlock)과정을 거칩니다.단일 스레드 환경이라도 락 획득·해제 비용이 매번 발생해,수십만 번 호출되는 알고리즘..
[CS] CPU의 작동 원리 - ALU와 제어장치
·
CS 공부/컴퓨터 구조
컴퓨터의 두뇌 역할을 하는 CPU(Central Processing Unit)는 메모리에 저장된 명령어를 읽고, 해석하고, 실행합니다. 이 과정에서 산술·논리 연산을 담당하는 ALU(Arithmetic Logic Unit)와 명령어 해석·제어 신호 생성 기능을 가진 제어장치(Control Unit)가 핵심 역할을 수행합니다.1. ALU(산술·논리 연산 장치)1.1 ALU 역할을 일상 예시로 이해하기ALU는 계산기라고 생각하세요. 예를 들어 “사과 3개에 사과 2개를 더하면 총 몇 개일까?”를 물으면, ALU는 3 + 2 = 5를 계산해줍니다.이때 사과의 개수(피연산자)와 ‘더하기’라는 연산 종류가 필요하죠.1.2 ALU의 입출력입력 설명 예시피연산자계산할 숫자나 데이터. 레지스터에 저장됨.레지스터 A =..
밥먹다 - 데이터베이스 구조와 정규화 기능
·
카테고리 없음
지난 글에서는 Git 커밋 메시지에 이모지를 자동으로 붙여주는 prepare-commit-msg 훅 스크립트를 작성했다.이번 포스트에선 앱의 데이터를 저장하고 활용하기 위한 데이터베이스 구조와 정규화 설계 과정을 비전공자도 이해할 수 있도록 쉽게 정리해보려 한다.📦 처음 생각한 데이터 구조 (비정규형)앱에서 사용자가 냉장고 속 재료를 등록한다고 가정해보자. 처음엔 아래처럼 단순하게 만들고 싶었다.Ingredient- id- user_id- name- expiration_date- amount- unit즉, 한 테이블에 모든 걸 몰아 넣은 구조다.처음에는 간단해 보이지만, 사용자가 늘어나고 기능이 복잡해질수록 관리가 힘들어지고, 중복도 많아진다.예를 들어 같은 "달걀"이 유저마다 매번 새로 저장되고, 나..
밥먹다 - 커밋 메시지 컨벤션 자동화 구축기
·
프로젝트 개발일지/밥먹다
💡 왜 도입했는가?프로젝트 초기부터 팀원 간 일관된 커밋 메시지 컨벤션을 유지하고자 했습니다.하지만 다음과 같은 문제가 예상되었습니다:커밋 메시지 스타일이 팀원마다 달라져 이력이 지저분해짐Gitmoji CLI는 매번 선택을 요구해 생산성 저하이모지를 직접 복사/붙여넣기 번거로움타입을 잘못 쓰면 commitlint가 영문 에러만 보여 가독성 낮음👉 그래서 커밋 타입만 입력해도 자동으로 이모지가 붙고,컨벤션을 어겼을 경우 한글로 친절히 안내하는 스크립트 기반 자동화를 구성했습니다.⚙️ 설치 스크립트 (install.sh)#!/bin/bashecho "🎉 [1/5] 초기화 및 패키지 설치 중..."# 1. package.json 생성npm init -y# 2. 필수 패키지 설치npm install -D ..