본문 바로가기

Main

(84)
코루틴이란? 코루틴(Coroutine) 이란? 코루틴을 처음 접하게 된다면 코루틴에서 "코" 를 코틀린의 "코" 로 떠올리기 쉬워 코틀린언어에 종속된 기술로 생각하시는 분들이 많습니다. 하지만 코루틴에서 Co 는 "함께, 서로" 라는 의미로 routine (규칙적인 일 또는 작업의 집합) 과 합쳐져서 함께 동작하면 규칙있는 일의 순서를 뜻합니다. 아래는 위키피디아에서 코틀린을 다음과 같이 정의하고 있습니다.실행의 지연과 재개를 허용함으로써,비선점적 멀티태스킹을 위한 서브 루틴을 일반화한 컴퓨터 프로그램 구성요소 (출처: 위키피디아) 따라서 코틀린을 이해하기 위해서는 비선점적 멀티태스킹과 서브 루틴에 대해서 알아야 합니다. 비선점형 멀티태스킹과 선점형 멀티태스킹비선점형: 하나의 프로세스가 CPU를 할당받으면 종료되기 ..
Bucket4j 개요현대의 웹 서비스와 API는 대규모 트래픽을 처리해야 하며, 이러한 상황에서 안정성과 성능을 유지하는 것이 중요합니다. 특히, API를 사용할 때 과도한 요청이 서버에 들어오면 시스템 성능 저하 및 다운타임이 발생할 수 있습니다. 이를 방지하기 위해 API 속도 제한(rate limiting) 기법이 자주 사용됩니다. 이 글에서는 자바 기반의 API 속도 제한을 구현하는 데 유용한 라이브러리인 Bucket4j에 대해 다루고, 이를 사용하는 방법과 기본 설정 방법을 설명합니다. API 속도 제한 하는 이유앞서 설명한것과 더불어 다음과 같은 이유가 있습니다. 서버 보호: 과도한 요청으로 인해 서버 자원이 고갈되거나, 서버가 다운되는 것을 방지할 수 있습니다.공정한 사용 보장: 모든 사용자에게 공정한 AP..
Riot API 를 사용하여 전적 검색 사이트 구현 ( OP.GG, Fow ) 공부했던 기술들을 직접 적용해보기위해 개인프로젝트를 고민하던 중 많은 트래픽과 데이터 그리고 다양한 아키텍처를 구현해 볼 수 있는 전적 검색 사이트를 만들어 보기로 했다. 처음 시작할때는 단순히 데이터를 저장해서 사용자에게 보여주면 그만이겠구나 라고 생각했었는데, API의 제한과 많은 양의 데이터로 인해 OP.GG 나 FOW 와 같은 성능을 내기란 쉽지 않았다. 하지만 조금씩 수정해 나가면서 API 병렬처리, API Rate Limit 관리, Redis (캐시 및 랭킹), Jdbc RestTemplate, Kafka 등을 사용하면서 조금씩 속도 개선을 해나갔다. 아직 추가적으로 작업할 부분이 남아있다. 여기서 부터는 개선할 부분과 개선방법에 대해서 꾸준히 작성하면서 공부해 나갈 계획이다. https://..
[Jenkins] Jenkins docker 실행 시 기본 포트 변경 Docker 를 사용하여 Jenkins 를 띄우게 될때 기본포트인 8080 이 아니라 다른 포트로 바꿔줘야할 경우 가 종종 생긴다. 다음 명령어를 통해 기본포트를 변경할 수 있다. docker run --env JENKINS_OPTS=--httpPort=9000 -p 9000:9000 --name jenkins jenkins/jenkins:lts  참조https://jaeyung1001.tistory.com/entry/Jenkins-Docker-Jenkins-%EA%B8%B0%EB%B3%B8-%ED%8F%AC%ED%8A%B8-%EB%B3%80%EA%B2%BD%EB%B0%A9%EB%B2%95
[Spring Boot] Swagger 사용하기 개요프론트엔드와 백엔드간 협업을 하기 위해 백엔드에서 구축한 API 스펙을 문서화 하여 프론트엔드에게 보여줘야한다.이때 API 문서를 효과적으로 만들기 위해 사용할 수 있는 라이브러리를 찾아 보았고, swagger 라는 라이브러리를 알게 되었다.    Swagger 란?- Swagger는 API를 문서화하고 테스트할 수 있는 오픈 소스 프레임워크이다. - 어노테이션을 통해 간편하게 API 문서를 자동으로 만들 수 있다. - 자체적으로 사용자 친화적인 UI도 제공해주고 있기 때문에 문서를 쉽게 읽고 테스트할 수 있다.  문서화에 사용되는 어노테이션이 프로덕션 코드에 존재하기에 가독성을 떨어뜨리는 단점도 존재한다. API 스펙이 변했을 때 어노테이션 메타 데이터를 적절하게 바꿔주지 않으면 잘못된 정보를 전달..
개인 도메인 구입해서 연결하기 개요 네이버 아이피를 직접 입력하여 접속하는 사람들은 한명도 없을 것입니다. 왜냐하면 외우기도 힘들 뿐더러 아이피를 알아야할 이유도 없기 때문입니다. 이러한 행위는 마치 전화번호와 같습니다. 전화번호를 특정 이름에 매칭하여 저장하고 전화를 걸고 싶을때 특정 이름으로 거는 행위와 같기 때문입니다. 이처럼 전화번호의 특정한 이름으로 저장하기 위해서는 도메인 네임이 필요합니다. naver.com 과 같은 이름을 말하는 것입니다. 이번 글에서는 도메인 네임을 얻어서 아이피에 매칭하는 방벙을 다루어볼것입니다. 도메인 네임 구매 및 주소 매핑 저는 도메인 네임을 가비아 라는 사이트에서 구매하였습니다. 구매대행 사이트는 여러개가 있으며 그중 마음에 드시는거 하시면 됩니다. https://www.gabia.com/ 웹..
Error creating bean with name 'entityManagerFactory' defined in class path resource 에러 해결방법: Gradle 클린후 라이브러리 새로 받기 Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: net/bytebuddy/NamingStrategy$SuffixingRandom$BaseNameResolver 갑자기 잘되던 프로젝트에서 이러한 에러가 등장하였다. 보통 entityManagerFactory 에러는 어디부분에서 어떤 에러가 나왔다 정도로는 알려줬던거 같은데 이번 에러는 이름을 만드는데 실패했나? 무튼 도통 감이 잡히질 않았다. 그래서 chat g..
[Javascript] 자바스크립트 URL 인코딩, 디코딩 인코딩 인코딩은 특정 데이터를 다른 형식으로 변환하는 과정이다. URL 에서는 특수문자나 공백과 같은 문자를 전송하게되면 오작동을 일으킬 수 있으므로 특정한 형식으로 변환해야한다. 디코딩 인코딩된 데이터를 원래 데이터로 되돌리는 것이다. 인코딩 / 디코딩 함수 설명 escape() / unescape() - 영문 알파벳과 숫자, 일부 특수문자를 제외하고 모두 인코딩. 특수문자(@, *, -, _, +, ... /) - 1바이트 문자는 %XX의 형태로, 2바이트 문자는 %uXXXX 형태로 변환 encodeURI() / decodeURI() - escape() 함수에서 인터넷 주소에 사용되는 일부 특수문자는 변환하지 않음. 일부 특수문자(ex. https:// , https://와 같은 :, ;, /, =,..