일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- virtualization
- Container
- mysql
- spring boot
- 스프링 배치
- 배포
- Spring
- 영속성 컨텍스트
- Java
- spring cloud
- 스프링 시큐리티
- 컨테이너
- ORM
- 스프링 부트
- 스프링
- 백엔드
- vm
- 웹 서버
- 데이터베이스
- CI/CD
- 자바
- 도커
- Spring Security
- CS
- web server
- spring batch
- 가상화
- computer science
- JPA
- HTTP
- Today
- Total
목록Back-End (74)
개발 일기

기존에 단일 프로젝트의 멀티 모듈 아키텍처에서 인증·인가를 담당하는 auth 모듈을 구축했다.이때 해당 auth 모듈을 통해 각 api 모듈로 요청을 라우팅할 수 있으면 좋았겠지만, 단일 애플리케이션 내에서는 API Gateway 패턴을 적용할 수 없었고 결국, auth 모듈을 각 api 모듈에서 직접 의존하여 인증·인가를 처리하는 방식으로 구현해야 했다. 해당 방식은 어쨋든 인증·인가 로직을 하나의 모듈에서 처리하고, 라이브러리처럼 필요한 api 모듈에서 이를 의존하여 사용하는 형태였지만, 아키텍처적으로는 중앙 집중식으로 처리하는 API Gateway 패턴과는 차이가 있어 아쉬웠다. 그러나 이번에 Eureka 기반의 MSA 아키텍처를 구축하면서 Spring Cloud Gateway를 도입하게 되어 정리..

https://cloud.spring.io/spring-cloud-netflix/reference/html/#netflix-eureka-client-starter Spring Cloud NetflixThis project provides Netflix OSS integrations for Spring Boot apps through autoconfiguration and binding to the Spring Environment and other Spring programming model idioms. With a few simple annotations you can quickly enable and configure the common patcloud.spring.io쿠버네티스를 도입하려다가 데드..

Segment Tree 초기화 Segment Tree 구간 합 구하기 Segment Tree 값 업데이트 (기존 값과 바꿀 값의 차를 통한 업데이트) diff를 활용한 update방식보다 해당 코드가 더 직관적인듯 시간 복잡도트리 초기화 (init)세그먼트 트리는 완전 이진 트리로, 전체 노드 개수는 O(2N) (약 4N)init 함수는 한 번의 호출당 O(1), 전체적으로 O(N)시간 복잡도: O(N)구간 합 조회 (sum)이진 트리의 높이는 O(log N)sum 함수는 트리를 따라 내려가며 분할 정복, 최악의 경우 O(log N) 개의 노드를 방문시간 복잡도: O(log N)값 업데이트 (update)특정 위치의 값을 변경하면, 관련된 모든 부모 노드를 업데이트해야 함update 함수는 이진 트리..

현재 프로젝트를 컨테이너 기반의 MSA 환경으로 구축하고, Kubernetes를 활용해 오케스트레이션하려 한다.단순히 독립적인 배포 및 유지보수를 용이하게 하고, 대용량 트래픽이 발생할 경우 전체 시스템이 아니라 특정 기능만 확장할 수 있도록 하기 위해 도입을 고려 중이다. 다만, 개념적으로만 알고 있어 이를 더 명확히 정리하고자 한다.우선 컨테이너화는 왜 필요한지 다시 짚고 가자.Why Container? Relation과 History를 말끔히 해결해준다.Relation 문제 해결기존 가상 머신은 각 VM이 Guest OS를 가지고 있으며, 이를 실행하기 위해 Host OS와 Hypervisor를 거쳐야 한다. 이 과정에서 리소스 오버헤드가 발생하고, 성능 저하가 불가피하다.반면, Docker 컨테이..

회원 가입을 하면 쿠폰을 제공하고 있는 로직의 코드를 보자.package 관점에서 볼 때 멤버에서는 쿠폰 서비스를 사용하기 때문에 멤버에서 쿠폰으로 의존성이 발생하고 있고 쿠폰 서비스는 인자로 인해 쿠폰에서 멤버로의 의존성이 발생하고 있다.→ 즉, 이로 인해 "의존성 사이클 발생", 이를 해결하기 위해서는?인터페이스를 통한 의존성 역전이벤트 처리등을 통해 해결할 수 있는데 이때 이벤트에 조금 더 집중해 보겠다.멤버에서 회원 가입을 하면 다이렉트로 쿠폰 서비스를 호출하는 것이 아니라 멤버가 회원가입했다는 이벤트만 발행한다.그러면 쿠폰 패키지 내부의 리스너가 이 발행된 이벤트를 듣고 이를 처리하는 코드를 작성하면 된다.그렇게되면 위에서와 같이 의존성 사이클이 해결된다. 이를 통해 해결 가능그렇다면 인터페이스는?

Spring에서 외부 API를 요청하는 방법으로 크게 3가지 정도 있다.RestTemplate, WebClient, OpenFeign 등이 있는데 이번에 RestTemplate, WebClient 이 두가지에 대해 집중적으로 알아보겠다.RestTemplateSpring 3.x에서 도입된 동기식 HTTP 클라이언트Multi-Thread, Blocking IO로 동작현재는 maintenance mode로 개발자에게 WebClient사용을 권장한다.Restful 형식에 맞추어진 템플릿Header, Content-Type등 설정하여 외부 API 호출Http 요청 후 json, xml, String 같은 응답을 받을 수 있다.RestTemplate 동작 방법 및 문제점위에서 언급했듯이 RestTemplate은 M..

다익스트라 알고리즘(Dijkstra Algorithm)3학년 1학기 Computer Network 강의에서 처음 접하게 되었다. 이 알고리즘은 다이나믹 프로그래밍을 활용하여 하나의 정점에서 다른 모든 정점까지의 최단 경로를 구할때 사용한 알고리즘이였다.코딩 테스트에서는 위에서 말했듯이 정점간의 가중치가 있을 때 하나의 특정 정점에서 다른 모든 정점까지의 최단 경로를 구할때 사용할 수 있다.자바 코드import java.util.*;public class Dijkstra { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); // 노드 개수 ..

그전에 JVM에 대해 다시 떠올려보자. JVM 이란 Java Virtual Machine의 약자이며, 자바 가상 머신이라고 한다.자바 애플리케이션을 실행하기 위한 가상 환경자바 바이트코드(.class 파일)를 특정 운영체제나 하드웨어 환경에 상관없이 실행할 수 있게 해준다.JVM은 OS와 독립적이므로 한 번 작성된 자바 코드가 다양한 플랫폼에서 실행될 수 있는 "Write Once, Run Anywhere"의 핵심적인 역할을 한다.컴파일 단계: .java 파일을 자바 컴파일러(javac)를 통해 .class 파일로 컴파일한다.클래스 로드: 컴파일된 .class 파일은 JVM의 ClassLoader에 의해 로딩된다.메모리 할당: ClassLoader는 .class 파일을 Runtime Data Area(런..