본문 바로가기

분류 전체보기

(107)
[Spring] @InitBinder에 대해서 최근에 Spring 관련해서 보안 이슈가 하나 있었습니다. JDK 9 버전 이상의 모든 Spring Core에서 원격 코드 실행이 가능한 0-Day Exploit의 취약점이 알려졌습니다. 그리고 패치 이전에 공격코드가 이미 알려진 상태였습니다. https://www.lunasec.io/docs/blog/spring-rce-vulnerabilities/ Spring4Shell: Security Analysis of the latest Java RCE '0-day' vulnerabilities in Spring | LunaSec We've been taking a look at the new zero-day exploit, dubbed Spring4Shell, supposedly discovered in S..
[Kafka] Kafka Connect란? Kafka Connect라는 것에 대해 처음 들어보고 살짝 공부한 뒤 느낀 점을 정리한 글입니다. 정확하지 않은 정보일 수 있습니다. Kafka Connect란? Kafka Connect는 카프카로 작업을 해야하는 경우 데이터 파이프라인 생성 및 반복적인 작업을 줄여주는 역할을 하는 도구입니다. 간단하게 요약하자면 반복적인 작업을 템플릿화하는 도구라고 보입니다. 기존에는 만약 여러 애플리케이션에서 비슷한 Kafka 파이프라인을 구성한다면 어떻게 되는지 보겠습니다. 기존의 방식이라면 바로 위의 그림처럼 각각 거의 동일한 프로듀서를 여러 번 만들고 그림에 나와 있지는 않지만 컨슈머도 동일하게 많은 작업을 요구하게 됩니다. 이는 애플리케이션이 많아질수록 더 부담되는 작업입니다. 이를 해결하기 위해 Kafka ..
[Java 13 ~] Text Blocks Java Text Blocks java 13부터 제공되는 기능 중에 Text Blocks가 있습니다. 굉장히 유용한 기능이라고 보기는 어렵지만 이전에 html을 반환해주는 상황이거나 혹은 String을 여러 줄 작성해야 할 때 사용 가능한 기술입니다. 기능 여러줄의 String을 하나의 block에 작성할 수 있게 해 준다. 예시 public String textBlocks() { return """ """; } Text Block은 "(큰따옴표) 3개로 작성합니다. 내부에 원하는 Text를 작성하면 완성입니다. // Text Block안에 "(큰따옴표)는 escaping이 필요없습니다 public String textBlocks() { return """ "escape가 필요없다" """; } // f..
[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..
[DB] Transation Isolation Level Transaction 트랜잭션(Transaction)이란, 데이터베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위라고 할 수 있습니다. 여기서 단위라고 하다 보니 정해진 범위가 있을 것 같지만 사용자가 정할 수 있는 범위입니다. 따라서 아래의 트랜잭션의 4가지 특징을 지키는 선 안에서 수행이 되어야 성공적인 트랜잭션의 사용법이라고 할 수 있습니다. 원자성 (Atomicity) 일관성 (Consistency) 독립성 (Isolation) 지속성 (Durability) 하지만 개발을 하다 보면 효율적인 성능을 위해 굳이 다른 트랜잭션에서 데이터 참조를 막을 필요가 없을 수도 있습니다. 아니면, 절대로 참조가 되면 안 되게 설정해야 할 필요가 있겠죠. 그래서 이러한 점을 개발자가 어느 정도는 설정을 해주..
[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..
[IF KAKAO 2021] <카카오톡 서버의 스프링 공화국 탈출기> 정리 및 후기 https://if.kakao.com/session/49 이 글은 IF KAKAO 세션 내용을 정리 및 후기를 적은 글입니다. 단순히 추후에 쉽게 보기 위해서 적는 글이지 내용을 도용하려는 의도는 없습니다. 해당 세션을 우선 보는 것을 추천드립니다. 해당 세션은 기존의 많이 사용하는 Spring Framework의 장단점과 이를 벗어나 다른 프레임워크를 사용해보는 것이 세션의 주 내용이었습니다. 여기서 Spring의 대체재로 사용된 것이 Ktor입니다. Kotlin을 기반으로 한 프레임워크라고 하는데 이후에 추가적으로 사용해보고 정리가 필요하다고 느꼈습니다. Spring Framework의 장점 생태계가 잘 구성되어 있어 서버 개발 기간 단축 개발자 풀(Pool)이 넓어서 인력 추가 투입이 쉬움 프레임워..
[Java] Sealed Class Java 17의 release note를 보다 보면 Sealed Class가 정식으로 확정된 것으로 보입니다. JDK 15부터 프리뷰로 추가되었던 것 같은데 한 번도 써본 적이 없네요. ㅎㅎ 오늘 알아보도록 하겠습니다. Sealed Class Sealed Class, Interface는 간단하게 상속하거나(extends), 구현(implements)할 클래스를 지정해두고 해당 클래스들만 상속 혹은 구현을 허용하는 키워드입니다. public sealed interface CarBrand permits Hyundai, Kia{} public final class Hyundai implements CarBrand {} public non-sealed class Kia implements CarBrand {} ..
[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..