목록전체 글 (385)
만족

사용 중인 맥북 프로 2018 15인치 모델이 이제 슬슬 맛탱이가 가는 것 같다. 구매는 2019년 7월에 했으니 이제 한 2년 반 정도 썼다. 문제는 배터리 사이클이 약 400회인 반면(공식 홈페이지에서는 1000까지를 정상 사용 가능 범위로 본다) 배터리가 가벼운 작업(웹 서핑 등)만 해도 4시간을 못 간다는 것이다. (보통 3시간정도 되면 꺼지고 오래가면 3시간 30분정도 간다) 발열도 굉장히 심한 데다 배터리까지 빨리 닳으니 화가 날 때도 많다. 이번에는 터보 부스트를 꺼서 배터리 소모와 발열을 줄일 것이다. 터보 부스트란? CPU에 부하가 걸릴 때, CPU클럭을 높여 작업 성능을 끌어올리는 인텔의 기술을 뜻한다. 꺼지면 성능은 줄어들겠지만, 베이스 클럭으로만 동작하게 되니 어느 정도 성능은 떨어..
현재 운영중인 서비스에서 VPN으로 아이피를 해외로 돌려 악성 댓글을 작성하는 경우가 포착되었다. 따라서 요청 아이피를 확인해 해외 아이피인 경우 일부 기능을 사용할 수 없도록 할 것이다. 클라이언트 아이피 가져오기 function getClientIP() { $ipaddress = ''; if ($_SERVER['HTTP_CLIENT_IP']) { $ipaddress = $_SERVER['HTTP_CLIENT_IP']; } else if ($_SERVER['HTTP_X_FORWARDED_FOR']) { $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR']; } else if ($_SERVER['HTTP_X_FORWARDED']) { $ipaddress = $_SERVER['..

2021년에 나는 무엇을 했고 어떤 일이 있었는지를 정리해보려고 한다. 거창한 것은 아니고.. 1년치 일기를 하나의 포스트에 담아보았다. 토익 올 초에는 토익 시험을 준비했다. 영어 실력을 향상시키고 싶다거나 하는 것은 아니였고, 4학년이였기 때문에 취업을 위해 800점 정도만 따놓으려고 공부를 시작했다. 약 한달정도 공부하고 시험을 봤는데 790점(LC390/RC400)이 나왔다. 평소에 LC가 잘 나오는 편이였지만 내가 간과한 것은 시험장 스피커는 음질이 쓰레기라는 점이였다... 결국 LC 점수가 곤두박질쳤지만, 시간을 더 투자하기엔 아깝고 개발 직군의 토익 컷이 대부분 600~700선(800점도 있긴 하지만 일부 공기업에 한했다)이였기 때문에 여기까지만 하고 토익은 그만뒀다. 나중에 더 높은 점수가..

MDN문서 내용을 바탕으로 설명할 것이다. https://developer.mozilla.org/ko/docs/Web/HTTP/CORS#%EA%B8%B0%EB%8A%A5%EC%A0%81_%EA%B0%9C%EC%9A%94 교차 출처 리소스 공유 (CORS) - HTTP | MDN 교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS)는 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라 developer.mozilla.org CORS는 무엇이고, 왜 필요하며, 어떻게 CORS 문제를 해결하는지는 평소 개발할 때도 크게 도움이 되고, 웹 개발 직무 면접 시에도 자주 등장하는 만큼 반드시 ..
https://sass-lang.com/ Sass: Syntactically Awesome Style Sheets Sass is the most mature, stable, and powerful professional grade CSS extension language in the world. sass-lang.com Scss는 css를 더 유연하게 사용할 수 있게 해 주는 언어이다. 실제로 웹에서 적용할 때는 전처리기를 통해 css로 변환한 후 사용한다. React에서 Scss 사용하기 yarn eject eject 스크립트를 통해 webpack 설정파일을 끄집어낸다. yarn add node-sass sass-loader 모듈 두개를 설치한다. 단 webpack의 버전에 따라 최신 버전의 node-..

Image Classification 등 입력의 갯수가 많을 때 Full-connected Neural Network를 사용하면 조정해야 할 파라미터의 갯수가 너무 많아 학습시간이 너무 오래 걸린다. 크기가 64*64 해상도인 사진 입력과 히든 레이어 2겹, 각 1000개의 뉴런에 대해 y를 계산하려면 64*64*1000+ 1000*1000+ 1000개의 파라미터에 대해 최적화를 진행해야 한다. 이것은 학습 시간이 오래 걸린다는 것을 의미하기도 하지만, 너무 많은 학습 데이터를 요구한다는 것을 의미하기도 한다. (학습 데이터의 갯수는 가중치를 원하는 정확도로 나눈 값이 최소값으로 하는 것이 권장된다) Convolutional Neural Network 바로 Neural Network를 사용하지 않고, N..

뉴럴 네트워크는 각각이 가중치로 연결되어 신호를 주고받는 간단한 프로세싱 유닛(뉴럴)로 구성되어 있다. 각각의 프로세싱 유닛들이 신호를 주고받는 모습이 마치 사람 뇌의 뉴럴이 상호작용하는 것과 비슷해서 이런 이름이 붙었다. 뉴럴 네트워크는 인풋 레이어, 히든 레이어, 아웃풋 레이어로 나누어볼 수 있다. 예를 들어 y= a*x1+ b*x2+ c일때 입력 x1,x2에 대해 인풋 레이어에 뉴런 2개가 들어가고 출력 y에 대해 아웃풋 레이어에는 1개의 뉴럴이 들어간다. 히든 레이어는 출력 y를 계산하기 위한 여러 겹의 뉴럴들이 존재한다. Neural Network: 각 뉴럴의 입출력 어떤 하나의 뉴럴 N에서 입력값과 그 입력에 대한 가중치의 곱의 합에 bias를 더한 후 그 값을 Activiation funct..

어떤 입력에 대해 맞냐 아니냐와 같이 이분법적인 결과를 예측하기 위해서는 Linear Regression 대신 다른 방법을 사용해야만 한다. 예를 들어 X가 공부시간이고 Y가 시험 합격여부라고 한다면, 그 데이터를 Linear regreesion으로 예측하는 것은 별로 적합하지 않을 것이다. Logistic Regression Logisic Regression은 sigmoid 함수를 이용해 나타낼 수 있다. 이렇게 하면 위와 같이 결과가 0,1로 나타나는 값에 대해 더 적합한 방법으로 분석할 수 있게 된다. Logistic Regression에서 입력 X1, X2 ... Xn에 대해 충분히 반영하여 y를 계산할 수 있도록 sigmoid와 Linear Regression 을 결합한 형태를 갖는다. Sigm..

Gradient Desent (경사 하강법) 경사 하강법은 cost의 변화량에 따라 파라미터를 움직여가며 cost가 최소가 되는 지점을 찾는 방법이다. J(w)를 cost를 계산하는 함수라고 했을 때, 우리는 J(cost)가 최소가 되면서 변화량이 최소가 되는 지점을 찾고 싶다. J가 최소가 되면서 변화량(미분계수)가 최소가 되는 지점을 찾을 때, w값을 움직여가면서 J'(w)의 값이 양수이면 J(w)가 커지고 있다는 뜻이므로 파라미터를 반대 방향으로 움직인다. => parameter의 변화에 따라 cost가 커지고 있으면 그 변화의 반대 방향으로 움직여야만 cost가 작아진다 반대로 J'(w) 값이 음수이면, cost가 줄어들고 있다는 뜻이므로 파라미터를 정방향으로 움직인다. 경사하강법: 사용 J의 변..

전자서명 전자적 데이터에 서명자에 대한 인증을 추가하는 것 비대칭 키를 이용해 서명할 때 개인키로 서명하고 공개키로 검증한다. => 서명: Signiture(M, 개인키) => 검증: Verify(S, 공개키) 따라서 서명은 본인만 할 수 있지만 검증은 공개키를 알고있는 모두가 할 수 있다. 전자서명: 해시 => 서명: Signiture(M, 개인키) => 검증: Verify(S, 공개키) 에서 M이 원본 메시지 그대로에 서명하는 것은 아니다. 메시지를 Hash해서 Hash(M)값에 대해 서명한다. 그러므로 더 정확하게는 => 서명: Signiture(Hash(M), 개인키) 가 맞다. 전자서명: 알고리즘 대표적으로 RSA알고리즘을 사용한다. RSA암호화와 기본 개념은 동일하지만, 여기에서 목적은 서명과..

암호화를 통해 복호화 키를 가지지 않은 사람은 메시지의 원문을 확인하지 못하게 할 수 있다. 대칭키 암호화 대칭키 암호화는 암호화 키와 복호화 키가 같은 암호화 방식을 발한다. 대칭키 암호화는 대표적으로 DES 암호화가 있다. https://yjshin.tistory.com/entry/%EC%95%94%ED%98%B8%ED%95%99-%EB%8C%80%EC%B9%AD%ED%82%A4-%EC%95%94%ED%98%B8-DESData-Encryption-Standard [암호학] 대칭키 암호 - DES(Data Encryption Standard) 데이터 암호화 표준 DES(Data Encryption standard) 1. 개요 DES는 대칭형 암호(비밀키 암호)이다. 즉, 암호화 및 복호화 키가 동일하다..

포맷 스트링 공격은 버퍼 오버플로우 공격과 매우 유사하다. 포맷 스트링 int main(){ char* buf= "str"; printf("%s", buf); } 위와 같이 %s 와 같이 출력 서식을 지정하는 문자를 포맷 스트링이라고 한다. 조금 특이한 %n에 대해서 알아볼 것이다. int main(){ int n; printf("hahaha%n", &n); } %n은 현재까지 출력된 바이트 수를 지정한 변수에 넣는다. 여기에서 %n 전에 출력된 문자열은 hahaha로 6byte이므로, n에 6이 들어간다. %n은 값을 4byte크기로 쓰기작업을 하는데, 만약 2byte만 쓰기에 사용하고 싶을 경우 %hn을 사용한다. 포맷 스트링 공격 원리 만약 printf에서 포맷 스트링을 사용하고 추가 인자를 넘겨주..

아직 블록체인에 대해 오래 공부하지는 않았기 때문에 틀린 내용이 있을 수 있으니 오해설을 발견하게 된다면 댓글을 통해 알려주시면 감사하겠습니다. https://bitcoin.org/files/bitcoin-paper/bitcoin_ko.pdf 이 포스트에서는 위 문서(비트코인 백서)를 해설할 것이다. 비트코인의 목적은 무엇인가? 기존의 인터넷 기반 상거래(쇼핑몰에서 물건 사기 등)에서 재화를 거래하기 위해서는 판매자와 구매자가 직접 재화를 거래하지 않고 금융기관과 같은 중개 기관을 통해 거래한다. 그러나 이런 중개 기관의 개입은 분쟁 등의 이유로 거래의 취소가 발생할 수 있기 때문에 서로 완전히 믿고 거래를 진행할 수 없다. 비트코인은 위 문제를 해결하기 위해 탄생한 1) 중앙통제를 받지 않고, 2) 거..
150분(2시간 30분)동안 3문제를 풀어야 한다. 프로그래머스를 통해 시험이 진행되며, 주어진 기간 내 아무때나 시험을 보면 되서 이 점은 지원자를 배려해준 것 같아 매우 감사했다. (여태까지 본 모든 회사들은 정해진 시간에 다같이 모여서 보는 방식이라 그 날 스케줄이 있을 경우 매우 곤란했다) 난이도는 쉬운 수준이였지만, 3문제 중 두 문제가 효율성 테스트(시간복잡도 줄이기)가 있어 조금 멈칫했다. 단순 문제의 정답을 맞추는 것(정확성 테스트)은 바로바로 가능했고, 효율성 테스트에서 2번 문제 10분, 3번 문제에서 30분정도 소모했다. 특히 3번 문제는 조금 황당했는데, 이분 탐색에 트리까지 써가며 일부 로직의 시간복잡도를 O(N^2)에서O(logN)으로 줄이면서 별 난리를 쳐도 안되던데 극단적으로..

문제 길이가 4인 [1,2,3,4] 배열이 있다. 여기에서 인덱스 0번부터 2번까지의 합을 구하라. 또, 인덱스 1번의 값을 10으로 변경했을 때의 인덱스 0번부터 2번까지의 합을 구해보라. 생각해볼 것 가장 간단한 방법은 주어진 범위(0~2)까지 배열을 순회하며 합계값을 구할 수 있다. 중간에 값이 바뀌면, 배열의 해당 인덱스의 값을 바꾼 후, 다시 주어진 범위에 대해 순회하며 합계값을 구할수 있다. 그러나 여기서 배열의 길이가 4가 아니라, 천만으로 증가하고 구간이 0~500만, 200만~700만, ... (구간의 길이가 500만)처럼 구해야 하는 누적합의 종류가 100가지라고 해보자. 이렇게 되면 매 구간에 해당하는 인덱스 위치를 모두 순회하여 부분합을 새로 계산해야 하므로 구간의 길이인 500만에..

요번에 산 책의 페이지 수가 1200페이지로 들고다니기 힘들 정도의 무게를 자랑한다. 그래서 아이패드에 넣어 보려고 북 스캐닝을 진행했는데, 스캔 상태가 좋지가 않다... 저렇게 페이지 전체가 심하게 기울어져있는 경우가 많았다. 이미 비싸게 돈 주고 책 절단+ 스캔+ 재제본까지 진행한 터라, 여기에서 OCR을 진행해도 큰 의미가 없다고 생각해 그냥 집으로 왔다. (OCR이 페이지당 추가비용이 발생하기도 했고...) 스캔 향상을 통해 기울음 보정하기 Adobe Acrobat DC나 기타 PDF 보정 툴을 통해 기울음을 보정할 수 있다. 왼쪽이 기울음 보정을 한 것이고, 오른쪽이 원본 스캔 파일이다. 확실히 오른쪽은 페이지가 휘어있는 모습을 확인할 수 있다. 그러나 기울음 보정을 하면 화질이 말 그대로 갈려..

올해 초부터 급격한 가격 상승이 있었던 GPU는 아직까지도 최고가 갱신을 계속하고 있으며 떨어질 기미가 보이지 않고 있다. 이 포스트가 GPU가 왜 이렇게 비싸졌는지, 언제쯤 살 수 있을지 전혀 모르는 사람들에게 도움이 될 것이다. 현재 가격은 얼마이고, 얼마나 비싸진 것인가? 2021-11-14 기준 최저가/평균가 가격표이다. 일반적인 사용자에게 맞춰진 3060과 3060ti를 보면 92만, 111만원에 가격이 형성되어 있다. 2팬 3060의 권장소비자가(MSRP)는 329달러로, 원화 환산 시 약 38만원이고 부가세와 관세를 합친다고 해도 45만원 내외가 정상 가격이다. 여기에서 유통사가 먹는 가격이 진짜 잘 쳐줘서 20%라고 해도 55만원 정도가 적절한 가격일 것이다. 그러나 현재 3060의 최저가..
node index.js 이런 형태로 js 파일을 실행시킨다. 그런데, 특정 매개변수를 입력받아야만 할 때가 있다. node index.js --slow 이런 식으로 실행 파일에 매개변수를 넘겨줘서 코드 수정 없이 다른 동작을 하게 만들 수 있다. 그렇다면 입력한 매개변수를 js에서 어떻게 받을 수 있을까? console.log(process.argv) process.argv에 매개변수가 들어있다. 그러나 node index.js --slow 했을 때 process.argv[0]에 --slow가 들어가지는 않는다. [ "...../node", "...../index.js", "--slow" ] 이런 식으로 node의 경로, index.js의 경로, 그 다음부터 매개변수가 들어간다. 따라서 매개변수만 들어..

Crontab Crontab은 특정 시간에 특정 작업을 트리거할수 있게 해 주는 명령어이다. https://jdm.kr/blog/2

Attempting to renew cert (secret.kr) from /etc/letsencrypt/renewal/secret.kr.conf produced an unexpected error: The manual plugin is not working; there may be problems with your existing configuration. The error was: PluginError('An authentication script must be provided with --manual-auth-hook when using the manual plugin non-interactively.',). Skipping. sudo certbot renew 인증서 유효 기간이 30일도 남지 않아..