| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 백준 연결요소 자바
- 자바 백준 팩토리얼 개수
- 자바 1676
- kotiln functional interface
- Claude Intelij 연결
- spring mongodb switch
- 안정해시
- ipfs singletone
- go
- kotiln const
- spring mongodb
- nodejs rabbitmq
- Java Call By Refernce
- java 백준 1509
- Spring ipfs
- java 파티
- 백준 1504 java
- 익명 객체 @transactional
- javav 1676
- spring mongoTemplate
- rabbitmq 싱글톤
- java 팩토리얼 개수
- java 1238
- spring mongoTemplate switch
- ipfs bean
- java 1509
- 백준 2252 줄세우기
- mongodb lookup
- kotiln const val
- 백준 특정한 최단 경로
- Today
- Total
목록2025/01 (8)
공부 흔적남기기
MSA를 채택하여 서비스를 운영시 여러가지 단점 및 관리해야하는 포인트가 있다. 서비스간 결합도가 낮아지고 각 서비스의 응집력이 높아짐는 장점이 있겠지만 오류 추적, 한 서비스에서의 에러 전파, 트랜잭션 관리( 데이터 동기화 ) 에 대한 고려가 필요하다.1. 오류 추적 서비스가 많아지고 각 서비스가 다른 서비스를 호출하고 Depth가 점점 높아짐에따라 어디서 에러가 났는지 어떤 흐름으로 진행되는지 파악하기 어렵다. 어떤 에러가 발생했을 경우 해당하는 서비스가 호출하는 다른 서비스를 확인하고 DFS 마냥 계속 계속 에러를 확인해야할 수 있다. 이러한 문제를 보완하기 위해 ZipKin을 통해 분산 서비스를 추적할 수 있다. Sentry를 통해서도 어떤 서비스에서 에러가 떨어졌는지 확인해볼 수 있을 것이다. ..
Kafka에 Topic이름을 상수화해서 사용하고 싶어서 다음과 같이사용했다.companion object{ val ECOMMERCE_ORDER_QTY_TOPIC = "ecommerce.order-topic"} @KafkaListener(topics = [KafkaConsumerConfig.ECOMMERCE_ORDER_QTY_TOPIC]) 다음과 같이 사용했을 떄 Only 'const val' can be used in constant expressions Error가 떨어졌고 companion object{ const val ECOMMERCE_ORDER_QTY_TOPIC = "ecommerce.catalog-topic"}다음과 같이 수정 한 후 잘 동작되었다. 이전에는 그냥 val을 쓰면 상수..
요구사항 www.example.com 도메인이 존재하고 / 일경우 기본으로 /var/html/www/manage로 포워딩을 하고/student 일 경우 /var/html/www/student 로 포워딩 해주고/book 일 경우 /var/html/www/book 으로 포워딩 해줘야 한다.server { server_name www.example.com; listen 80; root /var/www/html/manage location / { } location /student { root /var/www/html; } location /book { root /var/www/html; } lo..
인터넷의 발전과 휴대기기의 보편화에 따라 많은 사람들이 특정 서비스를 동시에 이용하기도 하고 특정 이벤트에 의해서 트래픽이 순간적으로 몰리는 현상이 잦아진다. 즉 DAU가 증가하고 QPS가 높아짐에 따라 시스템을 좀 더 안정적이고 확장가능하며 유지보수에 용이하고 가용성이 높을 필요가 생겼다. 확장성을 높임으로서 더 많은 트래픽을 감당할 수 있고 손쉬운 유지보수를 통해 빠르게 버그를 수정하거나 기능을 추가할 수 있다. 또한 가용성을 높임으로서 사용자에게 더 나은 경험을 제공할 수 있다. 이러한 요구사항을 만족하기 위해 MSA라는 아키텍쳐가 등장했고 Spring에서 MSA에 구조에 맞게 빠르게 개발할 수 있는 다양한 라이브러리를 제공한다.간단한 Ecommerce API를 만들어 보았고 사용한 Cloud li..
Spring Cloud Bus를 위해서 cloud bus amp를 추가했는데 해당 라이브러리가implementation("org.springframework.cloud:spring-cloud-starter-bus-amqp")function context 라이브러리를 가져온다."org.springframework.cloud:spring-cloud-function-context해당 라이브러리에 kotiln 버전을 제대로 인식하지 못하는 버그가 있었다.https://github.com/spring-cloud/spring-cloud-function/issues/1218 Kotlin compilation error with spring-cloud-function 4.2.0- · Issue #1218 · sprin..
분명히 같은 키를 사용하고 똑같은 알고리즘을 통해서 암호화 복호화를 하는데 에러가 나서 삽질을 했다.. JWT signature does not match locally computed signature. JWT validity cannot be asserted and should not be trusted. 수정전 코드 토큰 발급 val token = Jwts.builder() .subject(user.userId) .expiration(Date(System.currentTimeMillis() + jwtProperties.expire)) .signWith(key, Jwts.SIG.HS256) ..
안정해시안정해시는 샤드와 같이 분산서버에 골고루 트래픽이나 데이터를 분산할때 분산이 안정적이로 이루어지게 하는 기법이다. 이때 주로 사용되는게 해시링이다. 해시링은 하나의 해시값들을 하나점으로 두고 각 점들을 통해 만든 링이라고 보면된다. 클라이언트에서 요청받은 데이터를 해싱해서 해시링에 올리고 가장 가까운 분산 서버에 저장하는 방식이다. 이때 왜 해시링을 사용하는지 궁금할 것이다. 그냥 분산서버의 개수 N으로 모듈러 연산을 하면되는거 아닌가? 모듈러 연산을 하게되면 분산서버의 개수 N에 영향을 받게된다. 분산서버는 언제든지 늘어나거나 줄을 수도 있고 특정 장애에 의해서 줄어들 수도 있다. 이때마다 모듈러의 값이 변하기 때문에 캐시히트와 캐시미스에대해 관리가 불가능해진다. 해시링을 사용하게되면 최대 해..
1. MSA 공부 (Rest vs Grpc 비교, Gateway Tomcat vs Netty 비교, SAGA Pattern, Concurrent Issue) (1월초 진행중)2. DDD 공부3. 객체지향 다시 복습4. 모던인 자바 공부(2월 중순 시작)5. 대용량 처리 공부 (부록 읽어보기...) (진행중)(안정해시, CAP)2월 중순 마무리 완료6. AWS 자격증 (여름방학으로 잠시.. )7. Netty 공부 (Chatting Server)8. Redis & Kafka 공부 (진행중 아주 천천히)( Redis Clustering Redis Hash Slot, Sentinel, Lua Script > Transaction, Kafka Connect, KAFKA Partition, Partition Rep..