이상한 코딩 나라의 혜돌이
들어가기 앞서 MavenBom에 대해서 간단히 알아보자. BOM은 Bill Of Materials의 약자이다.BOM은 프로젝트의 dependency 버전을 제어하고 해당 버전을 정의하고 업데이트하는 중앙 위치를 제어하는 특별한 종류의 POM이다.MavenBom을 사용하면 우리가 필요한 dependency의 버전을 신경쓰지 않고 프로젝트에 dependency를 추가할 수 있다고 한다. 자세한 내용은 여기로 내가 이해한 바로 간단히 설명해 보자면, mavenBom은 프로젝트에 추가한 dependency를 관리해주는 역할을 하는 것 같다.예를 들면 충돌 방지나, 버전 업데이트 뭐 그런 거..? 그런데 무슨 일인지, 내 컴퓨터에서는 mavenBom을 사용할 수가 없었다. 뻥 안 치고 intellij를 오백 번 ..
소켓에서 읽어온 메시지를 write 함수로 출력하고 이어서 printf 함수를 썼을 때 출력 시점과 모양이 이상하게 되는(?) 문제가 발생했다. write = write(1, buf, read);...printf("\nInput Word: "); 실제 출력해보면 개행이 사라지는 등 이상한 .... 현상이 생겼다. 교수님께 여쭤보니, stdout에 출력할 때 write 함수와 printf 함수를 섞어서 사용했기 때문에 발생한 문제라고 하셨다.또 추가로 찾아보니 write 함수는 버퍼에 있는 내용을 그대로 출력하고 printf 함수는 표준 출력 모드로 동작하여 종료 문자('\n', '\0')를 만났을 때 내용을 출력한다고 한다. 문제를 해결하기 위해서는,printf 또는 write 함수 중 하나로 통일해서 ..
C언어에서 클라이언트와 통신하기 위한 서버 프로그램을 작성할 때, 소켓을 사용한다. bind 단계에서는, sin_family, sin_addr, sin_port 등을 설정한다.프로그램 작성 후 디버깅 및 테스팅을 위해 서버 프로그램을 강제 종료하고, 포트 번호 변경 없이 바로 실행시키면 bind error가 발생한다.그 이유는 해당 포트를 이미 사용하고 있어서 발생하는 문제이며 기존 프로그램은 종료되었지만 비정상 종료된 상태로 아직 커널이 bind 정보를 유지하고 있기 때문에 발생하는 문제이다. 이때, bind에 사용 되는 소켓의 설정을 약간 변경해 주면 해당 문제를 해결할 수 있다.setsockopt라는 함수로 소켓 설정을 변경할 수 있다. 위 함수로 소켓에 SO_REUSEADDR 옵션을 주면 기존에 ..