본문 바로가기
반응형

분류 전체보기49

Microservice의 등장 배경 (3) 글을 시작하기 앞서 마이크로서비스와 관련된 흥미로운 이야기 하나를 소개하고자 함. 아마존의 성공에 있어 가장 중요한 사건으로 평가 받는 제프베조스의 사내 메일 모든 팀은 서비스 인터페이스를 통해 데이터 기능을 공개해야 한다. 팀은 이러한 인터페이스를 통해서만 통신을 해야 한다. 인터페이스가 아닌 방식은 앞으로 지원하지 않는다. 직접 연결, 백도어 등의 방식을 사용하면 안 됨. 각 서비스에 사용되는 기술은 중요하지 않다. 어떤 프로토콜이든 상관하지 않는다. 모든 서비스 인터페이스는 반드시 외부에 공개가 될 준비가 되어야 한다. 예외는 없다. 누구든 이를 지키지 않으면 해고된다 위 메일에서 나열된 5가지의 항목은 모두 현재의 AWS는 물론이고 국내에 있는 대다수의 IT 회사들도 사용하고 있는 API 공개 방.. 2024. 1. 2.
Microservice의 등장 배경 (2) 앞 글에서 소개한 것처럼 2010년대 부터 IT 시스템은 기존의 온프레미스 환경에서 클라우드 환경으로 옮겨지면서 저비용으로 지속적인 확장성과 안정성을 갖출 수 있게 되었음. 하지만 기존의 온프레미스 환경의 시스템을 클라우드 환경으로 옮겨지게 되면서 위와 같이 Anti Fragile의 특성을 갖추는 것이 중요해지게 됨. 이러한 Anti Fragile을 지향한 클라우드 환경에서의 시스템 구조를 Cloud Native Architecture라고 칭하게 됨. 이번 글에서는 이러한 Cloud Native Architecture에 대해 서술해보겠음. Cloud Native Architecture의 특징 클라우드 네이티브 아키텍처의 특징을 간략하게 정리하면 아래와 같음. 확장 가능한 아키텍처 시스템의 수평적 확장이 .. 2023. 11. 29.
Microservice의 등장 배경 (1) 지금 시점에서는 이미 많은 기업들이 이미 클라우드 환경으로 인프라를 옮긴 상태이고 이러한 클라우드 환경에서 서비스가 resilient(탄력성)과 Anti Fragile의 특징을 갖고 비용도 저렴하고 지속적인 확장이 가능한 구조인 Cloude Native를 지향할 수 있게 됐음. 이러한 시대에 주로 등장하는 관련 키워드가 Microservice Architecture(이하 MSA)인데 MSA의 등장 배경을 한 번 작성해 보고자함. IT 시스템의 발전 MSA의 등장 배경을 이해하기 위해선 기존의 IT 시스템의 역사를 이해하는 것이 도움이 됨. MSA는 갑자기 생겨난 신기술 같은 것이 아님. MSA를 구축하기 위해 사용되는 많은 기술들은 이전에 이미 존재하고 있었으나 클라우드 시대가 도래하며 그 필요성이 부각.. 2023. 11. 24.
axios에서 요청 URL에 [ 와 ] 가 포함되면 자바 서블릿 기반 톰캣 웹 서버에서 에러가 나는 이유와 해결책 문제 톰캣 7.x 버전부터 RFC 3986, RFC7230 규정을 준수하여 특수문자를 URL에 포함하여 보내는 것을 block 하고 있음. 혹여나 [와 ]가 URL에 담겨 오면 톰캣 웹서버 단에서 Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986 에러 메시지를 발생시키며 400 Bad Request를 내려줌. Chrome과 axios에서는 기본적으로 URL에 percent-encoding(이하 ‘%인코딩’)을 하긴 하지만 특수하게 [와 ]만은 %인코딩을 하지 않고 서버에 전달함. 이 때문에 서버에 [와 ]가 URL에 담겨 전달되는 현상과 RFC 7230, RFC 398.. 2023. 3. 31.
Spring Cloud Gateway가 netty 기반 reactive web application으로 구동되는 이유 개요 Spring Cloud Gateway 애플리케이션을 구동하게 되면 기존의 임베디드 톰켓 기반의 Spring Boot Web 애플리케이션과는 다르게 Netty 기반의 비동기 통신을 지원하는 형태의 웹 애플리케이션으로 실행됩니다. 이 문서에서는 왜 이러한 현상이 발생하는지 알아봅니다. WebApplicationType 먼저 SpringBoot에서는 웹 애플리케이션 구동시 org.springframework.boot.WebApplicationType을 정하게 됩니다. WebApplicationType에는 세가지 타입이 존재합니다. WebApplicationType.SERVLET → 애플리케이션을 서블릿 기반의 웹 애플리케이션으로 실행하며 임베디드 서블릿 웹서버(기본적으로 tomcat 기반)로 실행한다. .. 2022. 4. 21.
Java, 인스턴스 메소드(instance methods)와 정적 메소드(static methods)의 차이 개요 메소드를 사용할 때 우리는 보통 두 가지 방식을 채용하여 사용한다. 인스턴스를 생성한 뒤, 그 인스턴스를 참조하여 메소드를 사용하던가 (e.g. instance.someMethod()) 혹은 클래스명으로 메소드를 참조하여 사용하던가(e.g. ClassName.someMethod()) 하여 사용한다. 이 두 방식의 메소드를 각각 인스턴스 메소드(Instance Method), 정적 메소드(Static Method)라고 하며 이 글에서는 이 두 메소드 타입에 대해 알아보고 비교해볼 것이다. Instance Method 인스턴스 메소드(Instance Method)는 소위 우리가 일반적으로 정의하고 사용하는 메소드이다. 호출하기 위해서는 반드시 해당 메소드가 정의되어 있는 클래스의 객체를 먼저 생성해주어.. 2022. 4. 1.
Git-flow 소개 개요 Git-flow는 Git이 새롭게 활성화되기 시작하는 10년전 쯤에 최초로 Vincent Driessen이라는 사람의 블로그 글에 소개되어 널리 퍼지기 시작했고 현재는 Git으로 개발할 때 거의 표준과 같이 사용되는 브랜치 전략입니다. 브랜치 종류 Git-flow에서 제시하는 브랜치 종류는 아래와 같이 크게 두 가지로 나뉘며 하위로 총 5개의 브랜치가 존재합니다. The main branches master: 실제 릴리즈할 소스코드를 위한 브랜치 develop: 다음 릴리즈에 포함될 최신 구현 내용(기능)들이 반영되는 브랜치 Supporting branches feature: 새로운 기능을 개발하기 위한 브랜치 release: 다음 버전의 릴리즈를 준비하기 위한 브랜치 hotfix: 릴리즈 버전의 .. 2021. 10. 4.
JPA 엔티티 복합키(Composite Primary Keys) 매핑 개요 JPA를 사용하여 1:m, n:1 관계 테이블을 엔티티 매핑할 때 복합 키(Composite Primary Keys)를 가진 테이블을 엔티티 매핑 시, 제가 겪은 문제점과 해결방안을 정리해보겠습니다. 문제 문제는 아래의 [USR_TERMS_AGRMT] 테이블을 엔티티 매핑하던 중 발생했습니다. 아래와 같이 1:m, n:1 관계 테이블은 참조하는 테이블들의 PK를 PFK로 사용하여 구성되는 경우가 종종 있습니다. 저는 처음에 아래와 같이 [USR_TERMS_AGRMT] 객체 연관관계에 @Id 어노테이션을 붙여 엔티티 매핑을 시도하였습니다. @Entity @Table(name = "USR_TERMS_AGRMT") @NoArgsConstructor(access = AccessLevel.PROTECTED).. 2021. 9. 13.
Javascript 정리 vue의 사용법을 익히기 전에 javscript에 대해 세세하게 정리하기 보다는 java와 개념이 상이한 부분들을 간단히 정리합니다. 이번 포스팅은 개인적으로 숙지해야할 필요가 있다고 생각한 내용들을 긁어서 모아놓은 것이라 정리가 잘 되어 있지않습니다. 하여 다른 분들이 참고하기에 적절하게 작성되지 않은점 미리 알려드립니다. 변수 선언 var 변수명; 혹은 var 변수명 = 값; 변수 이름은 영문과 숫자 그리고 일부 특수문자(_,$)만 포함할 수 있다. 첫 글자로는 $, _, 영문자만 올 수 있음. 저장할 수 있는 데이터형으론 문자형(String), 숫자형(Number), 논리형(Boolean), 비워진 데이터(Null & Undefined)가 있다. 문자형 데이터 문자나 숫자를 큰따옴표(" ") 또는 .. 2021. 5. 8.
반응형