최고 품질의 상품들을 지금보다 더 많은 소비자들이 여러 유통 채널에서 더욱 폭 넓고 쉽게...
1. 자발적으로 최고 수준의 목표를 세우고 끈질기게 성취한 경험에 대해 서술해 주십시오.
(본인이 설정한 목표/목표의 수립 과정/처음에 생각했던 목표 달성 가능성/수행 과정에서 부딪힌 장애물 및 그 때의 감정(생각)/목표 달성을 위한 구체적 노력/실제 결과/경험의 진실성을 증명할 수 있는 근거가 잘 드러나도록 기술)
시스템프로그래밍 수업 시간에 시스템 콜과 소켓 프로그래밍에 대해 배웠고, 이를 이용해 현재 디렉토리 리스트를 출력하는 웹 서버를 구현하는 것을 목표로 하였습니다.
우선적으로는 디렉토리의 파일 리스트를 출력해야 하기 때문에 시스템 콜을 사용하여 파일 리스트를 출력하는 것을 가장 처음 목표로 하였습니다. 학교에서는 파일 리스트를 출력하는 데 필요한 정보를 가져오는 함수들과 사용법을 전부 알려주지 않았기에, 인터넷 검색과 친구들과의 토의로 필요한 정보들을 얻었습니다.
opendir 함수와 stat 구조체를 이용하여 파일 정보를 출력하는 것을 구현한 다음에는 소켓 프로그래밍을 이용해 기본적인 기능을 하는 웹 서버를 구현하는 것을 목표로 하였습니다. socket, bind, listen, accept 함수로 클라이언트인 웹 브라우저를 listen하도록 구현하였습니다. 실제 웹 서버는 하나의 클라이언트를 받는 것이 아니라 여러개의 클라이언트를 동시에 받기에 클라이언트가 다중으로 접속하게끔 구현하는 것을 목표로 했고, thread를 이용하여 여러 개의 클라이언트를 동시에 받도록 구현하였습니다.
다중 클라이언트를 받는 것을 구현한 후에는 실제 서버가 서버의 상태를 로그로 표현하듯이 로그 파일을 작성하는 것을 목표로 하였습니다. 처음에는 단순히 파일 쓰기만 하면 될 줄 알았는데 여러개의 thread가 동시에 파일에 접근하는 것에 문제가 생겨 프로세스간 자원 관리 기법을 필요로 했고, semaphore를 통해 프로세스간의 자원 할당을 관리하였습니다.
그 결과 위의 기능을 하는 웹 서버를 구현할 수 있게 되었습니다. 이전까지는 Windows OS에서 개발을 진행했기에 CLI 기반의 OS인 Ubuntu에서 개발하는 것이 익숙하지 않아 힘들었으며, 다중 thread를 사용하는 프로그램을 디버깅하는 것이 어려웠습니다. 그래도 그 결과로 linux 시스템을 이해할 수 있게 되었고, CLI환경을 익숙하게 사용할 수 있게 되었습니다.