라이브코딩
1. 서버 프로그래밍 용어
서버를 닫지 않고 코드를 수정하여 적용시키는 매우 위험한 행위를 말한다. 쉽게 말해 마취 안 하고 수술하는 것이라고 보면 된다. 실제 이 기법이 사용되는 곳에서는 hot code swapping이라고 부른다.
1.1. 필요한 경우
원칙대로라면 이런 경우는 일어나면 안 된다. 보통 개발 및 테스트를 위한 환경을 별도로 구축하고, 퍼블리싱은 버그 등의 수정을 완료한 후 퍼블리싱 서버에서만 작동시키기 때문이다. 다만 대부분의 상용 시스템이 그러하듯이, 실제 환경에서만 나타나는 버그도 존재하기 때문에 극히 제한적인 경우 라이브 코딩을 할 수도 있다고... 알려져는 있 다. 사실 버그를 잡는 게 목적이라면, 별도의 로깅 시스템이나 시스템의 자원 사용률 등을 파악하여 문제가 되는 곳을 추적하는 것이 보통이며, 이것이 안된다면 차선책으로 정기점검 때 문제점 파악을 위한 코드를 실제 작동하는 시스템에 삽입하여 파악한 후 해당 코드를 뺀다.
보안을 요구하고 24시간 가동되는 인트라넷처럼(해당 소스코드의 반입·반출, 콘솔 원격 접속을 불허하는 경우), 프로그래머가 직접 서버 단말기에서 프로그래밍하는 경우가 있긴하다. 이렇게 아주 특이한 상황이어도, 해당 서버를 잠시 정지하는 경우가 대부분이다. 각종 은행과 카드사에서 새벽 시간대에 5분에서 10분 정도 결제 불가능 시간을 정해놓는 것도 이 때문.
핵심적인 중계장비와 같이 정지를 시킬 수 없는 경우 작정하고 이게 되게 만든다. 방법은 여러 가지가 있을 수 있지만 핵심은 스와프 과정에서 생기는 구 버전과 신 버전 사이의 불일치 문제를 해결해주는 소프트퍼지 디자인을 어떻게 해두었느냐에 달렸다. 점검을 위해 서비스를 중단시키는 것이 불가능한 서비스 회사들 중에는 이런 핫코드스와프 덕후들이 종종 있다. 다만 처음부터 잘 고려해서 개발한 덕분에 별 탈 없이 해내기 때문에 이슈가 되는 경우가 없어서 사람들이 잘 모르는 것뿐이다.
1.2. 위험성
코딩하다가 버그가 튀어나오는 경우 즉시 서비스에 악영향을 끼친다. 상황에 따라서는 '''서버가 죽는다'''. 서버가 죽고 난 뒤의 상황은 생략한다.
1.3. 예시
- 개발자가 서버 차단을 하지 않고 시스템상의 업데이트를 하는 경우
- 페이스북
- 나무위키: 예시로 2016년 1월 22일 진행된 검색 서버 유지보수 작업이 라이브코딩의 예시라 할 수 있다.
- 《트리 오브 세이비어》
- 배틀넷 2.0 게임들 모두.
- 데레스테 및 밀리시타 : 이쪽은 거의 모든 업데이트, 패치를 서버를 열어놓은 상태에서 진행한다. 이전에는 존재하지 않던 기능을 추가하는 것 마저 라이브로 진행해버리는 기행을 하면서도 안정적으로 운영중이다. 그래도 몇달에 한번씩은 유지보수를 위해 서버를 닫고 점검을 하기도한다.
2. 즉석 코딩
즉석이나 공개된 환경에서 필요한 기능을 가진 코드를 만드는 것. 입코딩이라고도 불린다. 관련된 직종의 면접 때 종종 하는 경우가 있다. 당장 실력을 발휘해야 하는 인력이 필요한 경우(예를 들어 스타트업과 같이 채용 후 바로 업무에 투입되는 경우)를 제외하면 대개 경력직을 뽑는 곳에서 하며, 일반직 사원을 뽑는 곳에선 거의 하지 않는다. 물론 케이스 바이 케이스이다. 어지간하게 쉽지 않은 이상 4년제 대학을 졸업한 학부생이 정확한 답변을 바로바로 하기엔... 무리가 따른다. 직접 해보면 알겠지만 일단 면접관 앞에서 해야 한다는 떨림 때문에 만반의 준비를 하지 않는 이상 매우 어려운 과정이라고 생각하면 된다.[1] 물론 라이브코딩에서 제시하는 주제도 제각각이어서, 경력 여부 따지지 않고 기본적인 내용을 물어보는 경우부터 해당 회사에서 사용할 법한 내용의 코드를 작성해보라는 경우까지 아주 다양하다.
면접 시 라이브 코딩을 하는 대표적인 예로
- 신입을 뽑는 중견 회사의 실무진 면접의 경우 라이브 코딩 면접으로 간단한 알고리즘을 작성하는 코딩 문제를 받기도 한다.
- 구글의 경우 미리 준비된 온라인 코딩 시스템에 라이브 코딩을 하면서 화상전화로 인터뷰를 진행하는 경우도 있다고 알려져 있다. (학부생 인턴 뽑을 때 Google Students)
3. 실시간 컴파일 코딩
특정 코드 에디터를 통해 코드 작성 즉시 결과를 볼 수 있는 기능.
코드를 실행시킬 수 있는 방법은 인터프리터 방식과 컴파일 형태로 구분되어 있으며, 그중 컴파일은 코드 전체를 컴퓨터가 이해할 수 있는 기계어로 전환하여 실행시키는 것이다. 라이브코딩은 이러한 형태의 코딩→컴파일→실행 반복을 자동으로 수행하게끔 실행시켜주는 개념이라고 볼 수 있다.
예로 이런 거[2]
대부분의 IDE 환경은 라이브 코딩을 하는 것과 다름이 없다. 왜냐하면, 코드 문법 오류 부분을 표시하는 Linter 기능은 상시 컴파일 중이며, 이를 통해 발생한 버그나 문법 오류를 추적해 GUI로 표현하는 방법이기 때문이다. 하지만 사실 이는 컴파일이라기보다는 인터프리팅에 가깝다. 물론 컴파일을 반복하는 IDE도 있겠지만, 보통은 내장된 파서가 실시간으로 코드를 분석해 오류를 보여준다.
3.1. 목적
일반적인 상황에서는 반복적인 컴파일에 따른 리소스 소모로 사용되지 않는다.[3] 개발자가 코드를 작성하면 컴파일러로 바이너리 전환 후 실행함으로써 결과를 볼 수가 있는데 위 디버그와 같이 자주 컴파일을 반복하게 되는 환경이라면 얘기가 달라진다. 개발자의 귀차니즘을 극복해 주기 위해 만들어진 개념.
4. 동영상 중계 사이트
코딩 과정을 인터넷을 통해 중계하는 사이트(홈 페이지). 트위치와 같은 라이브 방송이 유행하면서 생겨난 코딩 라이브 방송 플랫폼 사이트로, 개인 개발자부터 직장에서 코딩하는 사람까지 다양한 사람이 본인의 코딩을 중계할 수 있다. 생겨난 지 얼마 안 된 만큼 보통 업계의 유명한 인물은 거의 참여하지 않는다고 봐도 무방하다. 혹시 본인이 작성한 코드의 문제를 쉽게 찾고자 한다면 이쪽에서 라이브 코딩을 해보는 것도 나쁘지는 않을 듯싶다.
[1] 이러한 이유 때문에 별도의 코딩 면접을 준비하는 스터디도 존재할 정도. 일반 면접처럼 긴장도가 비슷하거나 그 이상일 경우가 많다.[2] Qt5의 라이브코딩 데모를 보여주는 것이다. 개발자들 사이에서 유명한 big buck bunny를 코드로 이펙트를 조절하는 영상[3] 일단 라이브코딩 개념 자체가 생소하다.