본문 바로가기

algorithm

(4)
[현실] piggyback을 할지 말지? 피기백이란 다른 누군가를 등 뒤에 업고 같이 움직이는 것을 말한다. 물류나 IT에서도 차용되어 종종 사용된다. 내가 이 용어를 들었던 것은 네트워크 수업에서 흐름제어 방식 중 하나였다. 프로토콜 계층에서 수신측에서 수신된 데이터에 대한 확인 응답(ACK)를 즉시 보내는 대신, 전송할 데이터가 있는 경우에 그 데이터 프레임 안에 확인 필드를 덧붙여 전송하는 오류제어 및 흐름제어 방식으로 배웠다. (그외 stop-and wait, 슬라이딩 윈도우 방식 등이 있다.) 송신제어방식: 정지대기 방식(stop and wait) 전송률 기반 흐름제어: rate-based 윈도우 기반 흐름제어: window-based -> sliding window 하지만 이 방법에도 장점이 있으면 단점도 있을 수 있기에 상황에 맞는..
[think] 오래걸리는 작업을 나눠서 하는게 좋을까? 현금영수증 배치처리 하면서 도비랑 논쟁했던 사항이다. AWS Lambda에 비즈니스 로직을 넣는 것이 어떤가에 대한 이야기 일 수 있다. 내가 로직을 넣었던 이유는 작업을 끊어서 처리를 했으면 좋겠는 것에 이유가 있었다. 가령 큰 용량의 파일을 이동을 하는 작업을 한다고 한다. 총 4개의 디렉토리를 물리적으로 분리된 곳에 이동을 시키려고 한다. (각 디렉토리에는 다수의 서브디렉토리가 있고 데이터들이 있다.) 이동은 복사 + 삭제의 트랜잭션 작업이라고 할 수 있다. 만약 작업을 각 디렉토리별로 트랜잭션을 묶어 이동을 시키는 것과, 전체 4개를 한꺼번에 하나의 트랜잭션으로 묶는 것은 어떤 차이를 가져올까? 후자의 경우로 하면 아래와 같은 그림을 그릴 수 있다. 위가 이동할 대상이고, 아래가 옮겨질 대상이다...
[취약성] ReDoS (정규식을 이용한 서비스 거부) DDos라는 용어는 언론에 많이 나와서 익숙하다. ReDos라는 것도 있다는 사실. 어제 SonarQube에서 아래와 같이 정규식이 ReDos에 취약하다고 경고를 보여줘서 재근님이 고민을 하셨다. 위의 정규식은 그리 취약하지 않으나 [ 나 * 나 { 가 2번 이상 나오면 취약하다고 판단해버린다. https://github.com/SonarSource/SonarJS/blob/master/eslint-bridge/src/rules/regular-expr.ts#L90 const specialChars = ["+", "*", "{"]; function hasEnoughNumberOfSpecialChars(value: string) { let numberOfSpecialChars = 0; for (const c ..
분할 정복(D&C; divide and conquer) 문명6이라는 게임을 하다가 알고리즘을 발견했다. 사실 알고리즘 이전에 군사 용어가 더 먼저일 수 있겠다...사회제도 완성: 정치 철학"'분열시켜 지배하라'는 좋은 구호다. 하지만 '단결시켜 이끌어라'가 더 나은 구호다." - 요한 볼프강 폰 괴테