본문 바로가기

전체 글141

[3] Go 웹 프레임워크 Gin Gin은 Golang으로 작성된 웹 프레임워크로, Node로 치면 Express 같은 미들웨어 지향 API를 제공합니다. Gin 이전에 martini라는 웹 프레임워크가 있었기 때문에 martini-like api 라고 하는데, 오픈소스인 httprouter 를 도입하여 그 성능을 높였다고 합니다. httprouter에 대한 세부 분석은 다음 기회에 다루겠습니다. 지원하는 핵심 기능들은 다음과 같습니다 - Radix tree 기반의 라우팅으로 메모리 소요가 적으며 reflextion이 필요 없어 API 성능이 예측 가능합니다. - 미들웨어를 지원하여 개별 HTTP Request에 수행되는 비즈니스 로직을 분리할 수 있습니다. - 요청에 대한 Panic 을 Recover하기 때문에 안정적인 서빙이 가능합니.. 2020. 10. 3.
[3] 계획을 세우는 방법 삶을 더욱 가꾸기 위해 목표를 설정하고 그 목표에 따라 계획을 세워보려고 합니다. 계획 및 자기관리에 대한 마음가짐은 데일카네기의 자기관리론을 참고하였습니다. 사실 자기관리론이라기 보다는 걱정으로부터 벗어나는 방법이라고 해야 옳다고 볼 수 있습니다. 실제 원저 제목도 How to stop worrying and start living 입니다. 그런데 역시 무작정 계획을 세우려고 보니 잘 되지 않더군요. 올바른 계획을 세우려면 어떻게 해야하는 지에 대해서 알아보았습니다. 1. 계획을 작은 단위로 쪼개라 아주대 심리학과 교수님의 이 동영상 으로부터 한 이야기를 정리하였는데요, 목표와 계획을 구분하는 것이 중요하다고 합니다. 목표를 세웠다고 해서 계획을 세운것이 아닙니다. 목표를 이루기 위해 내가 어떤 행동을.. 2020. 10. 2.
2020 3분기를 돌아보며 인턴 후기를 빨리 쓰고싶어 안달난 걸 보면 얼마나 블로그 글을 쓰는걸 좋아하는지를 새삼 느낀다. 원래는 월 단위로 회고하고 싶었는데, 인턴 한다고 (핑계) 정신없어서 제대로 하지를 못했다. 부모님이 다른 집으로 이사를 갔다 더 좋은 집에서 살게 되셔서 좋지만 이제 부모님과 같이 살게 되지 않아 조금 외로워졌다 종합적으로 표현하면 집에서 자취하는 것 같다. 블로그로 이야기를 나눌 친구들이 늘어나게 되니 자연스럽게 더 손이 가게 되는 것 같다. 글을 쓰는 성취감이 커져서, 굳이 쓰지 않아도 되는 것 까지 작성을 하게 되는 것 같다. 좋은 글을 쓰기 위해, 글을 쓰는 기준을 설정해야 하지 않을까 싶다. 앞으로는 월 단위로 회고할 것이고 회고할 대상이 될 월 단위 목표를 세우고 월 단위 목표들을 해결하기 위한 .. 2020. 10. 2.
[4] Three.js - Material Material은 Object의 피부같은 것으로, Geometry가 투명한지, Metallic한지 "피부"같은 것을 결정한다. 다양한 Material이 있는데, 대표적으로 다음과 같다. MeshBasicMaterial -> 단순한 색깔 및 와이어프레임을 부여 MeshDepthMaterial -> 카메라와의 거리를 이용해 색상을 결정한다 MeshNormalMaterial -> Normal Vector 방향을 색상으로 표현함. 해당 지점의 법선 벡터가 가르키는 방향에 대해 색상이 변경된다. MeshFaceMaterial -> 사용자가 개별 Face에 대해 독립적인 material을 지정할 수 있음 MeshLambertMaterial -> Vertice에서 lighting을 계산하여 Shiny 하지 않음 Me.. 2020. 9. 28.
[3] 좌표 압축 (Coordinate-Compression) 좌표 압축은 PS에서 정말 많이 쓰이는 테크닉으로, 세그트리 같이 구간 쿼리를 해결하기 위해 많이 사용한다. 세그트리는 주어진 범위의 모든 영역을 Leaf node로 사용하기 때문에, 해당 범위가 커지면 좌표 압축이 필요하다. 결국 좌표 압축은, 해당 좌표를 0,1,2 ~ 의 값으로 치환하는 것인데, 그 자체는 매우 어렵고 이해가 되지 않는 개념은 아니다. for (int i = 0; i > comp[i]; v.push_back(comp[i]); } sort(v.begin(), v.end()); v.resize(unique(v.begin(), v.end()) - v.begin()); for (int i = 0; i < n; i++) { comp[i] = lower_bound.. 2020. 9. 28.
[2] Segment Tree (Lazy Propagation) Lazy-Segment Tree는 기본 세그먼트 트리에 구간에 대한 업데이트를 적용하는 쿼리에 적합한 자료구조이다. 기존 Segment Tree는 매 Update 쿼리마다 Tree의 Leaf node까지 가서 업데이트를 적용하지만 구간에 대해 업데이트가 필요한 경우엔, 그걸 일일이 다 바꿔주는 것이 비효율적이다. 해당 구간을 나중에 조회하지 않을 수도 있기 때문이다. 그럼 해당 구간을 언제 업데이트해줘야 하나? 물론 그 구간을 조회하거나 업데이트 해야 할 때 이다. 그때 아니면 굳이 밑으로 내려갈 필요가 없다. 해당 구간에 업데이트해야 할 값을 배열로 가지고 있고 (segtree와 동일한 배열) 해당 지점을 update 혹은 find로 접근할 때 propagation을 해준다. Propagation vo.. 2020. 9. 28.
[2] Go mod - Go의 패키지 관리 시스템 처음 무작정 개발에 달려들었을 때 가장 어려웠던 부분이 패키지 관리였습니다. 다른 언어처럼 임의의 폴더에서 실행파일 main.go 를 구성하고 프로젝트를 실행했는데 모듈이 import 되지 않아서 매우 답답했었습니다. 아니 분명 저기 상대경로로 표시해줬는데 안된다고? (매우 속터짐) 처음에는 go get 을 이용해서 막무가내로 글로벌로 패키지를 설치했고 import path에 항상 full path를 제공해야 하기 때문에 아 원격지에 구성된 모듈을 매번 업데이트해야 하겠구나 라고 생각해서 매번 커밋하고 push하고 go get -u 패키지로 업데이트하고.. 그런 미련한 짓을 반복했었습니다. 알고보니 GOPATH를 매 개발하는 프로젝트에서 환경변수로 설정을 해야 해당 프로젝트 내에서 모듈을 찾을 수 있었던.. 2020. 9. 25.
[2] Java Spring Boot Project - Intellij 에서 실행시키기 친구가 짠 코드를 피드백하기 위해 pull 했는데 configuration을 어떻게 설정해야 할지를 까먹어서 이를 기록하려고 작성하였습니다. 프로젝트를 로컬에서 직접 설정하지 않은 경우라면 Run configuration이 설정되어 있지 않을 것입니다. Intellij를 설치하고 나서 프로젝트를 부르면 자동으로 maven 혹은 gradle dependency가 설치됩니다. 설치가 완료되고 빌드 및 실행하려고 보면 다음과 같이 보입니다. 실행 버튼이 Disabled 되어 있다는 건, 어떻게 실행해야할 것인지에 대해 명시가 되어있지 않다는 것입니다. Add Configuration을 누르면 여러 템플릿이 있습니다. 현재 프로젝트에 맞는 템플릿을 선택해주면 됩니다. Spring Boot의 경우 개별적으로 템플.. 2020. 9. 25.
[1] 20.09.23 자전거는 진짜 재밌다 그저께 친구 집을 놀러가는데, 중간에 자전거가 타고 싶어서 청담역에서 내려서 따릉이를 타고 서초역까지 자전거를 타고 갔다. 자전거를 타고 청담나들목으로 나가는데, 강이 굽어지는 쪽이라 그런지 바다같이 탁 트인 시야가 너무 압도적이였다. 날씨도 너무 시원해서 자전거 타기 아주 적합했다. 자전거 타면서 든 생각이 나는 아마 죽기 전까지 자전거를 타지 않을까? 라는 생각을 했다. 자전거에 대한 사랑은 변함이 없는 것 같다. 이전에 독일 교육에 관한 책을 읽었는데, 독일에 자전거 면허증도 있고 자전거 운전면허 교육과정이 있다고 한다. 정말 옳은 교육과정이라고 생각한다. 뭔가, 이런 도구를 다룰 수 있고 내 두 다리로 자유롭게 어딘가를 여행할 수 있다는 것 자체가 크나큰 특혜가 아닐까 학교에서 자전거를 가르치면 .. 2020. 9. 23.
[3] Three.js - Scene, Light Sources 이전 시작 단계에서 간단한 튜토리얼을 통해 Three.js 를 어떻게 사용하는지 알아보는데요 이번 단계에서는 Three.js 의 Scene을 구성하는데 사용되는 Object와 역할 three.Scene Object의 역할 geometric과 mesh와의 관계 orthographic camera와 perspective camera의 차이 를 알아보겠습니다. Scene api 화면에 무언가를 보여주려면 다음 3가지 요소가 필요합니다. - Camera -> 화면에 어떤 요소가 렌더링되는지를 결정 - Lights -> 물체가 어떻게 보이고, 그림자를 어떻게 생성하는지를 결정 - Objects -> Camera에 비춰지는 물체들 Scene 객체는 이런 서로 다른 요소들을 담는 역할을 합니다. Scene에 추가된 .. 2020. 9. 23.
[2] Three.js - 시작하기 Three.js 는 자바스크립트 3d 라이브러리로 많은 곳에서 사용되고 있습니다. 다양한 라이브러리가 있지만, Three js를 사용하는건 아무래도 커뮤니티가 크고 TypeScript 지원이 잘 된다는 것이 그 이유입니다. Three.js 엔 여러 장점이 있는데 우선 대부분의 브라우저에서 동작하고 3d 를 구현하기 위해 개별 플러그인이 필요하지 않습니다. 무엇보다 가장 큰 장점은 WebGL을 몰라도 쉽게 사용할 수 있다는 큰 장점이 있습니다. WebGL은 일반 캔버스와는 달리 GPU 자원을 사용할 수 있어 성능상의 이점을 보입니다. 저는 간단한 웹팩 설정으로 ts를 이용하여 로컬에서 작업하였습니다. 설정 방식은 이 글을 참고하시면 좋을 것 같습니다. 설정하기 위 웹팩 설정을 완료했다면, 프로젝트의 구조는.. 2020. 9. 22.
[1] Webpack 을 이용한 TypeScript 번들링 웹팩을 이용해서 그래픽스 라이브러리를 타입스크립트로 번들링하고, 개발 환경을 편리하게 구성하기 위해 웹팩에 대해 공부한 기록을 담았습니다. 웹팩이란 웹팩은 HTML, CSS, JS, 등의 웹 어플리케이션에 필요한 자원을 개별 모듈로 정의하고, 이를 조합해서 하나의 HTML CSS JS 로 합쳐주는 모듈 번들러 입니다. 웹팩을 사용하면 얻게되는 장점이 무엇일까요? 우선 모듈화를 통해 JS파일을 모듈화하여 코드의 가독성을 높일 수 있습니다. 브라우저는 HTTP 요청을 동시에 6개까지 수행할 수 있는데요 (크롬 기준) 모든 모듈 파일을 하나로 합침으로써 네트워크 자원을 아끼며 로딩 속도를 더욱 빠르게 하며 자동화 도구들을 통해 웹 개발을 편하게 수행할 수 있습니다. 또한 모듈화를 이용하여 Lazy Loadin.. 2020. 9. 21.
페르마의 소정리 $ p $가 소수일때, 임의의 정수 a에 대해서 $ a^p - a $는 p의 배수이다. 이를 모듈러 연산으로 표현하면 다음과 같다. $ a^p \equiv a \pmod p $ 괄호 안의 의미는 양 변에 mod p 가 생략되었다는 뜻이다. 예를 들어, a = 3 이고 p = 7이면 $ 3^7 = 2187 - 3 = 2184 mod 7 = 0 $ 을 성립한다. 만약 a가 p로 나누어지지 않으면, 양변을 a로 나누어 동치인 식을 만들 수 있다. $ a^{p-1} \equiv 1 \pmod p $ 위 성질을 이용해서 임의의 x에 대해서 다음과 같이 일반화할 수 있다. $ a^x \equiv a^{x \mod (p-1)} \pmod p $ 이 성질을 이용해서 나머지를 매우 빠르고 쉽게 구할 수 있다. 예제 ww.. 2020. 9. 20.
[알고리즘 분류] - 세그멘트 트리 세그멘트 트리 문제를 연습하기 위해 다양한 문제를 찾아 시도해봤지만, 정말 어려운 것 같다.. 기본 세그멘트에서 조금이라도 응용을 뻗어나가면 방법을 모르겠는.. 구간 곱, 구간 합, 최소값 이런 것들은 단순히 init과 update의 함수를 조금씩 수정해주면 되는 부분이라 충분히 해결 가능하다. 플레 5 정도 문제는 가장 기초적인 세그먼트 트리를 이용해서 푸는 문제인데, 그 이후로부터는 Lazy Propagation 등의 추가적인 스킬과 응용 능력이 필요한 것으로 보인다. (어려움..) 2020. 9. 20.
[1] Segment Tree Segment Tree 는 다양한 유형의 문제를 빠르게 해결해주는 자료구조이다. 구간에 대한 정보를 구하는 경우, 단순히 정렬한 후 Prefix Sum 을 이용해서 구간합을 빠르게 구할 수 있지만 만약 개별 쿼리 도중 배열에서 특정 요소의 값이 변경되야 하는 경우엔 매번 다시 정렬을 해야 되어 비효율적이다. 이러한 경우, 구간에 대한 정보를 담는 Tree를 구성할 수 있는데, 이를 세그먼트 트리라고 한다. 세그먼트 트리는 기본적으로 Complete Binary Tree이고, 모든 Element에 대한 정보가 트리의 Leaf Node에 포함된다. 그리고 그 위 node들은, 자식 node를 포함하는 구간에 대한 정보를 담는 것이다. 간단하게, 세그멘트 트리를 이용해서 구간합을 구하는 코드의 예시를 보자. .. 2020. 9. 13.
[2] Faas Platform이 동작하는 방식 (1) Apache Openwhisk 이 문서에서는 어떤 과정으로 서버리스 플랫폼이 동작하는지에 대해 이해해보는 문서입니다. 다양한 프레임워크가 서로 다른 방식으로 동작하겠지만, 큼직한 Flow만 이해하는 것을 목적으로 작성하였습니다. 위 글은 이 동영상을 중심으로 작성되었습니다. 동영상에 대한 발표 자료 링크는 다음과 같습니다. What is Serverless Computing? 여러번 짚어본 이야기지만, 서버리스 컴퓨팅이란 Cloud Provider가 사용자에게 컴퓨팅 리소스와 스토리지를 동적으로 할당하여, 사용자가 리소스를 유지하고 프로비저닝 할 필요 없게, 어플리케이션의 비즈니스 로직만 고민할 수 있게끔 편의를 제공하는 서비스이다. 서버리스 함수는 이벤트 기반으로 동작하고, 이는 요청이 왔을 때 Trigger 되는 것이다. 서비스 .. 2020. 9. 11.
[1] WebGL Fundamental 해당 내용은 이 동영상을 들으면서 기록한 것입니다. 가벼운 마음으로 심심할때마다 공부해서 끝내는 것이 목표입니다. 1. Basic Mathematics, Translation Rotation Scaling Projection OpenGL은 2차원 및 3차원 그래픽스의 표준 API 규격이다. 실제 구현체는 manufacturer (NVIDIA ..) 들의 GPU Driver에 존재하기 떄문에, 구현 방식은 개별 드라이버에 따라 다르다. WebGL은 OpenGL-ES 스펙을 구현한 구현체로, 해당 구현체를 이용하여 개발을 하게 되면 GPU Vendor 에 구애받지 않고 기능을 구현할 수 있다. CPU가 아닌 GPU를 사용하는 이유는 GPU는 병렬처리가 가능하기 때문이다. Computer Graphics에서 .. 2020. 9. 10.
[1] 서버 마이그레이션 KUCC 웹페이지 개발 과정에 대한 기록을 하지 않다가, 이번에 인턴이 끝나서 조금 시간이 되서 틈틈히 생각과 경험을 기록하려고 한다. 개발하고 있는 웹 페이지는 https://kucc.co.kr 에 접속하면 확인할 수 있다. 이전에 가지고 있던 크레딧이 거의 끝나가서 다른 친구의 계정으로 서버를 옮기는 과정에 있는데 하나의 서버에서 여러 도메인을 서비스하다 보니까 이주할 게 너무 많다. 그 중에서 중요한 요소들만 기록해보았다. 1. Mysql Workbench 를 이용하여 Migration 하기 이전 서버에서 Mysql 5.6 을 사용했고, 새로 구성하는 서버에서도 그럴 계획이다. 그렇다 보니, Mysql Workbench를 이용하여 Migration을 하는 것이 편할 것으로 예상되어, 이를 한번 적용.. 2020. 9. 8.
[4] Nginx에 HTTPS/SSL 적용하기 해당 게시글은 이전 게시글과 이어지는 글입니다. 현재 구성된 파일 서버는 http 프로토콜을 이용한다. 사용하다 보면 다음과 같이 주소창에 주의 요함 표시를 확인할 수 있다 . 클릭해보면 HTTPS 프로토콜이 사용되지 않았음을 알 수 있다. HTTP 프로토콜은 전송되는 정보에 대한 암호화가 이루어지지 않고, HTTP 메시지에 평문으로 전달되기 때문에 유출의 위험이 있다. HTTPS 는 HTTP 프로토콜에 SSL/TLS 암호화를 추가하여 메세지를 암호화 및 복호화 한다. 1. Let's Encrypt 에서 인증서 발급받기. HTTPS 프로토콜을 사용하기 위해선 인증서가 필요하다. (엄밀히 말하면, SSL/TLS 프로토콜 영역에서 필요하다) 브라우저에는 여러 인증 기관들의 공개키를 포함한 Root CA 기관.. 2020. 9. 8.
[3] 라즈베리 파이에 정적 파일 서버 띄우기 + 계정 인증 이번 게시글에선 간단한 static file server를 nginx를 이용하여 띄워 볼 계획이다. 이 과정을 통해 다음과 같은 정적 파일 서버를 간단하게 구성할 수 있다. 만약 라즈베리가 포트포워딩이 되어있지 않아 접근하기가 힘들다면 이 글을 먼저 읽어보고 설정한 후에 작업해보자. 1. Nginx 설치 nginx는 매우 가벼운 웹 서버이며, 리버스 프록시로도 이용할 수 있고, 여러 플러그인을 도입해 이용할 수 있다. sudo apt-get install nginx 를 통해 nginx를 설치하고, /etc/nginx의 nginx.conf 파일을 조회해보자. sudo apt-get install nginx SSL, gzip 및 여러 설정들이 있지만, 우린 여기에 주목해보자. nginx에서는 개별 호스트에 .. 2020. 9. 7.
[2] 라즈베리 파이 포트포워딩하고 sshd 서버 띄우기 이번에 면접시즌이기도 하고, 앞으로 나를 편한 방식으로 소개해야 할 때가 종종 있을 것 같아 자기소개 페이지 및 자기계발 페이지를 간단하게 구성해서 띄우려고 한다. 헤로쿠와 같은 무료 사이트들도 있지만, 시스템이 분산되어 관리되는 것이 싫어 그냥 직접 해보려고 한다. 사용자도 그렇게 많지 않을거고, 웹 페이지만 정적으로 배포해주는 역할을 수행하는 것이 목적이기 때문이다. 1. 포트포워딩 포트포워딩은 적용되어있는 환경마다 조금씩 다르겠지만, 우리집은 KT GIGA Wifi 를 사용하기 때문에 Public IP로 내부망에 접근하면 이런 페이지가 나타난다. 일반적으로 시중에 판매하는 대부분의 라우터는 다음과 같은 관리 기능을 제공한다. 개별 기기별로 초기 아이디 비밀번호가 다르니, 이는 구글링을 통해서 문제를.. 2020. 9. 2.
[1] 라즈베리 파이에 우분투 서버 이미지 설치하기 라즈베리 파이에 사용할 MicroSD 카드에 우분투 서버 이미지를 설치하는 건, 정말 쉽다. 얼마나 쉽냐.. 하면 버튼 뭐 2-3개만 누르면 끝이다. 왜 쉽냐면, 너무 잘 되어있기 떄문이다. https://www.raspberrypi.org/downloads/ 이 URL에서 중간에 나오는 Raspberry Pi Imager 를 각자 운영체제에 맞게 설치하고 실행시키면 다음과 같은 프로그램이 등장한다. 라즈베리 파이에서 사용할 수 있는 운영 체제를 자유롭게 선택하고, 원하는 SD 카드에 원 클릭만으로 설치가 가능하다. 설치하기에 앞서, SD 카드를 포멧해야하는데, 그것도 이 Imager 프로그램에서 수행이 가능하다. OS를 클릭하면, 위에 여러 OS 선택지들도 나오지만, 밑에 내리면 Erase 버튼이 있어.. 2020. 8. 29.
[0] 라즈베리로 이것저것 만들어보자! NBP에서 인턴을 하는데 라즈베리 파이를 쓸 일이 생겨서 접하게 되었는데, 조그만 녀석이 모든 기능을 담고 있는게 참 재밌고 신기했다. 그래서 개인적으로 라즈베리 3 B+ 를 구매해서 서버를 구성해봤는데, 너무 편하고 재밌는 것이다. 이 쪼끄만 녀석 때문에 요즘 개발 + 학습 욕구가 뿜뿜이다. http://cloud.riverandeye.com/ 이 서버에 위 서비스를 띄워놨는데, 평소에 자주 쓰는 파일들을 저기 올려놓으니 너무 편했다. 이미 시중 클라우드 서비스가 많은데 왜 저렇게 하냐고? 내 개인정보는 소중하니까.. 기껏해서 3 B+를 사고 나니, 알고보니 4 가 있었다는거다. 램 용량도 크고, USB 3.0 포트도 있고.. 눈뜨고 사기당한 기분이였다. (물론 스스로 당함) 그러다가 중고나라에서 라즈.. 2020. 8. 29.
[1] Golang 개념 및 기초 해당 게시물은 이 책 및 공식 블로그를 참고하여 작성되었습니다. 개인 학습 목적으로 작성되어 제가 필요하고 되짚어야 할 부분만 기록했기 때문에 생략이 많습니다. 모든 것을 다 정리하지는 않고, 정말 기초가 되는 부분들만 작성하였습니다. The Go Project  Go Project는 소프트웨어의 복잡도를 극복하기 위해 설계된 언어이다. 소프트웨어의 복잡도는 배로 늘어나서, 문제를 해결하기 위해 시스템의 복잡도를 높이면 다른 영역에도 영향을 미치게 된다. 문제를 해결하고 설정을 더하는 동안 단순성을 간과할 수 있는데, 길게 보면 단순한 것 만큼 소프트웨어의 좋은 해결책이 없다. 소프트웨어가 단순해지려면 작업들이 프로젝트의 핵심 아이디어에 집중해야 하며, 프로젝트가 변모하는 방향성을 올바르게 파악해야 한.. 2020. 8. 20.
[2] 인턴 3주차 감성 도전하는 그 순간만큼은 참 치열하고 짜릿한 기분인 것 같다. 이번 인턴은 저번보다 더 도전적인 과제고, 경험해보지 못했던 일들로 가득 차있다. 처음 해보는 것들 투성이.. 그래도 언제 이렇게 몰입해보겠어 인턴때 아니면. 그런 생각이다. 요즘은 마음을 찌워야겠다는 생각이 많이 든다. 오늘 친한 형님이 양고기를 사줬는데, 먹으면서도 내 건강을 걱정해주고 즐거운 일을 공유하는 일이 참 좋았다. 형을 보면서, 항상 더 나은 것을 위해 생각하고 행동하는 모습이 인상깊고 그렇다. 바쁜 와중에 플라스틱 빨대를 안쓰려고 노력하고, 새로운 걸 학습하는데 시간을 아끼지 않는다. 살아가면서 더 나은 생각을 하려고 노력하고, 행동으로 옮기는 것이 참으로 중요한 것 같다. 시간은 짧고, 자원은 넉넉하지 않으며, 소중한 사람들은.. 2020. 8. 6.
[1] 서버리스에 대한 아주 간략한 개요 Background 기업의 기술적인 발전은 우위를 점하는 데 큰 역할을 하게 된 시대이다. 이런 양상에서 클라우드 서비스가 수요가 높아진 데에는 다음과 같은 이유들이 있다. 이전엔 모든 기업이 각자의 전산 팀을 구성하여 서버와 서비스를 관리하였다. 각 기업의 소프트웨어 혹은 기술들이 조직에 구내 되어있는 컴퓨터에 설치 및 실행되었고, 이러한 방식을 On-premises 라고 한다. On-premises 환경에서 고민해야 할 것들은 수도 없이 많을 것이다. 예를 들면 다음과 같은 것들이 있다. - 네트워크 안정성 및 보안 - 현재 비즈니스에 대한 서버의 사양 분석 - 배포, 패치, 백업에 대한 계획 수립 - 서비스의 발전에 따른 프로비저닝 - 운영체제 선택, 하드웨어 선택, 하드웨어 장애 분석 전략 수립 .. 2020. 7. 19.
[알고리즘 분류] - 최소 스패닝 트리 MST는 2가지 방법으로 구현할 수 있는데, 하나는 Prim이고, 다른 하나는 Kruskal 이다. 나는 대부분의 문제를 Kruskal 로 풀었는데, 주어진 문제들이 대부분 Sparse Graph 였기 때문이다. Kruskal는 모든 edge를 오름차순으로 정렬하고, 앞에서부터 (작은 순서대로) 판단을 하는데, 해당 edge의 양쪽 node가 같은 Group에 속해 있으면 연결하지 않고, 같은 Group에 속해있지 않으면 연결한다. node의 갯수가 N개일 때, 연결한 edge가 총 N - 1 개가 되면 멈춘다. 같은 Group인지를 판단할 때 Union-find 알고리즘을 그대로 사용한다. (매우 단순하다) edge를 정렬하는 단계에서 ElogE의 시간복잡도가 발생하고, edge를 선택하여 group을.. 2020. 7. 14.
[단계별로 풀어보기] - 유니온 파인드 Union Find는 각 대상들이 어떤 집합에 속하는지에 대해 파악하는 알고리즘이다. 하나의 배열로, 각 대상이 index로, value가 parent, 즉 해당 집합을 대표하는 number로 지정된다. 처음 초기화는, parent[i] = i 로 해주고 parent를 찾는 건 배열에 대한 탐색을 재귀적으로 찾되, 재귀적으로 찾은 결과를 현재 값에 적용시켜야 한다. return parent[n] = find_parent(parent[n]) 가 최적화의 핵심이라고 할 수 있다. 공항 문제는, 문제 자체가 이해가 되지 않아서 미루었다. 2020. 7. 7.
[BOJ] 단계별로 풀어보기 - 우선순위 큐 잠이 안와서 단계별로에서 이분탐색을 풀다가 멘탈이 나가서 만만한 우선순위 큐를 풀었다. 내일은 어떻게든 이분 탐색 문제를 다 풀어야지.. C++에서 STL을 이용하여 우선순위 큐를 사용할 수 있다. 근데, 이게 너무 편해서 한번 맛 보면 자꾸 생각나게 된다. int에 대한 priority queue를 구성하는데, less와 greater template를 이용해서 여러 자료형에 대한 비교 연산자를 구성할 수 있다. 3번째 인자로 구조체를 넣어야 하는데, 만약 일반적인 타입이 아니라 구조체 혹은 class에 대한 priority queue를 구성해야 한다면, 혹은 custom 연산자를 사용해야 하는 경우엔, 비교 연산자를 구현한 구조체를 넣어주면 된다. 마지막에 푼 가운데를 말해요 문제는 정말 재밌는 문제.. 2020. 7. 6.
[라이브 스트리밍 서비스] - 2. nginx 설정 및 https 설정 사실 nginx를 이용하면 하나의 서버에서 여러개의 도메인을 서빙할 수 있다. 근데 이 당시엔 그걸 몰라서, hls 서버랑 웹 서버의 도메인을 분리하기 위해 서버를 2개로 구성했던 것이다. 모든 서버는 단순히 route에 A Record를 직접 연결해서 구성했다. 로드밸런서 멀티캐스트 서버 이런거 없다. RTMP / HLS Server RTMP 처음 nginx를 빌드할 때 rtmp-module과 같이 빌드 한 nginx를 사용한다는 전제가 있다. hls_path는 임의로 설정할 수 있는데, 중요한 건 nginx user가 해당 폴더에 대한 소유권이 있어야 한다 nginx default user는 www-data 이니 chown 을 이용하자. latency를 최소화하기 위해서 fragment 크기를 줄이고.. 2020. 7. 4.