본문 바로가기

Web

(44)
[Kafka] Kafka Connect란? Kafka Connect라는 것에 대해 처음 들어보고 살짝 공부한 뒤 느낀 점을 정리한 글입니다. 정확하지 않은 정보일 수 있습니다. Kafka Connect란? Kafka Connect는 카프카로 작업을 해야하는 경우 데이터 파이프라인 생성 및 반복적인 작업을 줄여주는 역할을 하는 도구입니다. 간단하게 요약하자면 반복적인 작업을 템플릿화하는 도구라고 보입니다. 기존에는 만약 여러 애플리케이션에서 비슷한 Kafka 파이프라인을 구성한다면 어떻게 되는지 보겠습니다. 기존의 방식이라면 바로 위의 그림처럼 각각 거의 동일한 프로듀서를 여러 번 만들고 그림에 나와 있지는 않지만 컨슈머도 동일하게 많은 작업을 요구하게 됩니다. 이는 애플리케이션이 많아질수록 더 부담되는 작업입니다. 이를 해결하기 위해 Kafka ..
[Ktor] Ktor와 Koin을 사용해서 스프링부트 따라잡기 최근에 접하게 된 Ktor 프레임워크와 injection(주입)을 도와주는 Koin 라이브러리를 이용해서 기존에 사용했던 스프링 부트 프로젝트를 대체할 수 있도록 공부하기 위해 작성한 게시글입니다. Ktor 자체의 정보도 아직은 많지 않고 정식으로 배우고 정리하는 글이 아니기 때문에 정상적이지 않은 코드와 불편함을 느낄만한 요소들이 있을 수 있습니다. (너그럽게 봐주세요 ㅎㅎ) 시리즈 진행상황 시리즈 1. 간단한 Api 호출과 MVC 구조 따라하기, 프로파일 구분하기 코드 참고 사이트 : https://ktor.io/docs/welcome.html (Ktor 가이드) Github : https://github.com/MarrRang/ktor-go-to-lunch/tree/master/src/main/ko..
[Ktor] Ktor 소소하게 알아보기 - Server 방식 개요 저희가 Ktor Application을 구동시키기 위해서는 Netty와 같은 서버 엔진을 구동시켜야 하고 이후에 저희의 application을 해당 엔진에 올려야 합니다. 모든 프로젝트의 시작이 될 이 부분을 Ktor에서는 어떤 방식으로 처리하고 있을까요? Ktor server application을 동작시키기 위한 서버 생성 방식 EmbeddedServer EngineMain EmbeddedServer embeddedServer() 메서드를 이용하는 방법이 서버를 구동시키기 가장 쉬운 방법입니다. 아래의 예시는 Netty 엔진을 8080 포트로 띄우는 코드입니다. fun main() { embeddedServer(Netty, port = 8080) { routing { get("/") { call..
[Kubernetes] Kubernetes tls Secret 생성하기 Kubernetes에 TLS secret을 추가해야 할 일이 있어서 정리해놓으면 편하겠다 싶어서 정리하게 됐습니다. Openssl을 이용해서 Private Key, Public Key 생성 Private Key를 이용한 CSR(Certificate Signing Request 생성) CRT 인증서 만들기 CRT파일을 PEM파일로 변환 Kubernetes에 secret 생성 1. Openssl을 이용해서 Private Key, Public Key 생성 Private Key 생성 명령어 openssl genrsa -out [파일명] [bit길이] 예시) openssl genrsa -out test.key 2048 Public Key 생성 명령어 openssl rsa -in [privateKey 파일명] -p..
[Spring Cloud] Feign에 대해서 Feign이란 MSA환경에서는 각 서비스 간의 호출이 기존의 단일 시스템일 때보다 증가하게 됩니다. 이러한 상환에서 Feign은 API 간의 호출을 편하게 해 주기 위해서 만들어졌습니다. 기존에는 HttpClient의 설정을 Java에서 설정해주고 주입받아서 사용하는 방식을 해야 했습니다. 이 부분을 간편하게 바꿔주는 것이라고 생각하면 될 것 같습니다. 예시 코드 1. @EnableFeignClients 추가 @SpringBootApplication @EnableFeignClients public class Application { public static void main(String ...args) { SpringApplication.run(Application.class, args); } } @En..
URI와 URL의 차이 최근 들어 저의 눈에 자주 띄는 용어 중에 URL과 URI가 있습니다. 보통 웹서버 호출을 위해 서버 URL을 코드에 사용하게 되죠. 근데 여러 API를 사용하던 중에 분명 보내는 데이터는 내가 아는 URL인데 URI라고 파라미터명이 적혀 있는 경우가 있습니다. 처음에는 비슷한 의미니 대충 넘어갔는데 이번에 한번 알아보고 정리해보았습니다. URI (Uniform Resource Identifier) Uniform : 일정한 규칙을 따르는, 일정한, 균일한, 고른, 같은 형태의 Resource : 자료, 자원 Identifier : 식별자 위의 영어 단어의 뜻으로 보자면 URI = "일정한 규칙을 따르는 자료 식별자"라고 할 수 있겠네요. Identifier의 경우에는 우리가 흔히 아는 ID의 약자이기도 ..
[GraphQL] GraphQL 처음 시작하기 GraphQL이 뭘까? GraphQL은 페이스북에서 만든 쿼리 언어입니다. 소식에 조금 늦은 저는 2020년에 처음 들었는데 최근 들어서 GraphQL 소식이 자주 들려오고 있습니다. 현재의 인기는 어느 정도일까요? 아래의 그래프를 보면 GraphQL에 대한 관심도가 어느 정도인지 알 수 있습니다. 꾸준하게 사람들에게 언급되고 배우려고 하는 사람, 사용하고 있는 사람들이 많이 늘고 있습니다. 일단 GraphQL은 뒤에 QL이라고 붙는 것을 보면 SQL(Structed Query Language)과 마찬가지인 것 같은데 사용되는 예시를 살펴보면 매우 다릅니다. GraphQL은 웹 클라이언트와 서버 사이에 사용되고 SQL은 서버와 데이터베이스 사이에 사용됩니다. 그래서 웹 데이터를 처리하는 방법인 REST와..
HandlerMethodArgumentResolver에 대해서 Spring을 활용해서 웹 개발을 하던 중 의문이 생겼습니다. Controller에서 Parameter를 받을 때 Model을 넣어주면 해당 Model의 생성자는 어디에 있지? 객체가 생성되어 있고 값이 들어가 있는데 생성자는 어디에 있는지 알 수가 없었습니다. 그러다 찾은 것이 HandlerMethodArgumentResolver입니다. HandlerMethodArgumentResolver Spring에서 제공하는 인터페이스 중 하나로 컨트롤러에서 특정 조건에 맞는 파라미터에 원하는 값을 바인딩 해주는 역할을 합니다. 위의 상황과 같이 Model이 파라미터라면 모델 객체를 생성하고 값을 넣어서 반환해주는 것이 이 인터페이스의 역할입니다. Custom HandlerMethodArgumentResolver..
Java의 직렬화란 1. 직렬화(Serialization)란? 직렬화의 정의는 데이터구조나 오브젝트 상태를 동일하거나 다른 컴퓨터 환경에 저장하고 나중에 재구성할 수 있는 포맷으로 변환하는 과정입니다. 즉, 다른 환경으로 데이터를 전송하거나 저장할 때 서로 재구성할 수 있는 형태로 변환하고 역변환하는 것을 직렬화/역직렬화라고 합니다. 2. Java에서의 사용 Java에서 사용하는 곳은 다른 곳으로 전송 혹은 전송 받을 때 사용하거나 특정 객체를 영속화(메모리가 아닌 영속적인 디스크에 저장할 때) 사용한다. 예를 들어보면 Java 에서는 ObjectOutputStream 클래스로 객체를 저장할 수 있는데 이때 매개변수로 넘길 수 있는 것은 Serializable의 구현체만 가능하다. 즉, 직렬화가 가능하도록 한 객체를 byt..
HTTP/3에 대해서 HTTP/2도 이제야 막 알아가던 시점인데 벌써 3이라니! HTTP3.0이 2020년 10월에 추가되었습니다. 어떻게 이렇게 소문도 없이 나왔는지 모르겠습니다. 그래서 이제서라도 알아보려고 정리해봅니다. 이전의 HTTP https://marrrang.tistory.com/38?category=925235 이것도 한번 참고해보시면 좋을 듯합니다 ㅎㅎ HTTP/3을 보기 이전에 HTTP/2에 대해서도 잘 모르니 짚고 넘어가겠습니다. HTTP1.1을 사용하던 때와 다르게 리소스들이 증가하였고 점점 더 병렬 수행하는 것이 중요해짐에 따라서 개선이 필요했습니다. 기존에는 Plain Text(평문)을 사용했지만 2.0부터는 바이너리 포맷으로 인코딩 된 Message, Frame으로 구성되었습니다. 1.0에 비해서 ..