C/C++, 멀티쓰레드, TCP/IP와 UDP의 차이점, 뮤텍스, 리눅스 정도는 기본으로 다룰줄 아는것이 좋습니다.
(DB도 덤으로 알고 있으면 좋아요)
1. C/C++이 하향 추세이긴 하지만 아직까지 사용하는 곳은 많습니다.
성능을 중시하는 프로젝트 진행시에는 C/C++이 빠질수가 없죠.
특히 서버 프로그래밍시 서버 대당 가격이 높다보니 서버프로그램의 성능을 굉장히 중요시 합니다.
그리고 서버의 가격이 저럼하길 원하는 고객들이 많다보니 서버의 OS로 리눅스 계열을 상당히 많이
사용하지요.
리눅스에서도 자바로 만들어진 프로그램이 돌아가긴 하지만 같은 성능의 서버에
자바로 만들어진 서버 프로그램과 C/C++로 만들어진 프로그램의 성능 테스트를 해 보면 C/C++의
성능이 압도적까지는 아니지만 여전히 우세합니다.
(예전에 자바 VM의 최적화가 안 되어 있던 시절에는 정말 압도적으로 차이가 났었지만 요즘은 좀 덜하지요)
그래서 C/C++을 자신있다 할 정도로 마스터를 해야합니다.
덤으로 Java도 공부를 하시구요.
2. 요즘은 IDE가 잘 되어 있다보니 리눅스에서도 이클립스를 이용하여 makefile을 따로 작성할 필요 없이
알아서 컴파일 해 주고 나름 편하게 개발을 할 수 있습니다.
그래도 간혹 makefile을 직접 작성하여 컴파일하고 하는 곳도 있을 수 있습니다.
이유는 효율적인 컴파일을 하기 위함 이라고 해야 할까요?
그래서 리눅스 환경에서 gcc나 g++ 같은 컴파일러를 사용하여 컴파일하고 하려면 makefile에 대해서도 어느정도
알면 좋고 리눅스 설치 및 사용에 대해서는 기본으로 아는것이 좋습니다.
3. 멀티쓰레드, 뮤텍스, 이 두녀석은 뗄래야 뗄 수 없는 관계인건 조금 공부해 보신분들은 다들 아실겁니다.
네트워크 프로그래밍은 네트워크로 전송한 패킷에 대한 응답이 언제 들어올 지 알 수 없습니다. 그렇다고 무한정
대기할 수 없다는것도 잘 아시죠?
서버 프로그래밍을 할 때에는 서버 프로세스 하나가 수많은 클라이언트의 요청에 응답을해야하니 당연히 멀티쓰레드로
구현이 되어 집니다. 수십개의 쓰레드를 사용하는 경우가 다반사죠.
클라이언트의 경우에는?
클라이언트 프로그래밍은 서버 프로그램을 만드는것 만큼은 아니지만 UI가 뻗어버리면 사용자들은 프로그램이 죽었다
라고 인지할 수 있으니 절대 UI에 영향을 주지 않도록 모든 네트워크 처리 및 DB 처리는 쓰레드로 구현하여 별도로
돌려줘야 하지요.
4. TCP와 UDP의 차이점, 어떤 경우에는 TCP를 써야하고 또 어떤 경우에는 UDP를 써야하는지 정도에 대해서는
인지를 하고 있어야 합니다. 특성 또한 마찬가지죠.
TCP/IP는 연결 지향 프로토콜이기 때문에 하나의 connection이 하나의 port를 잡아먹고 있죠.
그리고 데이터 송수신을 원활히 할 수 있도록 connection이 끊어지지 않도록 유지를 하고 있어야 하고요.
UDP는 그냥 destination ip/port로 패킷을 전송하면 도착했는지 안했는지는 나몰라라 이긴 하지만
패킷을 자기가 원할때 언제든지 막 보낼수가 있다는 것..
이런 차이점으로 인해 사용처가 갈리게 됩니다
네트워크 관련해서 할 말은 참 많긴한데.. 곧 밥먹으러 가야해서..
한가지만 더 언급하고 밥먹으러 갑니다.
NAT(Network Address Translation)와 Public IP Private IP의 차이점!
꼭 기억하셔야 합니다.
이만 밥먹으러;;;