목록2022/08 (3)
백엔드 개발 블로그
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..