본문 바로가기

제안&정리

(48)
Client to Server Network 여정 처음 프로그래밍을 접하는 경우에 네트워크는 정말 생소합니다. 관련해서 쉽게 이해할 수 있도록 사용자가 임의의 사이트를 조회하는 과정을 점점 더 심화해서 보는 방법을 통해 설명해 보려고 합니다. Level 1부터 7까지 있으며 Level 2 부터 있는 밑줄은 전 단계에 비해 추가된 부분을 의미합니다. 제가 네트워크 전문가가 아니다보니 작성한 내용 중에 정확하지 않은 부분이 있을 수 있는데 확인 되는 것들은 댓글 부탁드립니다. 자신에게 해당하는 레벨로 가서 보기 시작하는 것을 추천드립니다. 레벨마다 적혀 있는 태그(일반인 등)는 쉬운 이해를 위해 달아 놓은 것으로 정확하게 매칭되지 않을 수 있다는 점 참고 부탁드립니다. Level 1 (일반인) www.domain.com 을 친다. 화면이 나온다. Level..
쉽고 간단하게 시작하자 - Architecture & Stack 무조건 새롭고 어려운 것.. 내가 했던 실수! 개발을 하다 보면(어쩌면 무슨 일을 하던지) 새로운 것, 새로운 개념, 어려운 것(있어 보이는 것), 이상적인 것이 더 좋아 보이며 그것만을 추구하는 실수를 할 때가 있습니다. 다른 분들은 안그러실 수 있지만 저는 그랬습니다. 우선 첫회사에서 생긴 여러가지 버그를 보면서 테스트 코드가 없는 것이 원인이라고 생각해, TDD를 도입하자고 했고 대대적인 리팩토링을 통해 테스트 코드를 도입하려고 했습니다. 시도는 좋았지만.. 바쁜 일정을 고려하지 않고 이상만 쫓다 보니 별 성과를 거두지 못했습니다. 주로 문제가 되는 부분에 대한 간단한 e2e 테스트를 작성하는 것부터 시작했으면 좋았겠습니다. 또 새로운 회사에서 기술 스택을 새롭게 정할 수 있는 기회가 있었습니다. ..
GitLab Flow를 통한 인싸이트 GitLab Flow를 소개하는 글의 내용이 좀 긴편이라 상단 주요 내용만 읽었다가 시간을 내 처음부터 끝까지 정독을 하였습니다. 내용이 정말 좋았는데 저에게 좋았던 몇가지 포인트를 정리하여 소개합니다. 우리 팀에 맞는 Flow를 찾아라 Git은 정말 좋은 버전 관리 도구입니다. 다양한 방법 그리고 원하는 방식으로 사용할 수 있는데 이로 인해 팀에 좋은 규칙이 없다면 복잡성과 비효율성이 매우 커지게 됩니다. 이러한 문제를 해결하기 위해 처음 제안된 것이 Git Flow입니다. Git Flow는 배포 주기가 긴 경우 팀의 규모가 매우 크고 많은 기능을들 함께 개발하는 경우 CI와 테스트 자동화가 안 되어 있는 경우 에 적합합니다. 하지만 배포 주기가 짧은 경우 각자 분리된 환경에서 일하는 비교적 작은 여러..
Jest Coverage Meaning - Stmts, Branch, Funcs, Lines 사이드 프로젝트를 진행하면서 Github Action을 이용해 Test Coverage가 어느 이상 되지 않으면 PR이 자동으로 닫히도록 하려고 했습니다. NestJS를 사용하고 있고 테스트 프레임워크는 Jest를 사용하고 있습니다. Jest는 아래와 같이 4개의 다른 기준으로 Coverage를 보여줍니다. 각 기준은 아래와 같습니다. Stmts Statements의 약자로 const a = 3;과 같은 하나의 지시문(instruction)을 기준으로 Coverage를 계산합니다. 해당 파일에 전체 10개의 지시문이 있는데 3개만 실행이 되었다면 Statements Coverage는 30%입니다. Branch 처음에 git의 branch로 오해를 했지만 전혀 상관이 없습니다. 프로그램 실행 흐름 상 br..
Github vs Jira 사이드 프로젝트를 진행하면서 이슈 관리 툴로 어떤 것을 써야 할 지 고민을 하게 되었습니다. 후보군으로는 Github의 Issue와 Jira가 있었고 비교한 장단점을 아래와 같습니다. Github 장점 커밋과 PR에 이슈 번호를 #이슈번호를 통해 추가하면 해당 이슈로의 링크를 쉽게 걸 수 있다. 코드와 가까운 곳에 관련 이슈가 존재함으로써 현재 해당 레파지토리의 이슈를 쉽게 파악할 수 있다. 단점 Project 기능을 통해 칸반보드를 사용할 수 있지만 1~2주 단위의 Sprint 개념을 적용하기가 힘들다. 레파지토리 단위로 관리가 되기 때문에 여러 레파지토리의 이슈를 통합적으로 관리할 수 없다. Jira 장점 브렌치, 커밋, PR에 티켓 번호만 포함시키면 Jira 대시보드에서 해당 이슈와 관련된 것을 쉽..
Docker MySQL 커스텀 데이터 추가하기 mysql을 docker로 사용하다보면 데이터 추가, 유저 추가 등 기본 설정을 추가한 이미지를 만들고 싶은 경우가 많습니다. 이런 경우에는 원하는 shell script 또는 sql 파일을 docker-entrypoint-initdb.d 로 복사하면 됩니다. 자세한 부분은 Mysql Docker 공식 페이지의 Initializing a fresh instance 을 참조하시면 됩니다. 저는 아래 디렉토리 구조와 Dockerfile을 통해 적용하였습니다. 디렉토리 구조 Dockerfile FROM mysql:8.0 COPY /docker-entrypoint-initdb.d /docker-entrypoint-initdb.d Originally written in 2021.10.10
Easy Docker with MongoDB 일을 하면서 Docker를 쓰면 좋겠다 싶었지만, 왠지 제대로 해야 할 것 같은 마음에 계속 미루고 있었습니다. 그러던 차에 기존 Document DB로 운영하고 있던 것을 비용감소를 위해 EC2로 옮기게 되었는데 이 과정에서 Cluster를 구성해야 할 일이 생겼습니다. EC2에 직접 몽고DB를 설치하여 운영하고 Scale-out이 필요할 때는 미리 떠 놓은 AMI를 활용해 인스턴스를 추가하는 방법이 있습니다. 하지만.. 이렇게 진행하는 경우 정정 클러스터 구성을 찾기 위해 테스트를 진행하는 것이 시간이 정말 많이 들어 갑니다..!! 그리고 아무래도 이후에 다른 운영체제 또는 회사 내부에 있는 개발서버에 동일한 환경을 구성하기란 참 어렵습니다. 그래서 이 기회에 docker를 사용하여 실제 클러스터 생..
JAVA 8을 사용하는 당신에게 제안하는 JAVA Latest 이 글은 잘 안되고 있는 것을 비판하기 보다는 저를 포함한 보다 많은 사람들이 생산성을 높이는 것에 관심을 두고 새로운 것을 도전하도록 하기 위해 작성되었습니다. 만약 석기시대에 사람 100명과 철기시대 사람 100명이 각 시대의 무기를 가지고 전투를 한다면 누가 이길까요? 석기시대 사람들이 무기 활용을 기가 막히게 잘 하고 철기시대 사람들은 대부분 아직 무기를 제대로 다룰 줄 모르는 경우에는 예외가 있을 수 있겠지만 대부분은 철기시대 사람들이 전투에서 이길 것입니다. 이 이야기를 프로그래밍 언어로 가져와 보겠습니다. JAVA 6을 사용하는 팀과 JAVA8을 사용하는 팀 중 누가 장기적으로 더 높은 생산성을 낼까? 사람의 구성, 팀의 개발 프로세스에 따라 다르겠지만 대부분은 JAVA 8을 사용하는 팀이 ..