오히려 좋아..

상황이 나쁘게만 흘러가는 것 같을 때 외쳐보자.. .

궁금한 마음으로 포트폴리오 보기

분류 전체보기 245

WebRTC는 어떻게 P2P 통신을 가능하게 하는가?[1]

비전공자인 내 입장에서 WebRTC는 학습했던 기술중에서는 손에 꼽히도록 어려운 개념중에 하나였다. WebRTC를 하기 위한 네트워크 관련된 개념이 특히 이해하기 어려웠다. 그것 뿐만 아니라 P2P를 맺기위한 다양한 프로토콜이 어디서 어떤식으로 맺어지는지 또 서버는 왜 이렇게 많이 등장하는지 STUN, TURN, 시그널링등 알 수 없는 말들 뿐이였다.. 고생을 토로하는 건 여기까지 하자! 이번 주제는 상당히 많은 양을 다루고 있기 때문에 여러개의 글로 이루어 질 것이다. 오늘은 WebRTC 전반에 대해서 다뤄보도록 하겠다. 코드는 없으니 주의하자.. 1. WebRTC 전체 과정 먼저 당연히 WebRTC가 어떤 기술인지 한마디로 정의해봐야한다. WebRTC는 Web Real Time Communicatio..

Technology/Webrtc 2022.09.27

트리 순회 순서 변경 python

https://algospot.com/judge/problem/read/TRAVERSAL algospot.com :: TRAVERSAL 트리 순회 순서 변경 문제 정보 문제 트리를 순회하는 알고리즘은 트리의 모든 노드들을 특정 순서에 맞춰 방문하지만, 트리는 배열처럼 1차원적인 구조가 아니기 때문에 단 한 가지의 당연한 algospot.com import sys input = sys.stdin.readline def get_sub_tree(root, inorder): root_idx = inorder.index(root) left_tree = inorder[:root_idx] right_tree = inorder[root_idx + 1:] return root_idx, left_tree, right_tr..

Algorithm 2022.09.04

Http Status Code에 대한 짧은 생각

어제 팀 회의를 하면서 HTTP Status Code 를 팀 컨벤션을 정하기로 했다. 회의하면서 약간 의아했던 부분을 적어둔다. * 다른 유저 A를 팔로우하는 경우, A가 탈퇴한 유저인 경우에 200번대 응답을 보내기로 정했다. * 유저가 존재하지 않는 경우, 400번대 응답을 보내기로 했다. 이 부분이 잘 이해가 되지 않았다. 물론 일종의 약속이니까 그냥 진행해도 상관없지만 200번대 응답은 성공한 응답을 의미하는데 위의 예에서는 요청이 성공하지 않았는데 200번대 응답을 보내준다는게 뭔가 마음에 걸렸다. 또 탈퇴한 것과 유저가 존재하지 않는 것 이 두가지 모두 유저에게는 똑같이 서비스에 해당 유저가 존재하지 않는 것을 의미한다. 탈퇴와 존재하지 않음을 구분할 수 있는 이유는 순전히 유저를 완전히 삭제..

글/🐕🐾 일기 2022.08.31

페이지네이션

페이지네이션이 들어가 있는 List API를 개발할 때 page_size를 조절해서 넘길 수 있도록 query_param 추가해주도록 하자. 고정된 페이지 사이즈 값을 정해서 주었을 때, 리스트 UI가 화면을 꽉 채워서 추가로 페이지네이션을 못할 수 있다고 한다. UI 변경해야될 때마다 바꾸는 것보다 가져올 수 있는 최대 page_size값 만 정해두고 클라단에서 필요에 따라 변경해서 사용하는게 편할 듯.

글/🐕🐾 일기 2022.08.27

[Typescript] Typescript 기본 세팅

맨날 프로젝트 세팅때마다 찾는게 번거로워서 정리해둔다. 먼저 프로젝트 초기화를 해준다. npm init 이제 필요한 패키지를 받아주자. npm install -D express typescript ts-node nodemon @types/node @types/express 여기서 nodemon은 라이브 컴파일을 지원하는 패키지로 파일 변경시 타입스크립트에서 자바스크립트로 자동으로 빌드해주는 패키지이다. 꼭 받아주도록 하자. tsconfig.json 파일을 생성해준다. tsconfig.json 파일은 타입스크립트의 규칙을 정해주는 설정 파일이다. npx tsc --init // tsconfig 생성 package.json 파일 수정 "scripts": { "start": "node dist/app.js",..

[네트워크] NAT(Network Address Translation)

1. NAT란? 많은 회사들이 여러 이유(보안, 한정된 공인 IP)로 하나의 공인 IP에 여러 단말기(PC)를 서브넷으로 구성하는 경우가 많다. 외부에서 보기에는 하나의 IP로 보일텐데 어떤 식으로 서브넷의 특정 단말기와 통신가능 한 것일까? 이번글에서는 이러한 문제를 해결하는 NAT과 NAT의 종류에 대해 다루도록 하겠다. 기본적으로 서브넷이나 공인/사설 IP에 대한 이해를 바탕으로 진행하므로 아직 공인 IP, 사설 IP에 대해 모른다면 이 글을 참조하자! 잠깐 다른길로 잠깐 새보면 예전에는 친구랑 놀려면 친구집에 있는 집 전화기에 전화해야하던 때가 있었다. 민수가 병건이에게 전화를 한다. 민수가 병건이네 전화번호를 누르고 누군가 전화를 받는다. 민수 : ”여보세요. 병건이 있어요?” 병건이네 엄마 :..

Network 2022.08.24

[Django] 장고 비즈니스 로직 어디둬야하는 고민하는 사람들 드루와..

장고를 써온지도 어느 1년이 되었다. 장고는 굉장히 장단점이 명확한 프레임워크 였다. 스타트업들이 가장 빠르게 MVP를 만들어 볼 수 있지만 프로덕트 크기가 커짐에 따라 코드관리가 어려워지는게 문제다. 오늘은 코드관리가 어려운 장고에서 비즈니스 로직관리를 어떤식으로 할 수 있는지에 대해 적어보도록 하겠다. 1. Model 너 누구야? 먼저 본격적으로 비즈니스 로직을 분리하기 전에 장고에서 비즈니스 로직의 핵심이 되는 Model에 대해서 몇가지 이야기해야 한다. Model의 가장 대표적인 역할은 데이터베이스와 서버어플리케이션 사이의 인터페이스 역할이다. 가령 데이터베이스를 변경해야할 때 장고에서는 setttings에서 사용할 데이터베이스만 변경하면 된다. 즉 데이터베이스 변경으로 인한 변화가 어플리케이션 ..

[NestJS] 스웨거에서 여러 Type의 Object Array 정의

swagger를 사용하다 보면 여러 타입의 오브젝트가 들어간 Array를 정의해야할 때가 있다. 아래처럼하면 된다. $ref가 돌아가지 않는다면 아래 링크를 통해 방법을 확인하자. https://cocook.tistory.com/213 [NestJS] Swagger에서 refs 안될 때 Swagger에서 DTO를 이용해 서버 응답 값을 정의하는 기능이 있는데 직접 가져오는게 아닌 경로를 작성해주면 해당 경로에 있는 클래스를 가져와 붙여주는 기능이 있다. 경로는 분명히 맞는데 안되 cocook.tistory.com export const API_RESPONSE: ApiResponseOptions = { status: 200, isArray: true, description: "Successful respo..

Language/Python 2022.08.22

[NestJS] Swagger에서 refs 안될 때

Swagger에서 DTO를 이용해 서버 응답 값을 정의하는 기능이 있는데 직접 가져오는게 아닌 경로를 작성해주면 해당 경로에 있는 클래스를 가져와 붙여주는 기능이 있다. 경로는 분명히 맞는데 안되는 경우가 있어서 정리해둔다. 해결 방법은 간단하다. 아래처럼 createDocument의 extraModels에 추가로 정의 해주면 된다. const document = SwaggerModule.createDocument(app, options, { extraModels: [ DogCreateDTO, DogUpdateDTO ], }); SwaggerModule.setup("api-docs", app, document, { swaggerOptions: { defaultModelsExpandDepth: -1, pe..