전체 글

회고록

갑진년 연초 회고록 : 게임회사의 게임서버개발자 1년 돌아보기

갑진년 맞이 연초 회고록을 작성해 보려고 한다. 2023년 1월, 모바일 게임 회사에 지원을 하였다. 공고에는 php, golang, node.js, c, c++, docker, kubernetes, helm, redis, memcached, mysql 등과 같은 기술들이 적혀있었다. 공고를 보고 게임회사에서 서버 개발자는 어떤일을 하는지 몰랐어서, 검색을 해본 결과,, 두종류의 서버로 나뉘었다. 1. 실시간 기능이 필요한 소켓 서버 2. 일반적인 웹 서버 1번의 경우에는 예를 들자면, MMORPG인 리니지와 같이 수만명의 연결을 유지해 상호작용이 필요한 서버이고, 2번의 경우를 예를 들자면, 턴제게임인 세븐나이츠와 같이 혼자 플레이 하는 서버이다. (pvp와 같이 실시간 대전 서버의 기능이 필요하다면 ..

Dev/Docker

[Docker] Dockerfile의 COPY와 리눅스 cp의 차이

Dockerfile의 COPY와 Linux의 cp명령어는 복사하는 기능은 똑같지만, 폴더를 풀고 넣느냐 아니냐의 차이점이 있다. Docker의 COPY : 복사하려는 디렉토리를 포함하지 않고 복사 Linux의 cp : 복사하려는 디렉토리까지 포함해서 복사 이게 무슨 말일까..? 예를 들어 알아보자, 아래와 같은 Dockerfile이 있다고 할 때, ./src/game폴더에서 ./origin2로 옮기는 경우, game폴더가 풀어져서 game폴더 안에 존재하는, controller만 도커 이미지 경로로 전달이 된다. 결과로, 아래와 같이 도커 이미지 안에 들어가서 경로로 확인해보면, controller만 들어가 있는걸 확인할 수 있다. 반대로, 리눅스에서 cp를 사용하는 경우, 폴더가 풀어지지 않고 복사하려..

Dev/Git

[Gitlab] 정규표현식 사용해 브랜치 판별하기

깃랩의 ci관련 yml파일을 분석하던 도중 발견한 궁금증 /^release\// 의 의미는 무엇일까? 먼저, 양쪽의 / +^release\/ + / 슬래시는 패턴구분자의 시작을 의미한다. ^는 문자열의 시작을 의미한다. 예를들어 ^release의 경우 항상 release로 시작해야 매칭된다. 뒤의 \(역슬래시)+ 메타문자는 메타문자를 포함하는 문자를 찾을 경우 역슬래시를 포함해 작성한다. 메타문자란? 단순 문자가 아닌 다른 용도로 사용되는 문자이다. 예를들자면, /^release\// 는 다음과 같은 예시에 사용될 수 있다. release/23-02, release/22-11 ….. 브랜치를 판별할 때 정규표현식을 활용하는 방법에 대해 알 수 있었다! [출처] : https://namu.wiki/w/정규..

Dev/Linux

[Linux] 와일드카드, Asterisk

깃랩 ci관련 yml 파일을 분석하던 도중 발견한 궁금증, 폴더경로를 설정할 때 **과 *의 차이는 무엇일까? ** : 부분 경로를 찾음 (recursive folder) *: 0개 이상의 문자를 찾음 즉, src/lib/**/* → src/lib경로의 디렉토리 및 하위 디렉토리의 모든 파일을 뜻한다. 활용해보면, src/lib/**/*.jpg → 디렉토리 및 하위 디렉토리의 모든 .jpg파일을 포함 src/lib/**/img*.jpg → 디렉토리 및 하위 디렉토리의 img로 시작하는 모든 .jpg파일을 포함 src/lib/jpgs/ → 디렉토리에서 이름이 jpgs로 끝나는 모든 파일을 포함 조금이라도 알고 사용하는 것이 무엇보다 중요하다! [출처] : learn.microsoft.com/ko-kr/vi..

Dev/Kubernetes

[Kubernetes] 패키지매니저 사용이유(helm, apt, npm, brew)

쿠버네티스에 대해 학습하던 도중, helm에 대해 접할 기회가 생겼고, helm이란 쿠버네티스의 패키지 매니저라는 걸 알게 되었다. 여기서, 패키지 매니저란 무엇인지 고민하게 되었다. 찾아보니, 자주 사용하던 apt, npm, brew 모두 패키지 매니저라는 사실을 알게 되었다. 리눅스에서 소프트웨어를 설치할때 사용하던 apt(advanced package tool), node.js와 관련된 패키지를 설치할때 사용하던 npm(node package manager), macOS에서 소프트웨어를 설치할때 사용하던 brew, 모두 패키지 매니저이다. 왜 사용하는 걸까? -> 많은 대부분의 패키지들은 다른 패키지가 설치되어 있어야만 제대로 동작하므로, 기존 패키지를 제대로 동작시키기 위해 필요한 dependen..

Dev/CS

[CS] 직렬화(Serialization), 마샬링(Marshalling)

Redis를 사용하는 코드를 분석하던 도중 직렬화와 관련된 설정이 있어, 이를 이해하고 넘어가고자 한다. 직렬화란 무엇일까? 직렬화란 Serialization으로, 데이터 구조나 객체를 파일의 형태 등으로 저장하거나 통신하기 쉬운 포맷으로 변환하는 과정이다. Serialization의 Serial은 ‘연속된’ 이라는 뜻으로, Serialization란 객체를 ‘연속된’ Byte Stream으로 변환하는 과정을 의미한다. Byte Stream으로 변환하는 과정이란, Primitive한 데이터로 변조하는 작업을 의미한다. 왜 Primitive한 데이터로 변조를 하는 과정이 필요할까? 객체는 여러가지의 자료형이 있는데, 그 중에서도 주소값을 가지고 있는 정보는 다른 시스템으로 보내봤자 의미가 없다. 즉, ‘주..

friendshipkim97
어떤 초콜릿을 꺼낼 건지