전체 글

전공 이외의 것들은 여기 작성하고 있습니다→https://blog.naver.com/7chabin
Kotlin을 Spring에 붙이는 건 생각보다 자연스럽다.다만 Java와 기본 전제가 다른 부분이 몇 가지 있어서, 실제 코드와 함께 눈에 익힐 필요가 있다.1. 기본 전제부터 다름Java는 클래스와 메서드가 기본적으로 open이다.Kotlin은 기본적으로 final이다.Spring이 프록시를 만들거나 AOP를 적용하려면 클래스가 open이어야 한다.그래서 kotlin("plugin.spring") 플러그인이 필수다. 이 플러그인이 @Component, @Service, @RestController 등에 자동으로 open을 붙여준다.2. 프로젝트 세팅Gradle Kotlin DSL을 쓰는 게 가장 깔끔하다고 한다.주요 포인트는 다음과 같다.kotlin("plugin.spring")을 반드시 넣는다.JP..
최근에 Jetbrains에서, 코틀린 16주년을 맞아서 코틀린 광고?를 몇몇 it 유튜버들에게 하고 있는걸 보고, 이제는 코틀린을 배워봐야겠다는 생각이 들어 오랜만에 작성하게 되었다. 그리고 it기업들이 예전부터 코틀린+Spring 조합을 많이 쓰길래, 바이브코딩만 할게 아니라 언어공부도 하면서 늦게나마 따라가야 한다는 생각도 들었다.1. 코틀린이란?'JetBrains가 개발한 현대적인 정적 타입 프로그래밍 언어' 라고 한다. (정적 타입: 컴파일시 변수 타입을 미리 검사 - Java, TypeScript)1.1 핵심 특징JVM기반 + 상호 운용성: 자바와 100%호환되며, 기본 자바를 그대로 호출하거나 점진적 마이그레이션 가능간결하고 안전: null 안정성(Null Safety)이 기본으로 내장되어 N..
저번 AI_TOP_100 1차에서 예선 탈락한 이후, 다음 대회가 열린다면 열심히 준비하겠다고 다짐하고 있었다. 그리고 마침, 6개월도 안지나서 AI_TOP_100(Campus)대회가 열린 것이다! 본선만 가도 TOP 100명에 든 것이니, 본선만 가자는 마인드로 준비했다. 예선 준비지난번에 탈락했을 때 고전했던 부분이 OCR에 대한 부분이였다. 아예 준비를 안하다보니, AI에 흐릿한 사진 파일들을 주고 진행했고 문제가 잘 풀리지 않았다. 하지만 예선이니만큼, 어마어마한 준비를 하지는 않고 CLOVA OCR를 신청해두는 정도로 준비했다.바로 예선에서 OCR을 활용하는 문제가 출제되었고(이제보니 단골같다. AI를 별 생각 없이 쓰는 사람을 구별해낼 수 있는 좋은 방법이라고 생각하는 것 같고, 실제로 그러한..
외부 API를 프록시하는 서버에서 동시 요청이 몰릴 때 429를 근본적으로 차단하는 방법을 정리한다.배경: 모의투자 앱의 캔들 차트모의투자 서비스에서 종목 상세 화면의 캔들 차트는 과거 봉 데이터가 필요하다. 유저가 차트를 왼쪽으로 스크롤(페이지네이션)하면 서버가 Upbit REST API에서 과거 캔들을 가져와 DB에 저장한 뒤 응답한다.클라이언트 → 우리 서버 → Upbit API (캔들 조회) ↓ DB 저장 (캐시) ↓ 클라이언트에 응답한 번 DB에 저장된 구간은 이후 요청에서 Upbit를 거치지 않고 바로 응답한다. 문제는 아직 적재되지 않은 구간을 여러 유저가 동시에 요청할 때다.클라이언트에서 직..
https://www.acmicpc.net/problem/1759 문제분석단 한번에 풀어서 너무 감동적인, 뜻깊은 문제다.사실 단 한번에 풀린만큼, 그렇게 어려운 내용은 아니다. L만큼의 암호 길이를 만들어야 하고, C만큼 제공된 문자 종류를 활용해야 한다. 조건은 모음이 1개 이상, 자음이 2개 이상이다.이 조건을 다 따져가면서 문자를 넣는 것이 아니다. DFS로 모든 경우를 탐색(브루트포스)하면서, 암호가 L길이가 됐을 때 -> 조건 충족한다면 출력 후보에 추가, 충족 안할경우 버림. 이 로직이 끝이다. 추가적으로 탐색을 막기 위해, 남은 문자로 L개 문자 못만드는 경우를 return해줬다. 코드import java.util.*;import java.io.*;public class Main { ..
· Backend
모의코인 서버를 개발하면서 캔들 backfill 로직에 조용한 성능 문제가 있다는 걸 뒤늦게 발견했다.이 글은 그 문제를 발견하고 고친 과정을 실제 벤치마크 수치와 함께 정리한 기록이다.배경: 캔들 backfill이란모의코인 서버는 Upbit 거래소 API로 시세 데이터를 수집하고, 클라이언트가 차트를 요청하면 DB에서 캔들을 조회해 내려준다.클라이언트가 GET /api/v1/markets/KRW-BTC/candles?interval=1h&count=200 같은 요청을 보냈을 때,해당 시간대 데이터가 DB에 없으면 Upbit API를 호출해 채우는 과정이 backfill이다.문제는 이 backfill을 어떤 방식으로 구현하느냐였다.변경 전: 1분봉이 진리다초기 구현의 철학은 단순했다."1분봉이 원천 데이..
· Backend
ChatGPT, Claude 같은 LLM 서비스는 토큰을 하나씩 스트리밍으로 내려준다.이때 서버-클라이언트 사이의 프로토콜로 WebSocket과 SSE 중 뭘 써야 할까?왜 이 실험을 했나AI 응답을 실시간으로 전달하는 방법은 크게 두 가지다.SSE (Server-Sent Events): 단순 HTTP GET 위에 text/event-stream으로 서버→클라이언트 단방향 푸시WebSocket: HTTP Upgrade(101)를 거친 뒤 양방향 전이중 통신둘 다 "토큰을 한 글자씩 내려보내는" 용도로는 충분히 동작한다. 하지만 프로토콜 자체의 핸드셰이크 비용, 고부하 안정성, 네트워크 효율은 꽤 다를 수 있다. 실제 AI 호출 없이 프로토콜 순수 비용만 격리해서 측정해봤다.실험 설계서버항목스펙프레임워크S..
· AI
https://github.com/chabinhwang/toss-mcp GitHub - chabinhwang/toss-mcp: 토스 개발자 문서(앱인토스, TDS React Native, TDS Mobile) 및 TDS기반 토스 아이토스 개발자 문서(앱인토스, TDS React Native, TDS Mobile) 및 TDS기반 토스 아이콘 정보를 AI에게 제공하는 MCP 서버 - chabinhwang/toss-mcpgithub.com https://github.com/chabinhwang/upbit-mcp GitHub - chabinhwang/upbit-mcp: 업비트 API 문서를 AI에게 제공하는 MCP 서버업비트 API 문서를 AI에게 제공하는 MCP 서버. Contribute to chabinhw..
chabin37
chabin37