일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 접근지시자
- github api
- 스파르타코딩클럽
- System.in
- 자바스터디
- 익명 클래스
- 상속
- 항해99
- 람다식
- 정렬
- 프리미티브 타입
- annotation processor
- auto.create.topics.enable
- Java
- Effective JAVA
- public 필드
- Study Halle
- Switch Expressions
- 로컬 클래스
- junit 5
- System.err
- 자바할래
- 합병 정렬
- System.out
- 브릿지 메소드
- raw 타입
- 제네릭 와일드 카드
- 바운디드 타입
- 함수형 인터페이스
- 제네릭 타입
- Today
- Total
목록전체 글 (265)
코딩하는 털보
package me.rockintuna.effectivejava.item;import java.util.List;/*public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 */public class Item16 { public List memberList; /* public class에서 public 필드를 사용하면 1. 내부 표현을 변경하려면 API가 변경되어야 한다. : public class의 public 필드 자체가 API 이면서 내부 표현이기 때문 2. 불변식을 보장할 수 없다 : 클라이언트에서 언제든지 필드의 인스턴스를 변경하거나 수정할 수 있다. 3.부수 작업을 수행할 수 없다. : 접근자 메서드에서는 부가 작업을 추가..
package me.rockintuna.effectivejava.item;import java.util.List;/*클래스와 멤버의 접근 권한을 최소화 하라*/public class Item15 { /* 정보 은닉, 캡슐화의 장점 컴포넌트들을 서로 독립시킨다. => 개발,테스트,최적화,적용,분석,수정을 개별적으로 할 수 있게 해준다. - 개발 속도 (병렬 개발) - 관리 비용 (유지보수 쉬움) - 유닛 테스트를 통한 컴포넌트 성능 최적화 - 재사용성 - 거대한 시스템 개발을 쉽게 해줌 Java의 정보 은닉 장치 [접근 제한자]를 통해 모든 클래스와 멤버의 접근성을 가능한 좁히자. public 접근 제한자 => 외부 접근을 허용한다는 것 (API)..

redis에서 서로 독립적으로 조회하는 작업을 여러 스레드로 병렬 처리하기 위해 parallelStream을 사용하였다.// Get Projectspublic List getProjects(String rootId) { RelationshipResponseDto[] relationships = service.getRelationships(rootId); List projectResponseDtoList = new ArrayList(); if (relationships != null) { Arrays.stream(hasProject).toList().parallelStream().forEach(relationshipResponseDto -> { Project project = servi..
@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 { ..