Serach

2013년 10월 10일 목요일

서버 프로그래밍시 주의할점

* 사용자에게서 받은 값은 전부 범위체크를 한다.
-> 어떤 값이 들어올지 모른다. 신용은 금물! 특히 문자열에 주의하자.
 
* 아이템 장착 해제 시에는, 해당 아이템이 장착 중인지를 반드시 검사한다!
-> 클라이언트가 중복 착용/해제 시도를 안 할거라는 확신을 하지 말아라. 
     확신은 서버에서 직접 검사를 한 후에 해라.
 
* 서식 지정자에 잘못된 값을 넣는 것을 조심해라!
-> 서식 지정자 "%s"로 문자열을 입력 받으려 하는데, float형이나, int형을 입력했을 때에도 
     C는 널을 만나기 전까지 데이터 읽는 것을 멈추지 않는다.
     잘못된 메모리를 억세스 해서 생기는 문제는 언제나 조심하자
 
* 검사 시점을 주의하라
-> 즉시 이뤄지는 처리가 아닌, 다른 곳에서 인증이나 처리를 하고 온 후 처리 되는 경우라면, 
     민감해야 한다 , 다른 곳으로 처리를 하러 간 도중에, 이 값을 어떤 식으로든 사용하게 된다면, 
     오류가 생기기 때문이다.
 
* 테스트는 최대한 실 서버와 같은 환경에서
-> 가급적이면 서버는 테스트 코드를 적게 돌려야 한다. 
     QA와 같은 테스트는 실 서버와 같은 환경에서 이뤄져야 실 서버 패치 후, 
     또는 실 서버 패치 시에 생기는 문제를 방지할 수 있다.
 
* 추가 하는 코드에 대해 명확히 이해하라
-> 코드를 추가할 때, 그 코드가 어떤 기능을 하는지 간단한 테스트라도 해라. 
     처음 시도하거나, 사용하는 알고리즘, 라이브러리 사용시에는 특히 주의하라. 
     그 기능을 명확히 이해하지 못하고 사용한다면, 그 것은 우연에 맡기는 프로그래밍을 하는 것이다.
 
* 적은 조건을 만족해도 잘 돌아가는 코드를 작성해라 (복잡도를 줄여라)
-> 많은 조건을 충족 해야 하는 상황에서만 잘 돌아가는 코드보다는, 
     적은 조건을 만족하는 상황에서도 잘 돌아가는 코드가 좋은 코드다. 
     특별한 이유(속도,메모리 등)가 없다면 유연한 코드를 작성해라.
 
* 가정을 하지 마라. 코드에서 직접 제약을 걸어라.
-> 어떤 처리에 대한 클라이언트와의 규약 (예를 들면, 비번 방 지정은 방장만 할 수 있다던가, 
     게임 방에서만 가능하다던가 하는 가정)은 지켜질 수 있도록 코드에서 
      그 동작이 불가능 하도록 만들어라.

댓글 없음:

댓글 쓰기