
들어가며예전에는 3-Way Handshake와 4-Way Handshake를 단순히 면접에 자주 나오는 질문이라고만 생각했다. 그래서 그냥 달달 외우기만 했는데 실제 일을 하다 보니 해당 레이어에서 발생할 수 있는 문제를 겪게 되었다. '어라, 저희 서버에서는 응답을 줬는데요? 왜 받지를 못할까요?' 서로 통신하는 친한(?) 사이에 내가 응답을 줬다고 모른척하면 문제는 해결되지 않는다.커넥션을 연결하고, 데이터를 통신하고, 연결을 종료하는 과정까지 다시 짚어보고 이 과정에서 발생할 수 있는 타임아웃 이슈에 대해 정리해본다. 커넥션 연결 과정 TCP 커넥션 연결 : 3-Way Handshake통신 시작 전에 데이터를 안전하게 보내고 받을 수 있는지 확인하는 작업을 해야 한다. 3번의 패킷을 주고받으며 통신..

SQL 로깅 설정실행 환경Spring Boot 3.4.1Spring Data JPA 3.4.1Hibernate 6.6.4 Hibernate SQL 로깅 활성화 & 예쁘게 출력하기Hibernate의 SQL 로깅을 활성화하려면 application.yaml에 아래 설정을 하면 된다.spring: jpa: properties: hibernate: show-sql: true # SQL 출력 format_sql: true # SQL 포맷팅 highlight_sql: true # SQL 하이라이팅hibernate.show_sqltrue로 설정 시 SQL을 콘솔에 출력hibernate.format_sqltrue로 설정시 SQL을 포맷팅hibernate.highli..
Retry가 사용되는 경우외부 서비스에 데이터를 조회할 때, 잠시 서버에 문제가 생기거나 네트워크 오류로 응답을 받지 못할 때가 있다. 이런 경우 다시 요청을 하면 응답을 받을 수 있는 확률이 높기 때문에 재시도를 한다.Retry 정책SimpleRetryPolicy예외 집합에 대해 고정된 횟수만큼 재시도하는 정책maxAttempts를 명시하지 않을 경우, 기본 최대 3번까지 재시도RetryTemplate.builder() .maxAttempts(5) // 최대 5번까지 재시도 .retryOn(TimeoutException::class.java) .build()BackOff 정책Backoff 정책delaymaxDelaymultiplierrandom..
'도메인 주도 개발 시작하기'와 '도메인 주도 설계'를 정리한 글입니다. 도메인소프트웨어로 해결하고자 하는 문제 영역ex카탈로그 : 고객에게 구매할 수 있는 상품 목록 제공주문 : 고객의 주문 처리혜택 : 쿠폰이나 특별 할인 같은 서비스 제공배송 : 고객에게 구매한 상품을 전달하는 일련의 처리 과정하나의 하위 도메인은 다른 하위 도메인과 연동하여 완전한 기능을 제공한다.ex. 고객이 물건을 구매한다 → 주문, 결제, 배송, 혜택 기능이 엮인다.도메인 모델특정 도메인을 개념적으로 표현한 것도메인 모델은 목적을 위해 현실 세계에 존재하는 것을 가공하고 편집하여 우리에게 정보를 제공한다.특정 다이어그램이 아니라 다이어그램으로 전달하려는 아이디어이자 목적을 가진 의사소통 수단이 의사소통 수단은 회의, 기획, ..

온라인 DDL이란?온라인 DDL은 테이블의 구조를 변경(스키마 변경)을 실행하는 도중에도 다른 커넥션에서 테이블의 데이터를 변경하거나 조회하는 작업을 계속 실행할 수 있도록 돕는 방법이다. 기본적으로 DDL 명령은 데이터베이스에 큰 영향을 미치지만, 온라인 DDL을 사용하면 일부 작업을 '온라인'으로 처리할 수 있어 시스템 중단을 피할 수 있다. 문자 집합과 콜레이션 변경 작업(DDL) 중, 데이터 변경이 가능할까?이 말은 즉, 온라인 DDL에서 ALGORITHM=INPLACE, LOCK=NONE 이 가능한지가 궁금하다는 말이다.결론을 먼저 말하면 ‘될 수도 있고, 안 될 수도 있다’ 이다. 다음은 users 테이블의 예제이다. 기본 문자 집합은 utf8이고, department, email, name이..

0. “이모지 입력이 안되는데요 😰”문제 상황모니터링 도중 특정 테이블에서 입력이 실패하는 오류가 발생했다.[1366] Incorrect string value: '\xF0\x9F\x98\x80' for column 'name' at row 1에러 케이스를 분석한 결과, 공통적으로 입력 값에 이모지가 포함된 걸 발견했다. 일반 텍스트와 이모지는 어떤 차이가 있는걸까? 원인문제가 되는 컬럼의 문자집합은 utf8이었다.MySQL 이모지 관련 검색을 해보니 MySQL의 문자집합인 utf8은 3바이트까지만 지원하기 때문에, 4바이트 크기의 이모지를 저장하려고 하면 오류가 발생한다고 한다.때문에 이를 해결하기 위해 문자 집합을 utf8에서 utf8mb4로 변경하고, 콜레이션을 utf8mb4_unicode_ci ..

GitHub Actions? 빌드, 테스트 및 배포 파이프라인을 자동화할 수 있는 CI / CD 플랫폼 Workflow, Event, Job, Action, Runner GitHub Actions 구성요소 GitHub Actions Workflow를 구성하여 Repository에서 Event가 발생할 때 트리거되도록 할 수 있다. ex. Repository에 push할 경우(Event), Workflow가 실행된다. Workflow는 순차적으로 또는 병렬로 실행할 수 있는 하나 이상의 Job을 포함한다. 각각의 Job은 자체 Runner(또는 Container 내부)에서 실행된다. Job은 하나 이상의 Step으로 이루어져 있고, Step은 정의한 script를 실행하거나 action을 실행한다. 출처 ..

OpenCSV dependency 추가 implementation("com.opencsv:opencsv:5.8") CSVReader CSVReader를 사용하는 여러 가지 방법 기본으로 제공하는 생성자 사용 : CSVReader() val reader = CSVReader(Files.newBufferedReader(csvFilePath)) reader.readAll() 빌더 사용 : CSVReaderBuilder() 언제 사용? CSVReader에서 제공하지 않는 구분자를 사용할 경우 ex. .tsv 파일은 기본 CSVReader()를 생성해서 읽을 수 없기 때문에 CSVReaderBuilder의 withCSVParser를 지정해서 CSVReader를 생성해야 한다. val reader = CSVRead..
- Total
- Today
- Yesterday
- 엔티티와값객체
- opencsv
- csv to bean
- mysql 온라인 ddl
- tcp커넥션
- csv 라이브러리
- http커넥션
- 4Way Handshake
- AOP
- 코프링
- CGLIB프록시
- github actions 기초
- spring boot3 쿼리 로그
- jpa 쿼리 로그
- TCP연결
- online ddl
- mysql 이모지
- github actions 구성요소
- 콜레이션변경
- file
- 도메인구성요소
- read timeout
- 문자집합변경
- utf8mb3
- hibernate 쿼리 로그
- spring retry
- 이모지입력오류
- 쿼리 파라미터 바인딩
- 콜레이션
- github actions components
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |