반응형

분류 전체보기 136

[Algorithm] leetcode: Validate Binary Search Tree (python)

주어진 Binary Search Tree가 유효한지를 확인하는 알고리즘입니다. Binary Search Tree는 하나의 root node가 존재할 경우 왼쪽에 있는 모든 노드는 해당 node보다 값이 작아야 하고, 오른쪽에 있는 모든 노드는 root node보다 값이 커야합니다. 때문에 바로 이전의 노드의 값과 비교하여 왼쪽이라면 이전 노드의 값보다 작은 지를 비교하고, 오른쪽으로 가게 되면 이전 노드의 값보다 큰지를 비교하면 됩니다. 하지만 만약 아래와 같은 케이스라면 어떨까요? 3 / \ 1 5 / \ 2 6 2은 5보다 작지만, 5 이전의 node인 3보다도 값이 작게 됩니다. 이는 오른쪽에 있는 node는 모두 기준이 되는 node보다 값이 커야 한다는 rule을 벗어납니다. 이러한 경우는 이전..

[DevOps] Istio: Circuit Breaker를 지원하는 Service Mesh의 구현체

Microservice Microservice architecture 스타일은 작은 서비스들의 모음으로서 단일 애플리케이션을 개발하기 위한 접근 방식입니다. 각각의 애플리케이션은 자체 프로세스로 실행되며 http로 통신하게 됩니다. 이와 같이 mircroservice architecture 스타일은 다양한 언어를 지원할 수 있게 되고(polyglot) 배포 주기를 독립적으로 가져갈 수 있게 되고 각각의 서비스들이 독립적으로 존재하기 때문에 다른 서비스에 영향을 최소화할 수 있습니다. 하지만 모든 기술에 장점만 있는 것이 아니듯, 네트워크 보안에 더욱 신경을 써야 하고, 서비스들 간의 복잡도로 인해서 트러블 슈팅이 매우 어려워지게 됩니다. 또한 서비스 간의 access control 역시 쉬운 일이 아니죠..

DevOps/Kubernetes 2020.11.16

400일간 이어왔던 1일 1커밋을 멈추며

매일매일 400일 동안 개발해온 비전공자 개발자가 된지도 이제 2년 하고도 6개월이 되어간다. 처음 개발을 시작할 때 매일매일 조금이라도 개발하자라는 각오로 1일 1 커밋을 시작했다. 그 결과 여행을 할 때도 노트북을 챙겨가고 작게라도 개발하는 시간을 확보해서 채워져 가는 잔디밭에 만족감을 느꼈다. 1일 1 커밋을 채워간지 1년이 되던 때쯤 나는 짧은 시간 동안 기술적으로 굉장히 빠르게 성장할 수 있었고, 컴퓨터 공학에 입문한지 2년이라는 짧은 시간 동안 우리나라 대표 IT기업에 입사할 수 있었다. 수포자 디자이너에서 카카오 서버 개발자가 되기까지 - 카카오 엔터프라이즈 합격후기 그제 오후 두 달 간의 길고 긴 채용 프로세스를 끝으로 카카오 엔터프라이즈에 (지난 12월에 분사한 카카오 AI계열사) AI ..

Forum/Retrospect 2020.10.09

[React.js] 생명 주기 메서드(life cycle method)과 Virtual DOM이 렌더링 되는 과정

React Element와 Virtual Dom 앞서 리액트는 랜더링 성능을 향상하기 위해서 메모리에 가상 돔을 올려놓고 이전과 이후의 가상 돔을 비교해서 변경된 부분만 실제 돔에 반영하는 전략을 채택했다고 이야기했습니다. 이렇게 하는 이유는 실제 브라우저에서 돔을 변경하는 것은 비교적 오래 걸리는 작업이기 때문에 필요한 부분만 리렌더링 해줌으로써 불필요한 자원 손실을 방지할 수 있기 때문입니다. 우리는 리액트 코드를 JSX라는 새로운 문법으로 작성하게 되고 해당 코드는 리액트의 createElement 함수로 변경된다는 것을 알았습니다. 이 createElement 함수는 함수 이름대로 리액트 요소를 반환하는 함수입니다. 아래는 JSX 코드가 트랜스 컴파일되어 createElement 함수로 변경된 예..

Client/React.js 2020.08.01

[Kafka] Kafka Streams API: stream prosessing

Stream Processing 스트림 프로세싱이란 데이터들이 지속적으로 유입되고 나가는 과정에서 이 데이터에 대한 분석이나 질의를 수행하는 것을 의미합니다. 즉 스트림 프로세싱은 데이터가 이동 중이거나, 생성되어 수신되는 즉시 처리하기 때문에 실시간 분석이라고 불리기도 합니다. 아래의 이미지와 같이 스트링 프로세싱을 사용하기 전에는 주로 데이터를 Database나 File System과 같은 대용량 저장소에 저장한 후, 필요에 따라 애플리케이션이 쿼리를 수행하거나 분석을 하는 등 배치 처리 형태를 띄고 있었습니다. 하지만 빅데이터 붐이 일어나고 스트림 프로세싱이 등장하고부터 이러한 데이터 처리 패러다임이 많이 바뀌었는데, 기존의 배치 형태를 띠고 있던 데이터 처리 파이프라인이 실시간 적이고 지속적으로 ..

Big Data/Kafka 2020.07.28

[Kafka] Consumer: kafka broker로부터 메시지 가져오기

이번 포스팅에서는 kafka consumer(소비)에 대해서 알아보겠습니다. kafka producer가 메시지를 생산하고 토픽으로 전송하는 역할을 한다면 consumer는 메시지를 가져와서 소비하는 역할을 하는 애플리케이션 또는 서버를 지칭합니다. 컨슈머의 주요 기능은 특정 파티션을 관리하고 있는 파티션 리더에게 메시지를 가져오기 요청을 하는 것입니다. 각 요청은 로그의 오프셋을 명시하고 그 위치로부터 로그 메시지를 수신합니다. 때문에 컨슈머는 가져올 메시지의 위치를 조정할 수 있고, 또 이미 가져왔던 메시지를 다시 가져오는 것 역시 가능합니다. Consumer option 카프카 컨슈머에는 Old Consumer와 New Consumer 두 가지가 있습니다. 두 컨슈머의 가장 큰 차이는 주키퍼의 사용..

Big Data/Kafka 2020.07.27

[React.js] Props / State: react에서 data를 다루는 방법

※ 해당 포스팅은 state / props에 대한 어느 정도 기본적인 지식이 있다는 전제로 상태와 속성으로 data를 관리하는 react의 특성을 중점적으로 살펴보도록 하겠습니다. props와 state는 react component에서 데이터를 다루는 대표적인 두 가지 방법입니다. Props와 State를 요약해서 설명하자면 props는 부모 컴포넌트가 자식 컴포넌트에게 주는 데이터이고 해당 데이터는 직접적으로 수정할 수 없는 값입니다. 반면 state는 컴포넌트 내부에서 가지고 있는 값으로써 변경할 수 있는 값입니다. props와 state는 react에서 가장 핵심적인 개념 중 하나입니다. 나중에 다뤄보게 될 redux와 같은 전역 데이터를 관리해주는 라이브러리도 결국 이 props와 state를 ..

Client/React.js 2020.07.26

[Dialogflow] Intent / Entity 활용: 자연어 처리 성능 올리기

이번 포스팅에는 Dialogflow가 자연어 처리를 하는 방식을 이해해보며 자연어 처리의 성능을 올려보도록 하겠습니다. Dialogflow는 내부적으로 들어온 발화를 분석하여 각각의 Intent마다 score를 매겨서 가장 일치하는 Intent에 매핑하는 로직을 가지고 있습니다. 하지만 Dialogflow 공식 document에는 자연어 학습을 시키는 방법에 대해서만 설명이 되어있고 10개 이상의 다양한 형태의 발화를 학습시키라는 가이드라인을 제시해줄 뿐 구체적으로 어떤 방식으로 자연어 학습을 진행하는지와 학습 처리 방식에 대해서는 설명하고 있지 않습니다. 따라서 이번 포스팅에서는 몇 가지 예시의 intent를 학습시킨 후 각각의 상황에 맞게 발화를 입력하여 어떤 intent에 높은 score를 주는지 ..

AI/Dialogflow 2020.07.26

[React.js] Babel / Webpack: 트랜스 컴파일러와 JS 모듈 번들러

React.js를 공부하다 보면 필연적으로 한 번씩 듣게 되는 키워드가 바로 바벨과 웹팩입니다. 이 둘에 대해 자세히 알지 못하더라도 당장 리액트 개발을 하지 못하는 것은 아닙니다. 왜냐하면 리액트 팀에서 번거로운 바벨과 웹팩 설정을 create-react-app이라는 프로젝트를 통해서 아주 간편하게 설정하고 끝낼 수 있도록 도움을 주고 있기 때문입니다. 하지만 앞선 포스팅에서 이야기했듯이, 단순히 프레임워크 자체를 이해하기보다는 그 원리를 이해하고 더 나은 개발자가 되기 위해선 babel과 webpack이 왜 필요하고, 어떤 일을 하는지에 대해서 알고 넘어가 필요가 있습니다. 해당 포스팅에서는 바벨과 웹팩을 아주 간단하게 소개하고, 어떤 역할을 하는지에 대해서 살펴보도록 하겠습니다. (이후 좀 더 심화..

Client/React.js 2020.07.26

[React.js] React를 왜 사용하는 걸까?

Web Front-End 개발에 관심이 있는 개발자라면 한 번쯤은 React라는 말을 들어보았을 것입니다. 리액트는 현재 그만큼 현재 Front-End 영역에서 가장 핫한 라이브러리 중 하나입니다. javascript는 원래 별로 각광받지 못한 언어였습니다. 하지만 node.js가 등장하면서 서버로 사용되기 시작하고 백엔드와 프론트엔드의 영역이 확실히 분리되기 시작하며 angular.js를 시작으로 SPA라는 기술이 나오기 시작했고, 현재는 그 마저도 지며 그 자리를 React.js와 Vue.js가 차지해 가고 있습니다. React와 Vue는 사실상 기본 원리가 비슷합니다. 그 예로 Vue의 개발자가 실제로 React를 참고하여 개발했다고 언급한 적도 있습니다. React.js는 현존하는 프론트엔드 프레..

Client/React.js 2020.07.25
반응형