전체 글

✈️
Algorithm/CPP

[C++/LeetCode]Rotate Array(벡터 값 회전하기)

저번 글에서 언어는 도구일 뿐이라고 했는데 언어가 도구인 것은 맞다. 하지만 전기톱으로 나무를 베는 것은 쉽지만 커터 칼로 자르면 어려운 것처럼... 파이썬으로 문제를 풀다가 C++로 문제를 푸는게 어려운 건 당연한게 아닐까...? C++이 성능이 더 좋다해도.. vi도 커맨드를 알면 정말 누구보다 편하게 쓸 수 있지만.. 기능을 익히는데 시간이 오래 걸리니까 말이다..(=실력 부족) 문제: https://leetcode.com/problems/rotate-array/ Rotate Array - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get p..

Algorithm/CPP

[C++/LeetCode]주식을 사고 팔기 가장 좋은 시기 II

뭔가 이 문제를 풀어보니까 알고리즘을 푸는데 언어는 문제가 아닌거 같기도 하고... 일단 언어는 문제를 풀기 위한 도구일뿐이고 결국에 핵심 로직은 똑같으니까..🙄? class Solution { public: int maxProfit(vector& prices) { int profit = 0; for (int i = 1; i < prices.size(); i++){ profit += max(prices[i]-prices[i-1], 0); } return profit; } }; 한 번의 거래로 낼 수 있는 최대 이익을 찾는 문제인데 예를 들어서 [7, 1, 5, 3, 6, 4]인 경우, 1일 때 사서 6일 때 팔면 최대 이익을 산출 할 수 있다. 브루트 포스로 하면 c++은 런타임 에러가 나지 않을 수도 ..

Algorithm/CPP

[C++/LeetCode] 정렬된 배열(벡터)에서 중복 제거하기

C++에서 손을 떼고 Python만 한지 4년차... C++로 코딩테스트를 보게 됐다. 기본 문법만이라도 익숙해져보려고 하지만, 입출력에서 부터 오류가 나고 계속 틀린다😥.. 그래도 할 수 있는 한 계속해서 노력해보겠지만... 떨어지면 명백하게 내 실력 부족인거니까 미련을 갖진 않으려 한다.. 미련 갖고 후회 하기보단 계속 공부를 해야지.. 코딩 테스트에서 자주 나오는 문제를 풀되, 기본 문법에 익숙해져야 하니까 뭘 풀까 고민하다가 LeetCode Top Interview Questions 를 풀기로 했다. 첫번째 문제는 정렬된 배열에서 중복을 제거하는 문제였다. 파이썬으로 풀 때는 정말 보자마자 바로 풀었는데, C++로 풀어보니 레퍼런스도 참고하고 문법을 찾아보다가 한시간이 걸렸다.. class Sol..

DevOps

Vagrant vs. Terraform/Docker(베이그란트와 테라폼, 도커 비교)

예전에 Terraform 글을 쓰면서 vagrant와 terraform을 가볍게 비교하고 넘어간 적이 있다. Vagrant 와 같은 도구는 데모용 가상화 환경을 구축하기 위해 존재 하지만 프로덕션 환경과 더 밀접하게 일치하는 실제 인프라에서 소프트웨어를 데모하는 것은 여전히 ​​매우 어렵다는게 요지였는데, 이는 Vagrant가 소수의 버추얼머신을 사용하는 개발 환경을 위해 개발된 것이고, Terraform은 실제 인프라를 관리하기 위해 설계/개발된 것이기 때문이다. [DevOps/02]Terraform Use cases 테라폼을 사용하는 이유 테라폼을 사용하는 이유 1. Heroku App Setup - codify the setup required for a Heroku application, ensu..

DevOps/Docker

[도커]도커 이미지 만들기(Dockerfile, commit)

1. 도커 이미지 도커 이미지는 프로그램을 실행하는데 필요한 설정과 소프트웨어 종속성(프로그래밍 언어 런타임 및 기타 소프트웨어 라이브러리의 특정 버전 등)을 가지고 있다. 여러개의 레이어로 되어있다. 도커 이미지는 여러개의 레이어가 쌓여서 만들어진다. 베이스 이미지는 이미지의 기반이 되는 부분이다. 이미지에 무언가가 추가 되면(변경 사항이 생기게 되면) 레이어가 추가되게 되는데, 이를 레이어 캐싱이라고 한다. 2. 도커 이미지 만들기 도커 이미지는 도커 파일을 사용하거나 커밋을 사용하면 만들 수 있다. 🔽 예제 container name: python-os image name: centos:7 python package install 후 /app dir에 마운트 working dir, volume 모두..

DevOps/Docker

[도커]도커에서 레디스 사용하기

뉴스를 돌아다니다가 Redis가 나와서 머리를 싸맸다. '분명 어디선가 들어본 적 있는 것 같은데...'하고 고민하다가 깨달았다. 가장 최근으로는 두 달 쯤 전에 2021년 4월 DBMS 인기 순위라는 글을 작성하면서도 봤고, 학부 데이터베이스 강의를 들을 때 인메모리 데이터베이스로 몇 번 언급 됐다. Redis(레디스)는 Remote Dictionary Server의 약자로, "키-값" 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터베이스 관리 시스템(DBMS)이다. 4월에도 Key-Value Database 중에서 1위였는데, 이번 달도 마찬가지로 1위다. 레디스를 언제 사용하면 좋은지는 이 브런치 글에 잘 정리되어 있다. 레디스(Redis)는 언제 어떻게 사용하는 게..

Trial and Error/Etc

게임 패치 시스템 관련 글 정리

게임 패치 시스템과 관련된 글 8개를 모으고 정리했다. 게임 패치 시스템이 기본적으로 어떻게 동작하는지에서부터 효율적으로, 잘 서비스를 하기 위해 CI/CD를 어떻게 하는지 이해를 하는데 도움이 된 글들이다. Those who cannot remember the past are condemned to repeat it - George Santayana 과거에서 배우지 못한 사람은 과거를 되풀이한다는 말이 있다. 새로운 기술들은 확실히 과거의 기술보다 여러모로 개선된 점들이 있지만, 더 복잡하고 어렵기도 하다(물론 신기술이 더 쉬울 때도 있음). 그래서 쉽거나 조금 더 익숙하다는 이유로 과거의 기술을 선택하면 처음에야 편하지만 시간이 지날수록 새로운 기술에서는 이미 해결한 문제를 맞닥뜨리게 되기도 한다😦...

DevOps/Docker

[도커]docker image rm vs docker rmi

메뉴얼(링크)에 따르면 docker rmi 는 docker image rm 의 alias로 동일한 커맨드다.

DevOps/Docker

[도커]헷갈리는 기본 명령어(create, start, run, stop, rm)

도커 컨테이너 생명주기 (1) docker stop vs docker kill [docker stop → SIGTERM → SIGKILL → main process] docker stop은 sigterm을 사용해서 리소스 해제, 상태 저장 등 시스템 종료를 위해 프로세스가 정리하는 시간을 준 후 sigkill 을 사용해서 컨테이너를 멈춘다. [docker kill → SIGKILL → main process] docker kill은 sigterm을 사용하지 않고 즉각 컨테이너를 멈춘다. * signal(신호) 일반적으로 Unix, Unix 계열 및 기타 POSIX 호환 운영 체제에서 사용되는 제한된 형태의 프로세스 간 통신 (IPC)이다. 이벤트를 알리기 위해 프로세스 또는 동일한 프로세스 내의 특정 스..

DevOps/Docker

[도커]네트워킹

도커는 운영체제 수준 가상 소프트웨어를 활용하여 사용자가 모든 라이브러리 종속성이있는 도커 컨테이너에서 애플리케이션을 개발, 배포, 관리 및 실행할 수 있도록 지원하는 플랫폼이다. 도커 컨테이너는 애플리케이션을 실행하는 데 필요한 모든 종속성 (프레임 워크, 라이브러리 등)을 포함하는 독립 실행형 패키지다. 결국 프로세스를 분리해 독립적으로 실행될 수 있도록 하는 독립성이 도커의 본래 목적이다. 도커에서 네트워크는 도커 컨테이너에게 완전한 격리를 제공하기위해 사용된다. 도커 네트워킹의 장점은 아래와 같다. 1. They share a single operating system and maintain containers in an isolated environment. - 단일 운영 체제를 공유하고 격리된..

회사와 일상 그 사이

간절히 원하는 무언가가 점점 멀어질 때

사랑, 존경 그리고 행복과 같이 인생에서 원하는 무언가를 위해 간절하게 노력하는 것은 종종 외로움, 허탈함, 비참함과 같은 반대의 결과를 가져온다. - Mark Manson 미국의 대외적으로 잘 알려진 특수 부대 중 하나인 네이비 씰(Navy SEAL)에는 'drown-proofing(익사 방지)'이라는 훈련이 있다고 한다. 손은 등 뒤로, 다리는 하나로 묶어서 약 2.75m 깊이의 수영장에 던져 5분 동안 생존하는 것이 이 훈련의 목적이다. 대부분의 다른 네이비 씰의 훈련처럼, 많은 생도들이 익사 방지 훈련에서도 탈락하고 심지어는 다수가 사망했다고 한다. 하지만 어떤 사람들은 해낸다. 바로 두 가지의 'counterintuitive lessons(이해하기 어려운 교훈)'을 이해한 사람들이다. 1. Th..

DevOps/Docker

[도커]데이터 관리(Bind Mount, Volume, Tmpfs Mount)

0. 데이터 관리 도커 튜토리얼(링크)에서는 간단한 ToDo 애플리케이션*의 빌드, 업데이트, 공유를 직접 해보며 도커의 컨셉을 이해한다. 튜토리얼 Part 2-4를 수행하면서 작성한 ToDo 애플리케이션을 실행할 때마다 초기화된다. 튜토리얼 Part 5인 Persisting the DB(링크)에서는 데이터를 영구적으로 저장하는 두 가지 방법(Bind Mount, Volume)을 소개한다. 이미지는 여러 개의 레이어로 이루어져 있다. 기본적으로 이미지로 컨테이너를 실행해 파일을 생성하거나 삭제하면 새로운 레이어를 만들어 내용을 저장한다. 이 내용은 컨테이너와 함께 삭제된다(⭐컨테이너의 휘발성). 컨테이너가 삭제된다고 내부의 중요한 데이터까지 삭제되면 안 되므로 사용하는 두 가지의 대표적인 방법이 Bind..

박한결
저녁 하늘의 종이 비행기