| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- thread
- 토비의 스프링 정리
- 토비의 스프링
- jvm
- Collection
- K8s
- 보조스트림
- GC
- Real MySQL
- 이스티오
- 자바
- Kotlin
- 자바 ORM 표준 JPA 프로그래밍
- JPA
- gradle
- list
- redis
- 쿠버네티스
- Stream
- OS
- MSA
- IntellJ
- mysql
- SpringBoot
- 스트림
- spring
- 백준
- Java
- 스프링
- Stack
- Today
- Total
목록분류 전체보기 (155)
인생을 코딩하다.
안녕하세요. 오늘은 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가 정보를 탈취해가는 것 누가..
안녕하세요. 오늘은 정보 보안의 3요소인 CIA와 그에 따른 문제점에 관해 글을 작성해 보도록 하겠습니다. CIA란 무엇일까요? 기밀성(Confidentiality), 무결성(Integrity), 가용성(Availability)의 첫 문자를 따서 조합한 용어로써 보안의 기본 항목이며 기밀 정보의보안 위험성을 측정하고 적절한 보안 정책을 수립하는 기준이 되는 보안의 기본 요소 입니다. 즉, 정보의 비밀을 유지하고(기밀성), 비인가된 변경으로 부터 정보를 보호하며(무결성), 필요할 때 언제든지 사용할 수 있도록(가용성) 하는 요건을 가지는 것을 공통적으로 제시하는 것 입니다. 언제 CIA가 위배 될까요? 1. A에서 B로 문서를 보낸다고 가정해보겠습니다. 이의 경우 중간에 있는 C가 문서를 탈취할 수도 있습..
안녕하세요. 오늘은 docker에서 k8s istio를 설치하는 것에 관해 글을 작성해보도록 하겠습니다. 배경 현재, 저는 스프링 클라우드(스프링 부트 + 넷플릭스 OSS) 적용에 사용되는 컴포넌트 중 하나인 Eureka를 사용하고 있습니다. 하지만, 스프링 클라우드(스프링 부트 + 넷플릭스 OSS)를 이용한 경우에는 스프링 클라우드로 각 서비스를 먼저 구축하고 마이크로서비스 애플리케이션 자체도 코드 내부에 스프링 클라우드 사용을 위한 클라이언트 코드가 탑재되어야 합니다. 또한 Eureka는 현재 deprecated되었기도 하구요. 하지만, eureka가 아닌, k8s Service mesh parttern 의 구현체인 Istio를 적용하는 경우에는 마이크로 서비스마다 함께 배포되는 사이드카 프락시에 운..
🔍 우선, 코틀린에서 Entity Class 생성자에 매개변수를 선언할 때, id를 맨 위에 선언했을 경우로 예를 들어보겠습니다. 생성자 호출시, 네임드 파라미터를 사용하지 않았을 때 @Entity class User( @Id @GeneratedValue(strategy = GenerationType.IDENTITY) val id: Long = 0L, @Column(nullable = false) val email: String, @Column(nullable = false) val password: String, ) { fun user() = User("email@tistory.com", "password") } 위와 같은 코드는 파라미터 순서가 맞지 않기 때문에 컴파일 에러가 발생하게 됩니다. 위 문..
안녕하세요. 오늘은 2차 캐시에 관해 정리한 내용을 작성해 보도록 하겠습니다. 그리고 2차 캐시에 관해 글을 작성하기에 앞서 우선 캐시와 JPA의 1차 캐시에 관해 잠시 설명해 보도록 하겠습니다. 🔍 캐시란 무엇이고, 캐시는 왜 사용하는 걸까요? Cache는 간단히 말해서 나중의 요청에 대한 결과를 미리 저장했다가 빠르게 사용하는 것입니다. 위로 갈수록 빠르고 비싸고 밑으로 갈수록 느리고 저렴한 저장소라고 생각하면 됩니다. Secondary Memory를 디스크 영역이라고 보시면 됩니다. 기본적으로 데이터는 컴퓨터가 꺼져도 저장이되어야 하기 떄문에 Secondary Memory(SSD,HDD 등)에 저장이 되는데, 기술이 발달하고 하드웨어들이 커지다보니깐 Main Memory나 Cache Memory, ..