MessageQueue를 써야하는 이유 (+카프카 사용후기)
·
Develop
데이터 통신은 왜 안전하지 않을 수 있는가?전통적인 데이터 통신방식은 동기적이다. 요청 - 응답 프로세스만 봐도 동기적인 것을 알 수 있다.다만 이 방식에는 위험이 따른다.왜? 수신부에서 서버가 트래픽을 대응하지 못하면 송신중이던 송신을 마저하는 데이터들은 유실될 수밖에 없다.그럼 이것을 어떻게 해결할 수 있지?Message Queue (MQ) 시스템을 이용하는 것이다.MQ 시스템은 이러한 문제를 중간완충지대 개념으로 해결한다.메시지를 서버간 바로 하지않고 중간지대를 통해 주고받는다.이는 시스템의 결합성을 낮추고 통신을 비동기적으로 할 수 있게 한다.동작원리대표적으로"생산자" -> "큐시스템" -> "소비자" 방식으로 동작한다.이때 큐시스템이 위에 설명한 중간완충지대 라고 생각하면 된다.핵심메커니즘Que..
정글을 마무리하며
·
LIFE
2025.07.07 ~ 2025.12.22크래프톤 정글을 수료했다. 원래 계획은 이번년도 12월까지 강사를 하고나서 다시 취준에 들어가려했는데내게 어떤 행운이 왔는지 무의미하게 6개월 보낼뻔한것을 가장 의미있게 보내게 됐다.입소해서 얼마 안지나 면담을 가졌을 때 시니어 코치님이 처음에 이야기하셨던 내용이"React도 취약점이 있어요. 그런 취약점이 있을 때 '내가 고쳐서 git에 기여해야지'" 라고 생각이 들어야 한다고하셨던 게 기억이 난다.그땐 너무도 먼얘기라고 느꼈는데 지금은 개발자로서 정신개조는 많이 된것같다.웹서버, malloc, 프록시, OS개발 등 혼자선 엄두도 못낼 과제들을 팀원과 함께 수행하면서힘도 많이되고, 용기가 났었던 것 같다. 어쨌든 수행했으니 코치님이 이야기하신 도구에 대해 의심하..
node.js는 어떤식으로 동작할까?
·
Develop
Node.js 란??V8 javascript엔진 위에서 동작하는 서버 사이드 런타임 환경.1.1 V8 자바스크립트 엔진이 뭔데??google이 개발한 Javascript 엔진Javascript 코드를 -> 기계어로 직접 컴파일하여 실행하는 고성능 엔진c++로 작성됨Node.js에서는 런타임의 핵심 모듈로 포함됨.1.1.1 V8 엔진의 동작 구조JavaScript 코드 ↓[ Parser ] → AST(Abstract Syntax Tree) 생성 ↓[ Ignition (Interpreter) ] → 바이트코드(Bytecode)로 변환 ↓[ TurboFan (JIT Compiler) ] → 자주 실행되는 코드 → 최적화된 기계어로 컴파일 ↓CPU에서 직접 실행1.1.2 예..
Pintos_project2 - argument passing
·
Develop
Userprogram사용자메모리접근커널은 사용자가 제공한 포인터로 메모리 접근할 필요가 있다.사용자가 NULL포인터, 매핑되지 않은 가상메모리, 커널영역메모리에 대한 포인터를 제공하면 이를 오류로 판단하고자원을 해제한다음프로세스를 종료 해야한다.유저프로그램의 모든영역에 해당하므로 포인터를 넘기는시스템콜에는 적용해주도록 하자코드간단한 버전(통과는 함)// pintos/userprogram/systemcall.cstatic void check_address(const void *addr){ if (addr == NULL || !is_user_vaddr(addr) || pml4_get_page(thread_current()->pml4, addr) == NULL) { exi..
9주차 pintos project1 회고
·
LIFE
9주차 회고Pintos project1 스레드커널영역에서 스레드 스케줄링이 어떻게 되는지에 대해관찰하고 공부했던 주였다. 자격증 준비와 책을 읽으며 접했던 라운드로빈, SJF, FCFC 등등1번 상황에선 RR이 좋겠네.. 2번 상황에선 FCFS 가 좋겠네..그 이상 모습이 그려지지도 않았고, 생각하지도 않았었다. 겪어보니 '복잡한 시스템안에서의 알고리즘' 이라고 느꼈다.즉 이부분을 이렇게 개선시킬 수 있겠다. 라는 생각이 들었다는게나한테는 큰 성장이었던 것 같다. 개념만 알고있던 뮤텍스, 세마포어도 실제로 구현하며원리를 더 자세히 알게된 것 같다. 항상 미션을 하면서 고민인건 "내가 이 개념을 더 깊이 알아야 하는가?" 이다.명확한 목표 없이 공부를 한다는 게 쉽지가 않다. 더 깊이 알면 구현이 편하겠다..
Pintos_project1 - Priority
·
Develop
핀토스 프로젝트1 - 우선순위 구현1. Priority 구현가이드라인struct thread에 우선순위 관련 멤버 추가thread_create() - 새 스레드가 현재 스레드보다 높은 우선순위면 즉시 양보thread_unblock() - unblock된 스레드가 현재 스레드보다 높은 우선순위면 즉시 양보thread_set_priority() - 우선순위 변경 시 필요하면 양보thread_get_priority() - 현재 우선순위 반환Priority의 의미[!NOTE] 우선순위로직ready_list를 우선순위순으로 정렬현재스레드보다 높은 스레드에게 cpu양보위 가이드라인에서 보면 thread 구조체에는 priority 멤버만 추가해주면 된다.그리고 create, unblock 에서 우선순위 처리를 해주면..
Pintos_project1 - Alarm Clock
·
Develop
핀토스프로젝트1 - Alarm Clock 구현Alarm clock이 뭐지?호출한 스레드를 잠시 정지(block) 시키고 일정시간(ticks) 후에다시 스레드를 준비상태로 만드는 과정을 이야기한다.현재 문제점스레드는 sleep 상태에 들어가면 바쁜대기 상태가 된다.void timer_sleep (int64_t ticks) { int64_t start = timer_ticks (); ASSERT (intr_get_level () == INTR_ON); while (timer_elapsed (start) 코드를 보면 현재시간을 이용하여 ticks랑 비교후 양보를 한다.이 때너무 자주 시간을 확인하고,컨텍스트 스위칭이 너무 빈번해지는 문제가 생긴다. 즉 CPU낭비 이므로이 코드를 tick 마다 ..
C로 웹서버를 구현하시오. (+8주차 회고)
·
LIFE
이번주 토픽웹서버 구현이번주는 나름 기대를 많이했던 웹서버구현에 관해 공부를 하고, 테스트하는 시간을 가졌다.기대를 했던 이유는 도대체 어떻게 네트워크 영역까지 코드로서 접근하는지 감도 안잡혔고,뭔가 이것을 이해하면.. 좀 더 많은 것을 할 수 있을 것 같았다. 코드로서 웹서버를 구현한다는 것이nodejs를 사용했을 때는 포트를 그냥 열어주면 됐고,라이브러리를 사용해서 http통신을 할 수 있었다. 정글을 알아보면서 '웹서버 구현하기' 라는 미션을 보기 전까진 그냥"서버는 이미 존재하는 파일에 설정만 해주는거구나" 쯤으로 생각했다. 저 미션을 알게된 후에는 단지 텍스트파일쯤인 코드로 어떻게하드웨어적인 시스템까지 접근할 수 있는가..를 생각만 해봤는데그래서 공부하는데에는 꽤 재미있었던 편이었다. 사실 ..