Posts by Category

pattern

진부함의 미학

1 분 소요

코딩, 디자인, 기획 등 다양한 업무는 겉으로는 서로 다르게 보이지만, 사실 사람의 심리와 인지 과정에 깊이 연관된다는 점에서 공통된 특성을 지닙니다. 이들 작업의 결과물은 비록 컴퓨터나 특정 시스템에서 실행되지만, 그 과정을 설계하고 수행하는 것은 사람이며, 이는 작업 전반에 큰...

캐시 및 배치 처리로 성능 최적화하기

10 분 소요

다단계 캐시를 통해 읽기 성능 높이기에서는 Redis와 인메모리 로컬 캐시를 활용하여 계층형 캐시를 구성하고, 트랜잭션 내 데이터 고립성을 유지하면서 데이터 접근 성능을 향상시키는 방법을 다루었습니다. 배치 처리를 통해 읽기 성능 높이기에서는 연관된 쿼리를 배치 처리하여 불필요한 ...

배치 처리를 통해 읽기 성능 높이기

2 분 소요

캐시를 활용하면 리소스를 사용자에게 가까운 위치에 저장해 더 빠르게 제공할 수 있습니다. 하지만 서로 다른 리소스를 요청할 경우, 여전히 반복적인 조회 요청이 발생하게 됩니다. 인덱싱된 리소스는 빠르게 찾을 수 있지만, I/O 요청으로 인한 오버헤드는 여전히 존재하며, 인덱싱되지 ...

다단계 캐시를 통해 읽기 성능 높이기

2 분 소요

도메인 주도 설계(Domain-Driven Design, DDD)는 도메인 개념을 명확히 표현하고 트랜잭션 일관성을 유지할 경계를 식별하여 애그리게잇(Aggregate)을 정의합니다. 애그리게잇은 루트 엔티티를 중심으로 긴밀하게 결합된 객체들의 집합으로, 내부 엔티티와 값 객체는 ...

RESTful API 설계 가이드

8 분 소요

gRPC와 같은 원격 프로시저 호출이나 GraphQL과 같은 쿼리 언어가 인기를 끌고 있지만, REST(Representational State Transfer)는 여전히 그 단순함과 직관성 덕분에 가장 널리 사용되는 방법입니다.

도메인 주도 설계 핸드북

19 분 소요

현대의 비즈니스 환경은 빠르게 변화하며, 고객의 요구사항도 시시각각 변합니다. 이러한 환경에서 성공적으로 가치를 전달하기 위해서는 소프트웨어가 변화에 유연하게 대응할 수 있어야 합니다. 요구사항의 대부분은 비즈니스에서 출발하기 때문에, 소프트웨어 개발의 초점은 비즈니스 도메인에 맞...

도메인 모델과 명세의 분리

1 분 소요

사용자 인터페이스에서 데이터를 쉽게 추출하기 위해, 도메인 모델은 종종 도메인 또는 비즈니스 로직을 포함하지 않고 데이터를 전달하는 구조체의 형태를 취합니다.

그래서 객체지향이란 무엇인가요?

4 분 소요

1967년 5월, 크리스틴 니갈(Kristen Nygaard)과 올 요한 다히(Ole-Johan Dahl)는 오슬로에서 열린 IFIP 시뮬레이션 언어 실무 회의에서 클래스와 서브클래스 선언에 관한 논문을 발표했습니다. 이 논문은 객체지향 기능이 추가된 Simula 67의 첫 번째 ...

이건 테스트에서만 사용이 된다고요

1 분 소요

테스트 코드를 작성할 때, 테스트 대역을 생성하거나 특수한 설정을 위해 제품 코드를 수정해야 하는 경우가 있습니다. 그러나 이러한 변경이 실제로 필요한지 신중하게 고민해야 합니다. 테스트를 위해 제품 코드를 수정하는 것은 어디까지 허용되어야 할까요?

DDD와 함께하는 서비스 가이드

3 분 소요

Spring Boot를 사용하면서 Controller, Service, Repository, Entity가 각 도메인마다 하나씩 존재하는 정형화된 패턴을 쉽게 볼 수 있습니다. 하지만 도메인의 복잡도가 올라가다 보면 그 도메인이 가진 모든 연산을 수행하는 거대한 Service와 그...

맨 위로 이동 ↑

system

프로파일링을 통한 병목 지점 개선

8 분 소요

Uniflow는 다양한 작업을 효율적으로 관리할 수 있는 범용 워크플로우 엔진입니다. API 서버, 데이터 스트리밍, 일괄 작업, 챗봇 등 여러 유스 케이스를 고려하여 설계되었으며, 최상의 성능을 목표로 하기보다는 다양한 상황에서 높은 성능을 제공하는 데 중점을 두고 있습니다.

코드로 읽는 가상 스레드

9 분 소요

JDK 21에서 가상 스레드가 공식 기능으로 추가되었습니다. 가상 스레드가 추가되기 전에는 OS 스레드를 직접 생성하고 사용자 스레드에 매핑하는 플랫폼 스레드 방식이 사용되었습니다.

컴파일을 통한 인코딩 최적화

5 분 소요

런타임 시점에 객체를 유연하게 처리하기 위해 리플렉션은 인코딩 라이브러리에서 자주 사용됩니다. 더 빠른 성능을 얻기 위해서는 자동 코드 생성이나 전용 인터페이스를 활용하는 것이 좋지만, 추가적인 코드 관리를 필요로 하기 때문에 간편한 리플렉션을 선호하는 경우도 많습니다.

Go에서 타입 정보는 어디에 저장될까?

6 분 소요

리플렉션은 런타임 시점에 객체의 타입 정보에 접근하여 객체를 유연하게 처리할 수 있도록 해줍니다. 이를 위해서는 런타임에서 객체의 메타 정보에 접근할 수 있어야 합니다.

함께 보는 Go 메모리

4 분 소요

Go는 정적 타입 컴파일 언어의 효율성을 유지하면서도 동적 언어처럼 사용하기 쉽도록 설계되었습니다.

한계를 넘어, 더 큰 메모리 공간으로

6 분 소요

64비트 프로세스로의 전환은 속도, 안정성, 그리고 보안 측면에서 상당한 이점을 제공합니다. 64비트 프로세스는 더 많은 레지스터를 활용하여 데이터를 효율적으로 처리할 수 있으며, 더 많은 데이터를 처리할 수 있게 메모리 공간도 4GB에서 최대 18EB로 확장되었습니다.

맨 위로 이동 ↑

management

기술에 집중하지 마세요

1 분 소요

마이크로서비스 아키텍처, 컨테이너 오케스트레이션, 머신러닝 같은 기술들은 현재 많은 주목을 받고 있습니다. 이 기술들은 그 자체로도 강력하면서도 다양한 부가적인 이점을 제공합니다. 이러한 기술들을 도입하면 서비스의 가치를 더 효과적으로 전달할 수 있을 뿐만 아니라, 팀의 관심을 유...

결국 우리는 한 팀이다

1 분 소요

직접 기획하고 설계한 기능이나 서비스에 대한 애착은 당연한 일이에요. 초기 기획과 설계는 수많은 노력과 땀으로 다듬어졌을 테니까요. 그러나 종종 다른 동료들이나 고객들의 반대를 마주할 수 있어요.

레거시 죽이기

5 분 소요

새로운 프로젝트를 만나는 건 설렘과 기대로 넘쳐나는 순간이죠. 카페에서 테이크아웃한 음료를 한 모금씩 즐기며, 팀원들과 인사를 나누며 목표를 공유하고 비전에 공감합니다. 그러나 코드를 마주한 순간, 처음의 희망은 온데간데없고 갑갑함만이 자리를 차지하고 있었습니다.

애자일 속 TDD

10 분 소요

우리는 소프트웨어를 개발하고, 또 다른 사람의 개발을 도와주면서 소프트웨어 개발의 더 나은 방법들을 찾아가고 있다. 이 작업을 통해 우리는 다음을 가치 있게 여기게 되었다: 공정과 도구보다 개인과 상호작용을 포괄적인 문서보다 작동하는 소프트웨어를 계약 협상보다 고객과의 ...

맨 위로 이동 ↑

network

이해하기 쉬운 TLS

6 분 소요

초기 웹 통신에서는 제3자가 통신 내용을 엿볼 수 있는 보안 문제가 존재했습니다. 이를 해결하기 위해 1990년대 중반, 넷스케이프(Netscape)는 SSL(Secure Sockets Layer) 프로토콜을 개발했습니다. SSL은 클라이언트와 서버 간의 데이터를 암호화하여 외부의...

HTTP Simple Request 탐험하기

1 분 소요

웹은 사용자의 의도와 무관하게 공격자가 특정 웹사이트에 의도하지 않은 행위를 요청하여 정보를 탈취하는 사이트 간 요청 위조(Cross-site request forgery, CSRF, XSRF)를 막기 위해 기본적으로 같은 출처에서만 리소스를 공유할 수 있는 동일 출처 정책(SOP...

ARPANET에서 HTTP/3까지 여정을 떠나요

20 분 소요

1950년대, 미국의 국방, 연구 및 교육 기관은 정보와 리소스를 공유하기 위한 최초의 컴퓨터 네트워크를 개발했습니다. 이 네트워크는 메인프레임 컴퓨터와 단말기 사이의 통신으로 시작되었고, 나중에는 컴퓨터 간의 연결로 발전했습니다. 그러나 이 네트워크는 같은 지역 내의 컴퓨터끼리만...

맨 위로 이동 ↑

low-code

안녕, uniflow

3 분 소요

카카오 클라우드 AI 서비스의 미들웨어 개발은 현존하는 지식을 적극 활용하여 새로운 AI 서비스를 선보이기 위한 첫 발걸음이었습니다. 백엔드 AI 모델 팀으로부터 도착한 API를 기반으로 Spring Cloud Gateway를 활용하여 열정적으로 미들웨어에 추가 요구사항을 구현했습...

맨 위로 이동 ↑

review

잘가 2023! 반가워 2024

6 분 소요

2023년은 새로운 도전과 성장, 다양한 경험들이 얽힌 풍성한 한 해였습니다. AIaaS 팀에서의 경험을 출발로 Vision Intelligence 팀에서의 새로운 도전, 숭실대학교 졸업, 군 복무, 여행, 프로젝트 경험까지 풍부한 순간들이 가득했습니다. 새해에는 더욱 풍요로운 순...

맨 위로 이동 ↑

database

인덱스를 지원하는 인메모리 도큐먼트 DB 만들기

12 분 소요

uniflow은 Stand-Alone 지원과 효과적인 테스트를 위해 인메모리 도큐먼트 데이터베이스인 memdb를 제공합니다. 이는 개발 및 테스트 환경에서 mongodb를 대체하여 빠르고 간편한 환경 구성을 위해 설계되었습니다.

맨 위로 이동 ↑

infrastructure

쿠버네티스는 리소스의 변경을 어떻게 감지할까?

1 분 소요

쿠버네티스에서 컨트롤러는 지속적으로 리소스를 추적하며, 리소스의 변경을 감지하고 현재 상태를 정의된 원하는 상태에 조정합니다. 이 과정에서 컨트롤러는 쿠버네티스 API 서버를 통해 관련된 하위 리소스를 변경하거나 외부 자원을 제어합니다.

맨 위로 이동 ↑