목록전체 글 (9)
백엔드 개발 블로그
Character Set `utf8`는 전체 유니코드를 지원하지 않는다. 한글자에 최대 3바이트를 할당한다. 이모지를 저장하고자 한다면 `utf8mb4`를 사용하자. Collation Collation은 어떻게 문자열을 비교하고 정렬할지에 대한 규칙이다. `utf8mb4_bin` : 바이트 순서대로 정렬 (ex: 'A' < 'B' < 'a' < 'b' ) `utf8mb4_general_ci` : Case Insensitive, 대소문자 구분 없이 비교 및 정렬 (ex: 'A' = 'a' < 'B' = 'b') `utf8mb4_unicode_ci` : general에 더해서 유럽쪽 문자 비교 로직이 추가됨 (ex: 'ß' = 'ss') 유럽쪽 다국어 지원이 필요하지 않다면 굳이? `utf8mb4_0900..
Java 가상 스레드는 JDK 19부터 Preview, LTS 버전인 JDK 21부터 정식 탑재된 기능으로서 OS가 제공해주는 스레드를 그대로 사용하지 않고 가상의 경량 스레드를 사용하는 기능이다. 개인적으로는 JDK 8 이후로 Java 언어에는 이렇다 할 큰 변화는 없었다고 생각하는데 Project Loom(Java 언어에 경량화된 비동기 기능을 Java에 추가하기 위한 프로젝트)이 추진되면서 오랜만의 큰 혁신이 다가왔다는 생각이다. 기본 컨셉 기존의 코드, 로깅, 디버깅 툴들을 최대한 호환시키면서 경량화된 스레드를 지원한다. 개발자는 비즈니스 로직에만 집중하면서 Blocking IO에 대한 성능을 비약적으로 향상시킬 수 있다. 기존 스레드는 스레드 수의 제약이 컸던 반면 가상 스레드는 백만개까지도 큰..
JSON Web Token RFC 7519 표준 흔히 로그인 데이터 등을 주고 받는 데에 사용된다. JSON 형태의 데이터에 서명 정보를 추가하여 데이터의 위변조 여부를 검사할 수 있다. 서명에는 HMAC, RSA 등의 암호화 기법이 사용된다. HMAC 참고: https://blog.honeybomb.kr/7 HMAC 이란? API 통신 등을 할 때, 보안 등의 이유로 통신되는 메시지의 위변조를 막아야 할 경우가 있다. 이 때 어떠한 토큰을 사용하여 메시지가 위변조가 되지 않았는지 검증하는 기법이 주로 사용되는데, blog.honeybomb.kr 데이터 구조 "헤더.페이로드.서명"의 형태이다. 헤더에는 서명에 사용된 알고리즘과 타입을 담고 있는 JSON이 Base64 URL 형태로 인코딩된다. 페이로드는..
API 통신 등을 할 때, 보안 등의 이유로 통신되는 메시지의 위변조를 막아야 할 경우가 있다. 이 때 어떠한 토큰을 사용하여 메시지가 위변조가 되지 않았는지 검증하는 기법이 주로 사용되는데, 이 때 사용되는 토큰을 MAC(Message Authentication Code)라고 한다. 그 중 HMAC(Hash-based MAC)은 SHA256 등의 해시 함수 기반으로 안전하게 MAC을 생성하는 것을 이른다. HTTPS, JWT 등 다양한 레벨의 보안 통신 프로토콜에서 사용된다. 단순히 해시함수만을 사용할 때의 취약점 패스워드와 같이 원본 데이터는 알 수 없되 그 값의 동일성만 비교하는 경우, H(password || salt || secretKey)와 같이 암호화 후에 DB에 저장하는 것이 보편적이다. ..
Kotlin 1.5 기준으로 작성된 글입니다. 코틀린 코루틴에서 새로운 경량 쓰레드에서 작업을 생성하기 위해선 launch 혹은 async를 사용한다. 둘의 자세한 차이점 및 사용시 주의사항에 대해 알아보자. TL;DR launch는 작업을 실행만 시키고 그 결과에 관심이 없으며, 각 job 마다의 오류를 처리할 필요가 없을 경우 사용한다. launch 내에서 발생한 오류는 join() 메소드 호출 시 catch할 수 없으며, 오류는 부모 job으로 전파된다. 만약 supervisorScope 등을 사용하여 부모 job으로 전파되지 않는 경우, 오류는 unhandled exception으로 취급되어 프로그램 실행에 영향을 끼칠 수 있다. async는 작업 실행의 결과(반환값)를 얻어올 수 있으며 각 jo..
2022/08 기준이며, Java에 익숙하다는 가정 하에 작성된 자료입니다. Kotlin의 장점으로는 간결성, JVM 호환성, 코루틴 등이 자주 언급되지만 그 중에서도 흔히 언급되는 것은 널 안정성이다. Java에서는 프로그래머가 주의 깊게 코드를 작성하지 않으면 NPE(NullPointerException)가 빈번하게 일어난다. Kotlin은 언어의 정적 타입 시스템에 null 관련 구조를 추가하였기 때문에 변수가 null일지 아닐지 고민하거나 수많은 Optional 등을 타이핑하지 않고도 효과적으로 NPE를 막을 수 있다. 기존 Java와 비교하여 어떤 점이 다른지 알아보자. 기존 Java에서는? String 객체의 레퍼런스는 실제 값을 가질 수도 있고 null 값을 가질 수도 있다. String m..
Git 버전 관리 시스템(VCS)는 실수 혹은 기타 이유로 인해 코드가 손상되었을 때 손쉽게 복구할 수 있으며, 여러 사람이 협업 시 누가 어떤 부분을 수정하고 이슈를 만들어냈는지 쉽게 파악이 가능하다. 단순히 폴더나 파일을 날짜별로 만드는 것도 일종의 VCS라고 할 수 있지만, 사람이 실수할 여지가 많다. 이를 위해 RCS 등의 로컬 버전 관리 시스템이 개발되었다. 하지만 시스템 외부의 사람들과 함께 협업하기에는 로컬 버전 관리 시스템의 한계가 뚜렷했다. 이러한 기능을 목적으로 Subversion과 같은 VCS가 만들어졌는데, 이는 중앙집중식 버전 관리 시스템(CVCS)로서 버전 데이터베이스는 오직 한 곳의 서버에 저장되고, 협업자들은 각각 코드를 checkout해서 작업이 가능했다. 하지만 CVCS ..
React 17 버전을 기준으로 작성된 글입니다. (2022/04) TL;DR // KakaoAdfit.jsx import {useEffect, useRef} from "react"; function KakaoAdFit({unit, width, height, disabled}: any) { const scriptElementWrapper = useRef(null); useEffect(() => { if (!disabled) { const script = document.createElement("script"); script.setAttribute("src", "https://t1.daumcdn.net/kas/static/ba.min.js"); scriptElementWrapper.current.appe..