반응형

자바(Java)에서 Exception을 잘 다루면 여러 상황에 대한 대응력과 유연성을 높일 수 있지만, 예외처리에 대한 일관된 기준이나 잘 정리된 설계가 없으면 어떻게 처리(handling)할 지 막막해지기도 한다. 그래도 코딩하는 과정에서, 내가 만든 특정한 클래스를 참조해서 쓰는 다른 (작성자가 나일 수도 있고, 다른 개발자일 수도 있는) 클래스에게 이 예외상황만큼은 반드시 명시적으로 인지하고 특별하게 처리하도록 하고 싶으면 메쏘드 제목에서 throws 구문으로 예외를 caller에게 전달해야 한다.


그런데 특정한 예외를 caller에게 전달하려고 throws로 예외를 명시했는데도 caller 쪽에서 그 예외를 catch하지 못하는 경우가 있는데, 알고 보니 throw 하는 예외가 상속 관계에 의해서 부모 예외 타입으로 다른 곳에서 먼저 catch되는 바람에 caller 쪽에서 처리하지 못했던 것이었다.



구체적인 상황은 다음과 같다:


UDP Datagram Socket을 이용한 메세지 송수신 역할을 담당하는 클래스가 있는데, 여기에 타임아웃(timeout) 기능을 추가해서 특정한 메세지 전송에 대해서 응답을 받기 위해서 UDP Socket을 열되, 일정 시간 동안만 기다리도록 만들 필요가 생겼다. 찾아보니 Socket 클래스의 setSoTimeout 메쏘드를 시간값 파라미터와 함께 호출하면 해당 시간이 지난 뒤에 자동으로 SocketTimeoutException을 발생시킨다는 사실을 확인했다. 


그래서 아래와 같이 sendMessageAndGetReply(String ip, int port, String msg, int timeout) 메쏘드를 정의하고 throws SocketTimeoutException을 추가로 적어 주었는데, 그럼에도 불구하고 caller 쪽에서는 SocketTimeoutException을 catch할 수가 없었다.



public static String sendMessageAndGetReply(String ip, int port, String msg, int timeout) throws SocketTimeoutException {

String reply = null;

byte[] sendData = new byte[1024];

byte[] receiveData = new byte[1024];

try {

DatagramSocket clientSocket = new DatagramSocket();

sendData = msg.getBytes();

DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, InetAddress.getByName(ip), port);

clientSocket.send(sendPacket);

DatagramPacket recvPacket = new DatagramPacket(receiveData, receiveData.length);

clientSocket.setSoTimeout(timeout); // 추가로 타임아웃을 명시적으로 설정한 부분

clientSocket.receive(recvPacket);

reply = new String(recvPacket.getData());

clientSocket.close();

} catch (UnknownHostException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return reply;

}



그런데 신기하게도 실행 화면에서는 SocketTimeoutException이 발생했다고 출력은 되는데, 정작 caller에서의 catch 구문은 실행되지 않았다.

코드의 다른 곳에서 해당 예외를 이미 처리했다는 의미인데, 알고 보니 sendMessageAndGetReply 메쏘드에서 catch (IOException e) 부분이 원인이었다. SocketTimeoutException은 java.io.InterruptedIOException을 extend한 자식 클래스이고, InterruptedIOException은 또한 IOException을 extend하고 있기 때문에, sendMessageAndGetReply가 해당 예외를 이미 처리해 버렸기 때문에, 제아무리 메쏘드 이름 옆에 throws로 명시해 두어도 throw가 되지 않았던 것이었다.


이것을 해결하기 위해서 결국 코드를 아래와 같이 고쳐야 했다. [2]


public static String sendMessageAndGetReply(String ip, int port, String msg, int timeout) throws SocketTimeoutException {

String reply = null;

byte[] sendData = new byte[1024];

byte[] receiveData = new byte[1024];

try {

DatagramSocket clientSocket = new DatagramSocket();

sendData = msg.getBytes();

DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, InetAddress.getByName(ip), port);

clientSocket.send(sendPacket);

DatagramPacket recvPacket = new DatagramPacket(receiveData, receiveData.length);

clientSocket.setSoTimeout(timeout); // 추가로 타임아웃을 명시적으로 설정한 부분

clientSocket.receive(recvPacket);

reply = new String(recvPacket.getData());

clientSocket.close();

} catch (UnknownHostException e) {

e.printStackTrace();

} catch (IOException e) {

if(e instanceof SocketTimeoutException){

// 자식 클래스 예외를 특별하게 처리

throw new SocketTimeoutException();

}

e.printStackTrace();

}

return reply;

}


이렇게 했더니 콜 스택이 짧아지긴 했지만, 그래도 caller 쪽으로 Socket TimeoutException만큼은 확실하게 넘어가는 것을 확인할 수 있었다.


결론적으로, 당연한 얘기지만 예외를 처리할 때, throw하려는 예외가 혹시 해당 위치에 이미 존재하는 다른 catch 구문에 의해서 같이 처리되지는 않는지 상속 관계를 바탕으로 꼼꼼하게 확인할 필요가 있다.




<참고자료>

[1] http://stackoverflow.com/questions/27797451/i-cant-catch-sockettimeoutexception

[2] http://stackoverflow.com/questions/20532855/why-cant-i-handle-exception-e-with-try-catch-clause



반응형
블로그 이미지

Bryan_

,
반응형

내 개인연구 실험을 위해서 개발하고 있는 서비스 인지 네트워크 아키텍처에서, flow 기반 라우팅 모듈과 traffic shaping 모듈 각각의 모듈 테스트를 성공한 지 어느새 2주 정도가 지났다. 그 외에도 이웃 노드들의 link quality를 실시간으로 측정하는 모듈은 진작에 몇 개월 전부터 완성되어 있었고, 서비스의 요구사항을 인식하는 부분도 오래 전부터 조금씩 완성도가 높아져 있는 상태였다.


하지만 이 모든 것을 연동해서 실제로 서비스가 요청하는 경로 하나를 만들어 내는 것까지 검증하는 연동 테스트에서 계속 시간을 소비하고 있다. ㅜㅜ 모듈 테스트에서 예외상황을 처리한 줄 알았는데 알고 보니 잊고 처리하지 못한 부분에서 기다렸다는 듯이 에러가 발생하고, 미처 생각지 못한 파라미터 값의 불확실성으로 인해서 예외 상황도 새로 생겨났다.


나름대로는 최선을 다해서 치밀하게 코드를 짜려고 했지만, 그리고 최대한 모듈들 간에 인터페이스를 미리 맞춰 두려고 했지만, 결국 실제로 모듈의 기능을 구현/개선하는 과정에서 미리 약속해 둔 인터페이스가 변경되는 일도 발생한다.


설계 단계에서부터 명확하게 잘 하는 것이 중요하다는 것을 피상적으로는 알고 있지만, 현장에 뛰어들어서 직접 코딩하다 보면 그게 말처럼 쉽게 되지 않는다. 설계를 잘 하려고 해도, 커널에 근접해 있는 각종 네트워크 기능들을 충분히 이해하는 상태라야 가능한 영역이 있어서 어려움을 겪곤 한다. 일단 요구사항만 주어진 채 달려들어서 user level 프로그램의 입장에서 구현을 시작하다 보면, (나는 서비스를 도와 주는 미들웨어를 개발하는 입장이니까 일차적으로 user level API에서 Kernel level로 메세지가 전달되는 구조이다.) 커널 영역에서는 실제로 더 많은 세부사항들을 정의해 주어야 하고, user level에서 제시하는 정보가 부족하기 때문에 제대로 작동하지 못하는 경우가 생긴다. 결국 다시 user level 모듈부터 재설계를 해서 다시 Kernel level에 제대로 모든 정보가 흘러들어가는지 확인해야 한다.


두세 번 이렇게 반복하면 설계 단계에서 무슨 정보를 줘야 하는지는 확실해지긴 하지만, 그 다음으로 겪는 어려움은 실제로 주어진 정보를 가지고 원하는 기능이 작동하도록 구현을 하는 것이다. 더 자세히 얘기하자면, 원하는 기능이 "효율적으로" 작동하도록 구현하는 것이다. 사실 효율성이라는 것도 겪어보지 않은 작동 과정을 상상하면서 어디서 어떤 비효율이 발생하는지 예상할 수 있어야 하는데, 그게 잘 상상이 되지 않는 것이 문제다. 실제로 어느 정도 의미 있는 데이터의 범위를 갖고 돌려 보고 나서야 어느 과정에서 비효율이 발생하는지 알 수 있게 된다.


내가 1년 정도만 더 일찍 지금과 같은 노력을 시작했으면 좋았겠다는 후회가 될 때도 있지만, 지금이라도 제대로 실험환경을 구축하고 역량도 키워가는 과정이라는 것에 위안을 삼으며 마음을 다잡곤 한다. 박사과정 학생 신분으로 연구를 자유롭게(?) 계속할 수 있는 기한도 이제 많지 않은데, 그 전에 최대한 경험치와 역량을 쌓고 싶다. 그 동안의 더디게만 올라가던 learning curve가 이제 조금 가파르게 상승할 것 같은 기대감이 생기는 시기에 와 있는데, 이번에 실험환경 구축이 잘 되면 꼭 좋은 논문을 만들어 내야겠다. 일단은 급하게 써야 하는 논문부터 먼저 만들어 내고... ㅜㅜ



반응형
블로그 이미지

Bryan_

,
반응형

OS: Ubuntu 14.04



Xrdp를 이용해서 xfce4 세션을 사용하는 원격 데스크탑에 로그인하는 것은 잘 되는데, 사용이 끝나고 나서 로그아웃을 하려고 하면 상단의 작업표시줄 패널과 창, 아이콘들만 사라지고 바탕화면이 그대로 남은 채 더이상 진행되지 못하는 문제가 있다.



그림 1. xfce4에서 우측 상단의 사용자 계정명을 눌러서 나오는 로그아웃 메뉴를 통해서

위의 화면에서 Log Out 버튼을 눌러도 로그아웃이 되지 않는 문제가 있다.



이 문제에 대해서 여러 사용자들이 우분투 커뮤니티를 비롯한 여러 곳에 질문을 올렸지만, 어느 곳에서도 근본적인 해결책을 찾을 수 없었다. xfce4 개발자가 해결해 주어야 하는데, 몇 년째 별다른 진전이 없는 것 같다. ㅠㅠ


만약 xfce4 세션을 완전히 로그아웃시키지 못하면 결국 위와 같이 세션 하나가 바탕화면만 남겨진 먹통 상태로 남겨진 채 메모리와 포트 번호(XRDP 설정에 따라 다르지만 보통 5910부터 시작)를 더이상 사용하지 못하게 되고, 다음에 다시 원격 데스크탑을 쓰려면 새로운 포트 번호를 할당받는 새로운 세션을 만들어야만 한다.


좋은 방법은 아니지만, 아예 세션을 강제로 종료시키는 방법으로 해결할 수는 있다.

$ killall --user $USER -TERM


또는 직접 사용자 계정명을 지정해도 된다. (예: odroid)

$ killall --user odroid -TERM



주의사항:

위와 같이 하면, xfce4 뿐만 아니라 해당 사용자 계정으로 켜져 있는 터미널 세션까지 모두 다 종료되어 버린그래도 터미널 세션은 다시 ssh로 접속하면 되므로원격 머신을 재부팅하기는 싫고 좀비 상태로 남은 xfce4 세션을 정리하고 싶다면 이 방법이 그나마 효과적일 것이다.



<참고자료>

[1] https://bbs.archlinux.org/viewtopic.php?id=159958



반응형
블로그 이미지

Bryan_

,
반응형

(주의) 이 글은 두서없이 쓴 일기입니다.


가끔 육아와 가장의 짐을 짊어진 채 여전히 불투명한 박사학위를 앞두고 부족한 시간을 두고 싸우는 내가 처량할 때가 있다.

아무도 내 고민을 자세하게 모르는 것 같다. 실험은 실험대로 잘 안되고, 하루라도 빨리 논문을 써야 하는데 신경쓸 것은 너무 많고, 연구에 최고의 집중력과 시간을 들여야 하지만, 온갖 잡다한 일처리들 다 하고 나면 내게 주어지는 '자원'은 이미 체력을 소진한 육체와 늦은 저녁시간밖에 없다. 그 때가 되어서야 겨우겨우 집에서 도망치듯이 나와서 연구실에 와서 실험이든 논문 작성이든 시작할 수 있다. 이미 그런 늦은 시간에 와 봐야 졸리기 시작하고 집중도 잘 안되고, 기껏 주어지는 시간에도 제대로 실험 진행이 안되는 경우가 허다하다. 이렇게 시간은 시간대로 허비하고, 그렇다고 일처리 제대로 되지도 못한 채 그냥 잠을 자려니 그냥 허비해 버린 하루가 너무 아까워서 잠을 자려고 생각하면 화가 난다. 뭔가 조금이라도 해둬야 할 것 아닌가? 그렇게 쓸모없이 새벽을 맞이한다. 말 그대로, 진심으로 내 인생이 속상하다.


집에 PC를 잘 설정해 놓고 듀얼모니터까지 갖췄지만 아무 소용없다. 나를 제외한 다른 가족 구성원들이 같은 공간에 있는 이상 꾸준히 집중해야 뭐가 됐든 진행이 되는 연구인데 그럴 수가 없는 환경인 건 너무 당연하다. 정말 예쁘고 귀여운 딸이지만, 잠들기 전까지 딸과 놀아주고 밥 먹여주고 씻겨 주고 어지럽혀진 집안 정리를 해야 하는데, 아내가 그 뒤치다꺼리를 대부분 맡아 준다고 하더라도, 내가 그 옆에서 그 정신없는 집안에서 혼자 연구한다고 PC 앞에만 앉아 있을 수가 없다. 뭘 도와줘도 도와줘야 안심이 되고, 실제로도 딸아이가 나한테 계속 오니까 수시로 봐줘야 한다.

이러니 아내에게 너무나 미안하지만, 정말로 실험이든 연구든 진행을 시키려면 주말에 모처럼 시간이 주어졌을 때 독하게 마음먹고 집을 박차고 나와야만 한다. 내가 살아남기 위해서는 이렇게 안할 수가 없다. 가정적인 남자? 당연히 내가 원하는 바이지만, 졸업도 못했고 영영 졸업 못할 위기에 놓인 내가 가정적인 남자가 되는 것이 다 무슨 소용인가? 나에게는 엄청난 사치이다.


그럼에도 불구하고 어쩔 수 없이, 토요일 하루 정도를 정말 독하게 마음 먹고 가정에서 가정적인 남자로 '희생'해야만 하는 경우가 더러 있다. 말 그대로 그냥 하루가 없어진다. 그 하루 동안에 연 5억짜리 정부 과제의 연차보고서 한 편을 끝낼 수 있고, 관련연구 논문 10편 정도를 발췌 형식으로 읽을 수 있고, 실험은 상황에 따라 다르지만 모듈 하나 정도의 기능과 버그는 해결할 수 있을 텐데, 가장 좋은 컨디션과 집중력을 모두 아기에게 쏟아부어야 한다.

다시 한번 말하지만, 나는 진심으로 가정적인 남편이자 아빠가 되고 싶다. 하지만 하루라도 빨리 졸업요건을 맞출 수 있는 논문을 내야 되는 상황에서 하루를 온전히 소비하는 것은 나한테는 시간낭비이고, 우리 가족 전체의 불확실성과 고생을 향해서 한 발짝씩 더 전진하는 것밖에 되지 않는 것이다. 지금 당장 가정적인 게 다 무슨 소용인가? 매일매일 이런 갈등이 단 한 번도 내 머릿속을 떠나지 않는다.


근본적인 것부터 생각하자면, 박사과정을 하는 동안 육아를 할 생각을 절대로 하지 말았어야 하는데 나도 아내도 너무 순진했다. 아기는 혼자서 그냥 잘 클 줄 알았지만, 나 또는 아내의 모든 시간을 다 쏟아붓는 것이 전제조건이라는 사실을 몰랐다. 게다가 돈도 이렇게나 많이 들 줄도 몰랐다. 매달 적자가 나다가 가끔 들어오는 대학원생 세금 환급이나 장려금 같은 걸로 겨우 카드값을 메꾸고, 그 다음 달 부터 또다시 적자가 시작된다.


이래서 인생에서 타이밍이 정말 중요한 것이다. 제때 졸업했어야 하고, 제때 노력했어야 하고, 제때 인생의 각종 선택이 주는 결과와 의미들을 깨달았어야 하는데, 나는 이상하게 그게 대략 2년씩 늦어졌다. 지금의 졸업에 대한 고민을 2년만 더 일찍 심각하게 시작했더라면 내가 이토록 고민에 휩싸이지 않았을 텐데... 나는 왜 이리도 느리고 능력이 부족한 것일까? 정말 속상하고 답답하다. 더 똑똑하고 더 이해속도와 코딩 속도도 빠르고 영어도 더 잘 하고 싶다. 남의 논문은 잘 봐주고, 정부과제 정도는 이제 손쉽게 할 수 있음에도 불구하고 정작 내 개인연구만 생각하기 시작하면 정말 동기부여가 약해지고, 하기도 싫어지고, 잘 진행도 안되고, 어렵기까지 하다. 정말 속된 말로 거지같다.


단 하루라도 가족과 함께 놀기만 하느라 연구실에 나가지 못하거나 컴퓨터를 쓰지 못하면 불안해지는 내 감정 상태를 놓고 보면 워커홀릭인데, 정작 또 연구실에 가서 일을 하려고 하면 쉽사리 진행하지 못하는, ADHD 같은 증상을 겪기도 한다. 정말 미치고 팔짝 뛸 노릇이다. 제발 이 거지같은 굴레를 벗어나고 싶다.


연구실에서 정부 과제 제안서 작성, 과제 실무책임 역할만 지나치게 강화한 것 같은데 이게 다 무슨 소용일까? 내 졸업연구 주제와 관련은 없지만 주제 그 자체로 놓고 보면 트렌디하고 중요한 편에 속하는 과제를 맡아서 운영했었는데, 내 핵심 실력을 키울 생각은 하지 않고, 부수적인 실력들만 키우는 것 같아서 아주 속상하다. 이런 멀티플레이어 따위 되어서 어디다 쓸 지 회의감만 들 뿐. 지금 배운 이 역량이 쓰일 만한 시기도 대략 10~20년 뒤일 것 같은데 내 핵심 역량을 키워야 할 시간에 리더쉽 역량이나 키우고 있으니 이것 또한 거지같다. 내가 학부 때 진작부터 온갖 다양한 활동들 해 보면서, 이런 활동을 하면 어떤 폐단이 있고 저런 활동을 하면 어떤 수고를 해야 된다는 등의 견적을 냈어야 하는데 그러질 못했나 보다. 역시나 앞서 얘기한 대로 내가 대략 2년씩 남들보다 뒤처지는 느낌이 들어서 아주 속상하다. 진작에 잘 했으면...


내가 다시 3년 전으로 돌아간다면 자녀 계획을 전면 취소했을 것이고, 그외 내 인생에 잡다하게 걸쳐져 있던 연구와 관련없는 여러가지 사회적인 활동들도 다 중단했을 것이다. 그렇게 함으로써 개인연구 주제에 대해서 뜬구름 잡는 소리나 하던 그 시절에 내가 내 인생이 망가질 수 있다는 위기감을 고조시켜서 하루라도 빨리 실제 실력을 키우려는 노력을 기울였어야 한다. 인생은 결국 핵심 역량에 대한 실력으로 스스로를 증명해야 한다. 축구 공격수는 골을 넣어야 하고, 골키퍼는 공을 막아야 한다. 박사과정은 좋은 저널 논문이나 좋은 학회 논문을 써야 한다. 그 외의 잡다한 활동들로부터 얻는 실력을 논문 말고 무엇으로 증명할 수 있을까? 결국 논문이 없으면 실력이 없는 거나 마찬가지가 되고 만다. 연구실에 온갖 기여를 하고, 과제 관리를 잘 해서 나에게 주어지는 것이 무엇이 있는가? 푼돈밖에 안되는 연구비 외에 내가 얻는 것은 죄다 눈에 하나도 보이지 않는 것들이고, 인생의 중년과 노년이 되어서야 쓰일 만한 것들이다. 하지만 지금 당장 핵심 역량을 입증하지 못한 채 습득하는 그런 곁가지 능력들은 결국 쓰임받을 기회도 얻지 못한 채 썩어버릴 것이다. 


공부해야 할 때 제대로 해야 하고, 제대로 공부해야 하는 시기를 놓침으로써 생기는 인생의 문제에 대해서 심각하게 생각해야 한다. 나는 이런 심각성이 없어도 너무 없었다. 좋게 말해서 믿음이고, 나쁘게 말해서 멍청함이다. 더 이상은 멍청이가 되고 싶지 않다. 제발 프로페셔널 답게 실력을 갖고 싶다. 내 실력으로 내가 박사학위 받을 만한 존재임을 드러내고 싶다. 최근 들어서야 이러한 열망이 생겼지만, 애석하게도 지금 내 인생은 타이밍을 놓치는 바람에 방해물이 너무 많이 생겼다. (어떻게 자기 딸아이를 보고 방해물이라고 생각할 수 있는지 의심스러운가? 나와 똑같은 상황이 되어 보라고 하고 싶다. 겉으로는 아기와 행복하게 즐겁게 놀아 주고 함께 좋은 추억은 의무감으로 만들어 가고 있지만 지금 내 속은 우리 가족을 사지로 내몰고 있는 듯한 걱정에 새카맣게 타 들어가고 있다는 것을 누가 알아 줄까? 내가 아기의 정서발달에 악영향을 주고 싶지는 않아서 의무감에서라도 놀아 주는 것이 그나마 다행인 상태다.)


속상하고 답답하다. 이 분노의 마음을 동력으로 삼아서라도 지금 내게 주어진 이 시간에 실험이 좀더 진행되기를 바라며, 이렇게 답답한 마음을 글을 통해서라도 쏟아내고, 훌훌 털고 연구를 조금이라도 더 가볍게 진행할 수 있기를 간절히 바랄 뿐이다.

반응형
블로그 이미지

Bryan_

,
반응형

관련 기사:

조선비즈, [이코노미조선] "삼성전자 경쟁자는 애플 아닌 제조 역량 키우는 폭스콘" [1]



KDI(한국개발연구원) 국제정책대학원에 있는 토니 미셸 교수가 뉴스기사 인터뷰를 통해서, "제품 측면에서 삼성전자와 견주어 볼 만한 상대가 애플이 아니라 아이폰을 실제로 생산/조립하는 폭스콘(Foxconn)으로 봐야 한다"는 분석을 했다.


뉴스기사의 제목은 이목을 집중시키려고 한 것인지 제목의 간결성을 유지하기 위해 의도적으로 줄인 것인지 모르겠지만 단순히 삼성의 경쟁자가 폭스콘이라고만 썼지만, 결국 스마트폰을 비롯한 'IT기기 제조역량 측면'에서의 경쟁자가 폭스콘이 될 수 있다는 의미로 해석된다. 삼성전자는 IT기기에 들어가는 몇몇 핵심 부품(메모리, 모바일 프로세서 등)의 제조부터 완제품 판매, 서비스 부분까지 사업이 커버하는 범위가 넓어서 비교하는 기준에 따라 경쟁자가 다른 것처럼 보인다. 그래서 완제품 모바일 기기 측면에서는 가장 많이 팔리는 두 가지 종류의 스마트폰인 아이폰과 갤럭시 시리즈로 인해서 애플이 자주 비교대상에 오르내린다. 다만 여기서 경쟁자로 간주하는 것은 반드시 실제 경쟁 가능한 규모인가 아닌가를 따져서 정의하는 것이 아니고, 소비자가 느끼는 측면과 제조하는 제품의 유사성 등으로 볼 때 그렇다는 것이므로 오해가 없었으면 좋겠다. (시가총액, 영업이익, 브랜드가치 등 비교하려는 기준을 무엇으로 보느냐에 따라 달라질 수도 있다.) (국내에서도 실제 회사 규모의 차이가 매우 큼에도 불구하고 삼성전자와 LG전자가 자주 비교되는 것과 같은 맥락이다.)


결국 제품 그 자체의 품질과 성능 등을 비교하는 경우에는 애플의 아이폰을 실제로 제조한 폭스콘의 제조 능력과 삼성전자의 제조 능력을 비교하게 되는 것이고, 아이폰이 시장에서 인정받고 꾸준히 점유율을 유지하고 있다는 것은 결국 폭스콘의 제조 능력이 결코 약하지 않다는 반증이기도 하다. 따라서 기사 인터뷰에서도 지적하고 있듯이, 폭스콘 외에도 중국의 다른 (모바일 기기) 제조업체들의 성장이 삼성전자에게는 폭스콘과 똑같은 관점에서 충분히 위협이 될 수 있다.


토니 미셸 교수는 앞으로 삼성이 나아가야 할 방향으로 '사물인터넷(IoT)'의 발전을 거론했다. 이 말의 의미는, 삼성전자가 스마트폰 외에 판매하고 있는 여러 다른 가전제품들을 사물인터넷에 참여하는 '스마트한 사물'로 만들고, 이들을 스마트폰과 자연스럽게 연동되도록 해서 새로운 시장을 개척해야 한다는 것으로 해석할 수 있다.


여기서 정말 중요한 것은, 다른 가전제품들이 스마트폰과 '자연스럽게' 연동되면서 사용자의 만족도와 편의성을 높여주면서 같은 삼성 제품을 쓰는 데서 얻는 시너지를 극대화시켜야 하는 것이다. 그리고 이를 달성하는 과정은 더이상 하드웨어가 관여하지 못하고, 오직 소프트웨어를 통해서만 가능하다. 정말로 나를 위해서 주변 사물들이 자동으로 움직여 주는 듯 하고, 그 움직임이 나의 의도에 최대한 부합하면서 조작의 불편함을 최소화하는 '인간-컴퓨터 상호작용(Human Computer Interaction: HCI)' 측면의 노력이 매우 중요하다. 그리고 이것을 달성하는 것이 결코 쉬운 일이 아니기도 하다. 


애플이 아이폰을 만들기 훨씬 전부터 이미 HP, 컴팩, Acer 등의 회사들이 스마트폰의 전신이라고 볼 수 있는 PDA 하드웨어를 만들었고, MS가 그 기기들 위에 운영체제(Windows CE, Windows Mobile)를 올려서 시장에 내놓았지만, 아이폰만큼의 충격을 일으키지 못했고, 중간에 삼성전자도 Windows Mobile 전용 폰을 이미 만들고 있었지만 이것들 모두 아이폰이 출시되면서 순식간에 경쟁에서 도태되어 사라졌다.


2000년대 초반부터 PDA는 이미 터치스크린, 다양한 앱을 개발해서 올릴 수 있는 윈도우 모바일 플랫폼, 와이파이와 블루투스, 전화 등의 무선 통신 기술을 내장하고 있는 지금의 스마트폰과 거의 다를 바 없는 구성을 갖고 있었음에도 불구하고 성공하지 못했다. 결국 애플이 2007년에 잘 정돈되고 직관적인 UI와 아주 뛰어난 터치스크린, 앱스토어를 모두 가진 아이폰을 출시해서 가장 먼저 혁신을 일으켰고, 그 엄청난 파급효과가 지금까지 애플을 견고하게 유지시켜 주고 있다. (물론 구글이 안드로이드를 비슷한 시기에 비슷한 형태로 개발을 했지만 그 당시에는 애플에 비해 완성도가 떨어졌다.) 즉, 가장 먼저 스마트폰을 만든 것이 아니라 가장 먼저 사용자들이 정말로 사고 싶어하는 스마트폰을 만든 것인데, 이것을 가능하게 해 준 가장 큰 원동력이 소프트웨어 역량이다. (물론 손에 착착 붙는 것 같은 터치스크린도 영향을 끼치긴 했다)


이런 측면에서 볼 때, 현재 사물인터넷 시장에서도 애플이 맨 처음 아이폰을 출시할 때와 같은 혁신과 충격이 필요한 상황이다. 다만 현재까지의 상황을 보면 사물인터넷 제품이 여러 다양한 회사들에 의해서 개별적으로 개발되고, 각 제품별로 스마트폰 연동 플랫폼이 쪼개져 있는 상태라서 강력하게 시장을 리드하는 압도적인 회사가 아직까지는 없는 듯 하다.

이러한 상황에서 삼성전자를 보면, 토니 미셸 교수도 언급했듯이, 스마트폰 뿐만 아니라 TV, 냉장고, 김치냉장고, 오븐, 세탁기, 에어컨, 카메라, 프린터, 로봇청소기 등등 제품 라인업이 매우 다양하고, 이 다양한 기기들이 모두 잠재적으로 사물인터넷에 참여할 수 있는 '스마트 기기'들이다. 이 많은 기기들을 잘 연동하고, 아주 자연스러우면서도 세련되고 편리하면서 직관적으로 사용자에게 서비스를 제공해 줄 수 있으면, 삼성전자는 현재로써는 세계에서 유일하게 혼자서 스마트 홈을 만들어 낼 수 있다. 물론 이와 같은 관점에서 거의 삼성전자와 유사한 라인업을 갖고 있는 LG전자도 (비록 만년 2등 상황이긴 하지만) 충분히 가능성이 있다.


최근 삼성전자가 자사의 소프트웨어 역량을 키우려고 애쓰는 모습은 이러한 시장과 기술의 변화 측면에서 바람직한 방향이라고 생각한다. 다만 여러 개의 서로 다른 역할을 갖는 사물인터넷 기기들을 연동하는 것은 단일 기기에서 작동하는 스마트폰용 OS를 만드는 것과는 달리 '분산 시스템' 관점에서 바라보아야 하고, 따라서 보다 큰 규모의 플랫폼을 설계/개발해야 하는 어려움이 따른다. 삼성전자가 이미 IoTivity를 개발하고 있으므로, 그 플랫폼을 활용하는 '좋은' 서비스 개발의 필요성과, 킬러 서비스를 자연스럽게 실행시킬 수 있도록 사물인터넷 서비스 프랫폼의 성능을 지속적으로 개선해야 하는 필요성 또한 커지고 있다.


만약 삼성전자가 앞으로 '사물인터넷 서비스'를 제대로 시장에 내놓게 된다면, 그 때에는 아마도 대륙의 실수 제품을 연달아 만들어 내고 있으면서도 스스로를 소프트웨어 회사라고 지칭하는 중국의 '샤오미'가 사물인터넷 관점에서 경쟁자가 될 것이다 [2]. 앞으로 어떻게 될 지는 전혀 알 수 없으니, 지켜보는 수밖에 없겠다.



<참고자료>

[1] http://biz.chosun.com/site/data/html_dir/2016/07/13/2016071300975.html

[2] http://skylit.tistory.com/170



반응형
블로그 이미지

Bryan_

,