-
Spring Boot: Containerize
들어가며 Spring Boot 애플리케이션의 컨테이너 이미지화 방법을 살펴보고 그 방법들의 장단점을 알아보려 한다. 컨테이너 이미지화 Dockerfile FROM azul/zulu-openjdk-centos:11 RUN mkdir -p /opt/spring-boot-app/logs RUN touch /opt/spring-boot-app/logs/gc.log ADD ./build/libs/spring-boot-app.jar /opt/spring-boot-app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "/opt/spring-boot-app.jar"] 상당히 간단한 형태이다. 다만 보다시피 JAR 파일을 통째로 넣으므로 모든 빌드의 통째 결과가 새로운 레이어로 생성된다. 이는 즉 저장소의 용량을 더 많이 차지한다는 것이고, 새로운 버전의 시작 대기 시간도 더 많은 용량을 다운로드해야 하므로 더 길어짐을 의미한다. 그나마 다른 도구를 추가하기는...
-
Local Differential Privacy
들어가며 지난번에는 어느 한 데이터셋에서 하나의 데이터가 가지는 영향력에 대해서 공부해 보았습니다. 어떤 데이터셋에서 한 데이터를 제외한 나머지 정보를 다 알고 있을 때, 나머지 한 개의 데이터를 유출할 수 있는지에 대한 것이었습니다. Differential Privacy는 이를 수식을 활용해 표현한 것으로, $\epsilon$의 값으로 데이터의 안정성을 확인할 수 있었습니다. 이번에는 Differential Privacy와는 조금 다르지만 개인의 프라이버시를 보호할 수 있는 개념을 소개하려고 합니다. 개인이 데이터를 제공했을 때의 프라이버시를 보호하기 위한 개념인 Local Differential Privacy에 대해 소개하려고 합니다. Local Differential...
-
Homomorphic Encryption에 대한 소개
Introduction 올 한해 크립토랩이라는 스타트업에서 근무할 기회가 있었습니다. 크립토랩은 Homomorphic Encryption, 즉 동형암호 scheme 중 CKKS를 바탕으로 창업한 스타트업입니다. (CKKS scheme을 제안하신 천정희 교수님이 대표입니다.) 회사에서 근무하며 그동안 잘 몰랐던 동형암호에 대해서 배울 기회가 있었습니다. 현재 국내에는 동형암호에 대해 서술하는 자료가 그리 많지 않은 것으로 보여, 동형암호에 대한 소개글을 작성하기로 했습니다. What is Homomophic Encryption? 먼저 동형암호가 무엇인지 간단하게 설명하도록 하겠습니다. 우선 보통의 암호 scheme의 경우 평문(plaintext)와 암호문(ciphertext)의 관계를 최대한 random하게 만드려고 합니다. 평문과 암호문...
-
RandomMix: A mixed sample data augmentation method with multiple mixed modes
RandomMix: A mixed sample data augmentation method with multiple mixed modes RandomMix는 2022년도 5월 난징대에서 연구하여 arxiv에 공개된 data augmentation 논문입니다. 꽤나 최근에 나온 논문으로, 논문 자체의 내용이 크게 어렵지 않으면서도 지금까지 발표된 여러가지 mixed sample data augmentation들에 비해 높은 성능을 보여 SOTA를 달성했습니다. 뿐만 아니라 이미지의 robustness, diversity, cost의 관점에서도 좋은 향상을 보여주어 살펴볼 필요가 있는 논문입니다. 들어가기에 앞서, 본 글은 해당 논문을 그대로 번역하는 것이 아닌 관련된 다른 논문들의 설명을 추가하며 RandomMix 및...
-
Rust의 Borrow Checker
Rust의 소유권 시스템 대부분의 프로그래밍 언어는 두 가지 중 하나의 방법으로 메모리 관리를 했습니다. 첫 번째 방법은 개발자에게 메모리 관리에 대한 모든 권한을 주고 알아서 관리하라고 하는 겁니다. C, assembly 등의 언어에서 사용되고 있습니다. 또 다른 방법은 GC(Garbage Collector)를 이용하는 것입니다. 여기서는 GC의 작동원리에 대해서는 다루지 않지만, 메모리를 관리하는 방법이라고 알아두시면 좋을 것 같습니다. 각 방법에는 장점들과 단점들이 있습니다. 먼저 첫 번째 방법은 개발자가 작성한 프로그램의 성능을 개발자가 예측할 수 있고 개발자가 작성한 코드만 실행이...