일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 스프링
- Collection
- 쿠버네티스
- list
- 토비의 스프링 정리
- 토비의 스프링
- gradle
- JPA
- 자바 ORM 표준 JPA 프로그래밍
- IntellJ
- thread
- 스트림
- Real MySQL
- Stack
- K8s
- spring
- 자바
- Kotlin
- mysql
- Java
- GC
- jvm
- redis
- Stream
- MSA
- SpringBoot
- 백준
- 보조스트림
- 이스티오
- OS
- Today
- Total
목록2021/08/28 (6)
인생을 코딩하다.
안녕하세요. 이번에는 MySQL 실행 계획을 통해 페이징 쿼리의 성능을 개선하는 과정을 작성해 보았는데요, UI가 무한 스크롤 방식이 아닌 오프셋 페이지 방식(>)이기 때문에 커서 기반 페이지네이션 쿼리 방식을 사용하지 않고, 오프셋 기반 페이지네이션 쿼리 방식을 커버링 인덱스 방식의 쿼리를 사용하여 페이징 쿼리의 성능을 개선하였습니다. 커서 기반 페이지네이션 : 클라이언트가 가져간 마지막 row의 순서상 다음 row들을 n개 요청, 응답하게 구현 오프셋 기반 페이지네이션 : DB의 offset 쿼리를 사용하여 페이지 단위로 요청/ 응답하게 구현 커버링 인덱스란? 쿼리를 충족시키는 데 필요한 모든 데이터를 갖고 있는 인덱스를 커버링 인덱스(Covering Index) 라고합니다. 인덱스는 데이터를 효율적..
안녕하세요. 요즘 이펙티브 자바(Effective Java)를 읽어보고 있는데요, 읽다보니 코틀린은 이펙티브 자바가 대부분 반영이 되어있는 산물이라고 느꼈습니다. 보통 코틀린이 자바에 비해 훨씬 코드를 간결하게 작성할 수 있다는 것은 누구나 알고 있을텐데요, 구체적으로 어떤 어떤 사례들이 있는지 제가 이펙티브 자바를 읽으면서 한 번 분석하여 보았고, 직접 이펙티브 코틀린이라는 주제로 글을 작성해보고 있습니다. 그럼 Hyung1Jung의 Effective Kotlin 시작해보도록 하겠습니다. [Effective Kotlin - Item2] : 코틀린에서 빌더를 사용할 필요가 있을까? 이번 글은 이펙티브 자바 Item2를 읽어보며 이것이 코틀린라는 언어에서는 어떻게 녹여져 있을까에 관해 작성해보았습니다. 이..
서비스와 추상화 p.343) 객체지향적인 코드는 다른 오브젝트의 데이터를 가져와서 작업하는 대신 데이터를 갖고 있는 다른 오브젝트에게 작업을 해달라고 요청한다. 오브젝트에게 데이터를 요구하지 말고 작업을 요청하라는 것이 객체지향 프로그래밍의 가장 기본이 되는 원리이기도 하다. p.353) 트랜잭션이란 더 이상 나눌 수 없는 단위 작업을 말한다. 작업을 쪼개서 작은 단위로 만들 수 없다는 것은 트랜잭션의 핵심 속성인 원자성을 의미한다. 따라서 중간에 예외가 발생해서 작업을 완료할 수 없다면 아예 작업이 시작되지 않은 것처럼 초기 상태로 돌려놔야 한다. 이것이 바로트랜잭션이다. p.354) 두 가지 작업이 하나의 트랜잭션이 되려면, 두 번째 SQL이 성공적으로 DB에서 수행되기 전에 문제가 발생할 경우에는 ..
4장, 예외처리 p.281) 예외를 처리할 때 반드시 지켜야 할 핵심 원칙은 한 가지다. 모든 예외는 적절하게 복구되든지 아니면 작업을 중단시키고 운영자 또는 개발자에게 분명하게 통보돼야 한다. SQLException이 발생하는 이유는 SQL에 문법 에러가 있거나 DB에서 처리할 수 없을 정도로 데이터 엑세스 로직에 심각한 버그가 있거나, 서버가 죽거나 네트워크가 끊기는 등의 심각한 상황이 벌어졌기 대문이다. p 283) 예외의 종류와 특징 자바에서 throw를 통해 발생시킬 수 있는 예외는 크게 세 가지가 있다. Error 첫째는 java,lang.Error 클래스의 서브클래스들이다. 에러는 시스템에 뭔가 비정상적인 상황이 발생했을 경우에 사용된다. 주로 자바 VM에서 발생시키는 것이고 애플리케이션 코..
객체 생성과 파괴 (2장) Item2 : 생성자에 매개변수가 많으면 빌더를 고려하라 점층적 생성자 패턴 매개변수를 늘려가는 점층적 생성자 패턴을 쓸 수는 있지만, 매개변수 개수가 많아지면 클라이언트 코드를 작성하거나 읽기가 어렵다. 코드를 읽을 떄 각 값의 의미가 무엇인지 헷갈릴 것이고, 매개변수가 몇 개인지도 주의해서 세어 보아야 할 것이다. 타입이 같은 매개변수가 연달아 늘어서 있으면 찾기 어려운 버그로 이어질 수 있다. 클라이언트가 실수로 매개변수의 순서를 바꿔 건네줘도 컴파일러는 알아채지 못하고, 결국 엉뚱한 동작을 하게 된다. 선택 매개변수가 많을 때 활용할 수 있는 두 번째 대안인 자바빈즈패턴(JavaBeanspattern) 매개변수가 없는 생성자로 객체를 만든 후, 세터 메서드들을 호출해 원..
객체 생성과 파괴 (2장) 개요 이 책에서는 아래와 같이 개념을 정의한다. API를 사용하는 프로그램 작성자(사람)를 그 API의 사용자라고 한다. API를 사용하는 클래스(코드)는 그 API의 클라이언트라고 한다. Item1 : 생성자 대신 정적 팩토리 메서드(static factory method)를 고려하라. public 생성자를 사용하여 객체를 생성하는 전통적인 방법 외에도 static factory method를 이용하여 객체(인스턴스)를 생성 할 수있다. static factory method의 장점과 단점을 알아보자. 장점 1 : 이름을 가질 수 있다. 생성자에 넘기는 매개변수와 생성자 자체만으로 반환될 객체의 특성을 제대로 설명하지 못한다. 정적 팩터리는 이름만 잘 지으면 반환될 객체의 특..