본문 바로가기
일상,취미

다시 시작하는 TIL 12일차

by 진득한진드기 2024. 6. 22.

오늘 한일

 

오늘은 코드리뷰하는 날이어서 엄청 혼나고 내가 짠 코드를 고치는 것에 많은 시간이 들어갔다.

 

프로세스 실행 명령어를 const 로 그냥 위에 박고 사용했는데 const도 사용 용도에 따라 분할하여 이후에 사용성을 높여야한다고 한다.

 

주소값을 할당해서 객체를 생성하고 return 값으로 해당 객체의 주소값을 반환 했는데 이게 내가 짠 코드가 길어지다보니 돌아가긴 하는데 내가 짠 코드에 이어서 짜는 시간이 점점 오래걸렸다.

 

그냥 짜는 것이 아니라 기능과 사용성 측면을 생각해서 미래 유지보수를 위해서 코드를 짜야한다......

 

객체의 주소값을 계속 return하고 파라미터 값을 쓰다보니 그게 사용이 길어졌을 때 특정 개체가 여기저기서 불러져서 오류가 발생했다.

 

내가 짠 코드도 점점 길어지니까 찾기도 어려워졌다. 결국 선배가 찾아주었다.

 

알고보니 중간에 call by value로 호출되서 문제가 생긴것이다. 평소였으면 안할 행동이긴한데 문제를 찾는데 생각보다 오래걸리게 되었다.

 

해당 문제를 마치고 나서 뭐..... 더블 버퍼링 문제는 아직 벽이 느껴져서 해결은 못했고 다른 테스크인 이벤트 교환을 구현해야한다.....

 

특정 좌표에 맞는 이벤트가 일어났을 때 그 이벤트를 다른 인스턴스가 받게하는 방식을 구현해야한다고 한다.

 

할게 늘어나긴했는데 금요일이라 집중도 안되고 몸이 안좋아서 그런지 고민만 하다가 퇴근 한것 같다....

 

 

퇴근 후 공부 

소켓 프로그래밍에서 sockaddr 등은 소켓의 소켓생성전에 속성을 부여하는 과정이기 때문에
신경써야한다.

 

sockaddr은 구조체 변수에 주소를 담아야하는데 ip정보와 port 번호를 담는다.

 

소켓이 생성되고나서 소켓이 데이터를 주고받기 이전에 소켓의 특성을 부여하는 과정이기 때문에 네트워크 바이트를 주는 것은 우리 책임이다.


bind에서 주소를 할당하는 것이 서버인것과 아닌것이 차이가 난다.

 


서버 같은 경우 할당하는 경우 자기 ip와 port 정보를 할당한다.

 


이는 서버는 자기가 목적지임을 알려줘야하기 때문에 bind하는것

 


client는 연결하기 위해서 만드는 것이기에 서버의 ip와 port를 이용해서 연결하는것이다.

 


서버와 클라이언트가 주소정보를 마련하는 것까진 똑같으나 사용하는 이유가 다르다.

 

문자열 정보를 네트워크 바이트 순서의 정수로 변환

 


in_addr_t inet_addr(const char p_string);

 

성공시 빅 엔디안으로 변환된 32비트 정수 값, 실패 시 INADDR_NONE 반환

 

 

 

int inet_aton(const char p_string, struct in_addr p_addr);

기능상으로는 inet_addr과 동일하다.

 

구조체 변수에 변환 결과가 저장된다는 점에서 차이가 보인다.

 

 

char p_inet_ntoa(struct in_addr adr);

 

성공시 변환된 문자열의 주소 값, 실패시 -1

 

inet_aton 함수의 반대기능을 제공한다.

 

성공시 반환된 문자열의 주소값 실패기 -1

 

 


인터넷 주소의 초기화


서버 소켓은 현재 실행중인 컴퓨터의 ip를 소켓에 부여할때 사용되는 것이 INADDR_ANY이다. 이는 서버 프로그램의 구현에 주로 사용된다.

 

서버는 여러대의 컴퓨터에서 클러스터링으로 연결해서 여러대로 동일 하게 실행시키기도 한다.

 

그러면 일일히 구분이 귀찮기 때문에 이럴떄 INADDR_ANY가 사용된다.

 

INADDR_ANY는 특정 값이 아니라 현재 이 소켓이 생성된 컴퓨터의 ip를 할당하라는 소리이다.

 

전에 ./hserver 9190 이런식으로 보냈는데 이거는 INADDR_ANY로 지정해서 자동으로 서버로 되므로 port번호만 받은것
./clinet는 127.0.0.1 9190 이렇게 설정했던 이유는 연결할 서버의 IP와 PORT번호를 인자로 전달한것

 

127.0,0.1은 루프백 주소라 하며 이는 클라이언트를 실행하는 컴퓨터의 IP주소를 의미한다.

 

루프백 => 되돌아 오는 주소로 데이터를 전송하면 바로 나한테 돌아서 오는 주소
즉 내컴퓨터로 연결하겠다란 뜻과 같다.

 

굳이 루프백으로 한 이유 -> 서버와 클라이언트에서 실행된다고 가정하는 것

 

이는 우리가 로컬에서 client에서 요청을 보내보고 server에서 받아보는 테스팅 과정과 같다.

 

현업에서도 이렇게 사용해서 테스트 하는일이 많기 때문에 실제로도 사용하는 방법이다.

'일상,취미' 카테고리의 다른 글

다시 시작하는 TIL 14일차  (0) 2024.06.26
다시 시작하는 TIL 13일차  (0) 2024.06.24
다시 시작하는 TIL 11일차  (0) 2024.06.20
다시 시작하는 TIL 10일차  (0) 2024.06.19
다시 시작하는 TIL 9일차  (0) 2024.06.18