개요 Apple의 M1, M2 맥미니는 기본적으로 두 개의 모니터만을 지원한다. 애초에 HDMI포트는 하나뿐이긴 하지만, USB C 를 통해 하나의 디스플레이를 더 연결할 수 있다. (USB C 포트가 두개이지만, 하나만 가능하다) 집 개발환경을 맥으로 바꾸려는 과정에서 모니터가 두 개만 지원된다는 사실이 가장 걸림돌이였다. (세 개의 모니터를 쓰고있기에..) 해결 방법 Displaylink라는 기술을 지원하는 허브/도킹스테이션을 사용하면 모니터 개수 제한이 사라진다. 확실하지는 않지만, Displaylink 드라이버 설치 시 화면 녹화 권한을 요구하는것을 보면 가상 모니터를 만들고 실시간으로 녹화되고있는 화면을 모니터에게 전달하는게 아닐까 싶다. 문제는... 이 기술이 들어간 허브가 심각하게 비싸다. ..
개요 Postman에는 프록시 서버를 만들어 모든 네트워크 HTTP/HTTPS 요청을 가로채 분석할 수 있다. 다만 HTTPS 처리를 위해서는 특별한 설정이 필요하다. https://learning.postman.com/docs/sending-requests/capturing-request-data/capturing-https-traffic/ Capturing HTTPS traffic | Postman Learning Center Capturing HTTPS traffic: documentation for Postman, the collaboration platform for API development. Create better APIs—faster. learning.postman.com 원리 1. 브..
크롬 익스텐션 개발 중, 8196Byte가 넘는 문자열을 chrome storage에 넣는 도중 아래와 같은 오류를 만났다. QUOTA_BYTES_PER_ITEM quota exceeded chrome.storage.sync.set 메서드를 통해 데이터를 저장할 때, chrome.storage.sync.QUOTA_BYTES_PER_ITEM 값보다 큰 데이터는 저장할 수 없다. 따라서 해당 크기만큼 쪼개서 저장해야 한다. 문자열 하나를 4Byte라고 가정하고(UTF-16) 2048자 만큼씩 쪼개서 storage에 저장하는 코드를 작성했다. 더 효율적으로 하려면 Blob 등을 이용해 정확히 8196Byte 단위로 쪼개서 저장해야 하지만, 그 정도의 효율성이 필요하지 않고 대부분 문자가 이모지(4Byte) 였..
가장 쉬운 방법 -webkit-text-stroke:3px black; text-stroke 속성을 이용해 테두리를 입힌다. 그러나, 외곽 테두리가 아니라 글자를 먹고 들어가는 inner 테두리가 만들어진다. text-shadow를 이용한 외곽 테두리 text-shadow:-3px -3px 0 #000,0 -3px 0 #000,3px -3px 0 #000,3px 0 0 #000,3px 3px 0 #000,0 3px 0 #000,-3px 3px 0 #000,-3px 0 0 #000; text-shadow를 쓰는 편법(?)을 이용해 외곽 테두리를 만들 수 있다. 상, 하, 좌, 우, 좌상, 우상, 좌하, 우하 위치에 shadow를 추가하면 된다. 영문의 경우 이정도로도 충분히 깔끔한 테두리가 만들어지지만, ..
2020년에 Windows10 기준으로 타 사이트에 작성한 글을 가져왔습니다. WSL 업데이트로 인해 지금도 이렇게 동작하는지 알 수 없으니 참고용으로만 읽어주세요. 서론 Windows의 Docker 환경에서는 GPU CUDA를 사용할 수 없다. 좀 더 정확히 말하면 Nvidia-docker가 Windows를 지원하지 않는다. 따라서 CUDA를 사용하기 위해서는 Linux 환경이 필요한데, 현실적으로 개발 환경을 Linux로 구축하기에는 다소 어려움이 따른다. 하지만 다행히, Microsoft의 WSL(Windows Subsystem for Linux)이라는 기술을 사용할 수 있다. 본 글에서는 WSL(WSL2)을 사용하여 가상 리눅스 시스템을 구축하고 리눅스에 Docker를 설치하여 Docker 내부에..
Autodesk사의 제품을 설치하면 항상 "Autodesk Genuine Service"가 함께 깔린다. Genuine Service는 Autodesk의 라이센스를 관리해주는 프로그램인 것으로 보이는데... 문제는 일반적인 방법으로는 이 프로그램을 지울수가 없다. 제어판에서 삭제하려고 하면 아래와 같은 경고창이 나오고 진행이 되지 않는다. 그래서 구글링을 통해 Genuine Service를 삭제하는 방법을 힘들게 찾았고, 이를 간단하게 배치파일로 만들어서 공유한다. (관리자권한 실행 필수) 배치파일 작성에 익숙치 않아 퀄리티가 조금 떨어지긴 한다. @echo off echo "*****************************************" echo "***********************..
serverless framework를 이용해 lambda function + API Gateway가 포함된 cloudformation을 관리하고 있다. 기본적으로 AWS가 제공하는 도메인이 엔드포인트로 지정되지만, serverless-domain-manager 플러그인을 이용해 커스텀 도메인을 연결할 수 있다. 하지만, 결론부터 말하자면 실패했다. 먼저 도메인 연결을 위해서는 Route53에 도메인이 등록되어 있어야 한다. Route53은 kr도메인 신규 등록/이전을 지원하지 않으므로 타사에서 등록 후 네임서버를 AWS네임서버로 바꿔 Route53에 호스팅을 등록하였다. 그런 다음 Certification Manager를 이용하여 인증서를 생성하였다. (SSL 퍼블릭 인증서는 무료이다.) 그리고, se..
올해 초, 한 애플리케이션의 유지보수를 맡게 되었다. 기존 개발사에서 더 이상 유지보수를 해줄 수 없다고 했다고 한다. 해당 애플리케이션을 개발한 개발자가 퇴사하여 아무도 유지보수 할 수 있는 사람이 없다는데.. 그게 말이 되는 이야기인지는 모르겠지만 뭐, 덕분에 일거리가 하나 더 생겼다. 소스코드는 MVC구조로 잘 짜여져 있었지만 곳곳에 개발용 코드들이 남아있었고 SQL 쿼리는 수천건의 row가 있는 테이블끼리 다중 join하는 쿼리로 짜여져 있어서 상당히 난해했고, 질의 시간도 굉장히 오래걸렸다. 하지만 그런 부분을 해결하는것이 문제가 아니라 과도하게 청구되고 있는 AWS 요금을 먼저 해결해야 했다. 일일 이용자수가 천명 미만인 서비스인데, 월 900불 이상의 요금이 청구되고 있었다. AWS 아키텍처..