TIL에 해당하는 글 38

  1. Characters, Symbols and the Unicode Miracle 2025.08.15

    영어공부 겸 코딩 유튜브 해석~ UTF-8 is perhaps the best hack, the best single thing that's used that can be written down on the back of a napkin, and that's how was it was put together. The first draft of UTF-8 was written on the back of a napkin in a diner and it's just such an elegant hack that solved so many problems and I absolutely love it. UTF-8은 간단하지만 강력한 문자 인코딩 방식으로, 처음 초안은 식당에서 냅킨에 적혔다고 전해진다. 이..


  2. @Scheduled / Virtual Thread, @Async, @Synchronized 2025.08.14

    서비스를 운영하다 보면 배치(Batch)를 이용해 주기적으로 실행되어야 하는 작업을 자동화할 일이 생긴다.주기적으로 데이터의 상태를 확인하고 업데이트를 한다던가,로그를 쌓거나 보고서를 작성하는 등 서비스의 특성에 따라 다양한 작업이 생길 수 있다. 아무튼 이런 시스템 배치 작업을 하기 위해...Spring Boot에서는 Spring Batch 또는 스케줄러(@Scheduled 어노테이션)를 이용해 시스템 배치를 이용할 수 있다.일반적으로 대량 데이터 처리, 단계별 로직과 같은 복잡한 작업을 하는 경우에는 Spring Batch(의존성 추가 필요),비교적 단순하고 반복 작업인 경우에는 스케줄러 기반으로 구성한다.(스프링 기본제공) Spring Batch is a lightweight, comprehensi..


  3. Uncaught DOMException: Failed to execute 'importScripts' on 'WorkerGlobalScope': The script at 'http://localhost/worker-html.js' failed to load 2025.08.06

    ~Next.JS, React 환경 기준으로 작성된 글입니다~ JSON 에디터 컴포넌트가 필요해서 외부 에디터 라이브러리 중 하나인 AceEditor를 활용했다.공식 문서 바로가기 | React 기준 미리 보기 페이지 그러나... Uncaught DOMException: Failed to execute 'importScripts' on 'WorkerGlobalScope': The script at 'http://localhost/worker-html.js' failed to load 이런 에러메시지가 뜨면서 에디터가 제대로 로드되지 않는 이슈가 발생했다.어떻게 어떻게 찾은 해결 방법은 아래와 같다. { onChange(t); }} value={jsonValue}..


  4. nginx http2 설정 (feat. http/1.x 부터 http/3) 2025.08.05

    최근 프록시 서버로써 nginx에서 http2를 설정하면서 알아본 내용을 간략하게 정리해 본다.더보기server { listen 443 ssl; # 예전에는 이 뒤에 http2를 붙였지만 http2 on; # 이제 이렇게 합니다 ssl_certificate ssl/certificate.pem; ssl_certificate_key ssl/key.pem; location = / { ... }} HTTP가 뭔데?널리 알려져있다시피, HTTP는 HyperText Transfer Protocol 의 줄임말이다.HyperText를 전송하는 프로토콜이라고 직역할 수 있다.html 페이지에서 태그로 생성한 요소를 클릭하면 다른 페이지로 이동하게 되는데,이렇게 링크를 통해 다른 ..


  5. 일렉트론 자동 업데이트 설정하기 (electron auto-updater) 2025.07.21

    일반적으로 일렉트론으로 빌드한 클라이언트 프로그램에는 많은 비즈니스 로직을 담지 않는다. 1. 클라이언트는 결국 사용자의 컴퓨터에 설치되기 때문에 작정하고 까보면 내부 코드를 파악할 수 있고,2. 실제 서비스와 관련된 비즈니스 로직을 너무 많이 담으면 유지보수가 힘들어지며,3. 특히나 단순히 WebView Wrapper로서 사용하는 거라면 더더욱 그렇다. 보여지는 것에 집중하지, 내부 로직은 담지 않는다. 그럼에도 불구하고, 부득이하게 내부 정책이나 서버 환경 변동에 따라 업데이트가 필요한 경우가 있다.캡처 방지와 같은 보안 기능을 넣고 빼거나, 로딩 페이지 경로 등 환경변수에 변화가 있을 때에도 다시 빌드해서 배포해 주어야 한다. 이런 점을 고려했을 때,버전이 업그레이드될 때 유저에게 재설치하라는 것보..


  6. fail2ban 설정하기 2025.07.17

    fail2ban?GitHub - fail2ban/fail2ban: Daemon to ban hosts that cause multiple authentication errorslog파일을 참조하여 filter에 정의된 조건에 맞는 IP를 기록하고 차단하기 위한 brute force 방어 시스템이다. jail 과 filter라는 개념을 사용하는데,jail은 특정 필터에 의해 걸러진 IP를 가두는 감옥과 같은 개념으로,감옥별로 차단 단계까지 도달하기 위해 반복될 실패횟수나 시간, 차단할 시간 등을 지정할 수 있다.filter는 간단하게 IP 차단 여부를 판단하기 위한 기준이 되는 필터를 의미한다. 설치(ubuntu 기준)$ apt-get update apt-get install fail2ban 설치를 완료..


  7. VPN 해제 후 공인 IP 기반 서비스 오픈과 보안 구성 2025.07.16

    보호되어 있는 글입니다.


  8. ResizeObserver.unobserve()는 필수인가? 2025.07.10

    https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver ResizeObserver - Web APIs | MDNThe ResizeObserver interface reports changes to the dimensions of an Element's content or border box, or the bounding box of an SVGElement.developer.mozilla.orgResizeObserver는 html 엘리먼트의 내용물 크기 또는 svg의 바운딩박스의 변화를 추적해 주는 인터페이스다.new ResizeObserver() 로 인스턴스를 생성한 뒤, 추적하고 싶은 엘리먼트를 observe 하면 끝이다.추적을 멈추고 싶을 ..


  9. 파이썬으로 Google SheetAPI 사용하기 2025.06.23

    https://developers.google.com/workspace/sheets/api/quickstart/python?hl=ko Python 빠른 시작 | Google Sheets | Google for Developers이 페이지는 Cloud Translation API를 통해 번역되었습니다. 의견 보내기 Python 빠른 시작 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 빠른 시작에서는 Google Workdevelopers.google.com공식문서가 정말... 잘 돼있는데^^열받게도 이 문서를 찾는 게 너무 힘들었다. 사실상 이 글의 내용은 저 링크 하나만으로 충분하긴 하지만...언젠가 또 이런 삽질을 하게 될 지 모르기 때문에 간략하게나마 정리해 ..


  10. @Conditional 로 특정 빈 등록 조건 만들기 2025.03.21

    테스트 환경에서는 실행되지 않아야 하는 파일이 있을 수 있다.그럴 때? @Conditional 어노테이션을 사용하면 쉽게 조건을 만들어서 구현할 수 있다. @Conditional 어노테이션은 정의된 조건에 맞춰 빈 등록을 할 지 말지 정해준다.예를 들어서, 개발 환경에서만 따로 로그를 찍는 빈이 있다고 해 보자. 간단히 Condition을 구현해서, matches 함수를 오버라이드하면 커스텀 조건을 작성할 수 있다.true를 리턴하는 조건에서 Conditional 조건을 만족하여 작동하게 된다.아래는 실행시 지정한 프로파일이 dev 일 때만 true를 리턴한다.public class LoggingCondition implements Condition { @Override public boole..