반응형

분류 전체보기 407

Spring Cloud Gateway를 이용한 API Gateway 구축해보기

어느 정도 규모 이상의 마이크로 서비스 아키텍처 기반 서비스에서는 API Gateway를 도입하는 것이 효율적이라고 하는데요. API Gateway는 쉽게 클라이언트와 각각의 서비스들 사이에 위치하며, 요청을 라우팅 해주는 등의 역할을 수행하는 서비스로 아래 내용은 Spring Cloud Gateway(SCG)의 동작 원리 및 구현 예제입니다. 2022.11.20 - [Programming/Spring Cloud] - API Gateway란? 개념과 주요 기능 (API Gateway에 대한 조금 더 자세한 내용이 궁금하시다면 다음 포스팅을 참고해주시면 좋을 것 같습니다.) Spring Cloud Gateway 구성 스프링 클라우드 게이트웨이는 MSA 환경에서 사용되는 API Gateway 중 하나로 Sp..

리눅스 파일 편집기 vi 자주 사용되는 명령어 정리

vi란? vi는 문서 편집기입니다. windows 운영체제에서는 기본적인 문서 편집기로 '메모장'을 지원하는데요. linux 운영체제에서 기본적으로 지원하는 문서 편집기가 바로 'vi'입니다. vi와 vim은 무엇이 다를까요? vim(vi improved)는 단어 뜻 그대로 기존의 vi(visual editor)에서 기능을 향살 시킨 에디터이며, vi가 텍스트 편집에 필요한 최소한의 기능만을 가지고 있어 사용에 불편한 점이 있기 때문에 그 부분을 보완하기 위해 나온 것이 바로 vim입니다. 그러면 vi가 아니라 vim을 사용해야 하는 것 아닌가요? 리눅스에는 vim editor가 설치되어 있습니다. 때문에 vi를 사용해도 vim이 실행되고, vim을 사용해도 vim이 실행되는 것입니다. (vim 안에는 ..

Programming/Linux 2022.11.24

API Gateway란? 개념과 주요 기능

1. API Gateway란? 최근 많은 서비스들이 독립적인 기능을 수행하는 작은 단위의 서비스들로 구성된 마이크로 서비스 아키텍처(Micro Service Architecture) 형태로 구축되면서 서비스의 복잡도를 줄일 수 있게 되었고, 변경에 따른 영향을 최소화하면서 개발과 배포를 할 수 있다는 장점도 얻게 되었는데요. 하지만 여기서 말하는 작은 단위의 서비스가 50개, 100개가 되었을 때, 이 많은 서비스들의 엔드포인트를 관리하는 데 있어서 어려움이 생기고, 또 각각의 서비스마다 공통적으로 들어가는 기능(ex 인증/인가, 로깅 등)들을 중복으로 개발해야 한다는 문제점이 발생합니다. 이러한 문제점을 해결하기 위해 등장한 것이 바로 API Gateway로 API Gateway는 위 이미지와 같이 클..

로깅시 System.out.println() 사용을 지양해야 하는 이유

Java 프로그래밍을 처음 접하게 되면 거의 대부분이 다음과 같이 "Hello World"를 콘솔에 출력하는 것에서부터 시작하게 됩니다. 이때 사용되는 출력 방법인 System.out.println() 메서드는 자바 표준 입력 클래스인 System을 사용하기 때문에 클래스 경로에 추가해야 될 라이브러리나 추가 구성이 필요 없기 때문에 간편하고 쉽게 사용할 수 있다는 장점이 있는데요. 하지만 프로덕션 코드(Production Code)에서는 System.out.println() 메서드를 통한 출력이 지양되는데, 그 이유는 무엇인지 살펴보겠습니다. /* 로깅(Logging)이란? 로깅은 프로그램 실행 동작을 일련의 기록인 로그(Log)의 생성을 통해 남겨놓는 일을 말합니다. 로그는 재현하기 힘든 버그나 성능..

Programming/Java 2022.11.16

MySQL EXPLAIN 실행 계획을 통한 쿼리 최적화

해당 포스팅은 MySQL의 EXPLAIN 명령어를 통해 쿼리의 실행 계획을 확인하고 이 계획을 바탕으로 쿼리 최적화를 진행해보며 정리한 내용입니다. 1. EXPLAIN을 통한 쿼리 최적화를 진행하게 된 이유 프로젝트가 어느 정도 마무리되고 솔루션화를 진행하는 과정에서 기존에 짜여진 테이블 구조 중 마음에 들지 않는 부분들을 리팩토링하기 위한 계획을 세우고 있었습니다. 결론적으로 리팩토링 계획에 대한 피드백은 '기능상 문제가 있는 거라면 수정하는 것이 당연하겠지만, 정상적으로 작동하고 있다면 테이블 구조를 변경했을 때 발생하는 사이드 이펙트도 충분히 고려되어야 한다.'였습니다. (구조가 바뀌면 해당 테이블을 사용하는 모든 쿼리에 영향을 주게 되고, 결국 해당 부분에 대한 테스트까지 다 다시 진행되어야 합니..

Programming/MySQL 2022.11.12

클라우드 환경 Service Discovery 개념 정리

해당 포스팅은 Spring Cloud의 Eureka, Spring Cloud Gateway 등, 클라우드 환경의 서비스 구성에 대해 공부하며 접하게 된 Service Discovery에 대한 개념 정리입니다. (프로그래밍적인 관점에서 바라본 Service Discovery에 대한 정리입니다.) 0. Service Discovery란? on-premise 서버 기반의 Monolithic Architecture의 문제점을 보완하기 위해 클라우드 환경을 이용하여 서버를 구성하는 Micro Service Architecture(MSA)가 몇 년 전부터 대세로 떠오르고 있습니다. MSA와 같은 분산 환경에서의 동작은 서비스 간의 원격 호출(API 호출)로 구성되며, 원격 호출은 각 서비스의 ip 주소와 port를..

빅 엔디언과 리틀 엔디언(Big Endian & Little Endian)

빅 엔디언과 리틀 엔디언이라는 생소한 개념을 접하며 정리한 내용입니다. 엔디언에 대해서 살펴보기 전에 비트와 바이트에 대한 내용부터 시작하여 살펴보도록 하겠습니다. 1. 비트와 바이트(데이터가 저장되는 방식) 눈에 보이지는 않지만 내부적으로 컴퓨터가 동작하는 원리는 비트(bit)라고 하는 '0'과 '1'로 표현되는 단위부터 시작됩니다. 비트는 컴퓨터가 데이터를 처리하기 위해 사용하는 데이터의 최소 단위로, 하나의 비트만으로는 많은 양의 데이터를 나타내기 부족하기 때문에 8개의 비트(bit)를 묶은 바이트(byte)라는 단위가 메모리에 저장되는 최소 단위로 정해졌습니다. (메모리 1칸은 1byte로 구성되어 있지만 실제 저장되는 데이터는 대부분 4byte 또는 8byte 크기로 구성됩니다.) 하나의 바이트..

Programming/Web 2022.11.05

스프링부트 spring-security-web을 사용한 IP 접근제어

해당 포스팅은 spring-security-web의 IpAddressMatcher와 spring의 interceptor를 활용하여 지정된 ip만 해당 서비스에 접근 가능하도록 설정하는 ip 접근제어를 구현한 내용입니다. (spring-security-web은 org.springframework.boot:spring-boot-starter-security:2.7.3에 포함되어 있습니다.) Interceptor @Component @RequiredArgsConstructor public class IpAddressAccessControlInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest..

MySQL JSON 데이터 타입에 활용되는 함수 정리

MySQL 5.7부터 DBMS 차원에서 JSON 데이터 타입이 지원되기 시작했는데요. 아래 내용은 최근 데이터베이스 쿼리에 JSON 함수를 사용해보면서 정리한 내용입니다. - JSON 타입에 저장? TEXT 타입에 저장? DB에 JSON 형식의 데이터를 저장할 때는 고려되어야 할 부분이 있는데요. 바로 해당 데이터를 저장할 컬럼의 타입으로 'JSON Type'을 쓸 것이냐, 'TEXT Type'을 쓸 것이냐, 입니다. MySQL에서 JSON Type에 데이터를 넣는 경우 내부적으로 binary 형태로 저장되며, TEXT Type에 데이터를 넣는 경우에는 string 형태로 저장되는데요. TEXT 타입의 경우에는 Type Conversion 없이 string 형태의 데이터를 그대로 전송해주면 되지만, JS..

Programming/MySQL 2022.10.29

MySQL 계정 생성 및 권한 부여 방법 정리

MySQL을 설치하게 되면 가장 먼저 사용되는 계정이 바로 root 계정인데요. root 계정의 경우 관리자 계정이기 때문에 데이터베이스에 대한 모든 권한을 가지고 있습니다. 때문에 실제 서비스에 사용되는 DB의 경우 실질적인 관리자만 root 계정을 사용하고 이외의 DB 사용자들은 용도에 맞는 권한을 부여받은 계정을 이용하는 것이 데이터베이스를 관리하는 데 있어서 좋은 방식입니다. 그러면 아래 내용을 통해 MySQL에서 계정 생성 및 권한을 부여하는 방법에 대해서 살펴보겠습니다. 1. 접속 및 Database 변경 //mysql 접속 > mysql -u root -p Enter password: //database 변경 > use mysql; //계정 조회 > select host, user, plug..

Programming/MySQL 2022.10.27
반응형