일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 합병 정렬
- 제네릭 타입
- junit 5
- 자바스터디
- 제네릭 와일드 카드
- System.err
- 함수형 인터페이스
- 자바할래
- 바운디드 타입
- github api
- System.in
- System.out
- annotation processor
- 람다식
- auto.create.topics.enable
- 접근지시자
- 프리미티브 타입
- Effective JAVA
- public 필드
- Java
- 상속
- Study Halle
- 스파르타코딩클럽
- 정렬
- Switch Expressions
- 로컬 클래스
- 익명 클래스
- raw 타입
- 항해99
- 브릿지 메소드
- Today
- Total
목록IT Study (89)
코딩하는 털보
@Transactional 어노테이션에 대한 이해도가 낮아 발생했던 문제를 해결하면서 공부한 내용을 기록한다.실제 작성했던 코드는 아니지만 동일한 상황을 재현@Service@RequiredArgsConstructorpublic class MyService { private final MyEntityRepository myEntityRepository; private final MyEntityHistoryRepository myEntityHistoryRepository; public void saveEntity(String name) { saveEntityAndHistory(name); } @Transactional protected void saveEntityAndHistory(Strin..
Spring Cloud OpenFeign개요MSA에서는 단위 기능을 하는 서비스들이 여러개 동작하며 그로인해 서비스 사이의 통신이 이루어져야 합니다.마이크로 서비스 사이의 통신은 동기/비동기 모두 가능합니다.기존에는 서비스 간의 동기 통신을 위해서 resttemplate으로 http client를 생성하여 통신을 했었습니다.Spring Cloud 관련 글을 읽던 중 OpenFeign이라는 스팩이 있어 공유하고자 합니다.Spring Cloud OpenFeignSpring Cloud OpenFeign공식문서에서는 OpenFeign를 선언적 REST 클라이언트라고 설명합니다.RestTemplate의 경우 아래와 같이 클래스 코드를 작성하게 됩니다.@Service@RequiredArgsConstructorpub..
Percona for mongodb 구성하기Percona for mongodbMongoDB Community Edition 기반으로 구축되었으며 몇가지 엔터프라이즈급 향상 기능이 포함되어 있습니다.암호화 WiredTiger 스토리지 엔진외부인증 및 권한 부여사용자 또는 애플리케이션의 감사 로깅, 로그 편집 및 쿼리 데이터베이스 상호 작용**MongoDB용 Percona Operator 와 호환**kubernates 환경에서 mongodb를 운영할 때 가장 많이 사용하는 operator 입니다.kubernates 위에서 mongodb replica / sharding 구성을 쉽게 배포할 수 있습니다.Mongodb Sharded Cluster의 요소![]()Shard(replica set) : 데이터의 하위..

Kubernetes vs Spring Cloud개요기존 인프라를 Kubernetes로 변환하면서Kubernetes의 객체들이 MSA를 위해 사용하던 Spring Cloud 서비스들의 역할을 대체할 수 있게 되었다.물론 둘다 함께 사용할 수는 있겠지만 동일한 역할을 하는 요소들이 여러개 있게 되므로동일한 작업을 두번 할 수 있다.구조가 복잡해진다.디버깅이 어려워진다.불필요한 자원 사용량이 증가할 수 있다.따라서 우리 팀도 어떤 기술을 사용해야 할지 결정하는 것이 좋을 것 같다.내용필요 기술과 그에 대한 스펙은 Spring Cloud와 Kubernetes에서 아래와 같이 구분된다.https://velog.io/@mdev97/Project-Spring-Cloud-Kubernetes현재 우리는 Spring Cl..
Kubernetes CI/CD [jenkins, argo cd]Jenkins & kustomize & Argo CD개요Docker compose를 사용했던 인프라에서 Kubernetes 인프라로 변경되면서 CI/CD 구조가 변경되었다.CI/CD 구조로 가장 많이 검색되는 Jenkins-K8S CI/CD 방식을 검토하고 테스트하였다.Jenkins - kustomize - Argo CD - Kubernetessource code repo와 manifest repo는 서로 다른 것임을 인지해야한다.manifest를 업데이트하는 방법으로 kustomize를 사용하였다.컨테이너 이미지의 태그 버전을 기반으로 argo CD에서 이미지 변경을 추적하는 방법이 가장 많이 검색되었다. 백엔드 팀의 경우 이미지 tag 버..
Coredns host unreachablednsutils에서 nslookup을 통해 coredns를 점검할 수 있다.[root@k8s-mn e8ight]# kubectl exec dnsutils -n default -it -- nslookup ndxpro-eureka.ndxproServer: 10.96.0.10Address: 10.96.0.10#53Name: ndxpro-eureka.ndxpro.svc.cluster.localAddress: 10.103.249.194나의 경우 host unreachable 문제가 간헐적으로 발생하고 있었는데,ube-system coredns-7cc7cd66d9-5g8wv 1/1 Runnin..
Coredns에서 외부 DNS 서버 추가하기K8s의 파드들은 기본적으로 coredns에서 각 파드 또는 서비스들의 도메인 주소를 통해 IP를 가져온다.예를들어 동일한 namespace 내 서비스에 대한 도메인주소는{service name}.svc다른 namespace의 서비스에 대한 도메인 주소는{service name}.{namespace}.svc만약, coredns에서 제공하는 클러스터 내 DNS 외에 다른 DNS 서버를 사용하고 싶다면 coredns config를 수정하여 해결할 수 있다..:53 { errors health { lameduck 5s } ready kubernetes cluster.local in-addr.arpa ip6.arpa { ..

Mongodb Replica set Mongodb의 replication 방식 Mongodb에서 Replica set을 구성하려면 Failover를 위해 최소 3개의 노드가 필요함. 이는 데이터 복제본이 3개여야 하는건 아니고 장애 복구 시 어떤 노드를 Primary로 승급하는지 투표를 하기 위해 3개의 노드가 필요한 것. 그렇기 때문에 복제 노드를 2개 추가로 구성(PSS)하거나 또는 복제 노드 구성에 대한 부담을 줄이기 위해 복제 노드 하나와 오직 투표만 수행하는 Arbiter를 구성(PSA)하는 두가지 방식을 통해 Replica set을 구성할 수 있다. 동기화 secondary node는 primary node의 oplog(데이터 작업 로그)를 사용하여 데이터를 비동기적으로 적용한다. 이로써 no..
합병 정렬은 분할 정복 알고리즘을 이용한 정렬 방법이다. 분할 정복은 큰 문제를 작은 문제로 쪼개어 작은 단위의 문제를 먼저 해결하면서 병합시켜 마지막으로 가장 큰 문제를 해결하는 문제 풀이 방법이다. 합병 정렬의 과정은 크게 배열을 분할하는 부분과 분할된 배열을 다시 합병하는 부분으로 나뉘어 진다. 분할에서는 배열을 두 개의 배열로 분할한다. 합병에서는 두 배열을 정렬을 하면서 합친다. 시간복잡도는 분할에서 log2(N), 합병에서 N으로 분할이되는 만큼 다시 합병하기 때문에 둘을 곱하여 N*log2(N)이 된다. 성능이 선택, 버블, 삽입 정렬과 비교하여 효율적이고 안정적이기 때문에 자주 사용되는 정렬 방법 중 하나이다. Java의 Arrays.sort() 및 Python sorted() 또한 합병 ..
버블 정렬은 배열에서 차례대로 두 개의 붙어있는 인덱스를 비교하여 더 큰 값을 뒤로 보내는 정렬 방법이다. 가장 큰 값이 먼저 맨 뒤로 보내지고 그 다음 뒤에서부터 순차적으로 정렬이 완성된다. n = array length 처음엔 인덱스 0부터 n-2까지 그다음 인덱스와 비교하면서 다음 인덱스가 크면 서로 교환 위 절차를 0~n-3, 0~n-4, 0~n-5, ... 0~0으로 총 n-1번 순회 i : 0~n-2 j : 0~n-2-i 최선의 경우, 최악의 경우 모두 시간 복잡도가 O(n^2)으로 성능이 좋지 못하여 구현이 쉽다는 장점 말고는 다른 정렬 방법과 비교했을 때 좋은 정렬 방법이 아님.