일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
- 코드 계약
- 카카오
- 셀러리
- 숫자 블록
- 수신자 대상 다르게
- piplining
- 이분탐색
- 트랜잭샨
- 백준
- gRPC
- 완전탐색
- 검색어 추천
- 쿠키
- 디버깅
- BFS
- 결제서비스
- 알람 시스템
- 객체지향패러다임
- AWS
- jwt 표준
- branch 전략
- prg 패턴
- 프로그래머스
- 레디스 동시성
- 좋은 코드 나쁜 코드
- docker
- 구현
- spring event
- 누적합
- 깊게 생각해보기
- Today
- Total
목록개발/SPOT (8)
코딩관계론
gRPC란?gRPC를 이해하기 위해서는 먼저 RPC의 개념을 이해해야 합니다. RPC는 Remote Procedure Call의 약자로, 별도의 원격 제어를 위한 코딩 없이 다른 주소 공간에서 함수나 프로시저를 실행할 수 있게 하는 프로세스 간 통신 기술을 의미합니다. 일반적으로 프로세스는 자신의 주소 공간 안에 존재하는 함수만 호출하여 실행할 수 있지만, RPC를 통해 네트워크를 통해 자신과 다른 주소 공간에서 동작하는 프로세스의 함수를 실행할 수 있습니다. 동작 방식은 다음과 같습니다:클라이언트는 stub에 정의된 함수를 호출합니다. 이 stub 코드는 데이터 타입을 XDR 형식으로 변환하여 RPC 호출을 실행합니다.서버는 수신된 함수에 대한 처리를 *Stub을 통해 처리 완료 후 결과값을 XDR로 ..
설계의 고찰기존의 알람 시스템은 각 공장마다 하나의 서버에 하나의 알람 시스템이 배포됐습니다. 이로 인해 부하가 가장 심한 시점에도 20~30건 정도의 알람만 처리되었고, SMS 대행사도 단일 대항사만을 이용했기 때문에 시스템 설계는 크게 중요하지 않았습니다. 그러나 회사에서 클라우드 서비스를 통해 여러 공장을 관제하게 됨에 따라 하루 최대 부하량이 백 건을 넘어서게 되었습니다. 또한 단일 대행사뿐만 아니라 다른 3rd-party 플랫폼(ex. 텔레그램)을 추가로 지원해야 했습니다. 이에 따라 알람 시스템 설계가 중요해졌습니다. 고객사는 처리 속도에 대한 요구를 내어놓았습니다. 긴급한 알람(실시간 환자 감지, 누수 감지, 화재 감지 등)은 소프트 실시간으로 처리되어야 하며, cron 작업으로 돌아가는 알..
소개안녕하세요! 이번에는 Celery를 사용한 비동기 프로그래밍에 대해 알아보겠습니다. 최근에 업데이트한 프로그램에서 Celery를 도입하여 작업을 비동기적으로 처리하게 되었는데요, 이를 통해 사용자가 프로그램을 커스텀하게 구성할 수 있게 되었습니다. 우선, 비동기 프로그래밍이란 CPU-bound 작업과 I/O-bound 작업을 구분하여 처리하는 방식을 말합니다. 이를 통해 시스템의 성능을 향상시킬 수 있습니다. 이번에는 이러한 비동기 프로그래밍을 구현할 때 사용한 Celery에 대해 자세히 알아보겠습니다. Celery는 Python 기반의 Task Queue 라이브러리 중 하나로, 비동기적으로 작업을 처리할 수 있습니다. 이를 통해 CPU-bound 작업과 I/O-bound 작업을 효율적으로 처리할 수..
비동기 처리의 개념과 필요성비동기 처리는 순차적으로 처리하는 것이 아니라, 요청이 발생한 순서와 상관 없이 결과를 반환하는 방식을 말합니다. 예를 들어, 웹 어플리케이션에서 사용자의 요청에 대한 처리가 비동기적으로 이루어지면, 서버는 해당 요청을 받은 후 다른 작업을 수행하다가 해당 요청이 완료되면 그 결과를 반환하는 방식으로 동작합니다. 이를 통해 서버의 자원을 효율적으로 사용할 수 있고, 사용자에게 더 빠른 응답이 가능해집니다. 비동기 처리의 필요성은 크게 두 가지로 볼 수 있습니다. 첫째, 대규모 트래픽이 발생하는 웹 서비스에서는 많은 요청이 동시에 발생할 수 있습니다. 이 경우 요청을 순차적으로 처리하면 응답 시간이 길어질 수 있습니다. 따라서 비동기 처리를 통해 대량의 요청을 빠르게 처리할 수 ..
서론로봇이 미션을 수행하고 그 결과를 종합하여 SMS로 사용자들에게 전달해야 하는 업무가 있었습니다. 단순한 전달이 아닌 각 공장 관리자들의 성격과 특성이 다르기 때문에, 해당 공장 담당자의 미션 결과를 다른 공장 담당자가 보는 것에 대한 거부감이 있었고, 이런 문제들 때문에 로봇이 수행한 미션별로 수신자가 달라져야 했습니다. 이 글은 이러한 문제를 해결하기 위한 개발 과정을 자세히 다를 예정이며,이를 위해 요구 사항 분석, 아키텍처 설계, DB 모델링, 알고리즘 구현 등의 작업을 수행한 결과를 공유할 것입니다.요구사항 분석SMS 예약 미션 알고리즘 개발을 위해 먼저 요구사항을 분석하였습니다. 기본적으로 로봇이 수행한 미션 결과들을 종합한 SMS를 사용자가 원하는 시간에 받아보고 싶다는 요구사항이 있었습..
1. 개요문제 해결 방법 소개 해결책으로 BFS 기반의 프로그램을 개발하여, 각 노드에서 적절한 행동을 수행하도록 구현했습니다. 이는 에상치 못한 상황에서도 일관성 있는 동작을 수행하도록 했습니다.문제 해결의 필요성 이전에는 시나리오 기반의 상태 전이 프로그램을 사용했었는데, 이는 외부 간섭이 발생하면 로봇이 미션을 수행하지 못하는 경우가 발생하였습니다. 이러한 문제를 해결하기 위해 문의 상태에 따라 다른 행동을 취하는 프로그램을 개발하게 되었습니다. 이로써 외부 간섭에도 더욱 견고한 시스템을 구현할 수 있게 되었습니다. 2. 문제 정의문제의 내용 및 조건 설명로봇이 ROLL-UP DOOR을 통과하기 위해서는 정해진 waypoint에 도착하면 ROLL-UP DOOR의 상태를 알아내기 위해 아두이노와 통신..
1. 문제 상황프로젝트가 example 도커 이미지를 빌드하기 위해선 기반 파일인 src 파일을 빌드해야 한다. example 코드를 수정하던 중에 src 코드 수정이 필요하다면 src 파일을 --no-cache로 빌드했다. src의 환경이 변하는 것이 아니라 코드만 변했을 뿐인데 기존 pkg를 다운하고 다시 설치하는 것은 불필요한 시간을 잡아먹고 있었다. FROM nvcr.io/nvidia/l4t-base:r32.6.1# Keeps Python from generating .pyc files in the containerENV PYTHONDONTWRITEBYTECODE=1# Turns off buffering for easier container loggingENV PYTHONUNBUFFERED=1A..
결론부터 말하자면 Thread 문제가 아니라 이 액션과 상관없는 네트워크 타임에 의해서 발생하는 문제였다. 해결 방법1. time.time모듈을 이용해 각 구간의 프로그램 실행 시간을 체크함2. request에서 매번 필요한 keyword를 파싱하는 방법이 아니라 request를 한번만 파싱하고 default dict을 이용하는 방법을 사용함dev_name = self._parsing_keyword(request, "dev_name")cmd = self._parsing_keyword(request, "cmd")min_threshold = self._parsing_keyword(request, "min")max_threshold = self._parsing_keyword(request, "max")----..