일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- ad-hoc
- 백준
- PS
- eventLoop
- 25635
- firebase functions deploy limit
- 1781
- 20309
- hash
- Java
- 25186
- Kafka
- Docer
- node-cron
- 파라매틱서치
- 23560
- Bitwise AND
- 전역에러처리
- 23289
- node.js
- firebase functions
- promise.race
- graceful shutdown
- nextTick
- macrotask
- 알고리즘
- BOJ
- 코드리뷰를꼼꼼히하자
- 귀납적증명
- microtask
- Today
- Total
목록분류 전체보기 (19)
웰제오의 개발 블로그
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bTIoCH/btsxvGuDPYA/yUOEzm4bfFVgrWAso4sd51/img.png)
*************************** APPLICATION FAILED TO START *************************** Description: Parameter 0 of method entityManagerFactory in ... required a bean of type 'org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder' that could not be found. Action: Consider defining a bean of type 'org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder' in your configuration. 작업도중 위와 같은 에..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ckbBWU/btrPRB903wE/sQsLaNYk9jyEUy37a7xcI1/img.png)
카프카의 group coordinator 는 현재 그룹에 속해있는 컨슈머들의 상태가 유효한지 계속 확인하며, 리밸런싱을 통해 그룹내에 속한 모든 컨슈머들이 유효성을 보장한다. 만약 카프카가 컨슈머들이 살았는지 죽었는지 확인을 안한다면, 죽어있는 컨슈머가 group 파티션을 계속 잡고있게 되며, 해당 파티션의 record 들이 consume 되지 않는 상황이 발생하므로, 카프카는 주기적으로 컨슈머의 생존여부를 확인해, 죽었다고 판단되는 컨슈머를 group 에서 쫓아내고, 리밸런싱을 통해 이전 컨슈머에게 할당된 파티션을 그룹내의 다른 컨슈머에게 할당해주어야 한다. 카프카는 컨슈머가 죽었다고 판단하는 경우가 두가지가 있는데 (connections.max.idle.ms 설정도 존재하지만 제외하고 얘기하겠다) 이..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ZvF1A/btrPEIo5mRf/WkIwJVke1sy4eunQk0XRM1/img.png)
대부분의 백엔드 시스템은 24시간, 365 일 쉬지 않고 돌아간다 (물론 서버리스 아키텍처로 구성된 시스템은 예외) 이러한 프로그램을 운영하다 보면 정말 기상천외한 이슈들을 계속 마주하게 되는데, 그 중에서는 정확한 원인파악을 통한 문제를 해결이 불가능한 상황에서, 우선 큰 그림에서 문제를 우회할 수 있는 방식으로 로직을 수정해 이슈를 해결하는 경우가 있었다. 이번 글에서는 이전에 경험했던 이슈를 바탕으로, Node.js 환경에서 스레드의 hang 을 야기할 수 있는 작업들을 어떻게 핸들링할 수 있는지 공유하려고 한다. 이슈 상황 필자가 운영했던 프로그램은 미션 크리티컬한 프로그램으로서, 해당 프로그램의 특성을 고려해, pre defined 된 에러상황이 아니라면, 발생하는 모든 예외상황에 대해 프로그램..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/mpLs9/btrPgZYNcrp/d0tB0vSNkkNoWEsIA95WyK/img.png)
Google 에서는 Firebase 라는 모바일 및 웹 어플리케이션을 손쉽게 제작할 수 있게 도와주는 PaaS 를 제공한다. Firebase 하나로 인프라의 구성 및 유지보수에 전혀 신경쓰지 않고 빠르게 서비스를 빌딩할 수 있고, GCP 에서 제공하는 functions 라는 서버리스 컴퓨팅 서비스를 활용해( AWS Lambda 라고 생각하면 된다 ) 백엔드 API 구성 없이 웹 또는 모바일 어플리케이션에서 DB 에 다이렉트로 접근해 읽기, 쓰기, 삭제와 같은 작업이 가능하다. 위와 같은 편리성으로 인해 많은 중소규모 서비스에서 해당 플랫폼을 애용하고 있지만, 서비스의 크기가 증가함에 따라 배포 관련해서 필연적으로 마주하게 되는 이슈가 하나 존재한다. Firebase 에서 제공하는 NoSQL 데이터베이스인..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bbJJPp/btrPfCXewSH/m2H0lKNkbQvSHJssvfmtUk/img.png)
AWS ECS 는 Elastic Container Service 의 줄임말로, AWS 에서 제공하는 컨테이너 오케스트레이션 ( Container Orchestration ) 서비스이다. 비슷한 컨테이너 오케스트레이션 서비스로는 도커 스웜 ( Docker Swarm ) 과 그 유명한 쿠버네티스 ( Kubernetes ) 가 있다. ECS 는 중소규모 프로젝트에서 컨테이너 오케스트레이션을 수행하기에 적합하며, 러닝커브가 매우 낮다는 장점이 있다. 이번 글에서는 AWS ECS 를 활용해 Docker 컨테이너들을 운용하면서 겪었던 graceful shutdown 설정과, 해당 로직이 수행되지 않았던 이슈의 원인과 해결책에 대해 공유하고자 한다. graceful shutdown 이 필수인가? 일반적으로는, for..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/oNbLY/btrOFkwfAQc/xf2CM1jd4DdQgO2aktoz4k/img.png)
Node.js 는 현대 웹 백엔드 서버가 처리하는 작업의 대부분이 Network IO 작업에 국한된다는 문제를 해결하기 위해 나온 Javascript 런타임이다. 이러한 Node.js 는, 싱글스레드로 동작하는 이벤트 루프를 기반으로 Network IO 를 포함한 여러 비동기 작업들을 Syntax-sugar 가 가미된 편리한 문법을 통해, 복잡한 비즈니스 로직을 포함한 웹 백엔드 프로그램을 개발자가 보다 쉽게 개발할 수 있게 도와준다. 프론트엔드를 독점한 Javascript 와의 시너지에 더불어, 하나의 언어를 익힘으로서 프론트와 백을 포함한 풀스택 개발을 가능하게 해준 Node.js 는, 어느 덧 단순한 요청작업을 처리하는 서버 프로그램을 넘어, 복잡한 비즈니스 로직을 처리하는 프로그램에 까지 사용되면..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Zs4ev/btrOHUdMl41/HVtAeXFVOVSieSsk6LBiK0/img.png)
https://www.acmicpc.net/problem/1781 1781번: 컵라면 상욱 조교는 동호에게 N개의 문제를 주고서, 각각의 문제를 풀었을 때 컵라면을 몇 개 줄 것인지 제시 하였다. 하지만 동호의 찌를듯한 자신감에 소심한 상욱 조교는 각각의 문제에 대해 데드라 www.acmicpc.net 접근 인터벌 스케줄링이 생각나는 문제이다. 각 숙제별로 마감기한이 존재하고, 해당 숙제를 했을 때 얻을 수 있는 컵라면의 수가 주어질 때, 얻을 수 있는 컵라면의 최댓값을 구하는 문제이다. 우선 데드라인의 오름차순으로 숙제들을 정렬하고, 동일한 데드라인에 대해서는 컵라면의 개수의 내림차순으로 정렬을 수행했다. 숙제 하나를 푸는데 단위시간 1이 소요되므로, 현재 날짜를 나타내는 변수를 1 부터 증가하면서, ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/lN88K/btrOmdCMTgR/GiingqNda6InVTRKWOMLiK/img.png)
https://www.acmicpc.net/problem/1931 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 접근법 및 풀이 이제 입력크기를 통해 시간초과를 따지는 과정이 자연스럽게 이루어지는 것 같다 v 완전탐색은 당연히 시간초과가 날 것 이고, 최적화를 진행한다면 dp 인가 싶기도 했지만, 문제의 조건 때문에 모든 케이스에 대해서 상위 문제가 하위 문제를 포함하지 못하므로 dp 도 아니었다. 회의실을 고르는 작업이 시간순서에 따라 제약을 받으므로, 우선 정렬을 수행해야할 것 같은 느낌이 들었고, 이내 예전에 비슷한 문제를 학교수업 때 들은 기억이 났고, 정렬을 통한 그리디 문제였음이 떠올랐다 그리디 하게 회의실을 선..