일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- HTTP
- 알고리즘
- 강화학습
- 최대 힙
- 운영체제
- spring
- posix
- 백준장학금
- 백준 장학금
- 점근적 표기법
- 최소힙
- MSA
- 연결리스트 종류
- jpa n+1 문제
- 자료구조
- 이분탐색이란
- python
- heapq
- 힙트리
- SpringSecurity
- JPA
- AVL트리
- JVM
- 스케줄링
- 엔티티 그래프
- 프로세스
- Kruskal
- 완전이진트리
- 멀티프로세서
- 연결리스트
- Today
- Total
목록전체 글 (106)
KKanging

스프링 클라우드 게이트웨이 소개스프링 클라우드 게이트웨이는 스프링 프레임워크 , 프로젝트 리액터 , 스프링 부트를 기반으로 한 API 게이트웨이 구현체이다.스프링 클라우드 게이트웨이는 다음 기능들을 제공한다.애플리케이션의 모든 서비스 경로를 단일 URL에 매핑한다스프링 클라우드 게이트웨이는 하나의 URL에 제한되지 않고 실제로 여러 경로의 진입점을 정의하고 경로 매핑을 세분화할 수 있다.게이트웨이로 유입되는 요청과 응답을 검사하고 조치를 취할 수 있는 필터를 작성한다이 필터를 사용하면 코드에 정책 시행 지점을 삽입해서 모든 서비스 호출에 다양한 작업을 수행할 수 있다.요청을 실행하거나 처리하기 전에 주어진 조건을 충족하는지 확인할 수 있는 서술자(predicates)를 만든다스프링 클라우드 게이트웨이는 ..

서비스 간의 횡단 관심사마이크로서비스를 운영하다 보면 분산되어 있는 많은 서비스들 간의 공통된 기능을 수행해야 할 수 있다공통기능보안로깅등등이러한 횡단 관심사를 서로 다른 각 서비스에 구현하는 것은 쉽지 않다.이유는 도메인을 개발하느라 이러한 기능 구현을 잊을 수 있고 또는 일관되지 않게 구현하여 혼란을 초래할 수 있다.또한, 모든 서비스가 이러한 관심사를 구현하기 위해 공통 프레임워크를 만들어 의존하게 한다면 강한 의존이 생겨 재컴파일과 재배포 없이 공통 코드 동작 변경이나 추가는 더욱 어려워 진다.서비스 게이트웨이란?이 문제를 해결하기 위해 횡단 관심사를 독립적으로 배치할 수 있고 , 아키텍처의 모든 마이크로서비스 호출에 대한 필터와 라우터 역할을 할 수 있는 서비스로 추상화해야 한다.이러한 추상화된..

Netflix Eureka란Eureka ? Spring Cloud ? 뭔 상관인데?Netflix Eureka 는 Netflix 가 MSA 기반 아키텍처를 위해 개발한 오픈소스인 Netflix OSS 의 종류중 하나이다.그리고 Spring Cloud Discovery는 Eureka 에 대한 AutoConfiguration 와 함께 아주 간단하게 Netflix Eureka 를 이용한 Cloud 환경의 Servic Discovery를 구성할 수 있게 하나.Eureka의 기능 구성Instance 저장소 (메모리)Instance 정보 등록, 검색, 삭제 , 갱신인스턴스 헬스 체크고가용성을 위한 클러스터링핵심 구현체@Singleton public class PeerAwareInstanceRegistryImpl e..

기존 아키텍처의 문제점서비스 디스커버리란분산 아키텍처는 아주 많은 호스트들로 분산되어 있어서 문리적인 호스트 이름과 머신이 위치한 IP주소를 알아야 한다.이 개념은 분산 컴퓨팅 초창기 때부터 존재했고 공식적으로 '서비스 디스커버리' 로 알려져 있다서비스 디스커버리는 애플리케이션이 사용하는 모든 원격 서비스의 주소가 포함된 프로퍼티 파일을 관리하는 것처럼 단순하거나 UDDI 저장소 처럼 정형화 되어 있는 것일 수 있다.UDDI 는 Universal Description Discovery and Integration 의 약자로 중앙에서 웹 서비스를 등록 및 검색을 위한 표준 프로토콜이다.서비스 디스커버리가 마이크로서비스에 중요한 이유수평 확장회복성1. 수평 확장서비스 디스커버리를 사용하면 애플리케이션 팀은 ..

구성(그리고 복잡성) 관리마이크로서비스에서 왜 구성을 외부에서 관리할까마이크로 서비스 인스턴스는 베포 되고 시작할 때 사람의 개입을 최소화 해야한다. 하지만 구성을 같이 배포하거나 직접 배포할 때 수동으로 관리하게 된다면, 애플리케이션 사이에 구성 불일치나 예기치 않은 장애, 확장 문제 대응을 위한 지연 시간 등이 발생할 수 있다.마이크로서비스 구성 관리에 대한 논의분리 :서비스의 물리적 배포에서 서비스 구성 정보를 완전히 분리 해야한다.애플리케이션이 시작중일 때 전달되거나 서비스가 시작할 때 중앙 저장소에서 읽어 들여야 한다.추상화 : 구성 데이터를 직접 읽어오는 코드를 작성하기 보다 REST API 같이 서비스 인터페이스를 통해 읽어 와야한다.중앙 집중화 : 수백개의 서비스가 존재할 수 있기 때문에 ..

TestContainerTestContainer 초기 설정 및 기능 설명TestContainer 기능자바 코드로 docker image를 띄우는 Junit 의 기능이라 생각하면 된다.즉, 자바 코드로 구현하는 docker compose라 생각하면 된다.TestContainer 사용 이유redis를 단위 테스트를 하기 위해서 여러가지 방안을 찾아봤다. 일단 지금 현재 프로젝트가 H2로 embeded test로 진행됐으니 embended redis가 있는지 찾아봤다. https://github.com/ozimov/embedded-redis GitHub - ozimov/embedded-redis: Redis embedded serverRedis embedded server. Contribute to ozimo..

조회수 고민하기 시작한 계기“필드에 view count를 저장하는 필드를 넣고 게시글을 조회할 때마다 count를 1증가 하면서 구현하면 되지 않나? “라고 생각할 수 있다 단순 필드에 1증가의 문제점 조회수 증가 로직을 보면 위와 같이 수행된다게시글 데이터를 읽어오고 애플리케이션에서 1을 증가해서 update 하는 방식이다.무슨 문제가 있을까?(위 그림은 모식화하기 위해 별개의 spring에서 실행된거 처럼 보이는데 같은 spring 서버 안에서 별개의 트랜잭션에서도 동일하다.)위 그림과 같이 2번의 조회에 +2가 되어야하는데 1만 증가하는 Lost Update 현상이 발생하였다.이러한 동시성 문제는 읽기의 동시성 문제를 해결하기 위한 MySQL 에서 제공하는 MVCC로도 해결할 수 없다.이러한 동시성..

목차백엔드 공부 시작 계기와 공부 방법프로젝트 이력과 느낀점백엔드 공부 시작 계기 와 공부 방법진로를 고민하던 2학년…2학년 여름 방학 뭔가 학교 전공 시간에 배운 자료구조 , 알고리즘을 배우긴 했는데 뭘 해야할까 고민하던 시기였던거 같다.전공 수업 시간에 배운 웹 기초 , 요즘 유행하는 인공지능 , 코테를 위해선 필수라고 소문이 자자한 자료구조까지.. 다 공부를 나름 열심히 했지만 시험을 위한 공부를 했던것인지 워낙 각각이 많은 내용인지 방학이 되면 뇌가 초기화 되는 것인지 남는게 없었다.방학동안 뭐라도 공부하고 싶은데 진로가 안정해져 뭘 할지도 모르겠다는 생각이 들었다.그렇게 스트레스가 쌓이던 와중에 내가 이렇게 진로를 못정하는 이유가 진로에 대해 몰라서 아닐까? 라는 생각이 들었다.그래서 2학년 여..

음료 시스템요구사항음료를 주문하는 주문시스템을 생각해보자음료에는 HosueBlend 와 DarkRoast , Decaf , Esppresso 가 있다.구현객체 지향적인 설계로 공통된 멤버를 묶기 위해 Beverage라는 추상 클랫로 구현체들을 상속 받게 하였다.다음은 클라이언트 코드이며 Beverage 변수에 선택된 클래스의 객체를 주입하고 cost해주면 된다. Beverage beverage = new Espresso(); beverage.cost();추가 요구사항음료에 부가 메뉴를 추가하는 것도 구현해주세요!각 음료에 시럽을 추가할 수도 우유를 추가할 수도 있게 그리고 부가 메뉴를 추가하면 해당 재료마다 추가 비용이 발생하게 해주세요!구현?위와 동일한 방식으로 구현하였다.만약 Milk가 추가된 ..

InnoDB 스토리지 엔진 아키텍처MySQL 은 클라이언트의 쿼리를 해석하는 MySQL 엔진과 해석한 쿼리를 실행하기 위한 데이터를 읽고 쓰기 위한 핸들러 역할을 하는 스토리지 엔진으로 구성된다.InnoDB는 현재 MySQL 기본 스토리지 엔진이고 제일 많이 쓰는 MySQL 스토리지 엔진이다.Primary 키에 의한 클러스터링InnoDB에서 모든 테이블은 PK에 의해 클러스터링 되어 있다.→ PK 값의 순서대로 디스크에 저장된다는 의미그리고 Secondary index 는 레코드의 물리 주소가 아닌 PK 를 가진다.따라서 InnoDB는 pk에 의한 레인지 스캔은 상당히 빨리 처리될 수 있다.오라클 DBMS 의 IOT와 동일하게 구성 💡 PK 기준으로 클러스터링 되기 때문에 PK에 의한 Range 스캔이..