본문 바로가기
728x90

스터디116

[Nginx] Server Keepalive와 Upstream Keepalive 목차   1. Server Keepalive클라이언트와 nginx 간의 연결HTTP, Server 또는 Location block 내에서 keepalive_timeout, keepalive_requests 설정을 사용클라이언트와 nginx 간의 http 연결을 일정 시간 동안 유지해, 새로운 요청 시 재연결을 방지주요 설정keepalive_timeout클라이언트와 nginx 간의 연결을 유지할 최대 시간기본값: 75skeepalive_requests동일한 연결에서 처리할 최대 요청 수를 제한기본값: 100예시 코드 keepalive_timeout 60s;keepalive_requests 1000; 2. Upstream Keepalivenginx와 백엔드(ex: application server) 간의 연.. 2025. 1. 26.
[Nginx] underscore 가 포함된 custom header 확인이 안 될 경우(underscores_in_headers) 목차   1. 개요client request →  gateway → nginx → was server 과정으로 요청이 인입되고있습니다.하지만 gateway에서 nginx 로 커스텀 헤더가 인입되지 않는 이슈가 발생하였습니다. 2. nginx 와 underscroes_in_headersnginx 에서 커스텀 헤더가 인입되지 않는 이유와 해결책을 아래와 같습니다.기본적으로 nginx 는 http 헤더의 언더스코어 (_) 를 제거한뒤 springboot server 로 전달합니다.따라서 가급적이면 헤더에 언더스코어를 포함하지 않도록 정의하여 사용합니다.x-custom-header (o)x_custom_header (x)3. 해결방법언더스코어가 포함된 헤더를 사용하기위해서 아래와 같이 nginx.conf 에 설.. 2025. 1. 25.
[JAVA] gson에서 Deserialize, Serialize, TypeAdaptor 적용하기 목차   1. 개요test code 작성 중 gson 을 사용하다가 데이터 타입인 Instant를 이해하지 못하여 400 에러가 발생하였습니다.이때 gson이 Instant type을 이해할 수 있도록 직렬화/역직렬화 작업이 필요합니다.먼저 Gson, GsonBuilder에 대해서 알아보겠습니다. 2. Gson이란?java 객체를 json 문법으로 변환해주는 java library 입니다.json 문자를 java 객체로 변환하는 것도 제공합니다.java 객체 → json 문법으로 변환하는 것을 직렬화(serialization)라고 하고json 문법 → java 객체로 변환하는 것을 역직렬화(deserialization)라고 부릅니다. 3. GsonBuilderGson 클래스에는 객체를 json 형식으로 .. 2025. 1. 22.
[Springboot] @PreConstruct와 @PreDestory 의미 사용법 목차   1. 스프링 빈의 생명 주기스프링 빈의 생명 주기를 먼저 살펴보면 아래와 같습니다.스프링 컨테이너 생성스프링 빈 생성의존 관계 주입 (DI)초기화 콜백 - 빈이 생성되고 빈의 의존성이 주입된 이후 호출된다. 애플리케이션 동작 및 데이터 사용소멸전 콜백 - 빈이 소멸되기 직전에 호출된다.스프링 종료 2.@PostConstructPostConstruct 어노테이션이란 무엇이며 언제 사용할까요?객체를 초기화 할 때 수행한다.객체가 생성된 후 별도의 초기화 작업을 위해 실행하는 메소드를 선언하여 사용한다.@PostConstruct 어노테이션을 설정해놓은 init 메소드는 WAS 가 띄워질 때 실행된다.@PostConstructpublic void init() { System.out.println("초기.. 2025. 1. 19.
[Kotlin] List와 MutableList 개념 및 차이점 val countryList = listOf("한국","미국","일본")val minusCountryList = countryList - "일본" // "한국", "일본" 값의 Listval plusCountryList = countryList + "중국" // "한국","미국","일본","중국" 값의 List val newlistData = listOf(1, 2, 3)val plusList = listOf(4, 5, 6)newlistData.addAll(plusList) // List 합치기val newlistData2 = plusList1 + plusList2 // + 기호로 합치기val newListData3 = plusList1.plus(plusList2) // plus함수로 합치기val newL.. 2025. 1. 18.
[Spring] 스프링에서 특정 HTTP 응답코드 반환하기 (ResponseEntity, @ResponseStatus) 목차   1. Spring 에서 HTTP 응답상태 코드Spring은 HTTP 응답 상태 코드를 사용자 정의 할 수 있는 다음과 같은 방법을 제공합니다.ResponseEntity 객체 응답@ResponseStatus 어노테이션ResponseStatusException 예외 발생 2. ResponseEntityResponseEntity 인스턴스와 함께 HTTP 응답 상태 코드를 전송할 수 있습니다.예시 코드요청을 통해서 전달 받은 Student 인스턴스를 생성하는 API가 있고, API를 호출했을 때 성공적으로 수행했을 때 Spring에서는 200 응답 코드를 보냅니다.요청을 통해서 전달 받은 Student 인스턴스를 생성하는 API에서 성공적으로 처리가 완료되면 201(CREATED) 응답을 보내고 싶을 .. 2025. 1. 17.
[Kotlin] @NotNull Validation 사용하기 목차   1. Gradle 설정spring-boot-starter-validation 의존성을 명시해야 valid 사용이 가능합니다.implementation 'org.springframework.boot:spring-boot-starter-validation' 2. Valid 사용방법data class ValidRequestDto( @field:NotNull(message = "value는 필수 입력값입니다.") val value: String? = null, @field:NotNull(message = "createdAt은 필수 입력값입니다.") val createdAt: LocalDate? = null, @field:NotNull(message = "number는 .. 2025. 1. 16.
Kotlin 예외처리(2) - check(), checkNotNull() 목차   1. check()check()매개변수의 값이 참인지 체크거짓이라면 throwIllegalStateException 예외를 반환합니다.*IllegalStateException-일반적으로 IllegalStateException은 메소드를 호출할 상태(State)가 아닐 때 발생시키는 exception이다. 예시코드fun connect(isConnected: Boolean) { //적용 전 if (isConnected) { throw IllegalStateException("이미 연결되어있습니다.") } //적용 후 check(!isConnected) {"이미 연결되어있습니다."}} 2. checkNotNull()checkotNull()매개변수의 값이 n.. 2025. 1. 13.
Kotlin 예외처리 - require(), requireNotNull() 목차   1. require()require()매개변수의 값이 참인지 체크거짓이라면 throw IllegalArgumentException 예외를 반환합니다.*IllegalArgumentException-일반적으로 IllegalArgumentException은 적절하지 않은 인자를 전달했을 때 발생시키는 예외이다. 예시코드fun calculation(val: String?) { //적용 전 if (val.isNullOrEmpty()) { throw IllegalArgumentException("값이 null이거나 공백일 수 없습니다.") } //적용 후 require(!val.isNullOrEmpty()) {"값이 null이거나 공백일 수 없습니다."}} 2. .. 2025. 1. 12.
Kafka 아키텍처 및 동작방식(3)- Consumer, Polling, Rebalancing 목차   1. Consumer란•컨슈머는 컨슈머 API와 이로 구성된 애플리케이션을 의미한다.•일반적으로 컨슈머가 토픽을 구독(subscribe) 또는 읽는다고 한다. •이는 컨슈머가 토픽 파티션에 저장된 메시지들을 가져오는 것을 의미한다.•컨슈머의 특징으로 Polling 구조 / 단일 토픽의 멀티 컨슈밍 / 컨슈밍 그룹이 있다.•이 3가지 특징으로 더욱 효율적이고 유연한 메시지 구독 기능을 제공한다. 2. Polling 구조•컨슈머가 브로커로부터 메시지를 요청하는 polling  구조로 설계되어있다.•즉 컨슈머는 자신이 원하는 만큼의 브로커로 메시지를 요청한다.•장점: 자신의 환경에 메시지 구독 성능을 최적화 할 수 있다. 브로커는 컨슈머의 환경을 고려할 필요가 없다. 3. 단일 토픽의 멀티 컨슈밍•하.. 2025. 1. 10.
Kafka 아키텍처 및 동작방식(2) - Producer, Message, Option 목차   1. Producer란•메시지를 생산해서 카프카의 토픽으로 메시지를 보내는 애플리케이션 서버•프로듀서의 주요 기능은 각각의 메시지를 토픽 파티션에 매핑하고 파티션의 리더에 요청을 보내는 것이다•키 값을 정해 해당 키를 가진 모든 메시지를 동일한  파티션으로 전송 ( 키를 입력하지 않으면 라운드 로빈 방식으로 균등 분배 )  2. send()로 메시지 보내는 방법1) 메시지 보내고 확인하지 않기프로듀서에서 서버로 메시지 보내고 성공적으로 도착했는지 확인하지 않음메시지 손실 가능성이 있어 일반적인 서비스 환경에서는 사용하지 않음 2) 동기 전송메시지를 보내고 send() 메소드의 future 객체를 리턴get() 메소드로 Future를 기다린 후 send()가 성공했는지 확인에러가 없으면 Recor.. 2025. 1. 9.
Kafka 아키텍처 및 동작 방식(1) - Partition, Offset, Broker 목차 1. Kafka 아키텍처 Kafka는 producer가 topic에 데이터를 넣으면 consumer가 가져가는 구조이다.Topic은 데이터가 저장되는 공간으로 어떤 데이터를 담을지 명시하는게 좋다.Ex) click_log, send_sms, location_log 등.. 2. Kafka Partition토픽마다 1개 이상의 파티션 존재빠른 전송을 위해서는 병렬로 처리되어야 하며 이를 위해서 토픽 내에 여러 파티션이 필요하다.파티션 수는 증가시킬 수 있지만 줄일 수 없다. -> 줄일려면 토픽을 삭제해야 한다.따라서 파티션 수를 무작정 늘리기보다는 적절한 값으로 설정한다.적은 수의 파티션으로 운영하다가 프로듀서 또는 컨슈머에서 병목현상이 발생하면 조금씩 늘려가는 방식을 권장   3. Offset 파티션.. 2025. 1. 8.
Kafka 주요 용어 정리 1)EventEvent 는 kafka에서 Producer와 Consumer가 데이터를 주고받는 단위이다. 이벤트 또는 메시지라고 한다. 2)Producer (Publisher)Producer는 kafka에 이벤트를 게시(post)하는 클라이언트 어플리케이션을 의미한다. Publisher라고도 하며 메시지를 보내는 쪽이다. 3)Consumer (Subscriber)Consumer는 이러한 Topic을 구독하고 이로부터 얻어낸 이벤트를 처리하는 클라이언트 어플리케이션이다. Subscriber라고도 하며 메시지를 수신하는 쪾이다. 4)Topic이벤트가 쓰이는 곳이다. Producer는 이 Topic에 이벤트를 게시한다. 그리고 Consumer는 Topic으로부터 이벤트를 가져와 처리한다. Topic은 파일시스.. 2025. 1. 5.
Kafka 구조 및 구성 요소, Pub/Sub 모델 목차   1. Pub/Sub 모델카프카는 Pub-Sub 모델이다. 여기서 Pub-sub 모델이란 무엇일까?Publish - Subscribe (발행/구독) 모델은 메세지를 특정 수신자에게 직접적으로 보내주는 시스템이 아니다.Publisher는 메시지를 topic(어떠한 집단을 말함)을 통해서 카테고리화 한다.분류된 메시지를 받기 원하는 receiver는 그 해당 topic을 구독(subscribe)함으로써 메시지를 읽어 올 수 있다.publisher는 topic에 대한 정보만 알고 있고, 마찬가지로 subscriber도 topic만 바라본다.즉, 데이터를 관리하는 Kafka 서버를 사이에 끼고 데이터를 넣는 publisher와 데이터를 읽는 subscriber는 각자의 업무만 kafka 서버를 통해 수.. 2025. 1. 4.
Kafka 기본 개념 및 의미 목차   1. Kafka 란   •데이터 파이프라인(Data Pipeline)을 구축할 때 가장 많이 고려되는 시스템 중 하나가 '카프카(Kafka)’ 이다. •아파치 카프카(Apache Kafka)는 링크드인(LinkedIn)에서 처음 개발된 분산 메시징 시스템이다. •카프카는 분산 스트리밍 플랫폼으로 대용량의 실시간 로그처리에 특화되어 있는 솔루션이다.•데이터를 유실없이 안전하게 전달하는 것이 주목적이다.•클러스터링이 가능하므로 Fault-Tolerant한 안정적인 아키텍처와 빠른 퍼포먼스로 데이터를 처리한다.•Pub-sub 모델의 메시지 큐 구조이다. 2. Kafka 특징Publisher Subscriber 모델 Publisher Subscriber 모델은 데이터 큐를 중간에 두고 서로 간 독립적.. 2025. 1. 3.
[Linux] netstat 명령어로 서버간 파일 전송하기 목차   1. netstat 명령어netstat은 network statistics 의 약자로 네트워크 상태와 열려있는 포트에 관해 확인 할 수 있습니다.전송 제어 프로토콜, 라우팅 테이블, 수많은 네트워크 인터페이스, 네트워크 프로토콜 통계를 위한 네트워크 연결을 보여주는 명령 도구입니다.netstat 명령어의 옵션들은 아래와 같습니다.  상태값 의미StatusContentLISTEN연결 요구를 기다리는 상태. 포트가 열려있음ESTABLISHED서로 연결되어 있는 상태SVN_SENT클라이언트가 서버에 요구(SYN) 패킷을 보내고 연결을 요청한 상태SVN_RECV서버가 클라이언트로부터 접속 요구(SYN)을 받아 클라이언트에게 응답(SYN/ACK)하였지만, 아직 클라이언트에게 확인 메시지(ACK)는 받지 .. 2024. 7. 14.
[MySQL] PK 컬럼 순서와 Index 목차   1. PK 컬럼 순서의 중요성인덱스 구성에서 의도하지 않은 순서의 Primary Key Unique Index가 생성됩니다.많은 인덱스가 생성되므로 입력/수정/삭제 시 불필요한 내부 작업이 증가해 성능에 악영향을 미칠 수 있습니다. 2. PK 구성과 Index 이용스키마를 생성하기 이전에 데이터 모델의 PK 순서를 조절하지 않은 채 테이블을 생성하면 인덱스를 이용하지 못해 테이블 Full Scan 현상이 발생할 경우가 있습니다.예시 테이블create table multi_pk_table( student_id varchar(255) not null, year datetime not null, semester int not null, .. 2024. 7. 13.
[Kotlin] isNotEmpty(), isNotBlank(), isNullOrEmpty(), isNullOrBlank() 차이 목차   1. 예시 Stringsval emptyString = ""val blankString = " "val nullString = nullval normalString = "hello" 2. isEmpty()스트링이 빈 값 (아무값도 없을 경우)일 때 true returnemptyString.isEmpty() //trueblankString.isEmpty() //falsenullString.isEmpty() //nullnormalString.isEmpty () //false3. isNotEmpty()스트링이 어떠한 값을 포함하고 있을 때 (공백 포함) true returnemptyString.isEmpty() //falseblankString.isEmpty() //truenullString.isEm.. 2024. 7. 10.
[Spring] Springboot 버전에 따른 validation 패키지 (org.hibernate.validator.constraints does not exist) 목차   1. javax와 jakarta package 의 Validation이슈 내용Springboot 2.x 버전에서 Springboot 3.x 버전으로 업데이트한 뒤 Validation 관련 어노테이션을 적용할 때 에러가 발생하였습니다.에러 메시지package org.hibernate.validator.constraints does not existcannot find symbol symbol : class NotBlankjavax 패키지의 Validation을 사용하였고 build.gradle에 필요한 모듈을 모두 추가했음에도 에러가 발생하였습니다.build.gradle...implementation("org.springframework.boot:spring-boot-starter-validat.. 2024. 7. 7.
[Spring] PUT 과 PATCH 사용시 주의할 점 목차   1. Spring 에서 PUT 과 PATCH 사용 시 발생하는 이슈일반적으로 PUT은 전체 수정, PATCH 는 일부 필드 수정으로 이해하고 사용하고있습니다.Spring 을 사용하면서 해당 Http Method 를 사용하다가 이슈가 발생한 경험이있는데요, 어떤 이슈가 있었고 어떻게 해결하는지 알아보겠습니다.  2. PUT method예시 코드class TestController { @PutMapping("/test/put") public void putSample( @RequestBody Task task) { System.out.println(task); }}class Task { private String title; private String content; ...}  Reque.. 2024. 7. 6.
728x90