어 요즘 포트폴리오 필수현상
요즘 개발자 포트폴리오를 필수로 요구하는가 보아요.
대단한 포트폴리오를 제출 한다고 하여도 자세하게 보는경우가 잘 없으면서 요구하는 관행이 자리잡은 상태이지 않나요.
대부분 1, 2번 정도로 끝났었는데 말이어요.
무엇을 개발 해봤어요.
어떤 언어 써봤어요.
솔직히 털어놔 보아요. 이 이상 요구하면 사기꾼이지 않나요. (솔까 .. * 솔직히 까놓고 얘기)
직관적으로 보려면 유튜브 중 노마드코더 채널은 주절주절 흔한 주제를 다루지만 포프tv의 아카데미 채널은 핵심 주제를 다뤄요.
음 .. 그럼 나는 주절주절 흔한 얘기에 핵심 실용 주제를 다뤄야 하겠나요.
#스크립트 시작
노드js에 대한 주절주절 핵심 얘기를 만들어낼 수 있어요. 노드js에 기본은 메인(싱글)스레드 단일 프로세스 모델을 사용하는데요. 워커 스레드를 사용할 수 있었으나 중요한 제약사항은 핸들을 공통으로 가지지 못한다는 제한이 있어요. 쉽게 얘기하면 워커스레드는 핸들을 처리할 수 없다고 보아야 해요. 망했쩌 .. 이케 대면 데이터를 전달해주는 데이터 파이프라인을 거쳐야 하는데 이러면 데이터처리 성능이 떨어져요. 이러면 과부하가 걸렸을때 서버가 터져서 정말로 망하빈다. [1] 안된다네요. [2] 핸들 위임 기능이 정말로 없어요.
이렇다면 포크를 사용할 수 있어요. 다른 프로세스를 만들어서 데이터처리를 위임하는데 부모 자식 프로세스 사이에서 핸들을 공통으로 가질 수 있어요. 이렇게 하면 [3] 핸들위임이 기능이 있어요.
앵간하게도 잘 알려져있지 않고, 진심 개발자들만 사용해요.
inport {fork} from 'node:child_process'
improt {createServer} from 'net'
const child = fork('server.mjs')
const server = createServer((res, req)=>{
})
server.on('connection', socket=>{
child.send('handle',socket)
})
server.listen(8080)이렇게 하면 소켓을 자식 프로세스에 위임해요.
process.on('message',(type,socket)=>{
switch(type){
case 'handle':
connection(socket)
break
}
})
functio connection(socket){
// ...
}[4] 전통 유닉스 시스템은 새로운 연결마다 포크를 생성하는 부적절한 방식을 사용했어요. 이렇게 하면 과부하가 걸리는 경우에 서버가 터집니다.
대부분에 경우에는 프로세스 포크가 필요하지 않지만 노드js는 프로세스 포크를 어떻게 바꿔줄 마땅한 기능이 아직까지 없다는 결론에 이르러요.
#코맨트
[1] node.js - nodejs - Sending back a stream from a worker thread to the main thread - Stack Overflow
[2] Worker threads | Node.js v22.9.0 Documentation (nodejs.org)
[3] Process | Node.js v22.9.0 Documentation (nodejs.org)
[4] 연결 수락(Windows 소켓 2) - Win32 apps | Microsoft Learn
#스크립트 종료
이 스크립트에 여담으로 libuv에 얘기로 이어질 수 있어요. win32시스템에서는 createprocess 함수에 bInheritHandles 인자를 긍정으로 실행하면 핸들을 위임하는 것이 가능하여서 원하는 작동이 가능해요. 파이프라인을 사용하지 않고 직접 소켓 핸들을 위임해주면 프로세스 사이에 데이터 전달(복사)가 일어나지 않아서 최적화에 아주 중요해요.
* CreateProcessA 함수(processthreadsapi.h) - Win32 apps | Microsoft Learn
이케 소프트웨어 프로그램이 이루어지는 핵심이 중요한데 하찮은 포트폴리오만 따지면 어떡하나요.
이런 기업은 성장이 느리거나 나아가서 뚜드러맞고 멸망할 것으로 정망해요.
이런데 취업하면 안대빈다.
