본문 바로가기

전체 글74

Canvas vs Svg 업무를 진행하면서 브라우저에 다양한 도형을 그리고, 텍스트를 넣고, 도형들을 편집해야 하는 요구사항이 있었다. 도형의 개수가 많고, 많은 편집 작업이 필요하기 때문에 렌더링 성능도 중요하게 생각해야 했다. Konva https://github.com/konvajs/vue-konva 가장 간단하게 구현할 수 있고, 기본적인 기능들은 built-in으로 구현되어 있어서 가져다 쓰기만 하면 되었다. 때문에 기존 툴이 konva 기반으로 구현되어 있었다. 하지만, Konva 라이브러리를 사용하다 보니, 라이브러리에 의존적으로 코드가 작성되어 불편한 부분이 많다. 예컨대, zoom-in zoom-out시에 좌표를 일일이 변환하고, 서버에 저장할 때나 이미지 이동시 좌표 변환하는 부분이 있어 버그가 발생하기 쉽다... 2023. 9. 10.
K8S role 파헤치기 쿠버네티스를 공부하다 보니 role, rolebinding, serviceaccount에 대한 개념이 혼동되는 부분이 있어서 정리해 보았다. 참고 문서 https://kubernetes.io/docs/reference/access-authn-authz/rbac/ https://kubernetes.io/docs/reference/access-authn-authz/rbac/ Role & ClusterRole RBAC(Role-based access control)에서 Role과 ClusterRole은 permission의 set을 의미한다. Role과 ClusterRole의 차이는 namespace에 종속되어 있는지이다. Role의 경우 특정 namespace에 대해서만 가능하고, ClusterRole은 n.. 2023. 9. 10.
JS로 파일 다운로드 업무를 하다 보니 MinIO라는 blob storage에서 파일을 다운로드해야하는 경우가 생겼다. 버튼을 클릭하면 Storage에 url을 요청해서 다운로드하는 것을 구현해야 했다. 즉, js로 동적으로 다운로드를 구현해야 하는 것이다. 다운로드를 구현하는 방법에는 크게 2가지가 있다. blob 객체 먼저 다운로드 → 해당 blob 객체를 사용할 수 있는 url을 클릭 async function download(url: string, filename: string) { const link = document.createElement("a"); const resp = await fetch(url); const blob = await resp.blob(); link.href = URL.createObject.. 2023. 9. 10.
Formatting in golang golang은 C-style의 포맷팅을 지원한다. 하지만 좀 더 고수준의 언어이기 때문에 좀 더 다양한 타입에 대한 출력을 지원한다. 이에 golang에서의 출력 포맷을 정리해볼 필요를 느껴서 정리해 본다. 참고: https://pkg.go.dev/fmt General %vthe value in a default format when printing structs, the plus flag (%+v) adds field names %#va Go-syntax representation of the value %Ta Go-syntax representation of the type of the value %%a literal percent sign; consumes no value %v 인스턴스 출력 {1 .. 2023. 9. 3.