전체 글 33

AI 코딩 에이전트 도입: OpenCode

들어가며최근 몇 년 사이, LLM(Large Language Model) 기반 코딩 에이전트를 활용한 개발 사례가 폭발적으로 증가하고 있다. 과거에는 Code Autocomplete와 같은 IDE 보조 도구 수준에 머물렀던 기술이, 이제는 실제로 “개발자 역할의 일부”를 대체하는 수준까지 발전했다. 현재 코딩 에이전트는 다음과 같은 작업도 안정적으로 수행한다.코드 생성리팩토링디버깅테스트 코드 작성VCS(Git, Github) 관리개인적으로는 코딩 에이전트를 활용하는 방법론과 이를 지원하는 라이브러리들의 성숙도가 일정 수준 이상 올라왔다고 보고 있다. 즉, 더 이상 실험적인 도구가 아니라, 실제 개발 워크플로우에 통합할 수 있는 단계에 도달했다고 생각한다. 따라서 이제는 개발자들도 코딩 에이전트를 보조 도..

2차원 누적 합(2D Prefix Sums)과 구간 합(2D Range Sums)

1차원 누적 합과 구간 합2차원 누적 합과 구간 합을 알아보기 전에 1차원 누적 합과 구간 합에 대해 알아보도록 한다.1차원 누적 합은 1차원 배열에서 시작부터 특정 인덱스까지의 모든 원소들의 합을 말한다. 누적 합은 후술할 구간 합을 구하기 위해 주로 사용된다.$$ sum[k] = \sum_{0}^k arr[i] $$1차원 구간 합은 1차원 배열에서 특정 인덱스 $\small a$의 원소부터 특정 인덱스 $\small b$까지의 모든 원소들의 합을 말한다.$$ range\_sum[a, b] = \sum_{a}^b arr[i] $$1차원 구간 합은 1차원 누적 합의 차를 이용해서 쉽게 구할 수 있다. 이때, 구간의 개폐 여부를 주의해야 한다. 아래는 폐구간(닫힌 구간)의 합이다.$$ range\_sum..

CS/알고리즘 2026.01.12

Nextjs에서 Server Functions와 useActionState만 이용해 로그인 폼 만들기

들어가며Nextjs에서 Server Functions와 useActionState만을 이용해서 상태를 가지는 을 만들 수 있다. 대부분은 효과적인 을 만들기 위해 외부 라이브러리에 의존하곤 한다. 하지만, 이 방법은 오직 React와 Nextjs만을 이용하기에 의존성이 가볍다. 특히, 컴포넌트에 존재하던 '요청' 로직을 Server Functions로 분리해낼 수 있어 코드의 결합도를 낮춘다는 큰 장점을 가진다.React, Server Functions - https://react.dev/reference/rsc/server-functionsNextjs, Updating Data - https://nextjs.org/docs/app/getting-started/updating-dataReact, useA..

Framework/Nextjs 2025.11.01

컴퓨터통신 - 7편. OSI 1계층: 물리계층

물리계층의 역할OSI 7계층 중 최하위 계층인 물리계층(physical layer)은 "데이터를 링크로 어떻게 전송할까"에 대한 프로토콜이다. 컴퓨터 통신에서 데이터를 주고 받기 위해서 정의되어야 할 것이 '데이터의 종류', '신호의 종류', '전송 방법'이다. 이들 모두 디지털(digital) 또는, 아날로그(analog)로 나눌 수 있다.전송 방법어떠한 신호도 링크를 타고 이동하다보면 손실이 발생하기 마련이다. 따라서, 링크의 길이는 제한적이고, 이 제한을 해결하기 위해 노드를 통해 신호를 중계한다. 이때의 신호 중계 방식을 전송(tramissioin)이라 한다. 신호가 중계기로 들어오면 신호를 다시 전송할 수 있을 정도로 복구해야 한다. 아날로그 전송 방법은 이 신호를 단순히 증폭시켜 다시 링크로 ..

CS/네트워크 2025.10.23

코틀린에서의 빌더 패턴(builder pattern)

빌더 패턴이란?빌더 패턴(builder pattern)은 객체를 생성하는 패턴 중 하나로, 빌더라는 별도의 객체를 통해 생성할 객체를 정의하는 방법이다.빌더 패턴의 장점필드(field)가 많은 객체를 생성할 때의 코드가 명확해진다. 생성자를 통해 객체를 생성할 때 생성자의 어떤 매개변수가 어떤 필드에 대응하는지 파악하기 어렵다.불변 객체에도 사용할 수 있다. 빌더가 빌드(생성자를 호출하는 함수)하기 전까지 객체가 생성되진 않는다. 그 전까지 빌더 내부의 필드를 수정하다가 빌드하여 불변 객체를 생성할 수 있다.불변 객체는 곧 쓰레드 안전(thread safe)하다.입력되는 매개변수의 불변식(invariant)을 검사하는 로직을 추가할 수 있다.추상 클래스에는 추상 빌더를, 구체 클래스에는 구체 빌더를 갖게..

Programming/Kotlin 2025.09.17

Spring Webflux + Exposed-r2dbc에서 트랜잭션 다루기(with. suspendTransaction)

문제 상황Kotlin + Spring Webflux 프로젝트를 진행하던 중, 트랜잭션과 관련한 문제에 부딪혔다. 프로젝트는 일반적인 레이어드 아키텍처를 따르며, 그 중 레포지토리 계층은 Exposed로 구현하고 있다. Exposed의 모든 쿼리는 트랜잭션 함수 내부에서 실행해야 하기에 레포지토리 계층에서만 트랜잭션을 갖도록 구현하였다.suspend fun findAll(): List = suspendTransaction(context = Dispatchers.IO, readOnly = true) { StarWarsFilmsTable.selectAll().map { StarWarsFilms( id = Id(it[S..

Kotlin + Spring Webflux + Spring Webflux에 exposed-r2dbc 사용하기

들어가며Spring Webflux에서 r2dbc를 사용하기 위해서 Spring Data R2DBC를 이용하곤 한다. 하지만 Spring Data R2DBC는 몇 가지 한계점들을 가지고 있다.Spring Data JPA와 달리 캐싱이나 지연 로딩(lazy loading) 등을 지원하지 않고 있다.보다 다양한 쿼리를 만들기 위해선 QueryDSL이 필요하다. 이를 위해 QueryDSL과 R2DBC extension까지 의존성이 늘어난다.R2DBC에 대한 지원이 느리다.이와 달리 jetbrains의 exposed는 다음과 같은 장점이 있다.ORM을 통한 쿼리 빌드가 주 기능이다. 그만큼 가볍다.SQL DML의 구문과 같거나 비슷하여 이해하기 쉽다. 예를 들어, SELECT문은 select()나, selectA..

컴퓨터통신 - 6편. 노드와 링크 자세히 보기

노드의 정체노드(node)는 네트워크 상에서 링크와 연결된 기기(하드웨어)이다. 노드는 역할에 따라 단말기(terminal), 호스트(host), 스위치(switch)나 라우터(router) 등 다른 이름으로도 불린다. 즉, 노드는 범용 컴퓨터 또는, 특수한 목적으로 설계된 하드웨어로 생각할 수 있다. 노드를 범용 컴퓨터라 한다면, 노드도 'CPU - Cache - Memory'의 계층적인 하드웨어 구조를 가진다. 이 구조에서 입/출력이 네트워크 어댑터(Network Adaptor) 또는, 네트워크 인터페이스 카드(Network Interface Card; NIC)를 통해 네트워크와 연결되어 있으면 노드가 된다. 노드는 메모리라는 유한한 저장공간을 가져 네트워크에서 많은 양의 트래픽이 도착할 경우 데이터..

CS/네트워크 2025.07.07

캐시 계층에서의 다양한 캐싱 전략들(Caching Strategies)

캐시를 사용하는 방법은 데이터 접근 패턴이나 시스템 설계 방식 등에 따라 다양하다. 적절한 캐시 사용은 리소스를 절약하고 지연시간을 감소시킬 수 있다. 따라서, 시스템에 캐시 계층을 도입하고자 한다면 다양한 캐싱 전략들에 대해 이해하고 있어야 한다. 캐시에 대한 기본적인 이해가 필요하다면 아래의 글을 참고하자.[시스템 설계/운영] 캐시는 왜 사용할까? - 캐시의 특징과 용어에 대해 - magae's DB캐싱 전략은 최초에 응용 서버가 데이터를 읽으려고 하냐와 쓰려고 하냐에 따라 읽기 전략과 쓰기 전략으로 분류할 수 있다.읽기 전략Read ThroughCache Aside쓰기 전략Write ThroughWrite AroundWrite Behind(Write Back)읽기 전략Read Through다음은 캐..

캐시는 왜 사용할까? - 캐시의 특징과 용어에 대해

캐시컴퓨터 과학에서 캐시(cache)는 자주 사용되는 데이터를 저장해놓는 임시 저장소를 말한다. 캐시는 어떤 작업이나 시스템의 지연시간(latency)을 개선하기 위해 사용된다. 캐시는 다음과 같은 특징들을 가진다.캐시는 빠른 읽기 성능을 제공한다.데이터를 저장하는 저장소의 부하를 줄여준다.클라이언트와의 물리적 거리를 줄여준다.1. 캐시는 빠른 읽기 성능을 제공한다.현대 컴퓨터에서는 물리적, 비용적 한계로 인해 데이터를 디스크에 저장하고 있다. 데이터를 디스크로부터 읽고 쓰는 작업은 여러 컴퓨팅 작업 중에서도 굉장히 느린 편에 속한다. 이 작업 속도를 개선하기 위해 캐시와 메모리 계층 구조를 이용한다.시스템에서의 캐시 계층도 이와 마찬가지의 역할을 수행한다. 많은 시스템에서 영속성 데이터는 관계형 데이터..

반응형