컴퓨터를 사용함에 있어서 데이터 크기에 대한 단위들이 여러가지 있다. 그런 단위들에 대해 간략하게 알아보도록 한다.


- 비트(bit) 

https://en.wikipedia.org/wiki/Bit

비트는 Binary Digit의 약자이다. 직역하면 이진 숫자가 된다. 0아니면 1밖에 없으므로 이진(binary)가 맞으며, 숫자를 나타내는 것이 맞다. 이진법으로 나타낸 수의 한 자리에 차지하고 있는 숫자 하나를 의미한다고 봐도 의미가 맞다.


이 bit라는 용어는샤넌이라고 하는 사람이 1948년에 낸 논문에서 처음 사용했다고 한다. 저 샤넌이라고 하는 사람은 "정보공학의 아버지"라고 불린다고 한다. 수학자이면서, 전자전기공학자, 암호학자였고 bit라는 개념은 최초로 정보의 크기를 정의했다는 점에서 의미가 있다고 한다.

1946년에 애니악이 제작되었으므로, 컴퓨터 공학의 입장에서는 최초의 컴퓨터가 생긴지 얼마 안되었을 때 나타난 개념이다.


지금의 컴퓨터는 정보를 처리하는 수단으로서 주도적인 역할을 하고 있으니, 이때 정보의 크기를 규정할 수 있다는 것은 큰 의미가 있다고 볼 수 있다.


- 니블(nibble)

https://en.wikipedia.org/wiki/Nibble

니블은 4bit를 나타낸다. 하프 바이트(half-byte) 혹은 테트라드(tetrade)나 세미-옥텟(semi-octet), 쿼드비트(quadbit)나 쿼텟(quartet)이라고 불리기도 한다. 그리고 4비트는 10진수로 0부터 15까지의 수를 나타낼 수 있으므로 16진수(hexa-decimal)로 나타낸 수의 한 글자(digit)이라고 볼 수 있다. 따라서 hex-digit라고도 불린다. 하지만 요즘은 이러한 다양한 부르는 방법들을 잘 쓰지 않고, 궂이 언급한다면 hex code의 한 글자로서 간접적으로 불린다.

이러한 4비트에 따로 이름을 두어서 사용하는 이유는 10진수 한 자리 수(0~9)를 나타낼 수 있는 최소 정보단위가 4비트이기 때문이다.


- 바이트(byte)

https://en.wikipedia.org/wiki/Byte

원래의 의미는 글자 1글자를 나타내기 위한 용량을 뜻하게 되었는데, ASCII코드로 영어 대,소문자 및 일부 특수문자들을 다 표현할 수 있으므로, ASCII의 7bit에 패리티 비트 1bit를 붙여서 8bit로 영어 문자들을 다 표현할 수 있다. 이로써 1바이트가 8bit로 관례적으로 굳어지게 된다. 일반적으로 1바이트라고 하면 8비트를 뜻하게 된다.



아마 알고리즘 PS(Problem Solving) 분야를 공부하시는 분이라면 한번쯤은 CP(Competitive Programming)에도 참여해보셨을 것입니다. PS가 알려진 알고리즘을 이용해서 프로그래밍 문제를 푸는 것이라고 한다면, CP는 이러한 형태의 문제를 같은 시간대에 여러명이 참여해서 제한시간내에 문제를 풀고 점수를 획득하여 랭킹을 매긴 뒤 Rating을 얻는 방식이라고 할 수 있습니다.


이러한 CP에는 세계적으로 가장 유명한 대학생 대상 프로그래밍 대회인 ACM-ICPC를 비롯하여 온라인에서 자주 이루어지는 Codeforce Contest, AtCoder Contest와 Topcoder Single Round Match 등이 있습니다. 이 외에도 저는 참여해보지 않았지만, Facebook Hacker Cup이나 Hacker Rank같은 것도 비슷한 종류의 대회라고 생각합니다.


어쨋든간 저는 대부분 Codeforce Contest에 참여하곤 했는데 이번에 기회가 되어서 Topcoder SRM에 참여해보려고 했습니다. 인터넷에서 SRM 참여 관련 자료들이 꽤나 있었는데, 옛날 자료이기도 하고 Topcoder 플랫폼 자체가 많이 변해서 자료들과는 조금 다른 점들과 해맨점이 있었습니다.


Codeforce의 경우는 사이트 접속시 직관적인 UI로 쉽게 Contest에 참여할 수 있었는데요 Codeforce의 경우는 알고리즘 문제 해결이 사이트의 주요 목적이다보니 컨테스트 참여와 문제풀이와 같은 UI는 쉽게 익숙해질 수 있었습니다. 하지만 Topcoder의 경우는 SRM 외에도 다양한 많은 기능들을 제공하고 있다 보니 SRM 참여와 SRM 시작 시기를 아는 것이 조금 불편했습니다.


이제 SRM의 참여 방법과 관련된 이야기를 해보려고 합니다.


일단 첫번째로는 Topcoder SRM의 개최 시기를 알아야겠지요? 다음 링크로 이동해봅니다.

https://www.topcoder.com/community/events/


그러면 위와 같은 켈린더를 확인할 수 있는데요, 여기서 하단에 시간대를 보면 "동부 표준시"라는 것을 알 수 있습니다. 이는 구글링 해 보면 
 UTC-05시, 섬머 타임 시에는 UTC-04라는 것을 알 수 있습니다. 한국 표준 시간인 KST의 경우 UTC+09인 것을 감안하면 5+9=14 즉 14시간 정도 차이가 나는 것으로 알 수 있습니다. 즉 구글 캘린더에 나타난 시간에서 14시간을 더해주어야지 한국 시간인 것입니다. 이미지에 나타난 SRM 727의 경우 1월 10일 오후 9시이지만, 한국 시간으로는 1월 11일 오전 11시에 시작했습니다.


이러한 불편함은 다음 링크에 있는 알고스팟 캘린더를 확인하면 간편합니다.

https://algospot.com/calendar/

알고스팟 캘린더의 하단을 보면, 시간 기준이 "서울"로 되어있습니다. 앞에 나와있는 [CF]는 Codeforce의 약자이며, [TC]는 탑코더의 약자입니다. 알고스팟 캘린더는 프로그래밍 콘테스트의 일정이 모여있으므로 훨씬 편리하게 확인할 수 있습니다.


또는 백준저지 캘린더를 확인해도 됩니다. 백준 저지 캘린더에 훨씬 많은 일정들이 빽빽하게 들어있습니다.

https://www.acmicpc.net/calendar




이제 탑코더 사이트로 이동해보도록 하겠습니다.

https://www.topcoder.com


첫 화면 페이지부터 여타 다른 OJ나 CP용 홈페이지와는 조금 다른, 기업용 페이지 같은 모습을 띄고 있습니다. 

일단 화면 중앙의 "I want to join Topcoder" 를 눌러서 회원가입을 했다고 가정하겠습니다.


우측 상단의 Login 버튼을 누르면 중앙에 보이는 것 처럼 두개의 창이 뜨게 됩니다. 이 중 우리의 목적은 SRM을 통한 CP이므로, It's time to compete and win에 맞는 Community log in을 누릅니다.


로그인을 하게 되면 다음과 같은 페이지로 이동하게 되는데, 상단 위젯을 통해서 Competitive Programming을 누릅니다.


그러면 다음과 같은 화면이 나타나게 됩니다. 우측에 나타난 캘린더에서 빨간색으로 표시된 날짜에는 SRM이나 MM(Marathon Match)와 같은 이벤트 등록된 날짜이며, 실제 발생할 시간이 되기 전에는 미리 빨간색으로 나타나지 않는 것으로 보입니다. 따라서 위에서 확인한 구글 캘린더에 있는 아직 시행되지 않은 Round가 보이지 않는다고 해서 불안해 할 필요는 없습니다.


왼쪽부분에는 SRM의 각 Phase 별 시작 시간과 종료 시간에 대해서 설명이 되어 있습니다. 

SRM 라운드 스케쥴과 관련된 설명은 다음 링크에 있습니다.

https://www.topcoder.com/member-onboarding/competing-in-an-algorithm-match-srm/

SRM 등록의 경우 SRM 시작 3시간 전 부터 시작 5분 전까지 가능하다고 쓰여있지만 최근에는 4시간 전 부터 가능한 경우가 많다고 합니다.


다른 포스팅들을 보면 java로 작성된 클라이언트를 다운로드해서 참여해야한다고 나와있지만, 최근에는 업데이트가 되었는지 별도의 프로그램 설치 없이 웹 인터페이스만으로도 대회 참여가 가능합니다. 온라인에서 컴파일 및 TestCase 실행을 해 볼 수 있지만, 반응이 좀 느리고 서버가 약간 불안정했습니다.


대회가 끝나면 다음 링크에 풀이인 Editorial이 올라오는 것으로 보이며, 비공식적으로 코드포스 블로그에 올라오는 경우도 있는것으로 보입니다.

https://www.topcoder.com/community/data-science/data-science-editorials/


혹시 최근에 탑코더 SRM에 입문하실 의향이 있는 분들이 있다면 제 글을 보고 도움이 되기를 바랍니다.



* Topcoder SRM 관련해서 더 읽어볼만한 글들

https://www.acmicpc.net/blog/view/2

https://algospot.com/wiki/read/TopCoder_%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC

본 포스팅은 다음 링크의 내용을 통해 간추려서 번역한 포스팅입니다.

https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-centos-7


LAMP 스택은 리눅스 서버에서 간단하게 동적 웹 앱을 호스팅 할 수 있는 간단한 스택 중 하나이다. LAMP는 Linux, Apache, MySQL(혹은 Maria DB), PHP의 머릿글자를 짠 오픈소스 소프트웨어 스택이다.


이제 CentOS 7에 LAMP 스택을 구축해보도록 하겠다.


<선행사항>

일단 Root유저가 아닌 유저가 시스템에 추가되어 있어야 한다.



<아파치 설치>


다음 명령어로 아파치 서버를 설치할 수 있다.


sudo yum install httpd




다음 명령어로 아파치 서버를 실행시킬 수 있다.

sudo systemctl start httpd.service



아파치 서버 실행 이후 웹 브라우저를 켜서 주소창에 localhost라고 입력하면 아파치 테스트 페이지를 확인할 수 있다.

테스트 페이지가 나타난다면 아파치 서버가 정상적으로 설치 및 실행된 것이다.


다음 명령어를 입력하면, 컴퓨터가 부팅될 때 자동적으로 아파치 서버가 실행되도록 설정할 수 있다.


sudo systemctl enable httpd.service




<서버 아이피를 확인하는 방법>

다음 명령어를 입력하면 현재 장비에서 연결된 네트워크 인터페이스들이 나타난다.



ip addr show


그 중 해당되는 인터페이스의 inet 항목의 첫번째 나타나는 4개의 10진수 숫자가 IP주소이다. 물론 이 주소는 IPv4(IP 버전4)의 주소이며, IPv6(IP 버전6)의 주소의 경우는 inet6라고 나타나는 필드의 바로 우측에 나타난다.


<MySQL혹은 MariaDB 설치>

이제 웹 서버에서 사용할 DBMS를 설치할 것이다. MySQL과 MariaDB는 서로 상호호환 되므로 아무거나 깔아도 무방하다. 이번 포스팅에서는 MariaDB를 설치 해 보도록 하겠다.




sudo yum install mariadb-server mariadb



설치가 끝나면 MariaDB를 다음 명령어를 통해서 서비스 실행을 해 보도록 하겠다. DBMS는 서버와 클라이언트로 이루어져 있는데, 일단 서버를 구동해야 하며, 서버가 구동 중 인 경우 클라이언트가 서버에 접속해서 원하는 동작들을 수행할 수 있다. 다음 명령어는 서버를 구동하는 명령어이다.



sudo systemctl start mariadb



MariaDB를 설치한 뒤, 기본적으로 설정되어 있는 DBMS 설정 중 보안적으로 위험한 것들을 대화형 모드로 하나하나 체크하기 위해 다음 명령어를 실행한다.



sudo mysql_secure_installation


대화형 모드로 MariaDB의 Root 패스워드 변경, 익명 유저의 제거, 원격에서 Root 권한 로그인 불가 설정, 테스트 Database와 그 접근 권한 제거, 권한 테이블 반영과 같은 기본 보안 설정들을 처리해주게 된다.


또한 MariaDB도 부팅 시 자동으로 서비스가 동작하게 하기 위해 다음 명령어를 입력한다.



sudo systemctl enable mariadb.service



<PHP 설치>

PHP의 기능을 강화하기 위해서, 선택적으로 PHP의 추가 모듈들을 설치할 수 있습니다. 이러한 추가적인 PHP 모듈들과 라이브러리 리스트를 확인하기 위해 다음의 명령어를 입력할 수 있다.



yum search php-


나타나는 패키지 중, 필요한 패키지들을 설치한다. 패키지 설치는 다음과 같은 명령어를 사용하면 된다.

다음 명령어는 php-fpm 패키지, pacakge1 라는 이름을 갖은 패키지, package2라는 이름을 갖는 패키지를 설치하는 명령어이다.


sudo yum install php php-common php-mysql php-devel



<PHP의 동작 확인>


PHP가 아파치 서버에서 잘 동작하는지 확인하기 위해 간단한 PHP 코드를 웹을 통해서 실행해보도록 한다.

CentOS 7에서 아파치 기본 디렉토리에 php 스크립트 파일을 생성해 보도록 한다.

다음 명령어로 텍스트 편집기를 실행한다.


sudo vi /var/www/html/info.php


그리고 해당 파일에 다음과 같이 입력한다.



<?php phpinfo(); ?>


그리고 파일을 저장한다.


만약 방화벽을 구동중이라면 다음의 명령어로 HTTP와 HTTPS 트래픽을 허용해주어야 한다.


sudo firewall-cmd --permanent --zone=public --add-service=http sudo firewall-cmd --permanent --zone=public --add-service=https sudo firewall-cmd --reload


그리고 웹 브라우저에서 다음 URL을 입력하여 접속하여 php의 정보가 잘 출력되는지 확인해본다.


http://localhost/info.php

혹은

http://127.0.0.1/info.php


만약 php 잘 동작하지 않는다면 다음 명령어로 아파치 서버를 재시작 해본다.


sudo systemctl restart httpd.service



+ Recent posts