본문 바로가기

전체 글51

[Pattern] 싱글톤 패턴 정리 목적 단 하나의 유일한 객체를 만들기 위한 디자인 패턴 클래스의 인스턴스를 오직 하나만 만들어서 글로벌하게 접근할 수 있도록 한다. 메모리 절약을 위해 인스턴스가 필요할 때 똑같은 인스턴스를 만들지 않고 기존의 인스턴스를 가져와 활용하는 기법 대부분 리소스를 많이 차지하는 역할을 하는 무거운 클래스를 대상으로 한다. ex) 데이터베이스 연결 모듈, 디스크 연결, 네트워크 통신, DBCP 커넥션풀, 스레드풀, 캐시, 로그 기록 객체 자바로 싱글톤 패턴 구현 생성자를 private으로 설정해서 외부에서 인스턴스로 만들 수 없게 만드는 것이 중요하다. 1. Lazy initialization public class Singleton { private static Singleton instance; privat.. 2023. 6. 25.
[Spring Cloud] 마이크로서비스간 통신 (RestTemplate vs FeignClient) 마이크로서비스 간 통신모놀리식 애플리케이션은 단순하게 메서드를 호출함으로 써, 요청에 대해 응답을 처리할 수 있었다.하지만, 분산 시스템에서 각각의 독립적인 Micro Service가 서로 통신하는 작업이 필요하다.마이크로서비스 간 통신은 주로 HTTP기반 Restful API를 사용하여 이루어진다. RestTemplate vs FeignClientRestTemplateSpring Framework에서 제공하는 HTTP 클라이언트다른 서비스로의 HTTP 요청을 수행하고 응답을 받아올 수 있다. 장단점장점다양한 HTTP 메서드를 지원하고, 요청을 다양한 방식으로 커스터마이즈 할 수 있다.오랜 기간 동안 사용되어 왔기 때문에, 많은 개발자들에게 익숙하다.많은 커스터마이즈를 제공해 복잡한 통신 시나리오를 다룰.. 2023. 6. 22.
[Spring Cloud] Config Server 설정 정보의 암호화 처리 Spring Cloud Config 공식 문서에서 Features를 보면, Encrypt와 Decrypt를 지원한다.각 마이크로 서비스에서 중요한 설정 정보는 보안에 민감한 정보들이 많다.ex) 데이터베이스 암호, API 키, JWT의 Secret Key와 같은 사용자 인증 정보 등따라서 설정 정보에 보안에 민감한 정보를 저장할 때는 암호화를 하여 저장하는 것이 매우 중요하다.Spring Cloud Config의 Encrypt와 Decrypt를 사용하여 설정 정보를 안전하게 저장하는 방법에 대해서 알아보자.  대칭키 암호화(symmetric) & 비대칭키 암호화(asymmetric)대칭키 암호화암호화와 복호화에 동일한 키를 사용하는 방식주요 알고리즘으로는 DES(Data Encryption Standar.. 2023. 6. 20.
[Spring Cloud] Config Server 구축하기 (busrefresh 하기) Spring Cloud Config Server분산 시스템 환경에서 서버, 클라이언트 구성에 필요한 설정 정보를 외부 시스템에서 관리하는 서버외부에서 모든 환경에 대한 정보들을 관리해주는 중앙 서버기존에는 각 Micro Service가 설정 정보 파일(application.yml)를 관리하여, 해당 파일이 변경되면 해당 서버를 다시 빌드하고 배포해야하는 번거로움이 있었다. Config Server의 장단점장점여러 서버의 설정 파일을 중앙 서버에서 관리할 수 있다.변경 사항이 있을 때 모든 Micro Service에 대해 일관된 업데이트를 적용할 수 있어, 중복 설정을 줄이고 유지 보수를 간소화할 수 있다.Mirco Service가 재배포 하지 않고 설정 파일의 변경사항을 반영할 수 있다.여러 환경(개발,.. 2023. 6. 19.
[DB] 트랜잭션 정리 트랜잭션? 데이터베이스의 상태를 변화시키는 하나의 논리적인 작업 단위 DB에서 데이터를 다룰 때 장애가 일어난 경우 데이터를 복구하는 작업의 단위 트랜잭션은 전체가 수행되거나 또는 전체가 수행되지 않아야 한다. (ALL or Nothing) ex) 데이터베이스에 삽입, 수정, 삭제 등의 작업을 할 때, 여러 개의 작업들을 하나의 트랜잭션으로 묶습니다. 트랜잭션 연산 Commit : 트랜잭션이 성공하여 트랜잭션 결과를 영구적으로 반영하는 연산 Rollback : 트랜잭션 도중 실패하여 트랜잭션 실행을 취소하여 원래의 상태로 원상 복구시키는 연산 자동 커밋 : 자동 커밋으로 설정하면 각 쿼리는 실행 직후 자동으로 commit이 호출되어 결과가 반영된다. 따라서 commit이나 rollback을 따로 호출하지.. 2023. 6. 17.
[DB] Index 정리 Index 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스의 검색 속도를 향상하기 위한 자료구조 Index를 통해 검색 속도 향상과 조회 성능을 높일 수 있다. Index를 사용하지 않는 칼럼을 조회하는 상황에서는 테이블 전체를 탐색하는 Table Full Scan이 수행되어 처리 속도가 떨어진다. 인덱스를 활용하면, SELECT 외에도 UPDATE와 DELETE 성능을 향상할 수 있다. UPDATE와 DELETE의 WHERE문에서 데이터를 조회하는 성능을 향상된다. Index 적용 예시 // single column index CREATE INDEX si_id ON MEMBER (id); CREATE INDEX si_name ON MEMBER (name); // multi column index.. 2023. 6. 13.
[Spring Cloud] Spring Cloud Gateway 구축하기 Spring Cloud Gateway 👍🏻스프링 기반 API Gateway마이크로서비스 아키텍처에서 라우팅, 로드 밸런싱, 필터링 등 역할을 수행Spring 5, Project Reactor를 기반으로 구축되어 비동기 및 논블로킹 기능 지원Netty 서버를 사용하여 높은 성능을 제공 Gradle 의존성 추가implementation 'org.springframework.cloud:spring-cloud-starter-gateway'implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'API Gateway 서버를 Eureka Server(서비스 디스커버리)에 등록하기 위해 eureka-client 의존성 .. 2023. 6. 12.
[Spring Cloud] Client Side Load Balancer & API Gateway 개념 정리 Client Side Load BalancerNetflix RibbonClient Side Load Balancer : 클라이언트에 탑재되어 있는 Load BalancerHardware 가 필요 없이 Software 로만 가능 IP와 PORT가 아닌 서비스 이름으로 호출 (서비스 디스커버리 기능 지원)비동기 처리를 지원하지 않고, 동기적인 방식으로 요청을 전송한 후 해당 요청에 대한 응답을 기다리는 동안 블로킹된다.Blocking방식의 HttpClient인 RestTemplate만 지원Spring Boot 2.4부터 maintenance 상태대안책 : Spring Cloud LoadBalancer Spring Cloud LoadBalancer 👍🏻Client Side Load Balancer : 클라.. 2023. 6. 11.
[Spring] Spring Boot 3 사용해보자! 소프트웨어 마에스트로 14기 과정을 참여하면서, 무사히 기획심의를 통과하고 프로젝트 설계 단계에 있다. 서버 개발은 스프링 프레임워크를 사용하기 때문에, Spring Boot 2를 사용할지 Spring Boot 3을 사용할지에 대해 고민하는 중이다. 따라서 Spring Boot 3이 등장하면서 변화한 점과 새로운 개념을 정리하고 이번 프로젝트에 왜 Spring 3을 사용하기로 결정했는지 포스팅하고자 한다. Spring Framework와 Spring Boot Spring Framework 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로서 엔터프라이즈급 애플리케이션을 개발하기 위한 모든 기능을 종합적으로 제공하는 경량화된 솔루션 핵심 기능 DI (의존성 주입) AOP (관점 지향 프로그래밍) IOC .. 2023. 6. 10.
CORS(Cross-Origin Resource Sharing) 이해와 적용 이전에 프로젝트를 하면서 CORS 문제를 해결하기 위해 애먹은 적이 있다. https://velog.io/@minnseong/CORS-with-Spring-MVC-Security (이전에 사용한 velog) 그 때는 CORS 문제를 해결하는 데에 집중을 해서 CORS의 이해는 조금 부족했던 것 같다. 이번에 CORS에 대해 공부할 기회가 생겨, 이번 포스팅을 통해서 CORS의 이론적인 내용 위주로 정리하고 마지막에는 한번 더 Spring에서 CORS 정책을 해결하는 방법을 기록하려고 한다. SOP Same-Origin Policy 의 약자 다른 출처의 리소스를 사용하는 것에 제한하는 보안 방식으로, 같은 출처에서만 리소스를 공유할 수 있도록 하는 정책 Origin(출처)? Protocol + Host +.. 2023. 6. 8.