전체 글

연새데학교 컴퓨터과학과 & 우아한테크코스 5기 백엔드 스타라이토 깃짱
🌏 운영 중단 없는 대규모 스키마 전환과 데이터 마이그레이션 전략서비스 규모가 커질수록 데이터베이스 스키마 변경과 데이터 마이그레이션은 단순한 기능 추가가 아니라 서비스 안정성과 직결되는 핵심 운영 과제가 됩니다. 특히 다중 서버 환경에서는 코드와 스키마의 버전 불일치로 인해 예상치 못한 장애가 발생할 수 있어, 사전에 철저한 설계와 단계별 검토가 필요합니다.여기서는 실제 운영 환경에서 진행했던 대규모 스키마 전환과 데이터 마이그레이션 과정을 바탕으로, 발생 가능한 문제와 이를 최소화하기 위한 전략을 정리했습니다.🌏 스키마 전환 시 발생할 수 있는 주요 문제✅ 코드-스키마 불일치DB에만 있는 컬럼: 코드가 해당 컬럼을 전혀 참조하지 않으면 문제 없음.코드에서만 존재하는 컬럼: DB에 없을 경우 애플리..
🌏 인트로서비스가 성장하면서 단일 서버 기반의 단순한 구조는 점차 한계를 드러냅니다. 특히 하나의 구성 요소가 고장날 경우 전체 서비스가 멈추는 구조, 즉 SPOF(Single Point of Failure)는 장애 발생 시 곧바로 전체 시스템이 멈추게 되어 사용자 경험에 치명적인 영향을 줄 수 있습니다.이 글에서는 기존 단일 아키텍처에서 출발하여 각 요소별 SPOF 원인과 이를 해결하기 위한 고가용성 아키텍처로의 개선 방안을 단계적으로 설명하겠습니다.🌏 기존 구조와 SPOF 문제✅ 기존 구조Client → Server [Nginx → Tomcat] → Cache(Redis) → RDB이 구조는 각 계층이 모두 단일 서버로 구성되어 있기 때문에, 어느 하나라도 장애가 발생하면 전체 서비스가 중단되는 ..
🌏 AIGOYA란?✅ 프로젝트 개요AIGOYA는 AI 개발에서 발생하는 비효율성을 해결하기 위한 AI 개발 생산성 플랫폼입니다. AI 개발 과정에서 반복되는 전처리, 모델 정의, 학습, 시각화, 평가 등을 프리셋 모듈로 제공하며, 자체 웹 기반 IDE에서 GUI를 활용한 drag-and-drop 개발 환경을 지원합니다. 또한 사용자가 쿠버네티스 기반 클라우드에서 독립된 OS을 점유 사용할 수 있도록 하여, 개발 환경을 손쉽게 구축할 수 있습니다. 부가적으로는 학습 파라미터, 코드 버전, 결과를 함께 저장 관리할 수 있어 프로젝트 추적이 용이하고, 코드 모듈을 공유하고 자신만의 AI 개발자 포트폴리오를 구성할 수 있는 커뮤니티 기능을 제공합니다.해당 프로젝트는 2024년 4월 시작되었으며, 인공지능융합사..
웹에서 3D 그래픽을 그리려고 WebGL을 써보려고 하면, “셰이더가 뭐지?”, “버퍼는 왜 써야 하지?” 같은 질문부터 들게 됩니다.이 글에서는 WebGL 셰이더(Shader)에 대해 다룹니다.🌏 Shader✅ WebGL은 Low Level APIWebGL은 GPU를 직접 제어할 수 있게 해주는 API의 구현체입니다. 다양한 구현 방식 중에 WebGL은 Low-Level API라서, 우리가 GPU에게 모든 걸 직접 지시해야 하는 방식입니다.예를 들어서, "삼각형을 이렇게 이렇게 그려줘!" 라고 명령하기 위해서는 내가 그리고 싶은 삼각형을 화면 상에 어떤 점에 세 가지 꼭지점을 표시하고 각 픽셀을 어떤 색으로 칠할 지 일일이 명령해야 합니다. (추가로, 각 꼭짓점을 GPU에 전송하고 연결, 렌더링 방식..
🌏 인트로서비스를 개발할 때 종종 마주하게 되는 문제 중 하나는 외부 API 호출과 데이터 저장을 어떻게 함께 처리할 것인가이다. 특히 LLM이나 외부 시스템과의 연동은 언제든지 실패하거나, 지연될 수 있는 잠재적 위험을 내포한다. 내 애플리케이션을 아무리 잘 만들더라도, 외부 서버가 다운 되어있거나, 데이터의 형식이 변경된다던가 무튼 아무리 내가 잘 개발하더라도 언제든 호출이 제대로 되지 않을 수 있다는 말이다.이번 글에서는 Kotlin + Spring Boot 환경에서, LLM 응답 처리와 DB 저장을 분리하여 트랜잭션을 효율적으로 관리한 경험을 소개하려고 한다.🌏 문제 상황: 모든 처리를 트랜잭션으로 묶은 경우@Transactionalfun processAllAtOnce(input: Input)..
🌏 WebGL: Canvas, Viewport, 그리고 렌더링까지WebGL을 처음 접하면 가장 먼저 만나는 개념은 canvas, gl, 그리고 render() 함수다. 이 글에서는 처음으로 WebGL로 그래픽을 그릴 때 꼭 이해해야 하는 요소들을 하나하나 짚어보며, 실제로 어떻게 동작하는지도 함께 알아보자.✅ HTML Canvas: 픽셀을 담는 공간HTML5에서 제공하는 요소는 브라우저 안에서 그림을 그릴 수 있는 공간을 제공한다. 이 공간은 비트맵 형식의 2D 또는 3D 그래픽을 표현할 수 있다.자바스크립트로 접근할 수 있으며, 이렇게 사용할 수 있다:const canvas = document.getElementById('myCanvas');canvas.width, canvas.height: 캔버스..
🌏 차등 프라이버시 (ε-Differential Privacy)데이터셋 D=(x1,x2,…,xn) 이 있고, 이로부터 어떤 통계값 f(D)를 공개하고 싶다고 가정합니다. 그런데 직접 f(D)f(D)를 공개하면 개인정보가 유출될 수 있기 때문에, 노이즈를 섞는 방법(무작위화, randomization)을 사용합니다.✅ Neighboring datasetD와 D′는 단 한 사람의 데이터만 다른 데이터셋이라고 가정합니다. 아래와 같이 n번 데이터 하나만 다르고 1~n-1 의 데이터는 모두 같습니다.이 둘을 neighboring datasets라고 부릅니다.✅ DP의 수식적 정의어떤 메커니즘 M이 다음을 만족하면, 이를 ε-차등 프라이버시라고 부릅니다. ε은 프라이버시 손실 허용 정도를 의미하는 파라미터입니다..
🌏 Reconstruction Attack데이터 프라이버시의 보장은 오늘날 데이터 기반 시스템에서 가장 중요한 이슈 중 하나입니다. 그중에서도 재구성 공격(Reconstruction Attack)은 개인 데이터를 보호하는 데 있어 심각한 위협이 됩니다.이번 글에서는 이러한 재구성 공격이 어떻게 이루어지는지, 그리고 이를 막기 위해 랜덤성을 활용한 기법이 어떻게 작동하는지를 수학적으로 자세히 살펴보겠습니다.✅ Reconstruction Attack(재구성 공격)이란?개인 정보가 담긴 데이터를 그대로 공개하면 심각한 문제가 생길 수 있습니다. 각각의 정보를 직접 공개하지 않는다고 하더라도 통계만 가지고도 특정 데이터가 어떠한 데이터인지 알아낼 수 있다는 것이 문제입니다. 예를 들어서 2명의 몸무게 평균을 ..
· JAVA
자바에서 리스트 만드는 다양한 방법이 존재합니다.각각은 그냥 대충 사용하자면 신경 안쓰고 사용할 수 있지만 실은 결과에 꽤 큰 차이를 가져올 수 있습ㄴ디ㅏ.각각의 차이에 대해 알아보죠.🌏 List 생성 방법✅ 1. Arrays.asList(...)List list = Arrays.asList(1, 2, 3);고정 크기 리스트 (배열 기반)get(), set() 가능❌ add(), remove() 불가 → 크기 변경 시 UnsupportedOperationException 예외 발생list.set(0, 100); // ✅ 가능list.add(4); // ❌ 에러 발생✅ 2. List.of(...) (Java 9 이상)List list = List.of(1, 2, 3);진짜 불변 리스트❌ ..
이 문제는 이분 탐색(Binary Search) 을 이용해서 해결할 수 있는 전형적인 최적화 문제입니다.전체적인 아이디어는 다음과 같습니다.✅ 문제 요약n명의 사람이 입국심사를 기다림각 심사관이 한 사람을 처리하는 시간은 times 배열에 있음모든 사람이 심사를 받는 데 걸리는 최소 시간을 구하기💡 핵심 아이디어어떤 시간 t가 주어졌을 때, 그 시간 내에 n명을 처리할 수 있는지를 판단할 수 있다면,t를 이분 탐색으로 줄여가며 최소의 시간을 구할 수 있습니다.만약 28분이라는 시간이 있다고 치면?각 심사관이 28분 안에 몇 명 처리할 수 있을까요?28 / 7 = 4명 (첫 번째 심사관)28 / 10 = 2명 (두 번째 심사관)총 6명 처리 가능근데 더 짧은 시간에도 가능할 수도 있잖아요?🔍 여기서 이..