전체 글(363)
-
JPA - @JoinColumn 정리
참고블로그https://ksh-coding.tistory.com/105 [JPA] @JoinColumn 파헤치기 (feat. JPA 연관관계별 사용)✌🏻 0. 들어가기 전 JPA 강의 중에 @JoinColumn을 마스터하면 JPA 연관관계를 어느정도는 다 알 수 있다고 들었다. 그래서, 여러 JPA 개념 중에 @JoinColumn에 대해 파헤쳐보면서 JPA 연관관계를 이해해보ksh-coding.tistory.com @JoinColumn의 name 속성name 속성은 연관관계의 주인(@JoinColumn을 가진)의 테이블의 FK 필드명을 뜻한다.* 참조하는 Entity가 존재할 경우: 참조하는 Entity의 필드명 + "_" + 참조된 기본 키 열의 이름public class Station { ... ..
2024.07.18 -
네트워크 - VPN과 NAT란?
VPN이란?VPN이란 Virtual Private Network의 약자로 인터넷과 같은 공중망을 마치 전용회선처럼 사용해 보안성을 향상하면서 사설망을 이용하지 않기 때문에 비용문제까지 해결한 네트워크다. 실제로 아주 먼 거리의 지사끼리 전용회선으로 통신하기 위해서는 큰 비용이 발생한다. 이때 VPN을 사용하면 비용 절감은 물론 지사간의 중요 데이터를 송수신할 경우에 보안도 지킬 수 있다. 공중망을 통해 데이터가 송수신되더라도 정보 유출이 없도록 라우터 체계를 비공개하고, 데이터를 암호화하고 사용자 인증 기능을 추가하는 등의 다양한 보안기능을 제공한다. VPN 터널링터널링이란 연결해야할 두 지점간에 마치 터널이 뚫린 것처럼 통신 통로를 생성하는 것을 말한다. 이 터널은 터널링을 지원하는 프로토콜을 사용하여..
2024.06.24 -
Kafka - 신뢰성 있는 카프카 애플리케이션을 만드는 3가지 방법(멱등성 프로듀서, 트랜잭션 컨슈머, 컨슈머 중복 적재)
1. 멱등성 프로듀서1.1. 중복 데이터 produce 문제 상황만약 네트워크에 이슈가 생겨서, Acknowledge 전송이 실패되면 중복으로 데이터를 produce할 수 있다.1.2. 멱등성 프로듀서 사용PID(Producer unique ID)를 같이 보내서 브로커에 메시지가 저장되어있음을 같이 저장해서 중복 메시지가 발행되면 토픽에 개시하지 않음. 아래는 실제 3.0 이상의 카프카 프로듀서 팩토리 코드인데, 디폴트로 true로 설정된 코드. 2. 트랜잭션 컨슈머 + 프로듀서컨슈머와 프로듀서를 하나의 트랜잭션으로 묶어서 처리하는 방식임. 특이하게 커밋을 Producer가 한다. 트랜잭션 컨슈머 + 프로듀서 구성으로 되어있고 그 프로듀서가 발행한 이벤트를 consume하는 컨슈머는 반드시isolati..
2024.06.18 -
Springboot + koltin coroutine 사용법
1. 코루틴이 왜 필요할까?코루틴은 비동기 프로그래밍을 단순화하고, 효율적인 동시성(concurrency) 관리를 가능하게 하는 프로그래밍 개념입니다. 코루틴은 경량 스레드(lightweight thread)와 같이 작동하는데, 개발자가 프로그램의 어느 시점에서든 실행을 일시 중지하고 필요할 때 재개할 수 있게 해줍니다. 이러한 특성 덕분에 코루틴은 네트워크 호출, 데이터베이스 트랜잭션과 같은 비동기 작업을 쉽고 효과적으로 처리할 수 있으며, 이런 작업들을 마치 동기적 코드처럼 보이게 만들어 줍니다.필요성은 비동기 코드를 더 간결하고 이해하기 쉽게 만들며, 자원을 효율적으로 사용할 수 있습니다. 전통적인 멀티 스레딩 접근 방식에 비해 메모리 사용을 줄이고, 컨텍스트 스위칭의 오버헤드를 감소시킬 수 있어 ..
2024.05.16 -
Spring kafka + micrometer tracing
build.gradleimport org.jetbrains.kotlin.gradle.tasks.KotlinCompileplugins { id("org.springframework.boot") version "3.2.5" id("io.spring.dependency-management") version "1.1.4" kotlin("jvm") version "1.9.23" kotlin("plugin.spring") version "1.9.23"}group = "com.spring"version = "0.0.1-SNAPSHOT"val jvmVersion = JavaVersion.VERSION_17java { sourceCompatibility = jvmVersion}repositor..
2024.05.14 -
Micrometer Tracing
기본 사용법// Span을 생성한다. 만약 현재 쓰레드에 스팬이 있다면, 현재 새로 생성한 newSpan의 부모가 된다.Span newSpan = this.tracer.nextSpan().name("calculateTax");// Span을 시작하고 Scope에 넣는다.(Scope에 넣는다는 의미는 Thread local에 스팬을 넣는다는 뜻)try (Tracer.SpanInScope ws = this.tracer.withSpan(newSpan.start())) { // 더 나은 디버깅을 위해서 Span에 key/value 쌍을 넣을 수 있다. newSpan.tag("taxValue", taxValue); // Span에 이벤트 로깅을 할 수 있다.(이벤트에는 타임스탬프가 찍힌다.) ..
2024.04.30