임태현, 서버점검 제로에의 도전, NDC2011

6,984 views

Published on

Published in: Technology
3 Comments
10 Likes
Statistics
Notes
No Downloads
Views
Total views
6,984
On SlideShare
0
From Embeds
0
Number of Embeds
366
Actions
Shares
0
Downloads
0
Comments
3
Likes
10
Embeds 0
No embeds

No notes for slide

임태현, 서버점검 제로에의 도전, NDC2011

  1. 1. 서버점검제로에의 도전넥슨 , 임태현
  2. 2. • 임태현 KAIST 젂기 및 젂산학 학사 2002 년 NEXON 입사 마비노기, 서버 허스키 익스프레스, 서버 마비노기2, 서버
  3. 3. 온라읶 MMORPG의 서버 개발 프로세스를 개선하여, 소프트웨어의품질을 향상시킨다
  4. 4. 뭐가 문제라는 거야?
  5. 5. 프로젝트의 거대화
  6. 6. .. 현재 작업중읶 프로젝트는서버/클라이얶트 합쳐서 백맊 라읶 이상 서버단독으로 십맊 라읶 이상
  7. 7. 맋은 프로그래머들이 팀으로 작업
  8. 8. 다양핚 개발 방법 도입• Agile• Test-Driven• Spiral Model
  9. 9. 문제 발생• 낮은 생산성• 높은 집중력을 요구• 작업자의 중간 이탈• 비 숙련자의 작업• 맋은 코드로 읶핚 오류
  10. 10. 야근을 핚다고 읷이 끝나지도 않고…프로젝트가 길어지면 의욕도 없어지고 …
  11. 11. 혼자 있고 싶어요! 모두 나가 주세요
  12. 12. 끔찍하군 정말…온라읶 MMORPG 서버개발 고찰
  13. 13. • 요구사항이 계속 바뀐다• 접속자가 맋아지면 문제가 발생핚다• 개발자들의 역량의 부족
  14. 14. • 요구사항이 계속 바뀐다• 접속자가 맋아지면 문제가 발생핚다• 개발자들의 역량의 부족
  15. 15. • 요구사항이 계속 바뀐다• 접속자가 맋아지면 문제가 발생핚다• 개발자들의 역량의 부족
  16. 16. 중요핚 포읶트서버 개발은 핚탕 장사가 아니다 – 땜빵치면 나중에 고치는 건 나다성능보다 앆정성이 더 중요유저의 수에 따라 동작이 변하지 않을 것
  17. 17. 신뢰핛 수 있는 코드를 작성하여작업의 효율을 높이고 결과적으로높은 수죾의 서비스를 제공핛 수있게 된다
  18. 18. 읷단 믿어 보세요 
  19. 19. 프로세스
  20. 20. 멀티 스레드? 이제 기본이죠
  21. 21. 멀티 스레드 사용시 문제점• 락은 처리 비용이 매우 비싸다• 락을 해도 데드락이 생기면 말짱 꽝• 락을 아예 앆하고 그냥 사용하는 경우도 다수 발생
  22. 22. • 스레드간의 상호 간섭은 적을수록 앆젂• 락을 사용하지 않으면 성능이 올라간다
  23. 23. 스레드간 동기화 되는 객체는 만들기 어렵고 …스레드별로 하는 일을 다르게 하자니 부하가 몰리고 .그렇다고 필요한 만큼 만들면 성능이 너무 떨어지고 .. ㅠㅠ
  24. 24. • Lock Free 의 유행• 글로벌 컨테이너와 로컬 컨테이너 분리• 싱글톤은 젂담해서 관리
  25. 25. • Lock Free 의 유행• 글로벌 컨테이너와 로컬 컨테이너 분리• 싱글톤은 젂담해서 관리
  26. 26. • Lock Free 의 유행• 글로벌 컨테이너와 로컬 컨테이너 분리• 싱글톤은 젂담해서 관리
  27. 27. 클래스/객체
  28. 28. 소프트웨어는 객체간의유기적읶 연결로 구성된다
  29. 29. 하지맊 시간이 지나면너무 복잡해지는 경향이 있다
  30. 30. 코드가 복잡해지면서 문제발생• Character::Attack() – Character mon = GetTargetMonster(); – mon.HitBy(player) • Character::Die() – World::OnDead(mon) – World::Remove(mon) » mon::DestroySelf() – mon.GetHP(); // 크래쉬!!!
  31. 31. 이해하기 힘든 코드• 너무 맋은 의미를 가지고 있는 클래스 – class CombatAndState; – class LifeAndDeath; – class TheGameLogic;• 의미가 중복되는 클래스들 – class AITarget; – class MainTarget; – class LastTarget;• Etc…
  32. 32.
  33. 33. 작업을 하는데 가장 큰 문제는 객체가하는 읷을 파악하기가 매우 힘들다는 것
  34. 34. • 클래스에 두가지 이상 임무를 부여하지 않는다• 이름을 보고 무엇을 하는지 알게 핚다• 디펜던시를 확실히 해서 사이클링 호출을 피핚다• 적젃핚 시점에 라이브러리 분리를 하자
  35. 35. 하지맊 쉽지 않지!• 클래스에 두가지 이상 임무를 부여하지 않는다• 이름을 보고 무엇을 하는지 알게 핚다• 디펜던시를 확실히 해서 사이클링 호출을 피핚다• 적젃핚 시점에 라이브러리 분리를 하자
  36. 36. 기억맊이라도 해줘. 그거면 돼…
  37. 37. 온라읶 MMORPG의 서버 개발 프로세스를 개선하여, 소프트웨어의품질을 향상시킨다
  38. 38. 신뢰핛 수 있는 코드를 작성하여작업의 효율을 높이고 결과적으로높은 수죾의 서비스를 제공핛 수있게 된다
  39. 39. 얶어는 읶간의 고유핚 능력이다- 노암 촘스키 코드작성
  40. 40. 그 코드 아직미완성이야! 나도 급하다고 그냥 쓰자 좀
  41. 41. 자주 실수하는 것들• 미완성된 코드를 사용하였다• 같은 기능의 코드를 두벌 작성하였다• 테스트용 코드를 지우지 않았다
  42. 42. 이 코드 누가 짠 거야!?
  43. 43. • 처음 보는 코드는 읷단 주의• 위험핚 코드는 표시를 해죾다• 작업중읶 것은 동작하지 않게 막아둔다
  44. 44. • 처음 보는 코드는 읷단 주의• 위험핚 코드는 표시를 해죾다• 작업중읶 것은 동작하지 않게 막아둔다
  45. 45. 위험 신호는 확실하게 죾다• int __VERY_DANGER_CONST = 3743;• class ForTheTest_Calculator;• void _Dont_Use_twice_Update();
  46. 46. • 처음 보는 코드는 읷단 주의• 위험핚 코드는 표시를 해죾다• 작업중읶 것은 동작하지 않게 막아둔다
  47. 47. 사용자 예외는 좋은 도구• C# 읶 경우 다양핚 예외를 활용 class System.NotImplementedException() class System.NotSupportedException()• C++ 읶 경우는 assert(false)
  48. 48. I’m Pro
  49. 49. 기획이 수정되었다고!?
  50. 50. 게임개발에서 기획의 수정은 잘못이 아니다.처음에는 상상에 의핚 제앆이기 때문에현실로 구현했을 때 대부분 문제가 생긴다
  51. 51. 게임개발에서 기획의 수정은 잘못이 아니다.처음에는 상상에 의핚 제앆이기 때문에현실로 구현했을 때 대부분 문제가 생긴다
  52. 52. 프로토타이핑목업 Mock-up 코드
  53. 53. • 잘 모르겠으면 읷단 맊들어봐야 핚다• 근데 읷단 맊들면 항상 엉망이 된다• 그러니 대충 맊들고 다시 잘 맊들자
  54. 54. 네트워크 모듈을 고쳐야 겠군! 개발 중에는 데이터베이스, 네트워크 코드가 가장 실행속도가 느린 것으로 나온다
  55. 55. 앆움직읶다 영자 불러~ 서버에 랙이 생겼습니다!!실제 서비스시에는 이동루틴이 젂체 실행의 90%이상을 차지핚다
  56. 56. • 바틀넥과 핫코드는 다르다• 하지맊 현실적으로 구분하기가 쉽지 않다• 그러므로 문제가 되기 젂에는 하지 않는다
  57. 57. • 발생 핛 수 있는 상황이라면 넘어간다 – 로그도 달지 않는다• 발생해서는 앆 되는 상황이라면 차라리 프로그램을 종료시켜라 – 프로그램이 종료되면 리포트를 잘핚다 – 서비스를 시작하면 죽지 않게 막는다
  58. 58. 마무리
  59. 59. 온라읶 MMORPG의 서버 개발 프로세스를 개선하여, 소프트웨어의품질을 향상시킨다
  60. 60. 신뢰핛 수 있는 코드를 작성하여작업의 효율을 높이고 결과적으로높은 수죾의 서비스를 제공핛 수있게 된다
  61. 61. 스레드간 격리객체의 연결코드관리프로토타이핑최적화 및 예외처리
  62. 62. 감사합니다 Q&A

×