
OLAP vs OLTP
2025. 3. 2. 19:22
개발 지식/DevOps
1. OLAP(Online Analytical Processing) 개요OLAP(Online Analytical Processing)은 대량의 데이터를 빠르게 분석하고 집계하는 시스템이다.기존의 OLTP(Online Transaction Processing) 시스템과는 목적이 다르며,OLAP은 복잡한 데이터 분석 쿼리를 효율적으로 수행하는 데 최적화되어 있다. OLAP vs OLTP 비교구분OLTP (전통적 RDBMS)OLAP (분석 데이터베이스)목적트랜잭션 처리 (INSERT, UPDATE)데이터 조회 및 분석데이터 저장 방식행(Row) 기반 저장열(Column) 기반 저장쿼리 성격CRUD (INSERT, UPDATE, DELETE)복잡한 집계 쿼리 (GROUP BY, SUM, COUNT)속도대량 데이..
대용량 데이터 처리 - StreamingResponseBody
2025. 3. 1. 13:14
개발 지식/JAVA 기본 지식
1. 개요웹 애플리케이션 개발에서 대용량 데이터를 처리하는 것은 중요한 과제 중 하나다. 특히 클라이언트가 요청한 데이터를 한 번에 모두 제공하기 어려운 경우, 스트리밍 방식으로 점진적으로 전송하는 것이 효율적이다.Spring에서는 이러한 요구를 충족하기 위해 StreamingResponseBody를 제공한다.2. StreamingResponseBody란?StreamingResponseBody는 Spring MVC에서 제공하는 인터페이스로, HTTP 응답을 스트리밍 방식으로 처리할 때 사용된다. 이는 클라이언트가 데이터를 한 번에 모두 받는 것이 아니라, 서버가 데이터를 점진적으로 생성하여 전송할 수 있도록 돕는다. 주요 특징비동기 데이터 전송: 데이터를 한 번에 모두 보내지 않고, 필요할 때마다 생성하..
Thread 예외 처리 - UncaughtExceptionHandler
2025. 2. 15. 15:39
개발 지식/JAVA 기본 지식
Java UncaughtExceptionHandler 란?스레드에서 발생한 예외를 처리하는 인터페이스Java에서는 스레드 내부에서 발생한 예외(Exception)가 잡히지 않으면(uncaught), 해당 스레드는 종료되며 예외가 콘솔에 출력됨.이때 UncaughtExceptionHandler를 사용하면 스레드에서 발생한 예외를 감지하고 적절한 처리를 수행할 수 있다.UncaughtExceptionHandler 인터페이스UncaughtExceptionHandler는 Java의 내부 인터페이스로, Thread 클래스에 포함되어 있다.void uncaughtException(Thread t, Throwable e);t: 예외가 발생한 스레드 객체e: 발생한 예외 객체setUncaughtExceptionHand..

Git Hooks 적용기
2025. 2. 5. 22:17
개발 지식/Etc.
Git Hooks 도입 배경팀 내에서 git 브랜치를 생성할 때 개발 배포용 브랜치를 부모로 잘못 생성하여 문제가 되는 상황이 발생하였다.다시 같은 상황이 발생하지 않도록 merge를 위한 개발 배포용 브랜치를 제외하고는 생성할 수 없도록 패턴을 지정하기로 했다.해당 패턴을 간단하게 체크하고 자동화할 수 있도록 Git hooks 기능을 사용했다.Git Hooks 란?Git Hooks는 특정 Git 이벤트가 발생할 때 자동으로 실행되는 스크립트이를 활용하면 커밋, 푸시, 머지 등의 과정에서 특정 작업을 자동화가 가능하다.예를 들어, 커밋 전에 코드 스타일을 검사하거나 푸시 전에 테스트를 실행할 수도 있다.Git Hooks의 종류Git Hooks는 실행 시점에 따라 클라이언트 훅(Client-side Hoo..
Querydsl 기본 문법 정리
2023. 8. 19. 01:10
개발 지식/JPA
- 조건 검색 where(조건) null 값일 경우 무시 user.name.eq("홍길동") // name = '홍길동' user.name.ne("홍길동") // name != '홍길동' user.name.eq("홍길동").not() // name != '홍길동' user.name.isNotNull() // name is not null user.age.in(10, 20) // age in(10, 20) user.age.notIn(10, 20) // age not in(10, 20) user.age.between(10,30) // 10 30 user.age.loe(30) // age

자바 개발자를 위한 코틀린 입문 - scope function
2023. 8. 11. 12:48
개발 지식/자바 개발자를 위한 코틀린 입문
1. scope function이란? scope function은 영역 함수라는 뜻으로 일시적인 영역을 형성하는 함수이다 람다를 사용하여 일시적인 영역 생성하여 코드를 더 간결하게 만들거나, method chaining 활용 등에 쓰인다 2. scope function 종류 it this 람다 결과 값을 반환 let run 객체를 반환 also apply 확장 함수가 아님 with val person = Person("홍길동", 20) /* age 반환 */ val value1 = person.let { it.age } /* age 반환 */ val value2 = person.run { this.age } /* person 객체 반환 */ val value3 = person.also { it.age }..

자바 개발자를 위한 코틀린 입문 - 코틀린 함수형 프로그래밍
2023. 8. 10. 18:47
개발 지식/자바 개발자를 위한 코틀린 입문
1. 필터와 맵 - filter 특정 조건을 만족하는 데이터만 List에 저장 val apples = fruits.filter { fruit -> fruit.name == "사과" } - filterIndexed filter에서 인덱스가 함께 필요할 경우 val apples = fruits.filterIndexed { idx, fruit -> println(idx) fruit.name == "사과" } - map 필터링 후 특정 데이터만 저장하고 싶은 경우 val applePrices = fruits.filter { fruit -> fruit.name == "사과" } .map { fruit -> fruit.currentPrice } - mapIndexed map에서 인덱스가 함께 필요한 경우 val a..

자바 개발자를 위한 코틀린 입문 - 다양한 함수
2023. 8. 10. 14:28
개발 지식/자바 개발자를 위한 코틀린 입문
- 확장 함수 코틀린은 자바와 100% 호환하는 것을 목표로 한다 자바 코드에서 코틀린 함수를 추가하고 싶은데 자연스럽게 코틀린 코드를 추가해서 유지보수를 효율적으로 관리하고 싶다는 니즈에서 확장 함수가 등장했다 자바로 만들어진 라이브러리를 유지보수, 확장할 때 코틀린 코드를 덧붙이는 과정에서 어떤 클래스안에 있는 메소드처럼 호출할 수 있지만 가독성을 위해 함수는 밖에 만들 수 있게 하는 방식이 확장 함수 이다 즉, 함수의 코드 자체는 클래스 밖에 작성되어 있지만 마치 클래스 안에 있는 멤버 함수 처럼 호출해서 사용할 수 있다 fun main() { val str = "ABC" println(str.lastChar()) } /* fun 확장하려는클래스.함수명(parameter): 리턴타입 { this를 ..

자바 개발자를 위한 코틀린 입문 - Sealed Class
2023. 8. 9. 20:49
개발 지식/자바 개발자를 위한 코틀린 입문
- Sealed Class 정의와 용도 Sealed의 사전적 의미는 '봉인을 한' 이다 상속이 가능하도록 추상클래스를 만들까 하는데 (상속이 가능하도록 계층 구성을 하고 싶은데) 외부에서는 이 클래스를 상속받지 못하도록 하위 클래스를 봉인할 때 사용한다 컴파일 타임 때 하위 클래스의 타입을 모두 기억한다 (enum 클래스와 동일) 즉, 런타임 때 클래스 타입이 추가될 수 없다 하위 클래스는 같은 패키지에 있어야 한다 - Enum Class와 Sealed Class의 차이점 Sealed Class는 클래스를 상속받을 수 있다 Sealed Class의 하위 클래스는 멀티 인스턴스가 가능하다 - 구현 예시 sealed class HyundaiCar( val name: String, val price: Long..

자바 개발자를 위한 코틀린 입문 - 상속 방법과 주의점
2023. 8. 9. 13:10
개발 지식/자바 개발자를 위한 코틀린 입문
- 상속 관련 키워드 정리 final: override를 할 수 없게 한다. default로 보이지 않게 존재 open: override를 열어 준다 abstract: 반드시 override 해야 한다 override: 상위 타입을 오버라이드 하고 있다 - 상속 방법 코틀린에서는 상속 받을 때 ':'를 사용하여 선언한다 abstract class Animal( protected val species: String, protected val legCount: Int ) { abstract fun move() } class Cat( species: String ) : Animal(species, 4) { override fun move() { println("고양이 걸음") } } 변수 타입 선언과 다르게 ..