지금 본인 실력으로는 감당 안되는 작업을 하고 있음
비동기 멀티스레드 쓸 땐
레이스 컨디션이 제일 큰 문제인데
디버깅 할줄도 모르면서 비동기 멀티스레드 이런 거 복합적으로 써놨다?
개발하는 내내 계속 문제가 될 게 뻔함
지금이라도 안 늦었으니 git reset해라
글고 어느 순간엔 비선형적으로 코딩해야되긴 하지만
그 복잡성을 억누르기 위해서는 비선형적이지 않은 부분을 최대한 선형적으로 해야될 필요가 있음
즉...
연산속도나 최적화 때문에 어쩔 수 없이 비동기 멀티스레드를 써야한다면,
개발 다 마치고 코드를 절대 수정하지 않겠다고 굳게 다짐한 다음에 진행해야됨
글고 I/O 때문에 쓴 거라면 MiniO 같은 저장 솔루션을 끼고
비동기로 쓴 이유가 블로킹 때문이라면 Redis를 써라
바퀴를 재발명할 필요는 없잖아.
쉽고 단순한 길을 선택해
io랑 minio, 비동기랑 redis가 먼 상관인데 - dc App
그리고 얘들이랑 멀티 스레딩이랑도 먼 상관임 대체 - dc App
@ㅇㅇ(182.227) 잘 모르면 물어보면 되는데 왤케 띠껍게 말하지? 니가 뭐하는 개발자인진 모르겠는데 비동기나 멀티스레드 쓰는 경우는 대부분 I/O 블로킹 때문이고 성능 때문에 비동기나 멀티스레드 쓰는 경우는 잘 없다. 왜냐면 성능이 그 정도로 중요한 경우 그걸 해결해주는 라이브러리나 엔진을 끼고 시작하기 때문임 그리고 I/O블로킹의 경우 큰 파일 한 두개 여는 것보다는 작은 파일 수만 개 열고 쓰는 게 주로 문제가 되는데 minio 같은 오브젝트 스토리지를 쓰면 속도는 미세하게 느려져도 많은 문제들이 쉽게 해결되고 코드 수를 압도적으로 줄일 수 있다. 느려지는 것도 걍 컴퓨터 하나 더 늘리면 됨. 그렇게 해서 개발기간 1달 줄이고 인건비 1천만원 아끼는 게 훨씬 경제적이다
질문이 뭐였는진 모르겠지만 락하나 제대로 못쓴다고 라이브러리를 쓰겠다는 것도 아니고 다른 서비스를 하느 더띄우는건 오버엔지니어링이고 운영부담도 개같이 커지는건데? 비용을 뭐 어떻게 상정하는지 모르겠네. 그리고 minio redis 둘 다 공교롭게도 최근 oss에서 라이센스 이슈로 핫한거 두개만 딱 골라왔네 잘 생각해보고 써라. 그리고 동시성/블로킹 이랑 언급한 프로젝트랑 무슨 연관인지 모르겠다. 그냥 다른 서비스에 던져놓고 네트워크 응답 기다리겠다는거잖아? 사실 개념적으로 보면 스레드 하나 띄어놓고 락풀릴때 까지 기다리는거랑 뭐가 다른건데? - dc App
큐 얘기는 왜 나오는지 모르겠는데 아마 질문에 있었나보지? 질문자가 분산 앱 구현하고있다면 나도 redis나 minio얘기 했을것같긴한데 앞서 말했듯 이거는 비동기랑 멀티스레딩이랑 하등 상관없는 얘기고. 혹시나 프로세스 하나 달랑 띄우는거면 그냥 컨커런트 큐 구현 찾아서 가저다 쓰던지 쳤다고 카프카나 레디즈 띄워서 네트워크 요청 던지라고는 안할거임 - dc App
아니 막말로 레디즈에 워커 스레드 하나로 설정해두고 레디즈에 요청 넣는 방식으로 서비스 나눠서 구현하면 병렬성 동시성 달성한거냐? 머리아프다 진짜 - dc App
@ㅇㅇ(121.165) 원 질문이 뭔지 모르는 게 벼슬도 아니고 내가 그거 설명까지 해줘야 하냐? 운영부담 얘기하는 거 보니까 라이브서비스 유지보수하는 개발자인가본데 개발실패나 일정지연보다 운영부담 늘어나는 게 훨씬 나음. 애초에 저거 해결 못할 질문자면 운영부담 같은 걸 신경써야 할 상황도 아닐 거임 니 입장에서만 생각해서 '내 상황에선 그러면 안되는데?' 이러면 당연히 니 입장에선 다 맞겠지? 뭐 어쩌란 건지 모르겠군.
@ㅇㅇ(121.165) 글고 레디스에 워커 하나 쓰는 것도 동시성 달성하는 좋은 방법 중 하나임. 그럼 이게 동시성 달성 못한 거냐? 개발 실패하는 것보다는 200배 나아 애초에 오버엔지니어링이 문제인 건 기술에 집착해서 제때 개발을 못하기 때문이잖아. 니가 말한 방법을 적용하는 게 빠르겠냐? 아니면 내가 말한 방법이 더 빠르겠냐? 니 방법이 더 느리겠지. 네트워크 요청 이지랄도 마찬가지임. 어차피 같은 컴에 띄울 건데 네트워크 요청이 뭔 의미가 있냐 이걸로 운영비영에 유의미한 차이가 발생하려면 동접자가 1만명은 되어야 할 것 같은데?
@ㅇㅇ(121.165) 라이센스 얘기는 아예 논점 이탈이니까 답변 안하겠음
ㅇㅈ한다. 참고로 나는 서비스 아키텍트 함. 주로 온프레미스로 분산환경 고려한 솔루션 설계에 기본적인 서버랑 어드민 ui cli 만들어줌. 락하나 제대로 못해서 개발 실패할 정도면 걍 로컬 머신에 띄우고 싶은거 다 띄우는게 맞는거같다. - dc App
디버깅 하는 조언이랍시고 걍 그렇게 짜지말고 외부서비스로 돌리라는 거에서 깊은 감명 받고간다 - dc App
@ㅇㅇ(121.165) 아니 뭐야 지금 몇 명이 얘기하고 있는 거야 아이피가 다르네
@ㅇㅇ(121.165) ㅋㅋ 듣고보니 그렇네 디버깅에 대한 조언이 아니네
개발이 아니라 유지보수를 맡은 입장이라면 불가피할듯 ㅇㅅㅇ
아 이거 쉽든데 ㅋ