예상은 했었는데 이정도로 뻥시킬줄은 몰랐는데...
고통속에 살고있습니다.ㅠㅠ 안그래도 탈모가 있는데
더 심해지고 있는거 같고.... 거기에 더 불어서
처음엔 수습이 3개월이라 했던걸 갑자기 5개월까지 뿔려버린
우리 가좆같은 사장새.......에휴..
여하튼....웹 홈페이지 프로젝트 같은건 쓰레드를 그렇게 많이 쓰는거 같지는 않던데. 제가 할일이 지금 안드로이드나 아이폰 어플쪽에서 웹서버로 action요청 하면 처리하는 서버쪽 자바단 코딩인데요 쓰레드가 뭔지는 간단히는 알고 간단한 예제정도는 해봤는데 실무에 적용하려니 영 머리가-_-;;
파견 나온지 4~5달 째 되서 여태까지 잘 버텼는데 갑자기 너무
난이도 있는 프로젝트를 혼자 처리해야되는 상황이 되버려서...
모바일 어플쪽 같은건 쓰레드처리를 해줘야 한다는데.. 어떤 이유에서일까요? push메시지 보내는거에도 쓰레드 처리를 해야하는거 같기도 한데.. 짐 하고있는 플젝은 간단히 말하면 간단한 웹+강의용 어플이라고 해야겠네요..
모바일쪽은 전혀 잘 몰라서... 안드로이드펍까지 오게됐네요..ㅠㅠ
아.. 간단한 푸쉬메시지 날릴때 쓰레드 적용된 소스라도 있으면 보면서 할수 있을거 같은데...
검색해도 제대로 안나오니 미치겠군요... 답변감사합니다... 휴...ㅠㅠ
그런데 지금 그 어플이 웹서버가 열려있을때 action요청해서 웹처럼 글작성하고 그러는건데 모든게 소켓 프로그래밍으로 되는건 아닌거 같은데 이미지 전송이나 푸쉬메시지 전송같은거만 소켓 프로그래밍으로 되는거 아닌가요??? 나머지 글작성이나 동영상 보기 같은것들은 url로 요청하는데..
모든 네트워크 통신은 소켓을 이용합니다. URL 요청등동 내부 API에서는 소켓을 통해야만 패킷이 외부로 나갈수있지요.
소켓이 외부로 연결되는 통로니까요.
그걸 이용하는 각각의 계층을 보통 TCP/IP 레이어라고 하고요(보통많이쓰는것이) 이걸 HTTP등에서는 기능을 구현해놓은
API를 쓰게되는 겁니다.
소켓을 직접 읽고 쓰는 경우에는 당연히 스레드를 사용해야되는거구요(물론 안쓸수도있습니다만...)
API의 함수를 쓰게될 경우에는 해당 함수가 블럭함수일경우 이 블럭상태에 대한 처리를 해야하는데 어차피 스레드를 쓸수밖에 없어요.
물론 이경우 직접 소켓 전송을 구현하는것보단 쉽습니다.
thread { 블럭함수.}
동영상 같은 경우 이렇게 구조를 만드시면 해당 블럭을 간단히 구현하실수 있으실껍니다.
다만 동영상 플레이해놓고 나몰라라하는게 아니면 이 상황에서 점점더 복잡해지겠죠.
우선은 안드로이드를 구현한다고 생각하지 마시고 소켓/쓰레드/메시징 구조의 네트워크를 공부해놓으시는게 나을겁니다.
어차피 제대로된 어플만드시려면 피할수는 없을꺼에요.
모든 네트워크 통신관련 함수는 논블럭과 블럭 2가지로 분류됩니다.
blocking : 어떤 이벤트가발생했을때 종료될때까지 블럭되어 다음 코드로 넘어가지 않습니다.
non-blocking : 어떠한 이벤트가 발생했을때 블럭되지 않습니다.
즉, 블럭함수란 어떤 일이끝날때까지 CPU 점유율이 0이되더라도 다음진행을 하지않는것입니다.
따라서 단 1바이트를 전송하거나 받더라도 블럭함수를 사용하면 전송이 끝날때까지 다음 작업이 이루어지지않게되고
이런 소프트웨어는 상품가치가 없어집니다.
고로 이걸 풀어주기 위해서 논블럭함수처럼 바꾸어 주어야하고 그때문에 스레드를 사용하게 되는겁니다.
문제는 논블럭의 경우 언제 끝날지, 어떻게 끝날지 모르기때문에 그걸 처리하기 위해 메시징 구조의 프로그래밍을 하게되는겁니다.
C/C++을 모르더라도 간단한 TCP/IP 관련 책을 한번 보시기를 권합니다.
아아.. 함수 관련은무슨뜻인지 알겠네요 ㅎㅎ....네트워크 프로그래밍 관련 공부를 안했는데 급작스럽게 이쪽으로 투입해서 제가 당연히 알리가 없는거였군요... 블레이드님 말대로 공부해야겠네요.ㅠㅠ...
그런데 마지막질문인데요 소캣을 연다는건 서버를 만든다는 소리 아닌가요..??? 그런데 저 어플의 액션요청은 회사에 가동중인 웹서버로 요청할텐데 소캣으로 또 따로 생성을 해야되는건가요;;??
소켓의 개념은 서버/클라이언트의 개념이 아닙니다.
단지 외부로 통하는 통로 일뿐이구요. 핸들의 개념과도 유사합니다.
즉, 핸들을 통해서 리소스를 다룰 수 있듯이 소켓을 통하여 읽고/쓰고 가능한겁니다.
서버를 연다는 것은 소켓을 연다는게 아니라 accept socket을 연다는 겁니다.
즉, accept socket은 외부의 접속을 받아들이는 소켓이고
읽고/쓰고 하는 소켓이 아닙니다.
간단히말해서 서버는 accept thread 및 몇가지 스레드의 조합으로 이루어진 스레드 군입니다.
클라이언트는 보통 읽기 및 쓰기 스레드를 가지게 되구요.
아아.....그렇군요... was방식의 서버쪽을 사용하면 굳이 쓰레드를 구현안해도 된다는 소리를 들어서.....궁금해졌었습니다...
긴 질문에도 친절한 답변 정말 감사드려요..ㅠㅠ




네트워크 소켓 프로그래밍 말씀하시는 것 같은데 그쪽은 모든게 스레드로 돌아간다고 보시면됩니다.
스레드모르시면 일 못해요.
네트워크 뿐 아니라 거의 모든 분야 및 모든 플렛폼에서 스레드는 가장 중요한 이슈입니다.
마지막 이슈를 쉽게 설명하자면 메지지 패킷을 푸쉬했을때 스레드로 돌아가지 않는다면 다 보낼때까지 블럭되어버리죠.
때문에 사이즈가 크건 작건 무조건 스레드 처리는 기본입니다.