하루의 회고는 일기에, 주별 및 월별 회고는 노션에 기록하고 있지만, 정작 연말 회고는 작성하지 않았다. 회고의 중요성을 누구보다 잘 알고 있는 내가 연말 회고를 작성하지 않았다는 것은, 과거와 경험으로부터 배움을 얻으려는 노력이 부족했음을 의미하기도 하다. 우선순위에서 밀리거나 바쁘다는 이유로 연말 회고를 미뤄왔지만, 앞으로는 꼭 작성하여 한 해를 돌아보는 시간을 가지려 한다. 회고는 회사와 개인 이렇게 두 부분으로 나누어서 작성해 보려고 한다. 회사1. 회사 경영 위기2024년 12월, 나는 희망퇴직을 했다. 글로벌 경제 위기와 내수 침체, 회사 게임 경쟁력 악화 등으로 인해 경영 위기가 심화되었다. 진행 중이던 프로젝트는 중단되고, 분사와 권고사직이 이어지는 상황에서 2024년 11월, 희망퇴직 프..
간헐적으로 WebRTC 연결이 안되는 경우가 있었습니다.시그널링 서버를 통해 offer, answer, candidate 메세지를 잘 주고 받은 이력도 확인하였습니다. 특이한 점은 발견하지 못했습니다. 서버에는 문제가 없었기에 프론트엔드를 확인해 보았습니다. 아래와 같은 오류가 확인되네요. Failed to execute 'addIceCandidate' on 'RTCPeerConnection': The remote description is null간헐적으로 발생하니 해당 에러를 발견하기 까지 꽤 긴 시간을 할애하였습니다. (프론트엔드에서 발생하는 예외도 서버에서 로그 관리를 해야 하는 이유이기도 합니다.) 오류 메세지를 읽어보면 remote description이 null이라서 addIceCandid..
p.29금융지식이 풍부한 부모는 아이들 이름으로 주식 계좌를 만들어주고 아이가 확인할 수 있게 합니다. 덕분에 아이도 주식의 개념을 명확히 알게 되지요. 이 돈은 아이가 성인이 되면 원하는 일을 시작할 수 있는 종잣돈이 됩니다. 어려서부터 금융지식을 직접 체득하고 종잣돈을 가지고 있는 아이와 그렇지 않은 아이의 미래는 과연 얼마만큼 차이가 날까요?두 아들 명의로 되어 있는 주식 계좌가 있다. 주식 개념을 이해시키기에는 아이들이 아직 어리다. 주식의 개념을 이해시키기 위해서는 온라인 상에서의 돈 개념을 먼저 이해해야 한다. 저금통에 모아 놓은 돈들을 은행에 입금시켜 입출금 통장을 만들어 주자. 입출금 통장을 가지고 있으면 온라인 상에서의 돈 개념을 어느순간 이해할 수 있게 된다. 그 다음이 주식이다. 주식..
집에 있는 NAS에 TURN 서버를 구축해 보았습니다. TURN 서버는 https://hub.docker.com/r/coturn/coturn 4.6.3 도커 이미지를 이용하였습니다. 서버 구축 및 실행우선 turnserver.conf 설정 파일을 생성합니다.# TURN 서버가 클라이언트 요청을 수신할 포트 설정listening-port=3478# TURN 서버에서 TLS 암호화된 요청을 처리할 포트 설정tls-listening-port=5349# TURN 서버가 미디어 데이터 전송에 사용할 동적 포트 범위min-port=49100max-port=49900# WebRTC에서 사용되는 패킷의 지문(Fingerprint) 계산을 활성화fingerprint# 인증을 위한 Realm 설정 (서버 도메인 또는 IP..
11년 동안 다닌 게임 회사에서 희망퇴직을 하게 되었습니다. 아내와 두 아들을 둔 40대 가장이 왜 이런 결정을 하게 되었는지, 그리고 앞으로의 삶을 어떻게 그려나갈지 정리해보는 시간을 가져보려 합니다. 더불어 20대 초반부터 지금까지 걸어온 길을 되돌아보며 삶의 변곡점들을 되짚어보려고 합니다.이 글에서는 첫 번째 회사부터 네 번째 회사인 엔씨소프트에 이르기까지의 여정을 다루고, 그 과정에서 마주했던 중요한 변화와 결단의 순간들에 대해서도 이야기해 보겠습니다. 이를 통해 제 삶의 흐름을 정리하고, 앞으로 나아갈 방향을 찾는 계기로 삼고자 합니다. 제 인생의 첫 번째 변곡점첫 변곡점은 군대에서 시작되었습니다.철부지나 다름없는 저는 군대에 입대하게 되고, 군대에서 철이 들어 제대하게 되었습니다.어떻게 철이..
요즘 생활체육 대회를 스크래핑 하는 사이트를 만들고 있습니다.대부분의 사이트는 정형화된 형식으로 대회 일자를 제공하고 있지만 특정 사이트는 아래와 같이 비정형화된 형식으로 대회 일자를 제공하고 있습니다.전국 직장 근로자들에게 생활탁구의 참여도를 높이고 건전한 여가활동은 물론 공동체 의식의 함양으로 동료 간의 화합과 건강한 직장문화를 만들어 가는데 이바지 하고 관광 단양을 전국에 홍보하여 지역발전에 기여 하는데 그 목적이 있다. 2. 행 사 개 요- 대회명 : 제1회 단양 직장대항 전국오픈탁구대회- 일 시 : 2024년 12월 14일(토) ~ 15일(일) 9시 30분- 장 소 : 단양국민체육센터- 주 최 : 단양군탁구협회- 주 관 : 단양군탁구협회- 후 원 : 단양군청, 단양군의회, 단양군체육회, 일시 ..
TURN 서버를 통하여 Realy 통신하는 원리에 대해서 설명해 보겠습니다.Peer A의 영상을 Peer B에게 전송한다는 가정이고, TURN 서버를 통한 relay 통신을 실험하기 위해서 host, stun 후보군은 제외하였습니다.턴서버의 주소는 172.28.0.10 입니다. 실제 서비스 환경에서는 public ip 로 되어 있지만 여기서는 로컬에 턴서버를 구축한 관계로 사설 아이피 대역으로 설정되어 있습니다. ICE Candidate Type Relay 후보 추출WebRTC 핸드쉐이킹이 시작되면 Peer A에서 relay candidate를 추출하게 됩니다.candidate:4028790502 1 udp 33562623 172.28.0.10 49160 typ relay raddr 0.0.0.0 rp..
요즘 사이트를 하나 만들고 있습니다. 아직은 사용자가 많지 않아 집에 있는 NAS에서 운영하고 있는데요.한 대의 NAS 서버에 웹 애플리케이션과 DB 서버가 동작하고 있습니다. 사이트에 여러 생활체육 정보들이 차곡차곡 쌓여가면서 한 가지 우려사항이 생겼습니다. 그건 바로 데이터 입니다. 백엔드에서는 생활 체육 관련된 사이트들을 돌아다니면서 새로운 대회들을 스크래핑 하고, 데이터를 가공한 후 DB에 저장하고 있습니다. 이런 데이터들이 점점 많아지면서 데이터 백업에 대한 중요성 또한 높아졌습니다. 지금부터는 DB 백업을 어떻게 하고 있는지에 대해서 기록해 보려고 합니다. 우선 DB 백업 스크립트를 만들어야 합니다.db_backup.sh 파일을 만들고 아래와 같이 스크립트를 작성하였습니다.#!/bin/bash..
저는 업무 할 때 반복적인 일이 발생하면 무조건 자동화 스크립트를 만들어서 활용합니다. 여러 자동화 스크립트를 만들어 가면 확실히 중요한 업무에 더 많은 에너지와 집중력을 쏟아 부을 수 있습니다. 궁금한게 있었습니다."나는 왜 반복적인 작업들을 귀찮아 하고, 자동화를 원하는 걸까?" 이 질문에 대해 고민하다가, 제 성향이 부지런함과 효율을 중시하기 때문이라는 결론에 도달했습니다.자동화 스크립트를 만들기 위해서는 문제를 해결하기 위한 방안을 깊이 생각해야 하고, 이를 구현하기 위해 노력을 들여 프로그램을 만들어야 하기 때문입니다. 하지만 '남이 만든 그릇에 내 인생을 담지 마라' 책을 읽고 난 후 내가 자동화 스크립트를 계속 만들려고 하는 이유를 깨닫게 되었습니다.책에 아래 문장이 있습니다.p.17"게으름..
서버가 쿠버네티스 환경으로 이전하게 되면서부터 client ip 추출 이슈가 발생하기 시작했습니다. 203.0.113.1 와 같이 클라이언트의 공인 아이피가 잘 추출되었는데 서버 환경이 바뀌면서부터 203.0.113.1, 192.168.1.100 와 같이 두 개의 아이피가 추출되는 현상이였습니다. 아이피 추출 코드String clientIp = request.getHeader("X-Forwarded-For"); 기존 서버 구성은 다음과 같았습니다.새로운 서버 구성은 다음과 같습니다. 문제의 원인쿠버네티스 환경으로 이전하게 되면서 web server 앞단에 k8s proxy 가 추가되었습니다. client에서 L4 스위치로 패킷이 전달되면 L4 스위치는 X-Forwarded-For 헤더에 클라이언트 아이피..
본, 깨p.10요건대 부모가 아이들에게 가르치고 전해야 하는 것은 숙달에 이르는 보편적 원리다. 어떤 사회, 어떤 자리에 놓이더라도 그곳에서 숙달의 경지에 이르는 이치를 간파하여 내 것으로 만들어 나가는 힘. 아이들에게 이 힘을 길러줄 수 있다면, 부모로서 느끼는 불안감은 상당 부분 덜게 될 것이다. 어떤 분야에서든 숙달의 경지에 이르는 요령을 한번 터득하면 낯선 일에도 자신감을 가지고 임할 수 있으며, 이는 결국 성공으로 이어진다. p.41'기술을 훔치는 힘'은 '기술을 훔치려는 의지'가 있어야 강해질 수 있다. 단순한 모방과 훔쳐서 내 것으로 만드는 것의 차이가 바로 이 부분이다. 기술을 훔치려면 그저 눈으로 보기만 하는 것으로는 부족하다. 범위를 좁혀 반드시 훔쳐야 할 핵심을 찾아내야 한다. 이 핵..
브라우저에서 https://google.com URL을 호출 했을 때 패킷이 어떻게 만들어지고 전송되는지를 알아보겠습니다.1. 도메인 이름을 IP 주소로 변환 (DNS 조회)브라우저는 google.com 도메인에 대한 IP 주소를 알아내기 위해 DNS 서버에 요청합니다. UDP 패킷을 만들고, DNS에 질의하면 DNS 서버가 응답을 해줍니다. DNS 서버가 응답해준 UDP 패킷에는 google.com 도메인에 대한 IP 정보가 담겨져 있습니다. 그리고 IP 정보를 로컬 PC의 DNS 캐시에 저장합니다. 테스트를 한번 해보겠습니다. 브라우저에서는 자체적으로 관리하는 DNS 캐시가 있기 때문에 윈도우에서 테스트 하는 방법으로 해보겠습니다. 윈도우 PowerShell 프로그램을 실행하고, ping google..
본, 깨p.33왜 특정한 몇몇만이 얼토당토않은 자기합리화로 그런 잔인하고 극악무도한 범죄를 서슴지 않고 저지르는 것일까? 그것은 바로 위에서 언급한 고립감 때문이다. 공동체에서 나의 존재가 소외되어 있다고 느끼는 사회적 배제감, 자신만이 고립되어 있다고 느끼는 이 생각들이 무력감으로 이어지고, 이 무력감이 분노로 치환되는 것이다. p.79세상에는 그 어떤 사건도 가벼운 사건은 없다. 보통 '살인 사건과 사기 사건은 다르지 않나?'라고 생각할 수 있다. 이것은 피해자의 입장이 되어보지 않아서 쉽게 하는 말이다. 피해 당사자가 되어보지 않으면 누구도 쉽게, 그리고 가볍게 범죄의 경중을 따질 수 없다. 그 어떤 범죄도 사소하고 가벼운 것은 없다. p.82이론과 실제는 반드시 같은 거야. 틀리다면 둘 중에 하나..
NAT의 종류를 알고 있더라도 실제 WebRTC 에서의 홀펀칭을 대입해 보면 생각보다 복잡하고, 머릿속에서 잘 정리되지 않습니다.이때 가장 쉽게 이해하는 법은 NAT의 매핑 테이블을 기준으로 홀펀칭을 이해하는 방법이 가장 좋다고 생각합니다.각 NAT별 홀펀칭을 설명하기에 앞서 Peer에서 UDP 소켓을 생성하여 패킷을 전송하고 수신하는 코드를 잠시 살펴보겠습니다. Java를 예제로 한 샘플 코드입니다.import java.net.DatagramSocket;import java.net.DatagramPacket;import java.net.InetAddress;public class UdpClientExample { public static void main(String[] args) { ..
본, 깨p.69새로운 것을 선택하기 전에 과거의 것은 모두 훌훌 털어 내야 한다. 하지만 우리는 그 끝에서 과거의 틀은 그대로 유지하려는 경향이 있다.중요한 선택을 해야 하는 시기에 항상 발목을 잡는 것은 과거에도 그리고 지금에도 내가 누리고 있는 것들이다. 과거에 연연하지 말고, 앞으로 5년 10년 뒤의 내 모습을 그려보자. 그럼 선택이 좀 더 쉬워질 것이다. p.70밤에는 아무리 늦게까지 깨어 있어도 이미 몸과 마음이 지쳐서 스트레스 해소거리를 찾을 수밖에 없습니다. 반면 일찍 자고 다음날 일찍 일어나면 정신은 맑고 몸은 에너지를 회복합니다. 그리고 그 좋은 에너지를 가장 먼저 내가 하고 싶은 일에 쓰는 것이죠.중요한 일, 우선 순위가 높은 일을 가장 먼저 해야 한다. 에너지가 충만한 시간에 중요한 ..