일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Spring
- 티스토리챌린지
- kotlin spring
- Elasticsearch
- 공부
- Java
- kotlin coroutine
- CloudWatch
- IntelliJ
- kotlin querydsl
- Pinpoint
- kotlin
- MySQL
- mysql 튜닝
- AI
- 기록으로 실력을 쌓자
- Linux
- AWS EKS
- aws
- CKA 기출문제
- 정보처리기사실기 기출문제
- CKA
- APM
- 정보처리기사 실기
- Kubernetes
- 정보처리기사 실기 기출문제
- 코틀린 코루틴의 정석
- PETERICA
- minikube
- 오블완
- Today
- Total
목록전체 글 (777)
피터의 개발이야기
ㅁ 들어가며ㅇ DBA인 동료와 MySQL의 SSL 통신 방법에 대해서 이야기 나누면서 공부한 내용이다.ㅇ MySQL 문서와 AWS 문서를 보며 공부하였다. MySQL에서 TLS 연결은 어떻게 설명하는가?ㅁ MySQL 참조 문서 링크8.3 Using Encrypted Connections 8.3.1 Configuring MySQL to Use Encrypted Connections 8.3.2 Encrypted Connection TLS Protocols and Ciphers 8.3.3 Creating SSL and RSA Certificates and Keys 8.3.4 Connecting to MySQL Remotely from Windows with SSH 8.3.5 Reusing SSL Sessio..
ㅁ 들어가며ㅇ SOAP과 REST 비교에 대한 글을 작성하였다.ㅇ Restful는 웹 서비스와 모바일 애플리케이션 경량화의 필요에 맞춘 아키텍처 원칙 세트이다.ㅇ 기존에 업데이트를 위한 PUT 메서드만 알고 있었는데, 더욱 경량화된 PATCH메서드를 알게 되었다.ㅇ PATCH와 PUT의 차이점을 알아보고 멱등성의 보장 여부에 대해서 정리하였다. ㅁ REST API에서 PATCH와 PUT의 차이점ㅇ REST API에서 자원을 업데이트할 때 사용하는 두 가지 일반적인 HTTP 메서드는 PATCH와 PUT가 있다. ㅇ 두 메서드 모두 기존 자원을 변경하는 데 사용되지만, 변경 범위와 방식에 있어 중요한 차이점을 가지고 있다. ㅁ PUT 변경 범위ㅇ PUT 메서드는 전체 자원을 수정한다.ㅇ 요청 시 전달된 모든..
ㅁ 들어가며ㅇ 멀티 스레드, 병렬처리에 관한 개발 이야기는 parallelStream을 이용한 방식이었다.ㅇ [Spring] parallelStream, Intercom 데이터 백업하기에서 페이징처리로 속도제한이 되어 있는 intercom의 데이터를 병렬처리로 다운로드 속도를 극복했던 과정이다.ㅇ 멀티 스레드에 관한 글, [JAVA] JDK21, Virtual Thread, Continuation에 대한 이해과 [kotlin] 코틀린 코루틴의 정석 - 코루틴의 동작 원리(Coroutine과 Continuation)을 작성하면서 Java Stream의 병렬 처리 장점에 대해서 다시 생각하게 되었다. ㅁ Java Stream의 병렬 처리 장점ㅇ Java 8부터 도입된 Stream API는 함수형 프로그래밍..
ㅁ 들어가며ㅇ 코틀린 코루틴의 정석 책을 보고 정리한 글입니다.11장 코루틴의 심화 - 무제한 디스패처(Unconfined Dispatcher)ㅇ 무제한 디스패처는 코루틴을 자신을 실행시킨 스레드에서 바로 실행되도록 한다.ㅇ 호출된 스레드와 상관없기 때문에 무제한적으로 실행하기 때문에 무제한 디스패처라고 부른다. 자신을 실행 시킨 스레드에서 즉시 실행fun main() = runBlocking { val startTime = System.currentTimeMillis() // Dispatchers.Unconfined 사용 launch(Dispatchers.Unconfined) { println("[${Thread.currentThread().name}][${getRunTime(startTi..
ㅁ 들어가며ㅇ 코틀린 코루틴의 정석 책을 보고 정리한 글입니다.11장 코루틴의 심화 - Coroutine의 내부동작 원리ㅇ Coroutine의 동작 원리는 작업의 중단과 재시작에 방식에 있다.ㅇ 이 주제에 관해서는 [JAVA] JDK21, Virtual Thread, Continuation에 대한 이해에서 이야기를 하였다. ㄴ Coroutine의 비동기의 핵심은 작업의 중단 및 재시작하는 runContinuation 작업이다. ㄴ Continuation을 더 깊이 이해하기 위해서는 LockSupport.park로 기존 스레드의 중지 재시작 메커니즘을 이해해야한다. Continuation Passing Styleㅇ 코틀린의 내부동작 원리인 코루틴의 일시 중단과 재개를 위해 Continuation 객..
ㅁ 들어가며ㅇ 코루틴의 디버깅을 하기 위해서는 코루틴의 Job, Dispatchers, Context 정보를 확인해야 한다.ㅇ 비동기처리를 위한 다양한 코루틴의 방식을 이해하기 위해서 필요한 기본 정보를 출력할 수 있어야 한다.ㅇ 이를 위한 디버깅 방법을 정리하였다. ㅁ 기본 디버깅 방법: Debuging Mode fun main() = runBlocking { println("[${Thread.currentThread().name}] 디버깅 테스트")}/*[main] 디버깅 테스트 */ㅇ 메인 스레드의 이름만 나올 뿐 Coroutine의 내용을 확인하기 어렵다. ㅇ 실행 시 Debug 모드로 실행ㅇ Coroutine의 Job과 Dispatcher를 확인할 수 있다. ㅁ 코루틴의 디버깅 옵션 설정: ..
ㅁ 들어가며ㅇ JPA와 MyBatis는 Spring에서 인기있는 프레임워크이다.ㅇ 이 프레임워크들의 장단점을 이해하기 위해, 근간이 되는 JDBC를 이해해야 한다.ㅇ 개인적으로 JDBC와 MyBatis, JPA를 사용하면서 시대적 상황에 따라 두 프레임워크의 장단점을 정리해 보았다.ㅇ 참고로 11년차 개발자인 나는 JSP+JDBC, Spring + JDBC, Spring + iBatis, Spring + Mybatis, Springboot + JPA의 경험을 가지고 있다. ㅁ JSP에서 JDBC로 SQL을 구현ㅇ JDBC(Java Database Connectivity)는 Java에서 데이터베이스와 연결하고 상호 작용하는 데 사용하는 표준 API이다.ㅇ JSP에서 JDBC를 이용해여 데이터를 조회하였는데..
ㅁ 들어가며ㅇ 코틀린 코루틴의 정석 책을 보고 정리한 글입니다.11장 코루틴의 심화 - CoroutineScope의 start 옵션ㅇ launch나 async 코루틴 빌더 함수에 CoroutineStart옵션을 지정하여 다양한 코루틴의 실행 방법을 지정할 수 있다. ㅇ CoroutineStart 옵션 ㄴ CoroutineStart.DEFAULT ㄴ CoroutineStart.LAZY ㄴ CoroutineStart.ATOMIC ㄴ CoroutineStart.UNDISPATCHED ㅁ CoroutineStart.DEFAULTㅇ launch의 start의 기본 값은 DEFAULT이다. fun main() = runBlocking { val startTime = System.currentTimeMill..
ㅁ 들어가며ㅇ 기존 유튜브 광고 차단 방법에 대한 글을 작성하였다. ㄴ Chrome에서 Tampermonkey 확장프로그램을 이용해 유튜브 접속 시 특정 스크립트를 작동시켜 차단하는 방식이다.ㅇ 위의 방식은 최근 유튜브의 광고차단 방어로직으로 인해 한계가 있어서 브라우저에서 광고를 차단해주는 Brave를 설치하는 방법을 정리하였다.ㅇ 설치만 하면 유튜브 뿐만 아니라 다른 배너 광고를 차단할 수 있어서 심플하였다. ㅁ Brave 브라우저 장점ㅇ 유튜브 광고 차단 효과 방법을 찾다가 Brave 브라우저를 알게 되었다.ㅇ Brave는 원천적인 광고 및 트래커를 차단하고 있다.ㅇ 웹 브라우저 뿐만 아니라, 앱도 다운받아서 폰에서도 광고차단 효과를 거둘 수 있었다.ㅇ 폰에서 사용해 보니 Brave에서 유튜브의 ..
ㅁ 들어가며ㅇ 코틀린 코루틴의 정석 책을 보고 정리한 글입니다.11장 코루틴의 심화 - 비동기 다중 스레드의 공유 데이터 정합성 문제 대량 트래픽을 다루는 비동기 시스템에서 프로세스의 경합으로 인해 데이터의 충돌이 발생하는 경우가 종종 있다. 예를 들어 30초후 종료처리해야하는 프로세스와 완료 결과를 받아 정상종료하는 두 모듈이 1ms 미만에 동일 시점에 프로세스가 시작되는 경우 경합이 발생하게 된다. 스레드 간의 공유 데이터도 이와 비슷한 문제점을 지니고 있다. 아래의 소스는 만번의 카운트를 다중 스레드로 처리하는 로직이다. fun main() = runBlocking { val startTime = System.currentTimeMillis() withContext(Dispatchers.IO..
ㅁ 들어가며ㅇ 코틀린 코루틴의 정석 책을 보고 정리한 글입니다.10장 코루틴의 이해- 루틴, 서브루틴, 코루틴의 이해- 코루틴의 스레드 양보- 고정적이지 않은 코루틴의 실행 스레드 ㅁ 서브루틴과 코루틴ㅇ 서브루틴은 함수 안에서 호출되는 함수를 말한다. ㅇ 일반적으로 루틴이라는 단어는 '특정한 일을 처리하는 과정'을 의미한다. ㅇ 프로그래밍에서는 루틴을 '특정한 일을 처리하기 위한 일련의 명령'을 의미하며, 이런 명령을 함수 또는 메서드라고 한다. fun main() = runBlocking { val startTime = System.currentTimeMillis() //메인 루틴 routine(startTime)}fun routine(startTime:Long) { println("[${Thr..
ㅁ 들어가며ㅇ 크롬의 확장프로그램을 이용하여 유튜브 광고를 차단하는 방법이다.ㅇ 확장프로그램이 가능한 노트북이나 컴퓨터에서 이용가능하다.ㅇ Tampermonkey는 유튜브 접속 시 특정 스크립트를 자동으로 실행시켜 광고를 차단한다. ㅁ 크롬 확장프로그램 설치 ㅇ Tampermonkey라는 크롬 확장프로그램을 설치한다.ㅇ 특정 사이트에 스크립트를 자동으로 실행시켜 주는 역할을 한다. ㅁ 유튜브 광고 제거 스크립트 복사하기ㅇ 광고제거 스크립트 경로이다. ㅇ 위 사진처럼 복사버튼을 클릭하여 스크립트를 복사한다. ㅁ 새 스크립트 만들기ㅇ 확장 프로그램 아이콘을 클릭하여 새 스크립트 만들기를 실행한다. ㅇ 스크립트를 붙이고 저장한다. ㅇ 신규 스트립트 생성 완료. ㅁ 유튜브 테스트 ㅇ 광고가 나오는 시점에 0...
ㅁ 들어가며ㅇ 이 글은 유튜브 광고 차단 방법에서 변경 이력을 남기기 위해 스크립트 부분만 분리한 글입니다.ㅇ 설치 방법은 위의 링크를 이용하세요. ㅁ 과거 스크립트 보관이유스크립트가 자동 버젼업이 되고 있는데, 버그가 많은 경우 원복하고 싶을 때 사용하기 위해서이다. 간혹 5.2가 나왔는데 4.0으로 스크립트 적용하면 광고차단이 잘되는 경우가 있었다. ㅁ 파일 이력들ㅇ 파일로 다운받아 스크립트 붙여주세요. ㅇ 파일의 스크립트 내용은 다음과 같습니다. ㅁ v5.6 스크립트더보기더보기// ==UserScript==// @name Remove Adblock Thing// @namespace http://tampermonkey.net/// @version 5.6// @descrip..
ㅁ 들어가며ㅇ 코틀린 코루틴의 정석 책을 보고 정리한 글입니다.9장 일시 중단 함수- 일시중단함수의 개념 - 일시중단함수 사용법- 일시중단함수에서 코루틴을 실행하는 방법- 일시중단함수의 호출지점 ㅁ 일시중단함수란?fun main() = runBlocking { val startTime = System.currentTimeMillis() delayAndPrint(startTime) delayAndPrint(startTime)}// 일시 중단 함수 생성suspend fun delayAndPrint(startTime:Long) { delay(1000L) println("[${Thread.currentThread().name}] [${getElapsedTime(startTime)}] 일시 중단 함수 ..
ㅁ 들어가며ㅇ 코틀린 코루틴의 정석 책을 보고 정리한 글입니다. 8장 예외 처리- 예외전파 방식- 예외전파의 제한- 예외를 CoroutineExcetionHandler 처리- try catch문을 이용한 예외처리- async를 통해 생성된 코루틴의 예외처리방법- 전파되지 않는 예외 ㅁ 예외전파 방식fun main() = runBlocking { launch(CoroutineName("작업1")) { launch(CoroutineName("작업1-1")) { delay(100L) throw Exception("작업1-1 예외 발생") } delay(100L) println("[${Thread.currentThread().name}] 작업1 실행") } launc..