IT
Dynamic Programming (DP) : 작은 문제의 답을 조합해 큰 문제를 푼다.
Dynamic Programming (DP) : 작은 문제의 답을 조합해 큰 문제를 푼다.
2025.04.13다이나믹 프로그래밍(DP)은 복잡한 문제를 여러 개의 작은 문제로 나누고, 그 작은 문제들의 결과를 재사용하여 전체 문제를 빠르게 해결하는 기법입니다. 🧠 Divide and Conquer vs Dynamic ProgrammingDP는 Divide and Conquer(분할 정복)와 유사해 보이지만, 몇 가지 중요한 차이점이 존재합니다.구분Divide and ConquerDynamic Programming문제 분할주로 절반으로 나눔보통 -1씩 줄여 나감문제 성격함수형 문제 (Function Problem)최적화 문제 (Optimization Problem)결과 사용결과는 한 번만 사용결과를 여러 번 사용성능 향상 방법분할 자체가 성능을 높임결과의 재사용이 핵심 🔁 Overlapping Subprobl..
Jackson 직렬화 시 > 기호가 깨질 때 원인과 해결법
Jackson 직렬화 시 > 기호가 깨질 때 원인과 해결법
2025.03.30문제 상황API 응답에서 특수문자가 Unicode escape 형태로 내려오는 현상이 있었다. 예를 들어, > 기호가 \u003E로 바뀌는 경우가 해당된다. 디버깅 시에는 >로 보이지만, 실제 응답에서는 인코딩된 문자처럼 보이는 이유와 해결방법을 정리해보았습니다. 예시public class Product { @JsonProperty("description") private String description = "1 > 0";}디버깅 출력 : 1 > 0 (그대로)JSON 응답 : 1 \u003E 0 원인 분석디버깅 : 단순 문자열 표시라 > 그대로 보임JSON 직렬화 : Jackson 등 직렬화 도구에서 보안 목적으로 이스케이프 처리> 에서 \u003E 로 보임 : , & 등은 XSS 방지 ..
공통 쿼리 재사용을 고려한 랜덤 추출 쿼리 작성 방법 (Oracle + MyBatis)
공통 쿼리 재사용을 고려한 랜덤 추출 쿼리 작성 방법 (Oracle + MyBatis)
2025.03.23최근 프로젝트에서 조건에 맞는 카테고리 중 랜덤으로 하나씩 상품을 뽑고, 조건에 맞는 나머지 상품을 추가로 추출하여 총 n개를 만드는 쿼리를 작성할 일이 있었다. 단순히, union all 로 처리할 수 있지만, 중복 상품, 조건 필터링, MyBatis와의 연동 등을 고려하다 보니 쿼리가 점점 길어졌다. 이 글에서는 Oracle에서 중복을 피하면서 효율적인 쿼리를 작성하고, MyBatis XML에서 공통 쿼리를 재활용하는 방법을 소개한다. 처음 작성한 쿼리 처음에 간단하게 각각 하나씩 뽑고 UNION ALL 로 붙이면 될 줄 알았다. 하지만 이 방식은 조건에 맞는 데이터를 추출하면서 쿼리 중복과 중복된 결과 처리 문제가 발생했다.반복되는 UNION ALL 쿼리를 효율적으로 관리하고, MyBatis에서 ..
웹 브라우저 요청 흐름
웹 브라우저 요청 흐름
2025.01.06URI vs URL vs URNURI는 Locator, name 을 분류할 수 있다. 즉, 자원을 식별하는 역할을 수행한다.URL = 리소스 위치URN = 리소스 이름 예를 들면 URN:ISBN:8960777331 도서 책 ISBN에서 사용하는 유즈케이스이다. 하지만, URN 이름만으로는 실제 리소스를 찾는데 방법이 보편화되어있지는 않다. 그래서 거의 대부분 URL을 사용한다고 생각하면 된다. 일반적으로 URL 분석은 아래 포맷을 따르게 된다. scheme://[userinfo@]host[:port][/path][?query][#fragment] 형태를 가지게 된다. scheme - 어떤 프로토콜을 사용할지 결정한다. userinfo - URL에 사용자정보를 포함해서 인증한다. host - 도메인명을 ..
RxParallelRunner 소개
RxParallelRunner 소개
2024.12.02소개앱에서 대량의 데이터를 읽거나 분석하는 작업은 처리 속도가 느리면 사용자 경험에 부정적인 영향을 미칠 수 있다. 이것을 최근에 겪어서 성능 처리에 대한 고민이 깊어졌다. 우선.. RxParallelRunner 이 남용되서 사용되었던 점이 문제였다. 이번 기회에 RxParallelRunner 를 다뤄서 제대로 사용해보고자 한다! 대규모 데이터를 병렬로 처리하는 앱 개발 중, 다음과 같은 문제에 직면할 수 있다.1. 작업 속도 문제- 처리해야할 데이터가 커지면 작업이 느려진다. 2. 자원 관리 문제- 작업이 많아질경우 스레드 수 증가로 GC가 과도하게 발생될 수 있다.3. 스레드 관리 문제- 모든 과하면 탈난다. 스레드가 과도하게 생성되면 비효율적이다. RxParallelRunner 란?RxParall..
Internal, external gateway 에 대해서
Internal, external gateway 에 대해서
2024.11.25아래 그림은 서버와 클라이언트가 API Gateway를 통해 통신하는 구조를 보여주는데 처음 보면 다소 복잡해 보일 수 있지만, Gateway는 이 과정을 효율적으로 관리해 준다. API Gateway는 내부 서비스 간 통신을 담당하는 Internal Gateway와 외부 클라이언트 요청을 처리하는 External Gateway로 나누게 되는데, 이번 글에서는 이를 알아보려 한다. API Gateway: MSA 환경에서 External Gateway와 Internal Gateway 차이모놀리틱 구조에서는 모든 컴포넌트가 하나의 애플리케이션 안에서 동작했었다. 통신 레이어가 필요하지 않았고, 변경 시 시스템 전체에 영향을 미치곤했었다. 그래서 이를 해결하기 위해 MSA(Microservices Archit..
가상 면접 사례로 배우는 대규모 시스템 설계 기초 4장
가상 면접 사례로 배우는 대규모 시스템 설계 기초 4장
2024.10.06처리율 제한 장치특정 시간 동안 네트워크를 통해 전송되는 데이터의 양이나 서비스에 대한 요청 수를 제한하는 장치나 소프트웨어를 의미한다.API 처리 장치의 장점Denial of Service 공격 방지DOS 라고 하며 인터넷이나 네트워크에 연결된 서비스나 서버를 대상으로 공격자가 정상적인 사용자나 시스템이 서비스를 이용하지 못하도록 의도적으로 과부하를 일으키는 사이버 공격을 방지한다. 서비스에 대한 요청 수를 제한하기 때문에 비용이 절감될 수 있다.서버 과부하를 막는 목적도 있다.시스템 설계 4단계 접근법을 적용1단계 문제 이해 및 설계 범위 확정 요구사항 설정되어 있는 처리율을 초과하는 요청은 제한한다. HTTP 응답시간에 나쁜 영향을 주면 안되니 낮은 응답시간을 전제로 한다.적은 메모리하나의 처리율 ..
[VMware Tanzu] Spring Boot 밋업 with Josh Long
[VMware Tanzu] Spring Boot 밋업 with Josh Long
2024.09.29인프런에 퇴근길 밋업으로 영상 제공되는게 있어서 들어보았다. 처음에는 개 입양서비스를 만드는 부분에 대해서 실시간 라이브 코딩을 진행했다. 스피커 Josh Long 분께서 말을 너무 잘하셔서 놀랐다.Spring Project를 바로 만드셨고 아래 Dependencies 를 하나씩 추가하셨다. 로컬호스트에서 프로젝트를 실행하고 데이터베이스까지 연결 확인해보려고 했는데 우선은 데이터가 없어서 스킵했다! 코드에서 Data Oriented Programming 방식을 지원하는데 Java 버전이 17 이후로 올라가면서 다음 문법들을 지원하게 되었다. sealed typesrecordspattern matching smart switch expressions 이러한 방식을 지원하는건 자바가 대규모 프로그래밍에서 ..
Spring Batch 5 migration guide
Spring Batch 5 migration guide
2024.09.01개요Spring Batch 5.0부터 JobBuilderFactory와 같은 일부 팩토리 클래스들이 deprecated 되었고, 대신 직접 빌더를 생성하는 방식으로 변경팩토리 메서드는 보통 매개변수가 숨겨져 있는 경우가 많아 코드의 동작을 이해하는 데에 다소 어려움 해결Spring Batch 5.0 Migration Guidetasklet, chunkTransactionManager 추가PlatformTransactionManager는 Spring이 제공하는 트랜잭션 관리 인터페이스로, 일반적으로 데이터베이스와 관련된 트랜잭션을 관리합니다.JobConfig 또는 BatchConfig에서 주입받는 PlatformTransactionManager는 보통 Spring이 관리하는 DataSourceTransac..
몽고디비 모델링, 자주사용하는 연산자 정리
몽고디비 모델링, 자주사용하는 연산자 정리
2024.08.19몽고디비(MongoDB)와 관계형 데이터베이스(RDBMS) 간의 모델링 차이관계형 데이터베이스에서는 보통 데이터를 여러 테이블에 나누어 저장합니다. 예를 들어, "사용자(User)"와 "주문(Order)"이라는 두 개의 테이블이 있다고 가정해보겠습니다.User 테이블 user_id (Primary Key) name email ...Order 테이블 order_id (Primary Key) user_id (Foreign Key referencing User) product_name order_date ... 이러한 구조에서, 특정 사용자의 모든 주문을 조회하려면 두 테이블을 조인(join)해야 합니다. 이는 다음과 같은 SQL 쿼리로 표현될 수 있습니다.SELECT u.name, o.product_name..
가상 면접 사례로 배우는 대규모 시스템 설계 기초 2장 - 개략적인 규모 추정
가상 면접 사례로 배우는 대규모 시스템 설계 기초 2장 - 개략적인 규모 추정
2024.07.28개략적인 규모 측정시스템 용량, 성능 요구사항을 추정하라고 할때 개략적인 규모 측정을 하게 됩니다. 2의 제곱 수데이터 볼륨의 단위를 2의 제곱수로 표현할 수 있는 최소 단위 1바이트이고 8비트로 구성됩니다.1킬로바이트 = 2의 10승1메가바이트 = 2의 20승1기가바이트 = 2의 30승1테라바이트 = 2의 40승1페타바이트 = 2의 50승 모든 프로그래머가 알아야 하는 응답지연 값 디스크 탐색 (seek) = 10ms데이터 볼륨메모리는 빠르고, 디스크는 느리다.디스크 탐색(seek)은 가능한 피해야 한다.단순한 압축 알고리즘은 빠르다.데이터를 인터넷으로 전송하기 전에 가능한 압축해야한다.데이터 센터는 보통 여러 지역(region)에 분산되어 있고, 센터들 간에 데이터 주고받는 데에 시간이 소요된다.가용..
가상 면접 사례로 배우는 대규모 시스템 설계 기초 1장 - 사용자 수에 따른 규모 확장성 (2)
가상 면접 사례로 배우는 대규모 시스템 설계 기초 1장 - 사용자 수에 따른 규모 확장성 (2)
2024.07.21캐시 사용시 주의점갱신은 자주 일어나지 않지만 참조는 빈번이 일어난다면 고려할만 하다.일반적으로 RAM에서 동작캐시는 휘발성이므로 영속적으로 보관할 데이터는 캐시에 두는것이 바람직하지 않다.캐시는 언제 어떻게 만료(expire)되는가?에 대한 정책을 수립할 필요가 있다. 만료시간을 너무 짧게, 너무 길게 가져가지 않도록 주의해야한다.데이터베이스와 일관성을 어떻게 유지할 것인가? 에 대한 생각도 해봐야한다. 찾아보니 이는 논문도 나올정도로 많은 연구가 진행되고 있는 것 같다.장애에는 어떻게 대처할 지도 생각해봐야한다. 캐시 서버를 하나로 두면 해당 서버는 단일 장애 지점이 되어버릴 가능성이 있다. 때문에 여러 지역에 걸쳐 캐시 서버를 분산 시켜야 한다.단일 장애 지점(Single Point of Failu..