WIKI
9 posts
함수형 프로그래밍

함수형 프로그래밍 (Functional Programming, FP)은 순수 함수를 조합하고 공유 상태, 변경 가능한 데이터 및 부작용을 피하여 소프트웨어를 구축하는 프로그래밍 패러다임입니다. 이는 명령형 프로그래밍과는 대조적인 선언적 프로그래밍 스타일이다. 개요 함수형 프로그래밍은 1930년대 람다 계산법(Lambda Calculus)에 근간을 두고 있으며, 1950년대에 개발된 Lisp 언어를 통해 처음으로 실용화되었다. 이 패러다임은 수학적 함수의 개념을 중심으로 프로그래밍을 구성하며, 상태 변경과 데이터 변경을 피하는 것을 강조한다. 핵심 개념 순수 함수 순수 함수는 다음 특성을 가진 함수를 말한다. 같은 입력에 대해 항상 같은 출력을 반환한다. 부작용(side effects)이 없다. 즉, 함수 외부의 상태를 변경하지 않는다. 예시 (JavaScript): 불변성 불변성은 생성된 후에 상태를 변경할 수 없는 객체의 특성을 말한다. 함수형 프로그래밍에서는 데이터 변경 대신 …

August 01, 2024
WIKI
서버 문제를 디버깅하기 위한 리눅스 명령어

문제의 원인을 조사하는 것은 어려운 작업입니다. 하지만 유용한 리눅스 명령어들을 알고 있다면 문제의 원인을 찾는데 도움 받을 수 있습니다. Disk 디스크 용량 체크 파일 시스템의 디스크 사용량을 보여줍니다. 즉, 마운트된 각 파티션의 총 크기, 사용된 공간 및 사용 가능한 공간을 표시합니다. 디스크 공간을 차지하는 항목 확인 파일별 공간 사용량을 추정합니다. 아래 예제의 은 현재 디렉토리만 확인하는 옵션입니다. 현재 I/O 모니터링 현재 쓰기, 일기를 가장 많이 수행하고 있는 프로세스를 확인합니다. image3 Network tcpdump CLI에서 실행되는 데이터 네트워크 패킷 분석 프로그램입니다. 이를 통해 사용자는 네트워크를 통해 전송 또는 수신되는 TCP/IP 및 기타 패킷을 확인할 수 있습니다. BSD를 라이센스로 하며 무료 소프트웨어입니다. 문제의 원인이 클라이언트 측인지 서버 측인지 아니면 방화벽에 있는지 모르는 상황에서 는 송수신된 각 패킷을 확인하…

June 10, 2023
WIKI
kafka가 뭐야?

1. 카프카(kafka)란? kafka는 모델의 입니다. 분산 환경에 특화되어 있는 특징을 가지고 있습니다. 1-1. 아키텍쳐 카프카 클러스터를 중심으로 Producer와 Consumer가 데이터를 Push하고 Pull하는 구조입니다. Producer, Consumer는 각기 다른 프로세스에서 비동기로 동작하고 있습니다. 아키텍처를 좀 더 자세히 표현하면 아래와 같습니다. 2. 구성요소 2-1. Event 는, kafka에서 Producer와 Consumer가 데이터를 주고받는 단위입니다. 이 글에서는 이벤트 또는 메시지로 표기하겠습니다. 2-2. Producer 는 kafka에 메시지를 게시(post) 하는 클라이언트 애플리케이션을 의미합니다. 2-3. Kafka Cluster Kafka Server로 이루어진 클러스터를 말합니다. Kafka Cluster를 이루는 각 요소는 다음과 같습니다. Broker 카프카 서버를 말합니다. Zookeeper 주키퍼(Zookeep…

May 13, 2023
WIKI
MongoDB(ReplicaSet)

MongoDB ReplicaSet? MongoDB의 레플리카 셋 구성 기능은 데이터베이스의 고가용성 환경을 위해 필요한 기술입니다. DB 노드의 장애가 발생하거나, DB에 문제가 발생하는 경우에도 빠르게 장애에 대응하여 복구() 하는 시간을 줄일 수 있는 장점을 갖게 합니다. MongoDB는 자체적인 기능으로 복제 기능을 지원합니다. 레플리카 셋의 가장 큰 목적은 서비스 중인 MongoDB 인스턴스에 문제가 생겼을 때, 레플리카 셋의 구성원 중의 하나인 복제 노드가 장애 노드를 즉시 대체하는 것입니다. 어떠한 상황에서도 클라이언트와 DB와의 통신은 지속적으로 동작할 수 있도록 구성하는 가장 기본적인 물리적인 DB 설계 방식입니다. MongoDB의 복제를 수행하기 위해서는 여러 mongodb 인스턴스가 모인 레플리카 셋이 필요합니다. 레플리카 셋의 구성원이 되면 서로의 정보를 동기화합니다. 구성 Primary: 클라이언트에서 DB로 읽기 및 쓰기 작업을 합니다. Secondary: …

March 18, 2023
WIKI
MongoDB(BulkWrite)

BulkWrite란? BulkWrite는 MongoDB 데이터 쓰기 명령( , , )을 모아서 한 번에 실행할 수 있는 명령입니다. BulkWrite 명령은 다음과 같은 명령을 한 번에 모아서 실행할 수 있는데, 반드시 하나의 컬렉션에 대해서만 데이터를 변경할 수 있습니다. BulkWrite 실행 가능한 명령어 insertOne updateOne updateMany replaceOne deleteOne deleteMany BulkWrite 실행 BulkWrite 명령의 결과는 와 그리고 등의 명령 단위로 정리해서 적용된 건수를 보여줍니다. 처리 결과 insertedIds 서브 도큐먼트에서는 INSERT된INSERT 된 도큐먼트들의 _id값을 반환하며, upsertedIds 서브 도큐먼트에서는 UPDATE 명령의 upsert 플래그가 true일 때 INSERT 된 도큐먼트들의 _id값을 반환합니다. BulkWrite 명령에 입력하는 각 하위 명령은 각자의 도큐먼트 포맷을 가지는…

March 11, 2023
WIKI
브라우저 주소창에 google.com을 입력한다면?

브라우저 주소창에 google.com을 입력하면 어떤 일이 일어날까? 1. 브라우저는 캐싱된 DNS 기록들을 통해 google.com과 대응되는 IP 주소가 있는지 확인합니다. DNS(Domain Name System) 는 URL들의 이름과 IP 주소를 저장하고 있는 데이터베이스입니다. 인터넷에 있는 모든 URL들에는 고유의 IP 주소가 지정되어 있습니다. 이 IP 주소를 통해서 해당 웹 사이트를 호스팅하고 있는 서버 컴퓨터에 접근할 수 있습니다. 예를 들어 google.com의 IP 주소를 알아보기 위해서는 아래의 커맨드를 터미널에 작성하면 해당 사이트의 IP 주소를 알려줍니다. 현재 제가 있는 지역에서 해당 명령어를 작성했을 때 142.251.42.206가 나왔고 IP 주소를 브라우저에서 검색했을 때 google.com의 결과와 같았습니다. 여기서 non-authoritative answer이란, name 서버가 도메인에서 만든 원본 소스 파일을 갖고 있지 않다는 뜻입니다…

November 12, 2022
WIKI
구글 검색 너란 녀석...

다들 한 번쯤은 구글을 써보았을 것입니다. 그런데 궁금하지 않으신가요? 구글은 어떻게 30조 개가 넘는 웹 페이지들 속에서 사용자가 입력한 검색어에 맞는 결과물을 10개로 추려서 보여줄까요? 그것도 평균 0.5초 만에!! 사용자가 검색어를 입력할 때마다 구글이 그 많은 웹 페이지에 접속하진 않습니다. 대신 DB에 각 웹페이지의 정보를 저장해 두고 알고리즘을 이용해서 무엇을 보여줄지 정합니다. 크롤링 구글의 알고리즘은 인터넷 상의 모든 웹페이지를 DB에 저장하는 것으로 시작합니다. 이를 위해 Spider라는 프로그램을 이용해 웹 페이지를 크롤링합니다. 크롤은 기어 다닌다는 뜻입니다. 크롤링은 인터넷에 있는 모든 웹 페이지를 찾을 때까지 지속됩니다. Spider는 일단 몇 개의 웹 페이지를 크롤링해서 색인이라고 하는 웹 페이지 목록에 추가합니다. 그리고 각 웹 페이지에서 외부 링크를 따라가서 또 새로운 웹 페이지를 색인에 추가합니다. 그렇게 해서 더는 새로운 웹 페이지를 찾을 수 없을…

October 29, 2022
WIKI
CI/CD란?

CI/CD 란 용어를 알고 계신가요? 요즘 같이 빠르게 진화하고 변화하는 시대에는 어떻게 하면 시장과 고객의 요구에 빠르게 반응해서 제품을 출시, 업데이트할 것인가가 큰 과제입니다. 이 같은 고민을 해결하기 위해 많은 기업들이 CI/CD를 개발 프로세스로 사용하고 있습니다. 대부분의 it회사에서 CI/CD 환경에서 일하고 있기 때문에 개발자라면 CI/CD 란 무엇인지 정확하게 알아두면 좋습니다. CI/CD? 애플리케이션 개발 단계부터 배포 때까지 배포 때까지 이 모든 단계들을 자동화를 통해 조금 더 효율적이고 빠르게 사용자에게 빈번히 배포할 수 있도록 만드는 것을 말합니다. CI( Continuous Integration ) - 지속적인 통합 버그 수정이나 신규 기능들이 메인 Repository에 주기적으로 Build 되고 Test가 되어서 Merge 되는 것을 말합니다. 이 방식은 1991년 Grady Booch에 의해 처음으로 사용되었습니다. 후에는 Extreme Progra…

October 22, 2022
WIKI
캐시가 뭐에요? 먹는건가요?

이번에 회사 서비스에 redis란 것을 도입하게 되었습니다. 데이터를 메모리에서 처리함으로써 더 빠른 연산을 도모하고 DB의 부하를 덜기 위한 것(캐싱) 이었습니다. redis 문서가 잘 되어 있어서 서비스에 도입하는 데까진 문제가 없었습니다. 하지만 redis를 도입하면서도 스스로에게 캐시가 뭐냐고 물었을 때 누구나 말할 수 있는 간단한 답밖에 하지 못한다는 것을 깨달았다. 그래서 이번 기회에 캐시란 무엇인가 정리해보고자 합니다. 캐시? 컴퓨터 과학에서 데이터나 값을 미리 복사해 놓은 임시 장소를 일컫습니다. 원본 데이터에 접근하는데 걸리는 시간이 캐시의 접근 시간보다 오래 걸리는 경우나 값을 다시 계산하는데 걸리는 시간을 단축시키고 싶은 경우 사용한다. 예를 들자면, 다이소 본점에 가서 물티슈 하나 사는 것보다 집 앞에 있는 다이소에 가는 게 더 빠르게 사 올 수 있습니다. 캐시에는 어떤 정보를 담아야 할까? 캐시에 담을 정보를 생각할 때 많이 고려하는 법칙이 있다. 파레토의…

October 15, 2022
WIKI