BOJ의 10년 개발이야기신청 마감


기간: 2019년 7월 31일 13시 00분 ~ 2019년 7월 31일 18시 00분

장소: 강남역 CNN the Biz


강의 설명

안녕하세요. 최백준입니다. 다음 내용에 대해서 어디서 강연을 하게 되었는데, BOJ 유저를 대상으로 테스트 강연을 한 번 해보려고 합니다.

이 강연은 무료 강연 입니다. 강의실 정원이 정해져있어 많은 사람을 받을 수 없어 10,000원으로 예약을 받고, 당일 오신 분들께 모두 취소해드리려고 합니다. 신속한 취소를 위해 "신용카드"나 "실시간 계좌이체"로 신청해주셨으면 좋겠습니다. 강연에서 왜 "무통장 입금"을 선택할 수 없게 만들지 않고 이 내용을 공지로 남겼는지도 다룰 예정입니다.

  • 날짜 및 시간: 2019년 7월 31일 수요일 오후 1시 ~ 6시, 강연은 1시부터 4시까지 3시간 정도 진행할 예정
  • 장소: 강남역 CNN the Biz
  • 강연 주제: 웹 사이트 하나의 발전 과정과 그 발전과 함께한 고민과 해결 방법
  • 강의 내용 온라인으로 공개되지 않으며, 슬라이드도 공개되지 않습니다. 사진/동영상 촬영, 스트리밍도 모두 금지되어 있습니다.

BOJ가 거의 10년이 다되어 갑니다. 이 웹사이트는 10년전에 있었던 문제와 유저를 제외하면 그 때의 모습은 거의 찾을 수가 없습니다.

시작은 월 5,500원의 카페24 가상 호스팅 서버 1대였는데, 지금은 AWS의 많은 기능을 사용하는 웹사이트가 되었지요.

저는 주로 ACM-ICPC 대회 출전, (구)아이폰 앱 개발자, 전대프연 회장, 대학교 7년반 졸업, 대학원 자퇴, 알고리즘 학원 강사(?) 등으로 알려져 있습니다. 저도 평소에 잘 생각하고 있지 못한 점은 웹 개발자라는 사실입니다.

운영하는 웹 사이트의 모든 코드와 구조, 그리고 기능을 다 생각하고 작성하고, 동시 접속자 수 1명부터 약 6,000여명이 동시 접속한 사이트의 발전 순간의 모든 순간에 기여한다는 점은 참 유니크한 경험입니다. 이러한 경험을 공유해보고자 이번 강연을 열었습니다.

BOJ는 개발 속도가 매우 빠르면서 매우 느린 사이트입니다. 게시판이 생긴건 3년이 넘은 2013년이고, 8주년 기념 업데이트 현황은 아직도 마무리하지 못했죠. 하지만, 기타 다른 기능은 2-3일에 하나씩 만든 적도 있었습니다. BOJ의 기능을 만들 때는 생각을 꽤 많이 거치는 편입니다. 이 생각이 길어지면 현재 "문제집 업데이트"처럼 매우 느리게 개발이 되고, 생각에 대한 결론을 모두 내렸다면, BOJ 스택, 채점 현황 업데이트처럼 매우 빠르게 됩니다.

이번 강연에서는 BOJ의 발전 과정을 따라가보면서 여러가지에 대한 고민에 대해 얘기를 합니다. 웹 개발과 관련된 고민, 사이트의 기능과 관련된 고민, 정체성과 관련된 고민 등 많은 고민이 포함되어 있습니다. 해결책을 생각해낸 고민도 있고, 아직도 고민 중인 것도 있지요.

BOJ에 대해 궁금했던 점이나 발전 과정이 궁금하셨던 분, 웹 개발에 관심 있으신 분 등이 와서 들어보시면 좋을 것 같습니다.

강연 내용 간단히 첨부합니다. 2010-2015년에 해당하는 내용은 시간 순으로 살펴볼 예정이고, 그 이후 내용은 케이스-바이-케이스로 살펴보려고 합니다.

  1. BOJ 간단 소개
  2. 가상 서버 호스팅과 웹 서버 1대로 사이트 시작 (2010년)
    1. 리눅스, PHP, MySQL도 모르는 상태에서 오픈 소스 온라인 저지를 설치한 상태로 시작해 어떻게 운영을 했을까
  3. 예쁜 웹사이트보다 콘텐츠가 우선 (2011년)
    1. 사이트의 명확한 컨셉(한국어 문제)를 정하고 문제를 업로드하기 시작
  4. 예쁜 웹사이트도 중요하다 (2012년)
    1. 오픈 소스 온라인 저지에서의 탈출과 독자 개발의 시작
    2. MVC 모델의 적용
    3. 고민
      1. PHP에서 떠나야 할까?
      2. 프레임워크는 사용해야 할까?
      3. 유저의 의견은 어떻게 들어야 할까?
  5. 더 많은 문제와 언어, 그리고 새로운 기능 (2013년)
    1. 어떤 기능이 추가되면 좋을까?
    2. 한국어 문제라는 컨셉을 버려야 할까?
    3. 수정 내역, 재채점 내역과 같은 내역은 사이트 운영에 중요한가? (채점의 신뢰성 문제)
    4. 어떤 디테일이 웹사이트에 필요할까?
  6. 이용자의 증가에 따른 서버의 분리
    1. 웹 서버와 디비 서버를 분리해야 할까?
    2. 웹 서버와 채점 서버도 분리해야 할까?
    3. 채점 서버를 여러 대 띄울 때, 어떤 기준을 가지고 채점을 나눌까? (채점 서버의 채점할 솔루션 선택 문제)
  7. 디테일한 기능과 보안, 그리고 프라이버시
  8. DB 구조를 어떻게 업데이트하는 것이 좋을까?
    1. 여러가지 상황과 함께 디비 구조를 어떻게 변경했는지
  9. AWS로의 이동과 어려움
  10. 채점 속도 업데이트를 위한 노력
    1. 채점 서버 속도의 향상을 위한 DB 구조 업데이트
    2. 채점이 몰릴 때의 병목 현상을 해결하기 위한 방법
    3. 채점 서버가 N개 늘어나면 처리량이 N배 늘지는 않는다. 이유는 무엇일까?
    4. 유지 보수를 위한 결정들
  11. 현대적인 웹사이트를 위한 한 걸음
    1. 서버 1대 -> N대로 이동하자.
      1. Load Balancing, Auto Scaling을 적용하기 위해 어떤 점이 변경되어야 할까
    2. 소스 코드를 공유하는 독립된 웹사이트를 큰 노력없이, 유지보수 관리하기 쉽게 하기 위해서 어떻게 하면 좋을까?
  12. 채점과 관련한 다양한 고민과 해결책
    1. 실제로 채점이 진행되지만, 채점이 멈춘 것 처럼 보이는 현상에 대한 해결책
    2. 랜덤 문제에 발생하는 매우 많은 제출의 효율적인 처리
  13. 웹사이트 관리와 관한 고민
    1. 슬랙과 같은 별도의 커뮤니티는 필요할까?
    2. 치팅 유저를 잡기 위한 효율적인 방법이 있을까?
    3. 기능에 대한 오해와 삭제의 어려움 (구글/네이버/페이스북 아이디로 로그인)
  14. 기타 고민
    1. API를 지원해야 할까? 지원하면 어디까지 지원해야 할까?
    2. 수익을 추구할 수 있는 웹사이트일까?
    3. PHP를 떠나야 할까?
    4. 친구/쪽지와 같은 기능이 필요할까?
    5. 타 사이트처럼 웹 IDE를 지원해야 할까?
    6. 채점 서버도 Auto Scaling을 해야 할까?
    7. i18n은 필요할까?