일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- IntellJ
- jvm
- Stack
- 이스티오
- Real MySQL
- SpringBoot
- 스프링
- 자바 ORM 표준 JPA 프로그래밍
- OS
- GC
- 토비의 스프링 정리
- JPA
- Java
- 쿠버네티스
- thread
- Kotlin
- 스트림
- 백준
- spring
- redis
- list
- 자바
- MSA
- mysql
- 보조스트림
- gradle
- K8s
- 토비의 스프링
- Stream
- Today
- Total
목록전체 글 (151)
인생을 코딩하다.
where절 작성 순서는 query 성능과 연관이 있을까요?SELECT * FROM hyungil.user AS u .... WHERE u.id = ? AND u.name = ? AND u.date = ?상관없습니다. Query Optimizer의 최적화 알고리즘에 의해 알아서 최적화됩니다. 비즈니스 로직의 순서에 맞춰서 작성하면 됩니다.FROM절 작성 순서는 query 성능과 연관이 있을까요?INNER JOINSELECT * FROM hyungil.A INNER JOIN hyungil.B ON A.col = B.col INNER JOIN hyungil.C ON C.col = B.colINNER JOIN은 Query Optimizer의 최적화 알고리즘(순서가 달라도 결과가 같아야 한다.)에 의해 알아서 ..
카프카 리밸런싱이란 무엇일까요? 컨슈머 그룹으로 이루어진 컨슈머 들 중 일부 컨슈머에 장애가 발생하면, 장애가 발생한 컨슈머에 할당된 파티션은 장애가 발생하지 않은 컨슈머에 소유권이 넘어갑니다. 이러한 과정을 리밸런싱이라고 부릅니다. 리밸런싱이 일어날 수 있는 상황 두 가지는 크게 컨슈머가 추가되는 상황과 컨슈머가 제외되는 상황으로 나뉩니다. 이슈가 발생한 리밸런싱 즉, 컨슈머를 컨슈머 그룹에서 제외하여 모든 파티션이 지속적으로 데이터를 처리할 수 있도록 가용성을 높여 주어야 합니다. 그럼 컨슈머에 문제가 발생했을 때 리밸런싱이 일어난다는 건데, 문제가 발생한걸 어떻게 실시간으로 판단하고 자동으로 리밸런싱이 되게 할 수 있을까요? 저는 리밸런싱에 관해 이러한 생각이 들었습니다. "그럼 컨슈머에 장애가 난..
쿠버네티스 설명에 앞서 현재 세계 많은 기업에서 쿠버네티스를 사용하게 된 역사에 관해 간단히 작성해보았습니다. 큰 기업들은 대규모의 서비스를 운영하고 있기 때문에 최대한 자원을 효율적으로 쓰는 것이 중요합니다. 이것은 비용과 관련이 있기 때문이죠. 따라서, 서버 자원을 효율적으로 쓰기 위해 기업들은 가상머신(VM) 기술에 대해 관심을 가질 수 밖에 없습니다. VM은 무엇인가요? 가상 머신(Virtual Machine, VM)은 물리적 하드웨어 시스템(오프프레미스 또는 온프레미스에 위치)에 구축되어 자체 CPU, 메모리, 네트워크 인터페이스 및 스토리지를 갖추고 가상 컴퓨터 시스템으로 작동하는 가상 환경입니다. VM의 역사 위 사진을 보면 2014.6 전까지를 하이퍼바이저(가상머신 방식) 기반 가상화, 그..
가변성을 제한하라. 읽고 쓸수 있는 프로퍼티 var을 사용하거나 mutable 객체를 사용하면 상태를 가질 수 있습니다. 상태를 가지면 해당 요스의 동작은 사용 방법뿐만 아니라 그 이력에도 의존하게 됩니다. 가변성이 있을 시 문제점 1. 프로그램을 이해하고 디버그하기 힘들어집니다. 이러한 상태를 갖는 부분들의 관계를 이해해야 하며, 상태 변경이 많아지면 이를 추적하는것이 힘들어집니다. 이러한 클래스는 이해하기도 어렵고, 이후에 코드를 수정하기도 힘들어집니다. 클래스가 예상하지 못한 상황 또는 오류를 발생시키는 경우에도 큰 문제가 됩니다. 2. 가변성이 있으면, 코드의 실행을 추론하기 어려워집니다. 시점에 따라서 값이 달라질 수 있으므로, 현재 어떤 값을 갖고 있는지 알아야 코드의 실행을 예측할 수 있습니..
안녕하세요. 오늘은 Pessimistic Lock으로 동시성 제어를 하는 법에 관해 글을 작성해보려 합니다. 저는 상품을 주문하는 API를 개발하고 있었습니다. 여러 사용자가 동시다발적으로 상품을 주문 할 때, 데이터 정합성에 이슈가 발생하는 문제였습니다. 위의 그림처럼 세 명의 사용자가 동시다발적으로 주문을 요청할 시 상품의 총 재고는 70이 되어야하지만, 주문이 동시에 일어나는 바람에 70이 아닌 90이 되어버리는 상황입니다. 총 (10 + 10 + 10)30의 재고가 차감되어야 하지만, 동시에 요청이 일어나서 10의 재고만 차감이 되어버리는 이슈입니다. 이걸 어떻게 해결할 수 있을까요? 이것은 간단하게 JPA의 비관적 락(Pessimistic Lock), 혹은 낙관적 락(Optimistic Lock..
최근에 디프만 프로젝트를 진행하며 회원가입을 위해 이메일 인증 API를 개발하고 있었습니다. 약관 및 정책 등의 링크를 메일로 보내고, 메일에서 링크를 클릭하면 이메일 인증이 되는 flow 였습니다. 허나 이게 로컬에선 잘 돼는데, ec2 서버에서 계속 인증 메일을 보낼 때 AUTH LOGIN failed 발생했습니다. 두 가지 이유가 있엇습니다. 첫 번째 이유는 SMTP의 기본 port는 25입니다. 하지만, Amazon EC2 서버에서는 SMTP port 25을 이용해서 메일을 보내는 것이 전송이 제한이 되어 있기 때문이였습니다. 따라서 Ec2 환경에서 기본 port인 25를 사용하게 돼면 이메일 인증에 실패하게 됩니다. 이는 메일 보내기를 25번 포트가 아닌 다른 포트 465, 587 포트를 사용해..
상수 풀(String Pool)은 GC가 될까요? JVM 내부구조를 다시 보던 중에, 문득 "상수 풀은 GC가 될까?" 라는 생각이 떠올랐습니다. 자바에서 보통 static은 GC가 되지 않는데, 상수풀도 GC가 안되려나? 자바에서 보통 string 객체의 사용량이 가장 큰데 상수풀이 GC가 되지 않는다면 메모리에 큰 이슈가 발생하지 않을까? 큰 이슈가 발생할 수도 있으니, JVM에서 상수풀이 GC가 되도록 최적화하는 옵션을 설정해두지 않았을까? 하는 생각들을 했었습니다. https://www.baeldung.com/java-string-pool에서 답을 얻을 수 있었습니다. Before Java 7, the JVM placed the Java String Pool in the PermGen space,..
이전 글에서는 CIA에 관한 설명과 CIA를 지키기 힘들 수 밖에 없는 이유에 관해 글을 작성했었습니다. 이번 글은 CIA를 지키기 위한 방법 RSA에 관해 글을 작성해보도록 하겠습니다. RSA란? RSA는 공개키 암호시스템의 하나입니다. 암호화 뿐만아니라 전자서명이 가능한 최초의 알고리즘으로 알려져있고,RSA가 갖는 전자서명 기능은 인증이 필요한 전자상거래 등에 광범위하게 사용되고 있습니다. RSA는 public key(공개키), private key(비밀키)가 존재합니다. 이것을 기반으로 이 전글에서 CIA를 지킬 수 없었던 문제에 관해 해결하는 법을 작성해보도록 하겠습니다. 우선 이전 글에서 A에서 B로 정보를 보낼 때, 정보 전달 문제 A에서 B로 정보를 보낼 때, C가 정보를 탈취해가는 것 누가..