PHP의 FastCGI는 웹 서버 API의 제약 없이 CGI를 확장한 방식이다. 기존 CGI 구현은 프로세스를 생성해 클라이언트 요청 하나를 처리한 뒤 종료하는 구조를 가진다. 하지만 프로세스 생성 비용이 크기 때문에 다수의 사용자를 동시에 처리하기에는 한계가 있다.

이를 보완하기 위해 나온 FastCGI는 매 요청마다 프로세스를 생성하지 않고, 미리 만들어둔 프로세스를 기반으로 요청을 처리하는 인터페이스다. 이러한 인터페이스의 여러 구현체 중 하나가 바로 FPM(FastCGI Process Manager) 이다.

이번 글에서는 FastCGI 동작 자체보다는 FPM의 내부 구조를 코드 관점에서 간단히 살펴보고, 분석 과정에서 발견한 버그와 그에 대한 기여 경험을 공유하고자 한다.

컴파일 및 설치

분석에 사용한 PHP 버전은 8.4.7이다. 만약 직접 컴파일하여 확인하고 싶다면 다음 명령어를 사용할 수 있다. (필요한 의존성 패키지는 시스템 환경에 맞게 설치해야 한다.)

git clone --depth 1 --branch php-8.4.7 https://github.com/php/php-src.git
cd php-src
./buildconf --force
./configure --enable-debug --enable-fpm --disable-cgi --with-openssl \
            --enable-phpdbg --enable-phpdbg-debug --enable-opcache
./config.nice
make -j $(nproc)
make test
sudo make install
./sapi/fpm/php-fpm -v

정상 설치 시 다음과 같은 결과가 출력된다.

PHP 8.4.7 (fpm-fcgi) (built: Sep  7 2025 17:02:40) (NTS DEBUG)
Copyright (c) The PHP Group
Zend Engine v4.4.7, Copyright (c) Zend Technologies

PHP-FPM 전반적 구조 및 초기화 부분

살펴보기 전에 PHP-FPM의 기본적인 구조에 대해 설명하자면 여러 개의 pool이 존재하고 각 pool마다 애플리케이션 도메인이 따로 동작한다. 각 pool은 자식 프로세스를 생성하여 앞단의 NGINX 또는 APACHE가 FastCGI Protocol에 맞춰 전달해주는 요청을 처리하는 구조다. 그리고 자식 프로세스는 pm.max_requests라는 설정값을 기반으로 하나의 자식 프로세스가 살아있는 동안 몇 번의 요청을 처리할지 결정하는 변수값이다. 그리고 pool마다 scoreboard라는 것이 존재하는데 이는 pool의 현재 상태 그리고 각 자식 프로세스별로 상태값을 기록한다. 대략적인 구조는 위와 같지만 이를 그림으로 살펴보자.

PHP-FPM의 기본적인 구조는 fpm_init() 함수를 통해 설정 파일 파싱, pool 생성을 진행한다.

int fpm_scoreboard_init_main(void){    
    struct fpm_worker_pool_s *wp;    
    for (wp = fpm_worker_all_pools; wp; wp = wp->next) {        
        size_t scoreboard_procs_size;        
        void *shm_mem;
        [...]        
        scoreboard_procs_size = sizeof(struct fmp_scoreboard_proc_s) * wp->config->pm_max_children;        
        shm_mem = fpm_shm_alloc(sizeof(struct fpm_scoreboard_s) + scoreboard_procs_size);
        [...]        
        wp->scoreboard = shm_mem;        
        wp->scoreboard->nprocs = wp->config->pm_max_children;
        [...]    
    }    
    return 0;
}

fpm_init() 함수 내부에서 fpm_scoreboard_init_main() 함수를 호출하여 이전에 언급한 scoreboard를 생성한다. fpm_scoreboard는 pool마다 크게 하나씩 존재하고 fmp_scoreboard_procs는 pool이 가지는 프로세스 개수만큼 할당된다. 그리고 이를 fpm_shm_alloc() 함수를 이용하여 shared memory(공유 메모리)에 저장한다. 할당되는 2개의 구조체 내용은 아래 내용과 같다.

struct fpm_scoreboard_proc_s {    
    union {        
        atomic_t lock;        
        char dummy[16];    
    };    
    int used; // 현재 프로세스가 사용 중인가 free가 아닐 경우 1로 설정    
    pid_t pid; // 프로세스의 PID     
    unsigned long requests; // 현재 프로세스가 처리한 요청 개수    
    enum fpm_request_stage_e request_stage; // 현재 프로세스 요청 처리 단계
    [...]
};

struct fpm_scoreboard_s {    
    union {        
        atomic_t lock;        
        char dummy[16];    
    };    
    atomic_t writer_active; // scoreboard spin lock 접근을 위한 writer    
    unsigned int reader_count; // scoreboard spin lock 접근을 위한 reader    
    int pm; // fpm 모드    
    int idle; // 현재 요청을 처리하지 않고 있는 프로세스 개수    
    int active; // 현재 요청을 처리 중인 프로세스 개수    
    int active_max;    
    unsigned long int requests; // pm.max_requests의 값    
    unsigned int max_children_reached;     
    unsigned int nprocs; // 자식 프로세스 개수    
    int free_proc; // 초기화되지 않은 프로세스 개수
    [...]    
    struct fpm_scoreboard_s *shared;    
    struct fpm_scoreboard_proc_s procs[] ZEND_ELEMENT_COUNT(nprocs);
};

scoreboard를 관리하기 위해서는 fpm_scoreboard_s와 fpm_scoreboard_proc_s가 존재한다. fpm_scoreboard_s 구조체는 pool(애플리케이션)의 상태 관리이고 후자는 각 pool이 관리하는 각 프로세스마다의 scoreboard다. 중요 필드는 주석으로 따로 기입했다. 각 구조체는 자식 프로세스, 부모 프로세스가 동시 접근이 가능해야 하므로 shared memory(공유메모리)에 저장한다. 접근 시에는 각 구조체의 lock 필드를 사용하여 spin lock을 기반으로 접근한다. 이러한 구조체들이 어떻게 사용되는지는 아래 fpm_run() 함수에서 계속한다.

fpm_run() 함수는 (pm.mode가 static이라면) fork(2) syscall을 호출하여 pm.max_children만큼 자식 프로세스를 생성한다. 부모 프로세스는 fpm_event_loop() 함수에서 블로킹 상태에서 자식 프로세스의 변화 감지를 대기한다. 이때 발생할 수 있는 대표적인 signal은 3가지가 존재한다. SIGKILL, SIGTERM, SIGCHLD. SIGKILL의 경우 자식 프로세스에서 실행하는 php script의 사용 메모리가 제한 메모리보다 커졌을 경우 kernel로부터 발생하는 시그널이다. SIGTERM의 경우 자식 프로세스가 의도치 않게 NULL 참조(대표적인 예시)로 종료되었을 때다. 마지막으로 SIGCHLD는 자식 프로세스가 처리한 요청의 개수가 max_requests와 같거나 넘겼을 때 정상 종료하여 발생하는 시그널이다. 이러한 시그널은 부모 프로세스가 수집하여 트리거시킨 자식 프로세스를 새로 생성하여 초기화한다.

fpm_resources_prepare() 함수를 호출하여 자식 프로세스의 정보가 담긴 child 구조체를 할당한다. fpm_scoreboard_proc_alloc 함수를 호출하여 이전에 할당한 scoreboard의 procs 배열 필드에서 사용하지 않는 필드의 used 값을 1로 설정한다. 그리고 난 뒤 fork syscall을 호출하여 parent process 로직, child process 로직으로 나눠서 실행된다. 부모 프로세스 로직의 큰 목적은 child 구조체를 링크드 리스트 형태로 보관하고 각종 이벤트를 등록하여 fpm_event_loop() 함수에서 수신할 수 있도록 설정한다.

자식 프로세스 로직의 경우 fpm_child_resources_use() 함수를 호출하여 자식 프로세스에 선언된 2개의 전역 변수 필드 fmp_scoreboard_i(scoreboard->procs[N]에서 N의 값), fpm_scoreboard(pool마다 가지는 scoreboard 공유 메모리 주소)를 저장하고 child를 해제한다. 생성된 자식 프로세스는 아래 fmp_init_request() 함수부터 로직이 실행된다.

자식 프로세스의 클라이언트 요청 처리

자식 프로세스는 fcgi_accept_request 함수 내부에 accept syscall을 호출하여 클라이언트의 소켓 연결을 대기한다. 연결이 발생하게 되면(3 way handshake가 끝난 소켓) 블로킹 상태에서 빠져나오게 되며 현재 process의 Stage 값을 FMP_REQUEST_ACCEPTING 상태로 변경한다. fpm_request_info() 함수에서는 (생략된 이전 함수 init_request_info) query_string, request_uri, content_length 등의 값을 기입한다. 그리고 Stage를 FPM_REQUEST_INFO로 변경한다. 요청한 Script를 실행할 준비가 되었다면 php_execute_script() 함수를 호출하여 요청한 Script를 실행한다. php_request_startup과 php_request_shutdown은 PHP의 Lifecycle을 참고하기 바란다. (https://www.phpinternalsbook.com/php7/extensions_design/php_lifecycle.html)

요청 처리가 끝났다면 fpm_request_end() 함수를 호출하여 Stage 값을 FPM_REQUEST_FINISHED로 변경한다. 마지막으로 자식 프로세스가 처리한 요청 수를 max_requests 값과 비교하여 돌아갈지 exit될지 선택된다. exit된다면 부모 프로세스는 SIGCHLD 시그널을 수신하여 자식 프로세스를 생성 및 초기화하여 사용자의 요청을 처리한다.

여기까지가 대략적인 PHP-FPM의 전반적인 구조다. 코드 기반 구체적 설명이 아닌 구조 중심의 그림을 보이다 보니 많은(구체적인 동작 구조) 부분들이 생략되었다. 하지만 전반적인 FPM의 구조는 이해하는 데 문제가 없을 것으로 예상되기에 자세한 부분은 직접 소스코드 기반으로 분석하기 바란다. 다음 섹션은 분석 과정에서 찾은 PHP-FPM의 버그가 무엇인지 어떻게 해결하여 Pull Request를 올렸는지를 설명한다.

8.4.7에서 발생했던 버그와 기여

5월 19일 php-src github에 하나의 issue가 등록된 것을 확인할 수 있다. (https://github.com/php/php-src/issues/18595) 이는 사용자 요청으로 fpm_get_status() 함수가 트리거되면 어느 순간 segmentation fault가 발생한다는 issue였다. 이는 기본적으로 부모 프로세스와 자식 프로세스 간의 경쟁 상태에서 문제가 발생한 것이다. 조금 더 자세히 풀어보겠다. 다음 가정을 진행하자.

“부모 프로세스(P)와 2개의 자식 프로세스(A와 B)가 존재하고 자식 프로세스의 max_requests 값은 1이다. 그리고 사용자는 curl localhost/bug.php를 1번 요청한 상태다. bug.php의 내용은 아래와 같다.”

<?php
fpm_get_status();
?>

조금 부연설명을 하자면 fpm_get_status() 함수는 현재 scoreboard에서 정보를 읽어서 fpm의 현재 상태를 출력한다.

/* fmp_get_status() 함수 내부 구조  */
for (i = 0; i < scoreboard.nprocs; i++) {    
    if (!procs[i].used) {        
        continue;    
    }    
    proc_p = &procs[i];    
    
    /*
        fpm-get_status 함수는 내부적으로 fmp_request-get_stage_name 함수를 호출함.
        이는 현재 Stage 정수 값을 기반으로 문자열을 뽑는 함수.
    */    
    add_assoc_string(&fpm_proc_stat, "state",                     
                     fpm_request_get_stage_name(procs[i].request_stage));
}

const char *fpm_request_get_stage_name(int stage) {
    return requests_stages[stage];
}

static const char *requests_stages[] = {
    [FPM_REQUEST_ACCEPTING]       = "Idle",              // index 1
    [FPM_REQUEST_READING_HEADERS] = "Reading headers",   // index 2
    [FPM_REQUEST_INFO]            = "Getting request information", // index 3
    [FPM_REQUEST_EXECUTING]       = "Running",           // index 4
    [FPM_REQUEST_END]             = "Ending",            // index 5
    [FPM_REQUEST_FINISHED]        = "Finishing",         // index 6
};

가장 먼저 Accept을 준비한 자식 프로세스 A가 요청을 처리하고 max_requests의 값에 도달해서 exit된다. 이때 exit되면 이전에 언급한 부모 프로세스(P)가 대기하고 있던 fpm_event_loop() 함수에서 시그널이 수신되어 블로킹 상태에서 빠져나온다. 부모 프로세스는 fpm_children_bury(), fpm_scoreboard_proc_free() 함수를 호출하여 자식 프로세스(A)의 구조체를 해제한다. 해제된 구조체의 request_stage 필드값을 0으로 변경한다.

그리고 fmp_children_make(), fpm_resources_prepare(), fpm_scoreboard_proc_alloc() 함수를 호출하여 아래 필드값을 1로 설정한다.

scoreboard->procs[i].used = 1;

used 값을 1로 설정했다는 것은 해당 process가 사용 중임을 나타낸다. 즉, 다른 프로세스(B)가 보기에는 A의 used 값이 1이니 사용 중인 것으로 인식할 수 있다. 하지만 이 시점에서 아직 request_stage 값은 0이다.

그리고 사용자가 curl localhost/bug.php 함수를 호출하여 2번째 요청을 했을 때 프로세스(B)가 요청을 처리하게 된다. B가 요청을 처리하면 fpm_get_status 함수를 호출하게 된다. 그리고 이는 scoreboard에 접근하여 다른 프로세스의 used 값을 기반으로 사용 중(1)이라면 request_stage 값을 꺼내 fpm_request_get_stage_name 함수에 넣어 문자열을 반환받는다. 여기서 문제는 requests_stage 배열의 인덱스 시작 부분이 1부터 시작한다는 것이다. 아까 말했듯이 프로세스(A)의 request_stage는 현재 초기화 단계이기 때문에 0이다. 여기서 0은 인덱스에 없기 때문에 NULL 참조로 Segmentation Fault가 발생한다. 이해를 위해 아래 그림을 참고하기 바란다.

이를 해결하기 위한 가장 간단한 방법은 0번째 인덱스의 Stage 값을 만드는 것이다.

위의 수정사항을 바탕으로 PHP github에 Pull Request를 올리게 되었고 머지가 된 것을 확인할 수 있다. 조금 더 자세한 사항은 아래 링크를 참조하기 바란다. https://github.com/php/php-src/pull/18662 (물론 Close되었지만 이는 메인테이너가 커밋을 기반으로 올렸기 때문이다…) 덕분에 php-src의 Contributor가 될 수 있었으며 기쁜 마음에 본 기사를 작성한다.

마무리

PHP-FPM은 기존 CGI의 확장형인 FastCGI의 구현체다. 기본적인 동작은 모두가 알다시피 클라이언트의 요청 전 프로세스를 미리 생성하고 만들어진 process 기반으로 요청을 처리한다. max_request에 도달한 프로세스는 exit되며 부모 프로세스는 exit 등의 프로세스 시그널을 탐지하여 재생성 로직을 수행한다. 부모 프로세스가 생성된 자식 프로세스를 초기화하는 과정에서 프로세스의 used 필드값은 초기화되었지만 request_stage 값은 초기화하지 못한 상태에서 경쟁 상태 문제가 발생하게 되면서 Segmentation Fault가 발생한 것을 확인할 수 있었다.

분석을 통해 발견한 문제의 해결법을 제시하여, 오픈소스에 처음으로 기여할 수 있었다는 점은 매우 뜻깊었다. 앞으로도 이러한 분석과 기여를 통해 더 안정적인 PHP 생태계에 이바지하고 싶다.

잠실 롯데타워는 서울을 대표하는 핫플레이스로 손꼽힌다. 워낙 유명한 랜드마크라 항상 사람들이 붐비며, 맛집도 다양해 가족 외식이나 연인들의 데이트 장소로도 매력적이다. 쇼핑할 곳도, 둘러볼 거리도 많아 하루 종일 있어도 지루하지 않다. 그런데 같은 건물 안에 있음에도 불구하고, 아쿠아리움은 의외로 방문할 기회가 드물었다. 매번 ‘언젠가 꼭 가야지’라고 생각만 하다가 이번에 시간을 내어 다녀왔다. 궁금했던 공간을 직접 둘러보며 어떤 재미 포인트가 있는지 소개한다.

컴투스온 기자단 레고와 함께 출발!

롯데월드 아쿠아리움 정보

가격어른 및 청소년 (만13세 이상): 35,000원어린이 (36개월이상~만12세): 31,000원36개월 미만: 무료
운영시간월~목 10시~ 20시 / 금~일 10시~22시연중무휴 / 상시 변경 가능성 있음 (🔗자세히보기)
위치서울 송파구 올림픽로 300 롯데월드몰 B1지하철을 이용할 경우 2호선 또는 8호선 잠실역 10번 출구
주차10시~20시: 10분당 평일 300원
주말 500원그 외 시간: 10분당 200원
1일 최대요금 45,000원
아쿠아리움 당일 티켓을 소지하고 있을 경우 10분당 200원 (최대 4시간)
초과분은 기본 요금 체계 적용
(🔗자세히보기)
전화번호1661-2000

참고로 기자는 네이버 특가 예약으로 2인 46,000원에 다녀왔다. 가격이 부담된다면 쿠팡이나 네이버에서 할인 특가를 찾아보자.

재미 포인트 하나: 귀여운 캐릭터와의 콜라보 

방문 당시 산리오 캐릭터 콜라보 이벤트가 진행 중이었다. 곳곳에 포토존이 마련돼 사진 찍는 재미가 있었고, 코스를 돌며 스탬프를 모으는 ‘스탬프 랠리’도 참여할 수 있었다. 한정판 굿즈 판매도 있어 팬들에게는 더욱 특별한 경험이었다. 실제로 굿즈를 구입하려고 방문한 팬들도 많아, 순간 아쿠아리움이 아닌 산리오 팝업스토어에 온 듯한 착각이 들 정도였다.

재미 포인트 둘: 다양한 수중 친구들

당연하지만 아쿠아리움의 가장 큰 재미는 각양각색의 수중 친구들을 가까이에서 직접 볼 수 있다는 점이다. 작은 열대어부터 시작해서 상어, 물범, 펭귄, 벨루가까지 정말 다양하게 만나볼 수 있다.

눈앞에서 헤엄치는 작은 열대어들은 작고 알록달록해서 보는 재미가 있었다. 펭귄이 물속을 빠르게 오가는 모습도 흥미로웠고, 수달은 동그랗게 몸을 말고 자는 모습이 무척 사랑스러웠다. 지하로 내려가면 커다란 수조가 나오는데, 그 안을 유유히 헤엄치는 상어는 마치 다큐멘터리 속 장면처럼 압도적인 위엄을 자랑했다. 그리고 벨루가는 하얗고 커다란 몸에 특유의 귀여운 미소까지 더해져 아이들뿐만 아니라 어른들까지 모두의 감탄을 끌어냈다.

다만 관람 시에는 기본적인 에티켓이 중요하다. 특히 큰 소리로 시끄럽게 하거나 유리를 두드리는 행동은 직접적인 자극이 되기 때문에 반드시 피해야 한다. 아쿠아리움은 단순한 전시장이 아니라 살아 있는 생명들이 생활하는 공간이니, 방해가 되지 않도록 조용히 지켜보며 자연스러운 모습을 즐겨보자.

재미 포인트 셋: 관람을 풍부하게 해주는 정보

아쿠아리움 중간중간에는 수중 친구들에 대한 정보를 알려주는 안내문이 마련되어 있었다. 실제 강이나 바닷속 환경에서 이 어떤 방식으로 생활하는지, 먹이를 어떻게 구하고 어떻게 살아남았는지까지 알 수 있었다. 나아가 이곳 아쿠아리움에서 살고 있는 친구들이 어떤 방식으로 건강을 관리받는지도 자세하게 소개되어 있었다.

무엇보다 설명이 어렵지 않고 쉽게 풀어져 있어서 아이들도 이해하기 좋았다. 실제 강이나 바닷속 환경에서 어떤 방식으로 생활하는지, 먹이를 어떻게 구하고 살아남았는지까지 알 수 있었다. 나아가 이곳 아쿠아리움에서 어떤 방식으로 건강을 관리받는지도 자세하게 소개되어 있었다.

글과 함께 그림이나 사진도 곁들여져 정보를 한눈에 볼 수 있고 자연스럽게 기억에도 잘 남았다. 그래서 단순히 관람하는 데 그치지 않고 배우는 즐거움까지 더해졌다.

특히 재미있었던 건 바로 펭귄들의 관계도였다. 무려 15쌍의 부부가 한눈에 정리되어 있었는데, 할아버지/할머니 세대부터 엄마/아빠, 그리고 손자 세대까지 이어져 있어서 마치 펭귄 세계의 족보를 보는 듯했다. 관계는 생각보다 훨씬 복잡했다. 서열 1위를 차지한 최강 부부, 먹보 부부, 그리고 펭귄 재벌이라는 별명을 가진 부부까지 있었다.

흥미로운 건 부부 관계만 있는 게 아니라는 점이다. 짝사랑이나 썸을 타는 사이까지 포함되어 있어서 보고 있으면 펭귄들의 세계에도 사람 못지않은 다양한 관계와 스토리가 있다는 걸 알 수 있었다. 게다가 펭귄들의 이름도 하나같이 개성이 넘쳤다. 자몽, 구름 같은 귀엽고 친근한 이름부터, 펭소룡처럼 독특한 이름까지 있어서 보는 재미가 쏠쏠했다.

복잡한 펭귄 관계도

재미 포인트 넷: 아쿠아리움만의 특별 이벤트

아쿠아리움에서는 먹이 주기 체험, 캐리커처, 팔찌 만들기 등 이벤트가 열리고 있었다. 먹이 주기 체험과 같은 특정 이벤트는 정해진 시간에만 참여할 수 있으므로 방문 전 홈페이지에서 시간을 확인하는 것이 좋다. 그러면 원하는 이벤트를 놓치지 않고 즐기고 동선도 효율적으로 짤 수 있다.

기자는 운 좋게 특별 이벤트인 ‘아쿠아 UFC’를 관람했다. 상어와 가오리가 배틀을 펼치고 마지막에는 먹방으로 승부를 내는 독특한 콘셉트였는데, 화면 속에서 상어와 가오리가 갑자기 싸우기 시작하는 장면이 나와서 꽤 인상적이었다.

드디어 대망의 먹방 배틀 시간이 찾아왔다. 의외로 상어는 소극적이었고 가오리는 날렵하게 먹이를 챙겼다. 심지어 아쿠아리스트가 바로 눈앞에 먹이를 가져다줘도 상어가 좀처럼 입을 대지 않아 결국 옆에 있던 다른 물고기에게 빼앗기기도 했다. 반면 가오리는 굉장히 똑똑해서 먹이를 놓칠 뻔하면 양 지느러미(?)를 이용해 먹이를 직접 밀어 입으로 가져가 삼키곤 했다. 이런 모습을 보니 승부의 결과는 따로 말할 것도 없었다. 우승자는 단연 가오리였다.

🔗 이벤트 자세히 확인하기

마무리

아쿠아리움 나들이는 소소하지만 확실한 행복을 선물했다. 가족, 연인, 친구 누구와 함께 와도 즐거운 시간을 보낼 수 있는 곳이다. 기자는 토요일 오전에 방문해 비교적 한산했지만, 주말 특성상 사람이 많아질 수 있으니 시간대 선택에 유의하는 것이 좋겠다.

무엇보다 잠실이라는 입지 덕분에 접근성이 좋고, 관람 후에는 석촌호수 산책까지 곁들이면 완벽한 하루가 된다. 아직 가보지 않았다면 한 번쯤은 꼭 방문해 보기를 추천한다.

세계가 주목하는 SWC, 그 시작

‘서머너즈 워: 천공의 아레나(이하 서머너즈 워)’ e스포츠 대회인  ‘서머너즈 워 월드 아레나 챔피언십(이하 SWC)’은 1:1 전투 ‘월드 아레나’에서 자신만의 몬스터 조합으로 승부를 겨루는 글로벌 대회다. 2017년 출범 이후 매년 개최되며, 지금은 전 세계 팬들의 이목을 집중시키는 대표 모바일 게임 e스포츠 무대로 자리 잡았다.

개발진으로서 직접 참여한 ‘서머너즈 워 10주년 LA 서머너즈 페스티벌’과 ‘SWC2024′는 단순한 출장이 아니라, 오랜 시간 게임을 사랑해온 글로벌 유저들과의 진정한 교류의 장이었다. 이번 기사에서는 그 현장에서 느낀 감동과 열정, 그리고 다가올 ‘SWC2025’에 대한 기대를 전한다.

밋업(Meetup)을 향한 첫 장거리 비행, 설렘 가득한 출발

2024년, ‘서머너즈 워’ 10주년을 맞아 매년 진행되던 유럽과 아메리카 투어는 전 세계 소환사들의 축제인 ‘서머너즈 페스티벌’로 확장됐다. 4월 서울 성수동에서 포문을 연 뒤, ‘서머너즈 워 한일 슈퍼매치’, ‘SWC2024’를 비롯해 파리, LA, 자카르타, 싱가포르, 타이페이, 마닐라, 비엔나 등 총 13개국 18개 도시에서 유저들을 직접 만났다.

그중 나는 뜻깊은 기회로 ‘서머너즈 워 10주년 LA 서머너즈 페스티벌’에 참가할 수 있었다. 개발팀 원화가로서 ‘팬밋업’은 유저와 직접 만날 수 있는 흔치 않은 자리였다. 출장을 앞두고 동료와 함께 이벤트 시간에 그릴 그림을 연습했고, 빠르고 귀엽게 사인하는 방법도 고민했다. 처음이라 긴장됐지만, 현장에서는 준비 덕분에 제법 자연스럽게 할 수 있었다.

생애 첫 장거리 비행이었지만 힘들지 않았다. 설렘이 더 컸기 때문이다. 잠이 오지 않아 준비해간 드라마와 영화를 연달아 봤고, 틈날 때마다 ‘어떤 그림을 그려드리면 좋아할까?’라는 생각으로 마음을 다잡았다.

LA 서머너즈 페스티벌, 10주년의 특별함

드디어 LA에 도착했다! 이벤트 날보다 하루 빨리 도착해 행사 준비를 돕기로 했다. 약 6시간 동안 열심히 패널에 안내를 위한 글자와 그림을 그렸다. 완성해 놓고 나니 정말 뿌듯했다.

우승자에게 제공할 티셔츠에도 그림을 그려달라고 하셔서 열심히 작업했다. 스케치 없이 그리려니 손이 정말 떨렸다. 저녁에는 미국 피자도 처음 먹어봤는데, 크기부터 압도적이었다.

압도적인 크기의 미국 피자
처음으로 먹어본 북창동 순두부

드디어 이벤트 첫날! ’10주년 서머너즈 페스티벌’에서 만난 유저들은 정말 ‘서머너즈 워’를 사랑하고 열정이 넘쳤다. 멋진 코스프레로 행사장을 찾은 팬들도 있었고, 가족 단위로 게임을 즐기는 모습도 보였다. 특히 인상 깊었던 것은 쌍둥이천사 코스프레를 하고 온 진짜 쌍둥이였다!

이벤트장 안에는 여러 프로그램이 동시에 진행돼 방문객들이 자유롭게 즐길 수 있었다. 백스테이지에서 라쿠니가 되는 체험도 할 수 있었다

라쿠니가 되어보았습니다.

일러스트북 사인회에서는 각자 좋아하는 캐릭터와 추억에 대해 직접 이야기를 들을 수 있어 뿌듯했다. 또한 게임 캐릭터 따라 그리기 시간을 마련했는데, 많은 유저들이 열정적으로 참여해 즐거운 분위기를 만들었다. 이벤트가 끝나고 유저들이 그린 그림을 보니 너무 귀엽고 캐릭터에 대한 애정이 잘 보여서 감동적이었다.

유저들이 그린 그림
숨어있는 실력자들(?)
가져와서 사무실에 전시해두었다.

SWC의 진짜 매력, 라스베이거스에서 깨닫다

몇 달 뒤, 이번에는 ‘SWC2024 AMERICAS CUP’을 위해 라스베이거스를 찾았다. 두 번째 장거리 비행이라 시차 적응을 위해 일부러 잠을 청했고, 덕분에 한결 수월하게 도착할 수 있었다.

SWC 현장 관람은 이번 출장이 처음이었다. 먼저 다녀오신 분들이 즐겁고 재미있었던 경험이라고 말해줬기에 많은 기대를 품고 갔다.

라스베이거스 중심 호텔에서 열린 SWC 현장은 처음 보는 순간부터 압도적이었다. 메인 경기뿐만 아니라 다양한 이벤트와 굿즈가 있었고, 무대 디스플레이는 입이 다물어지지 않을 만큼 화려했다.

지사 직원분이 직접 그린 화장실 표지판도 정말 인상적이었다. 또한 전에 10주년 서머너즈 페스티벌에서 봤던 MC를 다시 만나 내적 친밀감도 느낄 수 있었다.

개발자로서 현장에서 유저들이 열광하는 모습을 직접 보는 경험은 특별했다. 특히 내가 디자인한 몬스터나 형상변환을 입고 경기에 이기는 모습을 보면 괜히 더 뿌듯한 느낌이 들었다. 아슬아슬한 위기에서 역전하는 명경기를 보며 역시 세계 최고 수준의 플레이어들이라는 걸 실감했고, 관객들의 환호와 우승자에게 쏟아지는 응원은 잊기 힘든 장면이었다.

무엇보다 SWC 현장에서 본 건, 유저들이 캐릭터를 진심으로 아끼고 사랑한다는 사실이었다. 그 모습을 보며 ‘오래도록 사랑받는 캐릭터를 만들고 싶다’는 다짐이 한층 더 커졌다. 원화가로서 이렇게 유저들을 직접 만나고, 게임을 즐기는 모습을 눈으로 확인할 기회는 흔치 않다. 그래서 더 감사했고, 이 경험이 오래 기억에 남을 것 같다. 다가올 SWC2025도 또 한 번 유저들과 함께할 수 있는 뜻깊은 자리가 되길 기대한다.

SWC2025를 향한 새로운 기대

아레나 메타는 매년 변한다. 그만큼 선수들의 전략도 점점 정교해지고 있다. 2025년에는 또 어떤 몬스터 조합과 전술이 등장할까. 새로 추가된 캐릭터와 형상변환이 경기에서 어떤 역할을 할지도 원화가로서 큰 관심사다.

이번엔 어떤 선수가 세계를 놀라게 할지, 어떤 전략이 메타를 흔들지 기대된다. ‘나중에 봐야지’ 하고 미루는 순간, 새로운 전설의 탄생을 놓칠지도 모른다. 전 세계 ‘서머너즈 워’ 팬들이 함께 만드는 그 특별한 순간을, 개발자로서 다시 함께하고 싶다. 새 역사의 증인이 되고 싶다면, 지금 바로 서머너즈 워 e스포츠 채널을 구독하고 다가오는 경기를 놓치지 말자.

남은 무대, 그리고 파이널을 향해

SWC2025는 이미 유럽 컵을 성공적으로 마치며 본격적으로 진행 중이다. 앞으로 남은 무대는 세 곳.

특히 부산 아시아퍼시픽 컵은 처음으로 부산에서 열리는 ‘서머너즈 워’ e스포츠 현장 대회로 한국 팬들에게 의미가 크다. 세계적 수준의 경기를 직접 볼 수 있는 기회이자, 글로벌 팬들과 열기를 공유하는 축제가 될 것이다. 이어지는 파리 월드 파이널에서는 또 어떤 새로운 전설이 탄생할지 전 세계가 주목한다.

모든 경기는 ‘서머너즈 워 e스포츠 공식 유튜브 채널’에서 생중계된다. 시청자를 위한 다양한 선물도 준비돼 있으니, 팬이라면 꼭 함께하며 역사의 순간을 즐기길 바란다.

전 세계 각국에서 온 사람들이 모여 일하는 컴투스에는 다양한 문화와 전통이 공존한다. 특히 명절과 휴가 문화는 각 나라의 역사와 종교, 그리고 현대적 변화가 어우러진 특별한 모습을 보여준다.

컴투스 글로벌 회담 시리즈는 이미 ‘연애편’, ‘결혼편’을 통해 글로벌 직원들이 서로의 문화를 소개하며 공감대를 나눈 바 있다.

이번에는 추석을 맞아 준비한 ‘글로벌 회담 – 명절·휴가 문화편’으로, 이집트, 이탈리아, 인도네시아, 튀르키예에서 온 네 명의 직원들과 각국의 특별한 명절 이야기를 나눴다.


각자 나라에서 국민들이 가장 기다리는 명절은 무엇인가요?

루(이집트): 이드 알피트르, 이드 알아드하 두 이슬람 명절이 가장 크고 휴가도 길어서 이집트 사람들이 신나게 기대합니다.

이더(이탈리아): 이탈리아에서 가장 중요하고 기다려지는 명절은 크리스마스입니다. 원래 예수 그리스도의 탄생을 기념하는 날이기 때문에 성당에 가서 미사에 참석하곤 했습니다. 그런데 지금은 먼 친척까지 포함해 온 가족이 모여 함께 시간을 보내는 날입니다.

크투팟(인도네시아): 르바란(Lebaran) 또는 이드 알피트르(Idul Fitri)입니다! 라마단 한 달 금식을 마치고 가족이 모여 용서와 화해를 나누는 뜻깊은 날이에요. 다른 종교별 명절(예: 기독교의 크리스마스, 불교의 베사카 등)도 공휴일로 기념되지만, 규모나 사회적 영향력 면에서는 르바란이 가장 크고 전국적인 축제라고 할 수 있습니다.

이드 알피트리 대규모 기도 장면 (출처: Kompas – Muhammadiyah Tetapkan Lebaran Idul Fitri 2025)

에러팅(튀르키예): ‘라마단’(터키어: Ramazan Bayramı)과 ‘이드 알 아드하’(터키어: Kurban Bayramı)로 길게 쉬는 명절은 두 개입니다. 라마단의 금식 기간이 끝나면 온 가족이 모여 라마단 명절을 보내고, 이드 알 아드하는 아브라함의 희생을 기념하며 양이나 소 등을 제물로 바치는 명절입니다.

해당 명절에는 가족이나 친지들과 어떤 활동을 함께 하나요?

루(이집트): 보통 밤을 새우고 아침이 되면 준비해 모스크에 기도하러 갑니다. 명절 기도 끝나면 함께 명절 과자를 먹고 폭죽을 터뜨려요. 그다음 아버지가 이디야(현금)를 나누어줘요. 낮에는 다들 피곤해서 잠깐 쉬고, 저녁에는 친척들이 방문하거나 가족과 외출합니다.

(출처: albawabhnews)
크리스마스 전통 게임 (Tombola/빙고) (출처: Triciclo Selection – Tombola)

이더(이탈리아): 전날부터 모여 특별히 준비한 음식을 같이 먹고, 카드 게임이나 빙고와 비슷한 보드게임을 하며 자정을 기다립니다. 밤 12시가 되면 서로 축하하며 선물을 주고받고, 크리스마스 당일에도 다시 모여 점심부터 저녁까지 음식을 먹고 게임하면서 시간을 같이 보냅니다.

크투팟(인도네시아): 르바란 때는 온 가족이 모여 함께 기도하고 서로 용서를 구해 화해한 뒤, 준비한 명절 음식과 간식을 나누어 먹어요. 요즘은 가족끼리 게임을 하거나 SNS에 챌린지 영상을 올리며 추억을 남기기도 해요!

가족 화해·인사 모습 (출처: CIMB Niaga – Makna Idul Fitri)
명절 아침 예배 (출처: Anadolu Agency – Bayram Namazi)

에러팅(튀르키예): 두 명절 모두 남자들은 아침 일찍 모스크에 가서 명절 예배를 드리고 여자들은 아침을 준비합니다. 라마단 명절에는 첫날부터 가족이나 이웃이 서로 방문하며 축하하고, 이드 알 아드하에는 제물로 바친 양이나 소의 고기를 손질해 그 해 제물을 바치지 못한 이웃에게 나누어줍니다. 둘째 날부터도 서로 방문하여 축하를 이어갑니다.

명절에 선물을 주고받는 문화가 있나요?

루(이집트): 어르신들이 돈을 나누어줍니다. 전 성인이지만 아직도 아버지와 외삼촌한테 이디야를 받아요! 그 외에는 친척끼리 이드 알피트르 때 과자를, 이드 알아드하 때 고기를 주고받아요.

이더(이탈리아): 네, 선물을 꼭 주고받습니다. 보통 화장품, 향수, 옷, 가방 같은 선물을 많이 준비하고, 할아버지와 할머니는 손주에게 돈을 주는 경우가 흔합니다. 또 가족이 아닌 지인에게 크리스마스 때 자주 먹는 음식을 선물하는 문화도 있습니다.

크투팟(인도네시아): 대표적으로 ‘Angpao Lebaran/THR’라 불리는 명절 용돈 봉투를 아이들이나 아랫세대에게 줘요. 직접 만든 명절 과자나 기도복을 이웃이나 친척에게 나누기도 합니다. 최근에는 선물 제비뽑기, 전자상품권 등 더욱 다양한 방식으로 선물을 주고받는 것 같아요.

르바란 용돈 봉투(THR) (출처: Detik – Sejarah THR Lebaran)

에러팅(튀르키예): 어른들은 어린이들에게 용돈을 주는 문화가 있습니다. 나이가 어린 친구들이 용돈을 달라고 하는 대상의 손에 뽀뽀를 하는 전통이 있는데, 뽀뽀를 받은 어른들은 “건강하게 오래 살아”라고 기원하며 어린이들에게 용돈을 줍니다. 어린 친구들은 또한 할로윈 때와 비슷하게 집집마다 돌아다니며 사탕을 모으기도 합니다.

손 뽀뽀 전통 (출처: WomanTV – Bayramlarda El Öpme Geleneği)

그 명절에 빠질 수 없는 대표 음식은 무엇인가요?

루(이집트): 이드 알피트르에는 이집트 쿠키 ‘카크’를 무조건 만들어요. 또한 이드 알아드하에는 고기와 밥, 볶은 빵으로 이루어지는 이집트 대표 음식 ‘파타’를 먹습니다.

카크(Kahk) 쿠키 (출처: breadfast)
파타(Fattah) (출처: kitchen.sayidaty)

이더(이탈리아): 지방마다 크리스마스 음식이 많이 다릅니다. 제가 살던 지역에서는 크리스마스이브에 칼초네와 비슷한 모양으로 빚은 피자를 꼭 먹어야 합니다. 그런데 지역을 떠나서 빠질 수 없는 것은 자정이 되자마자 건배를 위한 스파클링 와인과, 디저트로 먹는 판도로나 파네토네 같은 빵입니다.

칼초네 형태 크리스마스 음식 (’Mpanate) (출처: La Mia Buona Forchetta – Mpanate)
르바란 명절 음식 (Ketupat, Opor Ayam 등) (출처: Enesis – Makanan Khas Lebaran)

크투팟(인도네시아): 르바란 하면 Ketupat(코코넛 나뭇잎에 싼 찐밥), Opor Ayam(코코넛 밀크 치킨 스튜), Rendang(향신료와 코코넛 밀크로 오래 졸여낸 소고기 요리) 같은 명절 음식과, Kue Nastar(파인애플 타르트 쿠키), Kue Kastengel(치즈 쿠키) 같은 명절 간식들이 빠질 수 없죠! 이때 평소보다 훨씬 푸짐하게 차려져서 살이 찔 수밖에 없어요.

에러팅(튀르키예): 튀르키예 명절에서 빠질 수 없는 음식은 ‘바클라바’입니다! 집에 오는 손님들에게 항상 바클라바와 튀르키예 커피나 홍차를 대접합니다. 이드 알 아드하에는 고기도 함께 대접합니다!

바클라바(baklava) 사진: (출처: UnsplashÖmer Haktan Bulut)

영상통화, SNS, 온라인 선물 등 디지털 방식으로 명절을 보내는 문화가 있나요?

루(이집트): 가족과 친척 모임이 중요해서 온라인 선물은 안 합니다. 그래도 축하 메시지는 보내긴 해요!

이더(이탈리아): 코로나19 이후로도 큰 변화가 없었던 것 같고, 여전히 모여서 보내는 것 같습니다.

크투팟(인도네시아): 코로나19 이후에는 멀리 살아 직접 만나지 못하는 가족끼리 영상통화로 인사하거나, SNS에 이드 명절 축하 메시지를 올리며 안부를 전하는 게 자연스러워졌어요. 특히 젊은 세대는 온라인 쇼핑 플랫폼으로 선물을 보내는 일이 많고, 가족끼리 챌린지나 명절 관련 콘텐츠를 함께 만들기도 해요.

에러팅(튀르키예): 튀르키예에서는 젊은 세대가 명절 기간에 여행을 떠나는 경우가 많고, 넓은 국토 때문에 떨어져 사는 친척들과는 영상통화로 안부를 나눕니다. 다만 온라인 선물 문화는 거의 자리 잡지 않았습니다.

명절이 꼭 즐겁지만은 않은 경우도 있죠. 여러분은 어떤가요?

루(이집트): 저는 가족, 친구와 함께하는 시간을 소중히 여깁니다. 열여덟 살에 집을 떠나 대학에 진학했고 지금은 해외에 살고 있어서 그런 기회가 드물죠. 명절 때 사랑하는 사람들과 함께할 수 있다면 무엇이든 할 거예요!

이더(이탈리아): 아무래도 크리스마스에는 풀코스로 많이 먹다 보니, 음식을 준비하고 집을 청소하고 다 먹은 뒤에 설거지까지 하는 어머니, 이모, 고모, 할머니들이 가장 힘듭니다. 또한, 가족이 많을수록 선물을 마련하는 데 드는 돈이 큰 부담이 되는 가정도 있어서, 그런 사연이 종종 뉴스에 나오기도 합니다.

크투팟(인도네시아): 음식 준비와 친척들이 결혼이나 직장 이야기를 꺼낼 때는 조금 힘들 때가 있죠. 그래도 1년에 한 번뿐인 명절이라 언제나 소중하고 기다려지는 시간이랍니다!

에러팅(튀르키예): 꼭 명절 때는 아니어도 지금 해외에 살고 있어서 자주 간다 해도 1년에 한 번인데 친척들을 방문할 때마다 잔소리는 항상 듣습니다. 튀르키예는 언제 돌아올 거냐부터 시작해서 결혼 아직도 안 할 거냐, 살이 쪘다/빠졌다 등 항상 의견들이 많으십니다. 그래서 명절은 명절 그대로의 분위기가 즐겁고 잔소리는 명절과 연관 안 시켜서 봐도 될 것 같습니다.

명절 기간에 귀향이나 대규모 이동이 있나요?

루(이집트): 명절 때 카이로가 가장 비워지고 조용합니다. 귀향이 심하죠.

이더(이탈리아): 이탈리아에서는 크리스마스보다 새해에 여행을 더 많이 가는 것 같습니다. 그래서 ‘크리스마스는 가족끼리, 새해는 친구끼리’라는 말도 자주 합니다. 그 외에는 명절보다 여름에 여행을 많이 가요. 더위를 싫어하는 사람은 산으로, 더위를 즐기는 사람은 바다로 갑니다.

크투팟(인도네시아): ‘무딕(Mudik)’이라고 불리는 대규모 귀향이 있어요. 수백만 명이 고향으로 이동하기 때문에 기차, 버스, 항공편이 매진되고 고속도로도 며칠간 심하게 막힙니다. 또 명절 기간이 길다 보니 보통 2~3일간 전형적인 르바란 전통을 지낸 뒤에는 여행을 떠나는 경우도 많습니다.

르바란 귀향 대이동 (Mudik) (출처: UC Auction – Proyeksi Arus Mudik Lebaran 2025)

에러팅(튀르키예): 튀르키예에서는 명절 기간에 세대별로 다른 모습이 나타납니다. 어르신들은 여전히 자녀나 손주들이 집으로 와 함께 시간을 보내길 기다리며, 이를 중요한 전통으로 생각합니다. 젊은 세대는 평소에 긴 휴가를 얻기 어렵기 때문에 명절을 여행 기회로 활용하려는 경향이 강합니다. 중간 세대는 여전히 부모를 방문하는 경우가 많아, 명절 때마다 도로가 붐비고 교통 체증이 심해집니다.

명절에 대한 인식이나 참여 방식이 세대마다 다른가요?

루(이집트): 나이보다 사람 성격에 따라 다른 것 같아요.

이더(이탈리아): 원래는 종교적 의미가 강했기에 미사에 꼭 참석해야 했는데요, 이제는 단순히 가족끼리 모이는 날이 된 것 같습니다. 또 대가족에서 핵가족으로 바뀌면서 최근에는 모임의 규모도 줄어든 느낌을 받았습니다.

크투팟(인도네시아): 부모 세대는 종교적 의미와 전통을 더 중요하게 생각하는 반면, 젊은 세대는 가족 인사는 하되 나머지 시간에는 여행이나 자기 휴식에 더 집중하기도 합니다. 특히 대도시 청년층은 해외여행을 떠나는 경우도 늘고 있습니다.

에러팅(튀르키예): 튀르키예에서는 명절에 대한 인식이 세대별로 차이를 보이는 것 같습니다. 어르신들은 여전히 명절을 중요한 전통과 가족 결속의 시간으로 여기며 큰 의미를 둡니다. 반면 젊은 세대는 명절을 예전처럼 특별하게 받아들이지 않고, 단순히 긴 연휴나 여행 기회로 여기는 경우가 많습니다.

각자 나라의 명절이나 휴일 중, 한국 친구들에게 꼭 소개하고 싶은 날이 있다면 어떤 날인가요?

루(이집트): 이집트 부활절 때는 가족들이 함께 모여 훈제 생선을 먹으며 봄을 맞이합니다. 또 콥트 크리스마스는 일반적인 크리스마스와 날짜(1월 7일)가 달라서, 소개드릴 만한 명절입니다.

이더(이탈리아): 저는 ‘페라고스토’를 소개하고 싶습니다. 역사 속에서 이 휴일의 날짜와 의미는 조금 바뀌었지만, 로마 시대부터 이어져 내려온 휴일입니다. 이탈리아에서는 페라고스토 날에 가족이나 친구끼리 모여 같이 바다에 갑니다. 특히 10대와 20대는 바닷가에서 텐트를 치고 노래를 부르면서 밤새 노는 경우가 많습니다.

페라고스토 바닷가 (출처: QuiFinanza – Ferragosto 2025)
보로부두르 베사카(와이삭) 연등 축제 (출처: Kabar BUMN – Perayaan Waisak di Borobudur)

크투팟(인도네시아): 불교 명절인 Waisak(바세카)이 부처님 오신 날을 기념하는 날인데, 중부 자바 보로부두르 사원에서 수천 개의 연등을 하늘로 띄우는 장관이 펼쳐집니다. 한국의 연등 행사와 비슷하지만, 세계 최대의 불교 사원을 배경으로 해서 훨씬 더 신비롭고 감동적인 경험이 될 수 있어요.

에러팅(튀르키예): Hıdırellez가 있습니다! 흐드렐레즈(Hıdırellez)는 튀르키예와 발칸 지역에서 매년 5월 5일 밤부터 6일 새벽까지 열리는 전통적인 봄맞이 축제로, 겨울이 끝나고 여름이 시작됨을 기념하며 풍요와 건강, 행운을 기원하는 행사입니다. 전설에 따르면 불멸의 성인 흐즈르와 일리아스가 이날 만나 사람들에게 복을 내린다고 믿어지며, 사람들은 모닥불을 피워 뛰어넘거나 소원을 적은 종이를 장미나 나무 밑에 묻는 등 다양한 풍습을 실천하고 가족·이웃과 함께 피크닉과 잔치를 즐깁니다.

흐드렐레즈(Hıdırellez) 모닥불 뛰어넘기 (출처: Fotomac – Hıdırellez Ateşten Atlama)

한국의 공휴일 중 개인적으로 가장 좋아하는 날은 언제인가요?

루(이집트): 연휴면 다 좋습니다. 개천절도 단군신화가 떠올라서 재미있더라고요.

이더(이탈리아): 오래 쉴 수 있어서 추석과 설날이 좋습니다.

크투팟(인도네시아): 추석이요! 르바란과 비슷하기도 하고 연휴 기간이 길어서 충분히 쉴 수 있다는 것도 큰 장점인 것 같아요.

에러팅(튀르키예): 저도 오래 쉴 수 있는 추석과 설날이 제일 좋습니다.

다른 문화권의 명절을 지역 사회에서 어떻게 받아들이나요?

루(이집트): 기쁨을 나누는 모든 문화의 명절을 존경합니다. 라마단 단식 기간에 제 업무 일정도 조금 조정된다면 정말 좋을 것 같아요.

이더(이탈리아): 이탈리아에는 가톨릭교가 널리 퍼져 있어서 라마단을 챙기는 무슬림이 처음 나타났을 때는 반대하는 사람이 많았던 것 같습니다. 그런데 다행히 젊은 사람들은 윗세대의 인식을 바꾸려고 많이 노력해서 점점 서로 존중하는 방향으로 가고 있습니다. 그리고 최근 들어 중국의 춘절이 화려해서 관심이 생기고 긍정적으로 보는 사람도 많아진 것 같습니다.

크투팟(인도네시아): 인도네시아는 다민족·다종교 국가라서 서로의 명절을 존중하는 분위기가 강합니다. 이슬람교의 르바란, 기독교와 가톨릭교의 크리스마스, 힌두교의 녜삐(Nyepi), 불교의 바세카, 유교의 춘절까지 모두 공식 공휴일로 인정돼요. 상업적으로 즐기기도 하지만, 동시에 이웃의 문화를 존중하고 함께 축하하는 사회적 분위기가 자리 잡혀 있어요.

발리의 크리스마스 (출처: Penakatolik – Natal di Bali)
힌두교 녜삐(침묵의 날) (출처: Joongdo Daily – Nyepi Day)

에러팅(튀르키예): 아무래도 크리스마스와 같은 종교적 의미를 가진 다른 문화권의 명절을 축하하지는 않지만, 크리스마스가 대중화되면서 튀르키예에서 새해를 맞을 때 크리스마스 트리를 꾸미거나 칠면조를 구워 먹고 그럽니다.

올해 한국의 추석 연휴는 개천절(10/3), 한글날(10/9), 그리고 컴투스의 리커버리데이(10/10)까지 더해져 꽤 긴 휴식 기간이 될 예정인데요! 혹시 이번 연휴에 특별한 계획이 있으신가요?

루(이집트): 비행기 티켓이 비싸서 어디 못 떠날 것 같아요. 대신 서울의 아름다움을 즐겨보겠습니다.

이더(이탈리아): 딱히 없습니다. 본가에 가고 싶었는데, 이탈리아가 명절에 인기가 많은 여행지라서 비행기표를 알아볼 때쯤에는 가격이 이미 많이 올랐었습니다…

크투팟(인도네시아): 인도네시아 가서 가족, 친구들이랑 좋은 시간 보내고, 고양이들이랑도 실컷 놀면서 힐링할 거예요. 맛있는 것도 많이 먹고 배도 마음도 든든하게 채워올 생각이에요!

에러팅(튀르키예): 네네네! 저는 가지고 있는 연차와 연휴를 합쳐서 한 달 동안 튀르키예로 휴가를 떠납니다! 너무 신나요, 야호~


이집트, 이탈리아, 인도네시아, 튀르키예에서 온 네 명의 직원들이 들려준 명절 이야기는 각기 달랐지만, 그 안에는 가족과 함께하는 시간을 소중히 여기고 서로의 안녕을 기원하는 공통된 마음이 담겨 있었다. 다가오는 추석에도 이 같은 마음을 되새기며 따뜻하고 풍성한 시간을 보내길 바란다.

이번 컴투스 글로벌 회담 ‘명절·휴가 문화편’을 통해 서로 다른 문화를 존중하고 이해하는 뜻깊은 시간을 가질 수 있었다. 앞으로도 글로벌 동료들의 다양한 이야기를 이어가며, 문화적 차이를 넘어 모두가 공감할 수 있는 보편적 가치를 함께 발견해 나갈 예정이다.

👉 글로벌 직원들에게 궁금한 주제가 있다면 언제든지 컴투스온으로 알려주세요!

〈온앤오프〉 코너는 컴투스 그룹 사우분들의 회사 안과 밖의 모습을 조명합니다. 회사 안에서의 다양한 직무와 하는 일, 회사 밖에서의 개성 넘치는 모습을 살펴봅니다. 이번 편 주인공은 IMO팀 게임 기획자 김도현 사우입니다.


Keword1 | Career | 게임 기획자

철학과 출신 전환형 인턴에서 게임 기획자까지

철학을 전공하셨다고요? 게임과 철학이 어떻게 연결됐나요?

원래 게임을 좋아했어요. 특히 서브컬처 계열의 액션 게임에 흥미를 느꼈고, 귀엽고 예쁜 캐릭터들을 직접 조작하는 게 중독성 있더라고요. 무언가를 좋아하게 되면 내적·외적으로 파고드는 스타일이라, 게임에서도 캐릭터 외형, 스킬, 모션, 효과, 서사까지 살펴봤어요. 외부적으로는 어떤 서사를 모티프로 했는지도 추적했죠. ‘이건 그리스 로마 신화에서 따왔구나’, ‘이건 불교 철학 쪽인가?’ 같은 생각을 하면서요.

대학교 3~4학년 무렵, 코로나19로 외출이나 친구들과의 모임이 어려워졌어요. 그 시기를 계기로 더 몰입해서 게임을 즐기게 됐고, 결국 졸업 논문도 철학과 게임을 엮어서 쓰게 됐을 만큼 진심이었죠.

전환형 인턴으로 입사하셨다고요. 당시 어떤 경험이 기억에 남나요?

당시 재학 중이던 학교에서 산학 인턴을 모집했어요. 경쟁률이 꽤 높다고 들어서 보통은 여러 회사에 지원한다고 했지만, 저는 ‘내가 좋아하는 일을 더 알아보고 싶다’는 바람 하나로 오직 컴투스만 지원했어요. 그런 마음이었으니 인턴으로 들어갔을 때 정말 기뻤고, 하루하루가 즐거웠죠. 인턴십을 마친 후 정식 입사 제안을 받았을 때의 설렘은 아직도 생생해요.

지금껏 저는 좋아하는 것만 하며 살아온 것 같아요. 좋게 말하면 낭만을 좇은 거고, 나쁘게 말하면 싫어하는 일을 회피한 걸 수도 있죠. 철학과라는 진로도, 전공 수업과 타과 수업을 넘나들며 다양한 분야를 파고들었던 것도 다 ‘좋아서’였어요. 물론 힘들거나 싫은 일도 있었지만, 그 경험들이 결국 여기까지 올 수 있는 발판이 됐다고 생각해요. 제가 좋아하는 게임에 녹아든 채 살아가고 있다는 게 뿌듯하고, 대견하기도 합니다.

아이모팀에 합류하게 된 과정이 궁금해요.

당시 아이모팀이 규모를 키우고 있는 시기였어요. 저는 입사 후 게임디자인실에서 여러 업무를 배우고 있었고, 실장님께서 저를 좋게 봐주셔서 아이모 스튜디오 PD님께 추천해 주셨죠. 그 인연으로 아이모팀에 합류하게 됐어요. 부족한 점이 많았던 시절이었지만, 저를 긍정적으로 평가해주신 분들 덕분에 아이모팀에서 잘 성장할 수 있었어요. 물론 지금도 여전히 성장 중이고요!

Keword2 | Career | 툴 메이커

자동화를 설계해 팀을 돕는 숨은 MVP

아이모는 어떤 게임인가요?

내년에 20주년을 맞이하는 초장수 MMORPG예요. 오랜 세월 아이모와 함께한 유저분들이 많아요. 누군가의 인생에 짧지 않은 시간을 함께한 게임이고, 지금도 현재진행형이라는 점이 인상 깊어요. 그런 게임에 제가 참여하고 있다는 게 정말 뿌듯하고, 아이모가 앞으로도 계속 서비스되면 좋겠다는 바람이 있어요.

아이모에서 어떤 업무를 맡고 계신가요?

아이모는 역사가 긴 게임인 만큼, 콘텐츠도 방대하지만 세계관과 서사는 비교적 성기게 얽혀 있는 편이에요. 저는 시나리오를 쓰고, 컨셉을 모색하고, 퀘스트를 기획하면서 아이모라는 세계에 더 많은 이야기를 불어넣는 일을 하고 있어요. 기존 콘텐츠와 충돌하지 않도록 유의하면서요.

인게임 외적으로는 팀 내 업무 플로우를 더 정돈되게 만들기 위한 시도도 하고 있어요. 아이모는 서비스 기간이 긴 만큼 히스토리와 관련 문서가 파편화돼 있었는데, 그걸 체계화하는 작업에 공을 들였죠. 특히 점검 시 플로우를 문서화한 게 기억에 남아요. 제가 처음 팀에 왔을 때 겪었던 시행착오를 떠올리며, 누가 와도 쉽게 따라 할 수 있는 가이드를 만들자는 목표로 만들었어요. 지금은 꽤 만족스럽게 쓰이고 있어요.

이렇게 많은 일을 체계적으로 해내시는 걸 보니, 계획형 인간이신 것 같아요. 혹시 MBTI J형인가요?

전 MBTI 테스트를 한 이후로 결코 P가 나온 적이 없는 대문자 J입니다. 일할 때마다 계획대로 딱딱 맞아떨어지고, 미리 준비해 놓아야 마음이 편해요. 근데 사실 이건 제 일할 때 모토 때문에 그렇게 하는 것이기도 해요. “이왕 하는 거 즐겁게 하자!”가 제 모토인데요, 이때 ‘즐겁다’의 정의를 제대로 살펴볼 필요가 있어요.

보통 즐거우려면 돌발 상황이 최대한 적고, 일정이 틀어지지 않으며, 서두르지 않을 수 있는 환경이 갖춰져 있어야 더 쉽게 즐거워질 수 있다고 생각해요. 물론 예상치 못한 상황을 아예 차단할 수는 없고, 그때도 나름대로의 즐거움을 찾을 수는 있지만… 그래도 미리 준비하면 더 좋지 않겠어요? 실수가 발생할 확률을 낮춰서, 모두가 편하게 일할 수 있는 프로세스를 갖추고 일해야 더 쉽고 즐겁게 일할 수 있다고 믿어요. 애초에 우울한 상황을 만들지 말고, 혹시라도 불편한 상황이 생긴다면 그건 그때 가서 대처하자는 마인드죠.

20년 가까운 역사를 가진 게임이다 보니 업무 적응이 쉽지 않았을 것 같아요.

아이모팀에 합류한 초기에는 확실히 여러 모로 난항을 겪었어요. 오랜 시간 서비스해 온 게임이다 보니 그만큼 히스토리가 길었고, 그 히스토리를 추적하고 이해하는 것만으로도 꽤나 어려웠거든요. 게다가 기획자로서는 처음 맡게 된 자리였으니, 긴장도 상당했고요.

앞서 제가 계획적인 성향을 어필하긴 했지만, 사실 정작 제 마음가짐은 그렇게 계획적이지 않아요. 계획을 세우는 일의 전제조건은 결국 그 일에 대해 잘 알고 있어야 한다는 거라고 생각해요. 무엇인지, 뭘 해야 하는지 알고 있어야 차근차근 단계적으로 계획을 세울 수 있는 거니까요. 그러니 모르는 일에 대해서는 그저 해보는 수밖에 없었어요. 맨땅에 헤딩하는 일이긴 하지만, 그게 지금 당장 할 수 있는 일이라면 그렇게 해야죠.

일단 도전하고, 일단 해보고, 일단 시도해보는 거예요. 가능한 부분부터 쪼개서 하나씩 해나가다 보면 언젠가는 그 일에 대해 더 알게 되더라고요. 아이모의 히스토리를 지금 당장 알 수 있는 부분, 추측할 수 있는 부분부터 차근차근 파악하다 보니 지금은 결국 데이터 작업에 대한 가이드 문서도, 업무 프로세스도 정립할 수 있을 만큼 알게 됐어요.

Keword3 | Career | 굿즈

애정으로 굿즈까지 만드는 올라운더

아이모에 대한 애정이 특별한 것 같아요. 직접 굿즈까지 제작하셨다던데요?

여러 모로 애정이 생기더라고요. 제 인생 첫 회사의 첫 게임이라는 개인적 이유도 있지만, 아이모의 캐릭터와 이미지들이 정말 귀엽거든요. 어느샌가 의식할 틈도 없이 아이모에 스며든 걸지도 모르겠어요.

그래서 유저 간담회 때도 제가 나서서 직접 쿠키를 굽겠다고 했거든요. 아이모의 몬스터들과 아이템을 소재로 한 쿠키들을 주문제작하고, 재료를 사서 구워야 했는데… 집도 작고 오븐도 작아서 꽤나 녹록지 않았어요. 하지만 제가 열심히 만든 쿠키들이 아이모를 사랑하는 유저분들에게 전해졌다는 사실만으로도 충분히 기뻤답니다.

사실 아이모는 공식 굿즈가 거의 없다시피 했거든요. 원래 저는 제가 좋아하는 분야의 굿즈를 곧잘 사는 편인데, 정작 제가 맡은 게임에는 굿즈가 없어서 너무 아쉬웠어요. 쿠키도 그런 맥락에서 만들게 된 거죠. 그래도 여전히 아쉬움이 가시지 않아서, 팀 내에서 개인적으로 비공식 아이모 굿즈를 만들어 함께 구매하기도 했어요. 아이모의 대표 캐릭터 쿠이가 프린팅된 쿠션, 아이모 주요 아이템들이 그려진 볼펜들, 쿠이 스트레스 볼 같은 것들을 왕창 만들었답니다.

그런데 최근에 정말 기쁜 소식을 들었어요! 무려 컴투스 스토어에 아이모 굿즈가 입점한다는 거예요. 내년 20주년을 맞이하는 기념으로 공식 굿즈를 제작한다는 얘기를 듣자마자 환호성을 질렀답니다. 공식 굿즈가 런칭되면, 아이모 굿즈 매출의 절반은 제가 차지하지 않을까요?

본인의 성장을 위해 어떤 노력을 하고 있나요?

아주 솔직히 이야기하자면 제 성장이나 업무를 위해서 하는 건 아닌 것 같아요. 정확히는 제가 좋아서, 지금의 제 흥미가 그곳에 가 있기 때문에 열중하는 것에 가깝죠. 저는 항상 제 부족함부터 보고, 그 부족함을 해소하기 위해 여러 분야를 기웃거리다 보면 금세 흥미가 생기더라고요.

일종의 자기만족이라는 건 부정할 수 없지만, 그 성격이 일할 때도 도움이 되긴 해요. 게임을 좋아해서 계속 플레이하다 보면 그 경험에서 자극을 얻고, 아이모의 시나리오와 컨셉에는 어떻게 녹여낼 수 있을까 고민하게 돼요. 한편 개발자분들과 회의를 할 때에도 제가 모르는 용어나 흥미로운 체계가 보이면 궁금해서 알아보고, 그러다 보면 개발 관련한 지식이 조금이나마 쌓여서 개발자분들과의 소통이 더 잘 되는 것 같고요. 반쯤은 흥미가 있어서 시작했던 코드 공부였는데, 결국 그게 쌓이고 쌓여서 개발자분들과 이야기할 때 되게 편하더라고요.

선임으로 진급하며 더 열심히 일한다는 소문이 있습니다.

밥값은 해야죠! (웃음) 승진 통보를 받았을 때는 정말 설렜고, 무척 뿌듯했어요. 제 인생 첫 직장에서의 첫 승진이었거든요. 저는 ‘선임다움’을 갖고 싶어서 목표를 세웠는데, 그 테마는 바로 업무 프로세스 효율화였어요. 사원 시절보다 더 넓은 시야로 팀 전체의 구조나 흐름을 파악하게 되면서, 제가 할 수 있는 개선점을 찾았죠. 반복 작업은 자동화하고, 복잡한 흐름은 정리하는 게 필요하다고 느꼈어요.

그래서 컨플루언스 문서를 재정비하고 일정 체계를 상세히 잡았고, 파이썬으로 툴도 만들었어요. 데이터 변환이나 서버 반영을 자동화해주는 프로그램이었는데, 도입 이후 오류가 줄어들었고 팀원들도 좋아해 줘서 정말 뿌듯했어요. 그걸 보면서 ‘나, 선임 맞구나!’ 싶었죠. 더 열심히 일한다는 소문은 진짜라고 자신 있게 말할 수 있어요!

앞으로의 김도현 ON, 어떻게 일하고 있을까요?

여전히 불만을 한가득 안고 일하고 있지 않을까요? 일하면 일할수록, 어떤 일에 더 익숙해지면 익숙해질수록 제가 지닌 부족한 점들이 더 많이 보이는 것 같거든요. 컴투스에 입사한 뒤부터 지금까지, 스스로 느끼는 부족한 점을 보완하기 위해 여러 가지 방면으로 알아 보고 시도해 봤어요. 부족하다 느꼈던 지점을 채우고 나니 그 다음엔 또 다른 부족함이 보이는 거예요. 그럼 다시 그걸 보완하기 위해 노력하고…. 그 과정에서 자신에게 실망하는 일도 다반사지만, 그래도 이를 통해 제가 조금이나마 더 나아질 수 있었다고 생각해요. 그러니 계속 제 스스로에게 불만을 지닌 채 일하고 있으면 하고, 분명 앞으로도 그렇게 일하고 있을 거라고 믿어요.

Keword4 | INSIDE | 문학소녀

시와 문장, 감정의 기록

주말에도 아침 일찍 일어나 시집을 읽으신다고 들었어요.

원래 아침잠이 없는 편이기도 하고, 오전 특유의 공기를 좋아하거든요. 게다가 시를 읽는 것도 어릴 때부터 좋아했고요. 좋아하는 것과 좋아하는 것을 더하면, 더 좋아하는 일이 되는 법 아니겠어요. 마음이 간다면 어떤 시집이든 좋지만, 그중에서도 제일 좋아하는 건 박상수 시인의 시집이에요. 가장 좋아하는 구절만 발췌해 본다면, “우리는 마음이 맞으니까 무죄”예요. 새초롬한 아이의 투정을 읽는 것 같아서 읽으면 읽을수록 애착이 가더라고요.

요새는 주기적으로 도서관에 들러 그런 “마음이 맞으니까 무죄”같은 시집과 소설책을 탐색하고 있어요. 문학동네 시인선을 필두로 다른 출판사들에서 신간이 나오면 한두 번씩 둘러보고요. 굳이 문학동네인 이유는 책 표지가 예뻐서예요. 소설책도 좋아하는데, 주로 한국 SF 계열을 손에 쥐게 되네요. 현실감 있는 공상이라서 그런지, 막힘없이 술술 읽히거든요.

글쓰기도 좋아하신다고 들었어요.

여태껏 적극적으로 공개한 글은 별로 없지만 글쓰는 일은 참 좋아해요. 짧든 길든 길이와는 무관하게 꾸준히 일기를 쓰는 편이에요. 쓸 때는 그때의 일을 생각하면서 쓰니 좋고, 정리도 되고요. 심지어 나중에 읽을 때는 쓰고 있던 때의 감정까지 새록새록 떠오르는 경우도 있어요. 이를테면 그때 들었던 노래, 그때 먹었던 디저트, 그때 같이 있던 사람 같은 것들요. 그런 경험이 마음을 무척 편안하게 만들더라고요. 그러다 보니 꾸준히 무엇이든 글을 쓰고 있는 사람이 된 것 같네요.

문학에 대한 관심이 실제 업무에도 도움이 되나요?

예상보다 훨씬 많은 부분에 도움이 되더라고요. ‘일할 때도 써먹어야지!’ 하는 의도는 없었지만요. 좋아하는 것들을 꾸준히 좋아하다 보니 그런 기억과 흔적들이 쌓이고 쌓여 어느샌가 제게로 돌아오는 것 같아요. 일례로, 소설이든 시든 읽으면서 오래도록 남기고 싶은 문장은 따로 메모장에 적어두거든요. ‘타인의 문장 모음집’이라는 이름의 메모 안에 여러 구절들이 담겨 있어요.

아이모라는 게임 속에 더 많은 이야기를 불어넣는 일을 한다고 앞서 말씀드렸는데, 이 문장 모음집이 종종 영감이 되곤 해요. 문장 하나를 보고 떠오르는 것들을 아이모에 어울리게 풀어내고, 그럴 때 새로운 이야기가 만들어지더라고요. 컨셉을 잡을 때도 원하는 키워드를 찾지 못할 때 그 문장 모음집을 들여다보기도 해요. 따지자면 소재 창고 같은 거죠.

Keword5 | INSIDE | 락스타

세상에서 사랑이 지난 유행이래도

노래방을 정말 좋아하신다고 들었어요.

네! 평소 여가 시간에도, 회식 때에도 ‘노래방 간다!’ 하면 벌써 콧노래가 나올 정도로 좋아해요. 최장기록은 워크샵 때였어요. 전날에 시작해서 다음날 새벽까지 주구장창 노래방 리모콘을 잡고 있던 적이 있거든요. 회사 팀원들도, 제 친구들도 인정한 노래방 러버예요. 노래를 듣는 것도 부르는 것도 무척이나 좋아해요.

조용하고 잔잔한 노래도 곧잘 듣지만, 노래방에서는 주로 비트가 빠르고 목소리를 크게 내는 노래를 선곡하는 편이에요. 왁! 하고 소리를 지르면 스트레스가 전부 날아가거든요. 잘 부르고 못 부르고와는 무관하게 그저 좋아하는 노래에 맞춰 시원하게 목소리를 내는 일이 너무 즐거워요.

여담이지만 평소에 입고 다니거나 좋아하는 스타일의 키워드를 나열하자면 블랙, 메탈, 크롭, 피어싱, 스트릿 같은 계열을 선호하는데요. 좋아하는 옷을 입고 좋아하는 노래를 부르고 있자니 그렇게 좋을 수가 없더라고요. 마치 정말 내가 락스타가 된 느낌으로요!

특히 록 장르나 파워풀한 곡들을 부를 때는 온 몸으로 노래하게 되는 것 같아요. 가볍게 춤도 추고, 마이크 스탠드를 잡고 흔들기도 하면서요. 평소에는 차분하게 앉아서 업무를 보는 기획자이지만, 노래방에서만큼은 완전히 다른 사람이 되어버리죠. 그런 갭이 저 스스로에게도 신기하고 재밌더라고요.

혼자서 불러도 그렇게나 즐거운데, 다른 분들과 함께 하면 더 신나더라고요. 분위기가 달아오르고, 그런 시끌벅적한 분위기 속에서 다들 깔깔 웃으면서 노래를 부르면 평소보다 훨씬 들뜨기도 하고요. 팀 회식 때 노래방 가면 처음에는 다들 조심스럽게 시작하지만, 제가 먼저 분위기를 끌어올리는 역할을 자처하곤 해요. 그러면 어느새 모든 팀원들이 신나게 노래하고 춤추고 있더라고요.

사실 노래방은 일종의 ‘해방구’같은 느낌이에요. 평소 업무 중에는 보여줄 수 없는 모습들을 마음껏 표현할 수 있는 공간이거든요. 그래서인지 노래방에서의 추억들이 특히 더 선명하게 남아있는 것 같아요. 어쩌면 노래를 부르는 것 그 자체보단, 그런 기분과 상황, 그리고 함께하는 사람들과의 유대감에 중독된 걸지도 모르겠어요.

아이모의 아이돌이라는 소문이 있습니다.

제가 나름 꾸준히 밀고 있는 팀 내 포지션입니다. 반쯤은 농담이지만 반쯤은 진담이에요. 아이돌! 하면 떠오르는 이미지가 있는데, 그 이미지를 닮고 싶거든요. 신나고 활기차면서 에너지도 넘치고, 명랑하고 그런 이미지요. 거기에 더해 보너스로 애정 듬뿍 담긴 관심까지 받으면 금상첨화!

일할 때 항상 즐거울 수만은 없잖아요. 생각대로 되지 않는 경우도 다반사고, 불현듯 일정이 변경되거나 갑자기 급하게 처리해야 할 일감이 생기기도 하죠. 그럴 때마다 기운이 쭉 빠지고는 하는데, 마냥 풀죽은 채 속상해하고 있기보다는 뭐라도 하는 게 낫다고 생각해요. 어차피 뭔가 해야 한다면 이왕 즐겁게 하는 게 좋잖아요. 그럴 때 제가 그렸던 아이돌의 이미지를 빌리는 편이에요. 저를 포함해서, 같은 팀원분들과 똑같은 일도 더 재밌고 즐겁게 하고 싶거든요. 아이모의 아이돌 포지션을 지켜내려는 제 노력이기도 하죠.

사실 원래 성격은 그렇게 밝지 못해요. 음울한 생각도 많이 하고, 먼저 약속을 잡는 성격도 아니거니와 한번 집에 틀어박히면 잘 나오지도 않고요. 아이모의 아이돌이라는 건 일종의 제 추구미인 것 같아요. 아이돌 타이틀을 유지하기 위해서라도 더 에너지 넘치게 일해야겠습니다.

10년 후 회사 밖의 나, 어떤 사람이 되어 있고 싶나요?

지금 같았으면 좋겠어요. 과하게 자신감 넘치는 말일까요? 그래도 전 현재의 제가 마음에 들거든요. 좋아하는 것들을 찾아 마음껏 좋아하고 있고, 궁금한 것들은 한번씩 해보고, 당장 해낼 수 있는 것들을 해내고 있어요.

계절마다 먹는 제철과일, 느슨한 아침에 읽는 문장 한 구절, 시끌벅적한 노랫소리, 맡은 일을 더 열심히 하려는 노력… 이런 것들이 10년 뒤에도 쭉 이어지길 희망해요. 앞서 좋아하는 것들만 하며 살아왔다고 했는데, 지금도 그렇고, 나중에도 그랬으면 좋겠어요. 지금처럼요.

마지막으로 한 마디!

내가 사랑하는 것들이 내게 아이돌인 것처럼 나도 누군가의 아이돌이었으면 좋겠다!


<온앤오프> 다음 주인공은 누가 될까요?

많은 지원 부탁드립니다.

9월 25일부터 28일까지, 일본에서 열린 ‘도쿄게임쇼2025’는 말 그대로 전 세계 게이머와 애니메이션 팬들이 모여드는 축제의 장이었다. 그 한가운데, 컴투스의 신작 ‘도원암귀 Crimson Inferno’ 단독 부스가 자리하며 글로벌 팬들의 뜨거운 관심을 온몸으로 느낄 수 있었다.

몰입도를 높이는 강렬한 부스 디자인

부스는 행사 기간 동안 일본 도쿄 마쿠하리 멧세 일반 전시장에 마련돼 신작 ‘도원암귀 Crimson Inferno’만의 강렬한 분위기를 입체적으로 구현했다. 작품 전체를 아우르는 레드와 블랙 컬러를 중심으로 공간을 구성하고, 다크 판타지 세계관을 강조한 비주얼 연출로 몰입감을 높였다.

‘도원암귀 Crimson Inferno’ 부스 전경

특히 스타 성우진들이 참여한 신작 시연 토크쇼, 유명 코스어들의 포토 세션 등은 TV 애니메이션 팬들의 마음까지 사로잡으며 현장의 높은 호응을 이끌어냈다.

TV 애니메이션 ‘도원암귀’의 주요 캐릭터로 분장한 인기 코스어들의 포토 세션
많은 관람객이 모여 큰 함성과 함께 카메라 셔터를 연타했던 열정의 포토 타임

특히 PC와 모바일 양 플랫폼에서 준비된 테스트 존은 매일 대기열이 발생할 만큼 붐볐고, 관람객들은 캐릭터를 직접 수집하고 화려한 스킬 전투를 구사하며 ‘도원암귀 Crimson Inferno’를 미리 만나보는 시간을 보냈다.

‘도원암귀 Crimson Inferno’ 부스 입장 대기열. 퍼블릭 데이에는 특히 매우 많은 관람객이 시연을 위해 줄을 섰다.
이벤트에 참여하고 있는 관람객들

팬들과의 직접 소통, 뜨거운 호응

이번 게임쇼에서 특히 뜻깊었던 순간은 관람객들과 직접 소통하는 시간들이었다. 애니메이션에 이어 게임에서도 목소리를 맡은 성우들이 무대에 올라 신작에 대한 이야기를 나눴고, 포토존과 스탬프랠리, 경품 이벤트, 인플루언서 초대석까지 다양한 프로그램이 마련됐다. 성우들은 무대 말미 친필 싸인 이벤트도 진행해 뜨거운 박수와 함성을 이끌어내기도 했다.

포토존에서 사진을 촬영하고 있는 관람객

전 세계에서 모인 관람객들이 ‘도원암귀 Crimson Inferno’를 체험하며 즐거워하는 모습을 통해 글로벌 팬들과 하나 되는 경험을 할 수 있었다. 열심히 개발에 박차를 가하고 있는 ‘도원암귀 Crimson Inferno’가 앞으로 전 세계 게이머들에게 어떤 새로운 경험을 선사할지, 기대와 설렘으로 함께할 수 있길 바란다.

2025년 9월 22일(월) 11시부터 11월 4일(화) 23시 59분까지 ‘더 스타라이트’와 ‘네네치킨’의 컬래버레이션이 진행된다. 네네치킨에서 판매하는 콜라보 스노윙 3종 세트 메뉴와 일반 메뉴 주문 시 쿠폰이 주어진다. 또한 기간 내 네네치킨 5천원 특별 할인 코드까지 제공된다.

5천원 할인쿠폰의 경우 이벤트 기간 내 선착순 30만 명에게만 제공되니 ‘더 스타라이트’를 플레이하면서 함께 사용하면 더욱 알찬 혜택을 누릴 수 있다. 이번 쿠폰과 게임 내에서 증정되는 쿠폰 모두 ‘네네치킨’ 공식 앱과 홈페이지에서 받을 수 있다.

5천원 쿠폰을 받으려면, 네네치킨 앱 기준으로 ‘쿠폰사용하기 → 쿠폰 → 쿠폰 다운로드’에서 ‘더 스타라이트 5천원 특별 할인쿠폰’ 프로모션 코드 입력란에 ‘THESTARLIGHTxNENE‘ 쿠폰 번호를 입력한 뒤 ‘다운로드’ 버튼을 누르면 지급된다.

그리고 콜라보 스노윙 세트 메뉴 주문 시, 스페셜 굿즈 이벤트(더 스타라이트 장패드)에 자동으로 응모되니 꼭 배가 고프면 야식으로 챙겨먹자! (추첨인원은 40명이다.)

5천원 할인 쿠폰 이외에도 게임 내 일반, 스페셜 아이템 쿠폰이 발급된다. 일반 치킨을 주문하면 ‘복수초 아바타 11회 소환권’이 콜라보 세트 메뉴를 주문하면 ‘늙은 사자의 아바타 소환권’이 각각 1개씩, 계정당 1회 주어진다.

치킨 구매 후 게임 내 쿠폰은 다음날 오전 11시부터 네네치킨 홈페이지 또는 애플리케이션 이벤트 페이지에서 쿠폰 발급이 가능하다.본 이벤트는 네네치킨 공식 앱, 홈페이지 회원 전용 이벤트니, 꼭 회원가입 후 치킨을 주문하도록 하자. (비회원 로그인 시, 쿠폰 발급 불가)

쿠폰 발급을 위해서는 네네치킨 애플리케이션 기준으로 ‘이벤트/공지’ → ‘당첨자발표’ → ‘쿠폰 발급하러 가기’ 버튼을 클릭하게 되면 자신이 주문한 메뉴에 따라 ‘일반 아이템 발급 창구’ 또는 ‘스페셜 아이템 발급 창구’가 활성화된다. 기자는 스페셜 세트를 시켜 먹어서 아래 ‘늙은 사자의 아바타 소환권 1장’ 쿠폰을 발급받았다. 개인적인 추천으로 고급 등급의 아바타 뽑기권은 게임 내에서 흔히 제공되는 뽑기다. 그렇기에 웬만하면 꼭! 세트메뉴를 시켜서 희귀등급의 아바타 소환권을 받도록 하자. (물론 고급 등급의 아바타여도 본인이 소유하지 않은 아바타가 뽑힐 경우 게임 내에서 아바타 획득 개수에 의거한 고유 능력치 향상이 있다.)

여기서 중요한 점은 “ID당 1회 사용 가능”이다. 즉, 2회 이상 사용이 불가능하다. 대신 세트 메뉴와 일반 메뉴를 각각 시킨다면 두 개의 쿠폰을 모두 사용할 수 있으니 모든 쿠폰을 받아보자.

인게임 쿠폰 등록

발급된 쿠폰은 아래 게임 내에서 ‘환경설정’ → ‘계정’ → ‘쿠폰 등록’ 버튼 클릭 후 사용이 가능하다. 본 기자는 ‘더 스타라이트’ 게임을 매우 열심히 하고 있으며 언제든지 친구 추가는 환영한다. 또한 길드 운영까지 하고 있기 때문에 언제든지 가입을 환영한다.

쿠폰을 등록하게 되면 우편함에 스페셜 아이템인 희귀 아바타 뽑기권이 감사 메시지와 함께 주어진다. 아바타의 등급에 따라 향상되는 능력치가 크기 때문에 꼭 콜라보 스노윙 세트메뉴를 시켜서 게임 내에서 원하는 아바타를 뽑았으면 한다. 다른 클래스의 아바타를 뽑았더라도 실망하지 말고 ‘합성’ 시스템을 잘 활용하여 원하는 아바타를 얻었으면 한다.

치킨의 맛은 어떨까? 

( 본 리뷰는 기자의 주관적인 평가이며 객관적인 평가를 의미하지 않습니다. )

쿠폰 활용으로 게임 내 캐릭터를 꾸며보았으며 이제는 시킨 치킨을 맛보고 평가할 차례다. 기자는 ‘차원을 넘어선 스노윙 세트’, ‘더 스타라이트 세트’, ‘4세대 멀티버스 세트’ 3종 세트 모두 시켜서 맛보았다. 세트메뉴당 양이 꽤 되기 때문에 2인 이상 즐겁게 먹을 수 있다.

퇴근 후, 유튜브를 보면서 가볍게(?) 콜라와 닭다리, 동봉된 감자튀김을 먹기 위해 주방에 남는 도마를 빌려 판을 깔아줬다. 치킨뿐만 아니라 감자튀김까지 있기에 맛의 심심함이 들지 않아 입이 즐거웠다. 기자는 치킨을 먹기 전 닭다리부터 확인하고 먹는데 3종 세트의 닭다리는 아래 사진과 같다. 아쉽게도 ‘더 스타라이트 세트’의 닭다리는 사진에 포함되지 않았다. 사진에서 볼 수 있는 것처럼 매우 먹음직스럽게 생겼다! 겉은 바삭했으며 속은 부드러웠다.

3종 세트 모두 값어치하는 맛을 하고 있었으며 굉장히 흡족하게 먹었다. 4세대 멀티버스 세트 메뉴를 시키면 ‘케이준 소스’와 ‘파인애플 커리 소스’ 2가지의 소스를 같이 준다. 치킨만 먹었을 때의 느끼함을 확실하게 잡아주며 감자튀김과도 너무나도 잘 어울렸다.

더 스타라이트와 컬래버레이션 중인 스노윙 3종 세트 메뉴를 모두 먹어보았을 때 언제나 그랬듯이 치킨의 맛은 언제나 옳았고 선택에 후회의 여지를 없앤다.

그리고 치킨과 함께 주는 희귀 아바타 뽑기 쿠폰은 게임 내에서 고효율적인 가성비임을 알려주고 싶다. 더 스타라이트라는 게임을 하지 않더라도 선착순으로 제공되는 5천원 할인쿠폰은 은근히 크니 꼭 사용했으면 좋겠다.

다음에 작성될 기사에서는 노가다하지 않으면 모르는 사실들과 게임 내 꿀팁(효율적으로 다이아 수급 및 소비)에 대해서 기사 작성 예정이니 다음 시리즈 또한 기대했으면 좋겠다.

chap1. 취향을 말하다

chap2. 엘파바 취향 책방

키코게임즈: 호모사피엔스의 취미와 광기 심민아, 민음사

“사람은 자기가 좋아하는 일을 하면서 사는 게 맞다. 그건 훌륭한 일이다. 정말로 복된 일이다. 하지만 알 수 없는 운명에 흩날리며 이링공뎌링공 살아가는 것이 인생 아니던가. “

 

요즘 한국 문학이 궁금하다면, 민음사의 ‘오늘의 젊은 작가’ 시리즈를 추천한다. 소위 ‘잘 읽히는’ 작품이 많아 입문용으로 부담 없이 즐길 수 있기 때문이다. 그중 이 작품은 게임 회사의 독특한 풍경을 재치 있고 신랄하게 그려내 많은 독자에게 재미를 선사한다.

겉으로는 게임 업계의 이야기처럼 보이지만, 작품이 던지는 핵심 질문은 “좋아하는 일을 하며 사는 게 과연 복되기만 한 일일까?”다. 게임 회사가 배경으로 선택된 이유는 이 업계가 대표적인 ‘덕업일치’의 현장으로 꼽히기 때문일 것이다.

실제로 키코 게임즈에는 ‘좋아하는 일을 직업으로 삼은 사람들’이 모여 있지만, 그들은 꿈과 현실의 괴리 속에서 무력감과 피로에 시달린다. 창의성은 프로세스에 갇히고, 이상은 매출에 눌려 구겨진다. 그런 현실에서 창작 본연의 아름다움을 좇는 주인공은 오히려 이방인이 되는 아이러니가 씁쓸하게 다가온다.

궁극적으로 이 작품은 현대 사회가 말하는 ‘성공’과 ‘행복’의 기준을 되묻는다. 좋아하는 일을 찾지 못하면 실패한 것처럼 여겨지는 분위기 속에서 많은 직장인이 겪는 피로와 혼란을 위로하며, 현대 직장인이라면 누구나 공감할 수 있는 이야기를 들려준다.

💡 이 책, 이런 분께 추천합니다
✔️ 현대 문학이 낯설고 부담스러웠던 분
✔️ 일상과 맞닿은 이야기에 마음이 가는 분
✔️ 간결하고 위트 있는 문체를 선호하는 분

📌 사우들에게 추천 이유
✔️ 게임 회사가 배경인 소설 중 가장 ‘현실’과 ‘문학’ 사이 거리감을 잘 조절한 작품
✔️ ‘내가 이상한 걸까, 내가 문제인 걸까?’ 싶은 순간에, ‘아니.’라고 담담하게 답해주는 작품

제 7회 젊은 작가상 수상작품집 (2016) 中 알바생 자르기 장강명, 문학 동네

“걔도 알바를 열 몇개나 했다며. 나름대로 경륜이 있고 요령이 있는 거지. 그런 바닥에서는 우리가 더 약자야. 자기나 나나, 월급 떼먹히는 주유소 사장님이랑 멱살잡이 해본 적 없잖아?”

더 요즘의 한국 문학이 궁금하다면, 문학동네의 ‘젊은 작가상 수상작품집’을 추천한다. 데뷔 10년 이내 작가들의 단편을 모은 이 작품집은 신선한 이야기로 가득하다. (심지어 출간 1년 동안은 책값이 반값이다!)

다만 기자는 최신작도 신인 작가의 작품도 아닌 2016년호를 골랐다. 많은 사람이 공감할 만한 작품을 찾다 보니 장강명 작가의 「알바생 자르기」가 떠올랐다. 「알바생 자르기」 인물인 팀장 은영은 직원들의 불만과 사장의 지시에 따라 무뚝뚝한 아르바이트생 혜미를 해고한다. 그러나 혜미가 던진 예상치 못한 ‘한 방’에 일상이 송두리째 흔들리게 된다. 

이 작품은 작가 특유의 간결한 문장과 청년 문제에 대한 예리한 통찰이 돋보인다. 영화 「기생충」을 재미있게 본 독자라면 이 작품도 흥미롭게 읽을 수 있다. 「기생충」의 박 사장이 “지하철 타는 사람들만의 냄새가 있어”라고 말하는 순간, ‘나 역시 기정이네 가족과 다를 바 없으면서도 무의식적인 선민의식으로 선을 긋고 있었구나’하는 자각에 머리가 띵했는데, 이 작품 역시 비슷한 감각을 준다.

등장인물을 단순히 선악이나 갑을의 관계로 나눌 수 없다는 점이 특히 인상 깊다. 은영과 혜미의 입장을 두고 언제나 의견이 분분한데, 그만큼 현실적이라 더 재미있다.

💡 이 책, 이런 분께 추천합니다
✔️ 현실을 예리하게 조명하는 이야기를 좋아하는 분
✔️ 짧지만, 가볍지 않은 이야기를 보고 싶은 분

📌 사우들에게 추천 이유
✔️ 간결하고 속도감 있는 문체가 부담없이 읽히며 몰입도가 높음
✔️ 지극히 현실적이고, 공감되는 이야기라 더 여운이 큼

룬의 아이들 : 데모닉 전민희, 엘릭시르

  “ABSINTHE IS MY SOUL”


지금도 가장 좋아하는 마음의 고향 같은 작품이다. 워낙 유명해 이미 아는 분들도 많을 것 같다. 『룬의 아이들』 캐릭터를 닉네임으로 쓰는 사우분들을 몇 번 본 적 있는데, 기자 역시 어릴 적 닉네임이 데모닉의 ‘리체’여서 내적 친밀감을 느끼곤 했다.😆

『룬의 아이들』은 같은 세계관을 공유하지만 각기 다른 주인공이 이야기를 이끄는 3부작이다. 그중에서도 기자는 2부 ‘데모닉’을 특히 좋아한다. 검사나 마법사 주인공이 대세였던 2000년대에, ‘ART 100, STR 0’의 주인공 조슈아는 무척 신선하고 흥미로웠다. 조슈아가 예술적 능력을 마음껏 펼치는 4권 「일 드 모르비앙의 결혼식」 에피소드는 지금도 종종 찾아볼 정도로 짜릿하다.

이 작품의 매력은 청소년 판타지로는 드물게 정치적 세계관까지 탄탄하게 구축되어 있다는 점이다. 입체적인 인물상이 섬세한 묘사로 표현되어 깊이 몰입하게 만든다. 스토리를 위해 존재하는 캐릭터가 아니라, 각자의 삶을 가진 인물들이 서로 얽히며 이야기를 만들어가는 느낌을 준다. ‘윈터러’ 8권의 보리스와 이솔렛, ‘데모닉’ 9권(신판 기준)의 아나로즈와 켈스니티의 마지막 인사 장면은 지금 봐도 울컥하고, 열 번 보면 열한 번 눈물이 나는 최고의 명장면이다.

2부 완결부터 3부 시작까지 무려 11년. 그 사이 초등학생 독자는 어느새 어른이 되었다. 초판도 모두 소장하고 있지만, 신판 출간을 위해 책장 한 칸을 더 비워 두었다. 새 책이 나오자마자 FLEX💸

💡 이 책, 이런 분께 추천합니다
 ✔️ 빙의·회귀·환생물에 지친 분
✔️ 입체적 캐릭터와 섬세한 묘사를 좋아하는 분
✔️ ‘테일즈위버’를 즐겼던 분

해리포터와 마법사의 돌 (미나리마 에디션) 조앤 K. 롤링, 문학수첩

 “Dobby is free.”

스토리는 이미 많은 분들이 아실 것 같아, 이번에는 굿즈의 관점에서 소개해 보고자 한다. 오랫동안 좋아한 만큼 다양한 굿즈와 여러 버전의 책을 모아왔는데, 그중에서도 2013년쯤 나온 뉴 일러스트 버전을 가장 아끼곤 했다.

하지만 몇 년 전, ‘미나리마 스튜디오’가 따뜻한 색감으로 재해석한 팝업북 에디션이 나오면서 애정 순위가 바뀌었다. 아쉽게도 4권부터는 다른 일러스트레이터가 참여해 미나리마 에디션은 3권으로 끝나지만, 팝업 일러스트의 매력에 빠진 나는 시리즈를 계속 모아갈 예정이다.

미나리마는 동화를 팝업북으로 재해석한 시리즈도 선보이고 있다. 한국에는 정식 출시되지 않아 직구가 필요하고, 크고 무겁고 영어로 가득 차 있지만, 예쁜 책장을 한 장 한 장 넘기다 보면 그 자체로 기분이 좋아진다. 엘파바답게 이번에는 ‘오즈의 마법사’를 함께 소개해 본다.

💡 이 책, 이런 분께 추천합니다
✔️ 해리포터의 마법 세계를 입체적으로 느끼고 싶은 분
✔️ 아기자기한 일러스트를 보며 힐링하고 싶은 분
✔️ 원서로 영어 공부를 하고 싶은 분

📌 사우들에게 추천 이유
✔️ 예쁩니다. 훌륭한 인테리어 소품!!
✔️ 집에 저학년 어린이가 있다면, 책에 대한 흥미를 자연스럽게 끌어낼 수 있음
✔️ 신번역본을 아직 안 읽어본 해리포터 팬이라면 감각적인 팝업 일러스트와 새로운 번역의 매력을 함께 즐길 수 있음

NewPhilosopher 바다출판사

힙한 카페를 좋아하는 분이라면 익숙할 킨포크. 감성적인 레이아웃으로 사랑받으며 ‘정보 전달’을 넘어 ‘감성 공유’라는 새로운 잡지 트렌드를 이끌었다. 2010년대에는 국내에서도 이 흐름을 반영한 ‘감성 잡지’들이 잇따라 등장했다. 한 편의 영화를 다양한 시선으로 풀어낸 프리즘오브 PRISMOF, 하나의 브랜드를 깊이 탐구하는 매거진 B 등이 그 예다. 요리를 좋아한다면 배달의민족과 협업한 매거진 F도 흥미롭게 읽을 수 있을 것이다.

그중 사우분들께 특히 추천하고 싶은 잡지는 호주의 생활 철학 매거진 NewPhilosopher다. 간결한 칼럼과 감각적인 일러스트로 현대인이 일상에서 마주하는 질문이나 내면의 상처를 이야기하며, 생각 정리와 힐링을 동시에 할 수 있는 책이다. 본격 철학서는 다소 부담스럽고, 힐링 에세이는 가볍게 느껴지는 분들에게 제격이다.

비슷한 결로 일상 속 심리학을 다루는 매거진 Breathe도 편하게 읽기 좋은 선택이다.

“인간이 자유로운 까닭은 무엇이든 할 수 있어서가 아니다. 각자 삶의 목적을 선택하고, 무엇이 중요한지 스스로 결정할 수 있기 때문이다.”(Vol.13, p.59)

💡 이 책, 이런 분께 추천합니다
 ✔️ TED·세바시 같은 강연을 즐기는 분
✔️플라톤과 공자는 무섭지만, ‘알쓸신잡’류의 잡학적 재미를 좋아하는 분
✔️ 예쁜 일러스트와 함께 힐링하고 싶은 분

chap3. 독서 페어링 아이템

항상 가방에 넣고 다니는 독서템, 롱 인덱스다. 예전에는 완독 직후 곧바로 감상평을 남겼지만, 요즘은 자투리 시간에 나눠 읽다 보니 바로 기록하기가 쉽지 않다. 그래서 방식을 바꿨다. 읽는 동안 마음에 드는 문장을 롱 인덱스로 표시해 두고, 완독 후 그 문장들을 모아 타이핑한다. 그러면 읽던 순간의 감상이 자연스럽게 소환된다. 조금 더디지만, 한 권 한 권을 더 알록달록하게 기억하는 방식이다.

chap4. 컴투북스 릴레이 소설

#1 여느때와 다름없는 오늘 시끄러운 알람소리가 나를 깨운다. 어두운 새벽녁에 눈을 뜬다. 밖은 비가 내렸는지 짙은 안개가 자욱했고 지끈지끈한 두통으로 인해 잠을 설친 나는 지칠대로 지친 몸을 억지로 일으키며 일어선다. 긴 하품과 함께 물을 벌컥벌컥 마신 후 뜨거운 물에 샤워를 하고 주섬주섬 옷가지를 입고 출근을 한다. 출근길에 마주치는 사람들은 나와 같이 다 피로해 보였고 그들도 삶의 투쟁을 하고 있었다. 열차 소리와 방송 안내음 외에는 아무 소리가 나지 않는 적막한 열차 안에서 나를 비롯한 그들은 스마트폰 세상속에 살고 있다. 시선은 언제나와 같이 스마트폰을 바라보고 있으며, 이어폰을 귀에 꽂고 주위에서 벌어지는 일에 관심을 가지지 않고 오직 반딧불이 처럼 빛나는 액정에만 시선을 두고 있다. 그렇게 도착역에 다와갈 때 쯤..누군가가 나에게 손을 뻗어 강제로 종이를 급하게 쥐어주고 사라졌다. ‘이건 무슨일이지? 나아게 지금 뭘 전달하려는 거지?’라는 생각과 함께..종이를 펼쳐 보니 그것은..

#2 사내 캠페인 홍보지였다. [마인드 리셋 데이 : 3, 6, 9, 12월 넷째 주 금요일, 필수 인원을 제외한 전 직원에게 휴식을 권장합니다.] 처음엔 ‘우리 회사가 유급 휴가를?’ 같은 의심이 블라인드를 도배했지만, 이제는 참여하지 않는 사람을 찾기가 더 어려웠다. 모두 아는 제도를 굳이 홍보할 이유가 있나? 자세히 보니 재작년 날짜였다. 지금은 쓰지 않는 합병 전 로고도 눈에 띄었다.

뭐야, 우리 회사 사람이었어? 이걸 왜…나한테? 빠르게 멀어지는 뒷모습을 멍하니 바라보다, 한번 더 종이를 살폈다. 뒷면에도 흐릿한 글씨가 있었다.  [대외비/ 담당자 외 열람 금지] 해당 일자에는 사옥 내 모든 기록 시스템이 일시 정지됩니다. 이전 분기 발생한 보안 사고를 고려하여, 일부 조치가 다음과 같이 변경되었습니다. 급하게 출력한 듯 내용이 잘린 공문. 여백엔 빨간 색연필로 휘갈긴 글씨가 한 줄 적혀 있었다. -이번 달엔 뭘 할래? 무심코 종이를 문지른 손끝에 붉은 자국이 남았다. 마치 지장이라도 찍은 듯, 선명하게.

CD플레이어는 MP3 플레이어, 스마트폰 스트리밍 서비스에 익숙해지면서 추억의 유물이 되어버린 지 오래다. CD를 한동안 잊고 지내다가, 아이 교육용 CD의 홍수와 함께 다시 CD 플레이어를 찾게 되었다. 유튜브, 태블릿 등 교육에 사용할 수 있는 전자기기가 무궁무진하지만, 영유아의 경우 과도한 미디어 노출을 너무 조기에 받을 경우 영향이 크다는 연구 결과가 있어 이 시장이 아직 유지되고 있지 않나 싶다.

문제는 집에 CD는 쌓여 있는데 정작 재생할 플레이어가 없다는 것. 그렇게 내가 고른 제품이 바로 일우 벽걸이형 블루투스 CD 플레이어다. 이 제품을 구매하기 전에 몇 가지 제품을 비교해 봤다.

CD 플레이어 제품 비교 

제품명디자인/형태주요기능전원조작방식음질가격대
일우(ILWOO) CD 플레이어 2벽걸이형/스탠드형(미니멀리즘 디자인)CD, 블루투스, FM 라디오, USB, TF 카드AC 어댑터물리 버튼, 리모컨깨끗하고 풍부한 사운드5~7만원대
무인양품(MUJI) 벽걸이 CD 플레이어벽걸이형(미니멀리즘 디자인)CD, FM 라디오AC 어댑터전원 줄을 당기는 방식자연스럽고 부드러운 사우드13~16만원대
인비오(INBEO) WM-02CD벽걸이형/스탠드형(깔끔한 사각형)CD, 블루투스, FM 라디오, USB, AUXAC 어댑터물리 버튼, 리모컨깨끗하고 균형 잡힌 사운드7~9만원대
브리츠(Britz) BZ-YM10휴대용/스탠드형(콤팩트한 원통형)CD, 블루투스, FM 라디오, USB, AUX충전식 배터리물리버튼, 리모컨무난하고 휴대에 적합한 사운드6~8만원대

교육용 CD 플레이어를 검색해 보면 정말 많은 제품이 나온다. 그런데 ‘교육용’이라는 단어가 붙었을 뿐, 사실상 기존 CD플레이어와 크게 다르지 않다. 차별화되는 부분은 주로 디자인이었다. 최종 선택에 앞서 비교했던 제품들을 간단히 정리해 봤다. 

먼저 깔끔한 디자인을 선호하는 이들에게 가장 사랑받는 두 제품, 일우 CD 플레이어 2무인양품 벽걸이 CD 플레이어다. 두 제품 모두 미니멀한 벽걸이형 디자인을 자랑한다. 공간 활용성이 뛰어나고, 하얀 벽에 걸어두기만 해도 감성적인 인테리어 효과를 낼 수 있다.

하지만 자세히 보면 차이가 크다. 일우는 CD 재생 외에 블루투스, FM 라디오, USB, TF 카드 등 다양한 기능을 지원해 활용도가 높다. 반면, 무인양품은 CD와 FM 라디오 기능에만 집중했다. 조작 방식도 일우는 물리 버튼과 리모컨을 지원하지만, 무인양품은 본체 아래에 있는 전원 줄을 당겨서 켜고 끄는 방식만을 고집했다.

벽걸이나 탁상형이 아닌, 진정한 휴대성을 원한다면 브리츠 BZ-YM10이 괜찮은 선택지로 보인다. 이 제품은 충전식 배터리가 내장되어 있어 전원 케이블 없이도 원하는 곳 어디에서나 음악을 들을 수 있다. 콤팩트한 원통형 디자인이라 가방에 넣어 다니기도 편리하다. 기능은 CD, 블루투스, FM 라디오, USB, AUX를 지원하며, 음질은 다른 제품에 비해 무난한 편이다. 캠핑을 다니는 사람들에게는 이런 제품이 유용할 것 같았다.

결국 교육용으로 쓰기엔 고가의 인테리어형 제품보다는, 실용성과 가성비를 갖춘 제품이 맞다고 판단했다. 그래서 선택한 것이 일우 CD 플레이어였다.

일우 CD 플레이어2 언박싱

온라인으로 주문한 후 도착하자마자 두근두근하며 박스를 열었다. 깔끔한 패키징, 꼼꼼한 포장 속에서 화이트 본체가 등장! 군더더기 없는 심플함이 마음에 들었다. 구성품은 본체, 무선 리모컨, 벽걸이 키트, 전용 스탠드, 설명서, 그리고 사용 설명서가 들어있다.

리모컨에 건전지까지 들어 있어 따로 준비할 필요가 없어 좋았다. 버튼 배치도 직관적이라 복잡한 조작 없이 모든 기능을 쓸 수 있다. 전원 케이블 길이도 넉넉해 설치 위치에 제약이 거의 없다.

설치 & 디자인 

이 제품은 벽에 걸 수도, 스탠드로 세울 수도 있어 공간 활용도가 높다. 기자는 일단 방의 분위기를 바꿔볼 겸 스탠드에 세워봤는데, 화이트 컬러라 주변 인테리어와 잘 어울렸다. 벽에 걸면 더욱 미니멀한 분위기를 연출할 수 있다. 하지만 벽에 걸면 전선들이 대롱거려서 더 많은 사고가 날 것 같아 기자는 그냥 거치대로 사용하기로 했다.

전면에는 작은 LED 창이 있어 현재 모드(‘CD’, ‘BT’, ‘FM’ 등)를 직관적으로 확인할 수 있다. 투명 커버로 돌아가는 CD가 보여 오랜만에 맛보는 아날로그 감성이 물씬 풍긴다. 물론 기자가 좋아하는 음악을 굳이 CD를 구워가며 들을 것 같지는 않지만, 아이들 교육에 사용하기에는 CD를 자주 바꿔가며 사용하기에는 편리할 것 같았다.

성능 & 음질 

큰 기대는 하지 않았지만, 생각보다 음질이 깔끔했다. 답답하거나 찢어지는 소리 없이 맑고 깨끗하게 들렸으며, 특히 영어 동요나 오디오북 같은 교육용 콘텐츠 재생에 적합했다.

또한 블루투스 기능으로 스마트폰에 저장된 자장가도 간편하게 재생할 수 있어 육아 환경에서 활용도가 높다. FM 라디오 수신도 안정적이고, USB/TF 카드까지 지원해 음악을 다양하게 즐길 수 있다.

물리 버튼의 조작감이 좋고, 리모컨 덕분에 멀리서도 편하게 컨트롤 가능하다.

장단점 총정리 

© 공식 홈페이지
✔️ 장점
깔끔하고 예쁜 디자인: 둥근 모양에 화이트 컬러가 어떤 공간에도 잘 어울린다. 미니멀리즘을 추구하는 사람들에게 특히 추천한다.
– 다양한 기능: 단순히 CD 재생뿐만 아니라 블루투스, FM 라디오, USB, TF 카드 등 여러 기능을 지원하여 활용도가 높다.
– 쉬운 설치: 벽걸이형과 스탠드형을 모두 지원한다. 동봉된 키트를 이용해 벽에 쉽게 걸 수 있고, 스탠드에 세워 탁자나 책상에 둘 수도 있어 편리하다.
– 만족스러운 음질: CD와 블루투스 모두 잡음 없이 깨끗하고 풍부한 소리를 들려준다. 
❌ 단점
배터리 미포함: 리모컨 건전지는 들어있지만, 본체는 전원 어댑터를 연결해야만 사용할 수 있다. 휴대용으로 쓰기에는 아쉬움이 있다.
– 터치 버튼 아님: 모든 버튼이 물리적인 버튼이라 터치 방식에 익숙한 사람들에게는 조금 아쉬울 수 있다. 하지만 물리 버튼 특유의 누르는 감촉을 좋아하는 사람에게는 오히려 장점이 될 수 있다.

정말 하이엔드를 달리는 수많은 제품들에 비하면 소소한 제품이지만, 일상 생활에서 사용하기에는 부담없고 가성비 높은 제품이라는 평가를 주고 싶다. 육아 가정이나, 아날로그 감성을 다시 즐기고 싶은 분들께 추천한다.

컴친소는 임직원 간의 취향을 공유하고 덕후력을 나누는 사내 네트워킹 프로그램입니다. 컴친소2는 여기에 사회공헌의 가치를 더해, 임직원들이 직접 기획한 굿즈를 통해 나눔을 실천하는 프로젝트입니다. 컴친소2 코너의 네 번째 주제는 ‘사진’입니다.

오늘날 사진은 누구나 쉽게 찍을 수 있는 기록 수단이 되었다. 스마트폰만 있으면 언제 어디서든 고화질 이미지를 남길 수 있고, 덕분에 특별한 장비 없이도 누구나 사진을 즐길 수 있다.

하지만 어떤 이는 여전히 카메라를 손에서 놓지 못한다. 또 어떤 이는 스마트폰으로 충분히 만족스러운 사진을 남긴다. 중요한 건 도구가 아니라, 사진을 통해 자기만의 시선을 표현하고 순간을 붙잡고자 하는 마음일 것이다. 같은 장면을 찍더라도 누구의 눈에 담기느냐에 따라 전혀 다른 사진이 되는 것도 바로 그 이유이다.

이번 사진편에서는 동료들이 들려준 사진 이야기를 담았다. 카메라를 잡게 된 계기, 스마트폰으로 포착한 일상, 그리고 사진이 각자에게 주는 특별한 의미까지. 사진이 가진 다양한 매력을 함께 들어보자.


자기소개 부탁드립니다.

미놀타: 안녕하세요. 아빠 사진사 AR사업실 미놀타입니다. 닉네임은 제 인생 첫 카메라인 필름카메라 Minolta X-300에서 따와 지었습니다.

R6: 안녕하세요~ 그냥 감으로, 땡기는 대로 사진을 찍는 GC-QA팀 R6입니다. 제가 큰맘 먹고 들인 카메라 기종이 Canon R6라서 이렇게 지었습니다.

미칵미칵: 안녕하세요. 컴투스홀딩스 홍보실 미칵미칵입니다. 닉네임은 제 이름과 필름 셔터가 닫힐 때 나는 ‘찰칵’ 소리를 합쳐 만들었습니다.

고인돌: 개발 아트 직군에 있고요~ 2000년도에 처음 코닥에서 나온 100만 화소 디지털카메라부터 사용한 디카계의 고인물이라 이렇게 지었습니다. 국내 DSLR 대형 커뮤니티의 초창기 회원이기도 합니다.

빛의 전사: 사진은 빛과의 싸움이라고 생각합니다. 또 제가 하는 게임에서 유저를 ‘빛의 전사’라고 불러서, 그 의미를 중의적으로 담았어요.

얌깽: 안녕하세요. 폴리포스 스튜디오 얌깽입니다. 닉네임은 개인적으로 불리던 별명에서 따왔습니다.

사진을 취미로 시작하게 된 계기가 무엇인가요?

미칵미칵: 중학생 때 아버지께서 쓰시던 컴팩트카메라를 물려받으면서 시작했어요. 원래는 집에만 있는 걸 좋아했지만, 카메라를 들고 동네를 거닐며 사계절의 변화를 기록하게 됐습니다. 일회용 필름 카메라를 현상소에 맡기고 기다리던 설렘, 건전지를 넣어 사용하던 카메라의 감성, 소리가 담기지 않던 오래된 캠코더로 영상까지 찍어보던 경험이 모두 소중했어요. 처음 느꼈던 호기심과 설렘이 저를 움직입니다.

고인돌: 어릴 적 관종력이 있어서 그런지 사진을 찍고 어딘가에 올리는 행위 자체가 좋았습니다. PC통신 사진 동호회 활동도 했고, 당시 다모임과 싸이월드가 유행하던 시기라 더 자주 찍고 올리게 되었던 것 같습니다.

얌깽: 여행을 갔을 때 좋았던 순간들을 기억하고 싶어 자주 사진을 찍게 됐습니다.

미놀타: 고등학교 때 짝꿍이 필카를 들고 다니길래 ‘어, 이런 거 나도 집에 있는데?’ 하면서 같이 찍으러 다니기 시작했어요. 그때부터 필름 카메라에 관심이 많아졌고, 대학교에 가서는 아르바이트로 번 돈으로 필름 카메라를 사고 다양한 종류의 필름을 사면서 본격적으로 취미 활동을 하게 됐습니다.

미놀타님의 카메라 컬렉션

R6: 처음에는 제 일상의 소소한 것들을 기록하고자 찍기 시작했는데, 찍다 보니 점점 더 잘 찍어보고 싶다는 욕심이 생겼습니다. 멋진 사진을 보는 것도 좋아하지만 제가 직접 찍고 확인할 때마다 느껴지는 만족감이 훨씬 크더라고요.

빛의 전사: 아버지가 사진 전문가셔서 어렸을 때부터 사진을 찍고 찍히는 것에 익숙했어요. 그래서 자연스레 사진으로 기록을 많이 남기곤 했습니다. 성인이 되고 나서 본격적으로 사진을 찍게 된 건 블로그를 시작하면서였습니다. 내가 올린 포스팅을 보다 보니 좀 더 멋진 사진을 올리고 싶다는 욕구가 생기더라고요.

평소에는 주로 어떤 장면이나 주제를 촬영하시나요?

미칵미칵: 여행지에서는 풍경과 음식 사진을 자주 찍었어요. 일상으로 돌아오면 집에 있는 열 살 고양이를 담습니다. 가끔 10년 전 아기였던 고양이 사진을 펼쳐보면 시간이 얼마나 빨리 흘렀는지 실감해요. 곧 아이가 태어나면 아기의 성장 과정을 꾸준히 기록할 계획입니다.

고인돌: 무조건 찍고 보는 습관이 생겨서 소소하게는 매일 먹은 것들을 기록하고, 집에서는 고양이를 찍습니다. 운동 후 ‘오운완’도 남기고, 카페나 여행을 가더라도 그 공간을 모두 기록하는 편이에요. 따로 주제를 정하지는 않고 무엇이든 찍습니다.

얌깽: 저도 특별히 주제를 정해서 찍지는 않는 것 같아요.

미놀타: 예전에는 주로 풍경 위주로, 함께 간 사람을 배경에 담아 찍었는데요. 아이가 태어난 이후부터는 아이를 중심으로 찍고 있습니다.

R6: 자연, 건축, 음식, 동물, 인물 등 다양한 주제를 촬영합니다. 주변에 사진이 취미인 친구도 있어서 함께 동물원에 가기도 하고, 좋아하는 가수의 공연이나 여행지 풍경, 소소한 일상까지 두루 담고 있습니다.

빛의 전사: 온갖 사진을 다 찍습니다. 주로 많이 찍는 건 음식 사진과 인물 사진이에요. 공연 보는 걸 좋아해서 커튼콜 사진도 많이 찍고, 운동도 좋아해 스파링하는 친구들 사진도 자주 찍습니다.

스마트폰 vs 카메라! 주로 어떤 장비를 사용하시나요?

미칵미칵: 요즘에는 스마트폰으로 촬영하는 경우가 압도적으로 많아졌어요. 5년 전까지만 해도 무겁더라도 카메라를 챙겼는데, 최근 스마트폰은 센서와 렌즈가 크게 개선돼 화질이 충분하고 초광각까지 지원해요. 전용 방수 케이스를 끼우면 간단한 수중 촬영도 가능하고요. 무엇보다 순간포착에 강합니다. 예를 들어 고양이가 갑자기 귀여운 행동을 할 때 스마트폰은 늘 손에 있으니 놓칠 일이 없었어요. 촬영한 사진을 옮기거나 보정하기도 편해 일상 기록에는 스마트폰을 가장 많이 씁니다.

고인돌: 아무래도 막강한 휴대성 때문에 주로 스마트폰을 사용합니다.

얌깽: 스마트폰으로 촬영해요! 카메라는 지식도 없고, 뭐가 좋은지도 잘 모르겠고, 가격도 너무 비싸더라고요.

미놀타: 스마트폰 6, 카메라 4 정도의 비중인 것 같아요. 아이와 외출할 때는 최대한 카메라를 챙기려 하지만, 짐이 많을 때는 어쩔 수 없이 카메라는 포기하게 되더라고요.

R6: 평소에는 주로 스마트폰을 사용하지만, 찍을 장소나 피사체가 확실히 정해지면 카메라를 들고 나갑니다!

빛의 전사: 주로 스마트폰으로 많이 찍습니다. 그래도 어디 나갈 때는 최대한 카메라도 함께 챙기려고 해요!

주력으로 사용하는 카메라와 렌즈 조합을 알려주세요.

얌깽: Galaxy S22 Ultra를 주로 사용합니다.

R6: iPhone 13 Pro(스마트폰), Canon EOS R6 + RF 100-400mm(미러리스), Canon AE-1P(필름)를 주로 사용합니다. 올해 초에는 복지포인트(^^)로 Galaxy S25 Ultra도 구매했는데, 아직은 친해지는 중이에요.

미칵미칵: 지금 주력 장비는 Galaxy S24Canon EOS R6, 그리고 RF 24-105mm F4L IS USM 렌즈 조합입니다. EOS R6는 캐논 기종 중 화질과 동영상 성능이 균형 잡힌 모델이라고 생각해요. RF 24-105는 광각부터 준망원까지 커버해 일상, 여행, 인물 촬영을 렌즈 교체 없이 대부분 소화할 수 있어 편리합니다.

고인돌: DSLR은 Sony A7M4 + FE 24-70mm F2.8 GM II / FE 35mm F1.4 GM 조합을 사용합니다. 가볍게 들고 나갈 때는 Canon M6, Galaxy S23 Ultra, Osmo Pocket 3를 활용해요. 필름 카메라는 Contax T2, Leica C1, Lomo Boy 등 토이 카메라도 사용하고 있습니다.

미놀타: 현재는 *풀프레임 *미러리스를 주력으로 씁니다. Sony A7M3 바디에 FE 24mm F1.4 GM *단렌즈 조합을 사용하고, 필름 카메라는 Nikon 28Ti를 함께 들고 다닙니다. 그 외에 Lomo LC-A+, Polaroid Land 250, Minolta X-300도 가끔 사용합니다.

빛의 전사: 카메라는 Sony A7C2 + Tamron 28-200mm F2.8-5.6 조합을 사용합니다. 무겁고 큰 장비는 부담이 돼서, 풀프레임 미러리스 중에서도 최대한 많은 화각을 커버하면서 작고 가벼운 조합을 선택했어요. 폰카는 iPhone 15 Pro를 주로 쓰고, 갤럭시 특유의 색감이 필요할 때는 Galaxy S23을 사용합니다. 또 폴라로이드 사진도 좋아해 Instax Mini 11도 종종 사용합니다.

폰카만 쓰다가 카메라에 입문하고 싶은 초보에게 추천할 만한 기종이나 장비가 있을까요?

📌 입문자 추천 베스트

  • Sony RX100 시리즈 (M3~M4) → 휴대성 + 화질 good. 중고 매물을 찾아보자!
  • Canon PowerShot G9 → 감성 + 가성비
  • Sony A7M3 → 풀프레임 입문용 + 가성비
  • Minolta X-300 (필름) → 완전 수동 조작으로 기본기 익히기

미칵미칵: Sony RX100 M3를 추천합니다. 주머니에 쏙 들어가는 크기에 화질도 스마트폰보다 좋아요. 새 제품은 부담될 수 있으니, 중고 시세 30만~40만 원대 제품을 찾아보시면 좋습니다.

고인돌: 저도 Sony RX100 시리즈를 추천해요. M4 이상 모델이면 수동 기능도 지원돼 DSLR 입문 전에 연습하기 좋습니다. 꼭 최신 모델이 아니어도 충분히 활용 가능합니다.

미놀타: 필름 입문이라면 Minolta X-300을 추천합니다. 완전 수동 카메라라서 감도, 셔터 스피드, 조리개 같은 기본기를 금방 익힐 수 있어요. 디지털 입문자는 Sony A7M3가 가성비 좋은 풀프레임 미러리스라 추천합니다. 처음에는 번들 렌즈로 시작해도 되고, 퀄리티 있는 사진을 원하면 35mm 단렌즈가 좋습니다.

R6: 저는 Canon PowerShot G9을 추천하고 싶습니다. 이른바 ‘똑딱이’ 카메라인데, 가격도 괜찮고 감성까지 챙길 수 있습니다.

빛의 전사: 제대로 입문하고 싶다면 처음부터 풀프레임 미러리스로 시작하세요. Sony A7C2 같은 기종에 저렴한 번들 렌즈로 시작하고, 필요할 때 렌즈를 확장하는 방식이 가장 합리적입니다.

‘이건 놓칠 수 없어!’ 싶은 순간, 눈으로 먼저 담으시나요? 아니면 카메라를 먼저 드시나요?

미칵미칵: 놓칠 수 없는 순간이라면 일단 휴대폰 카메라로라도 먼저 찍습니다. 장면을 확보해 두고 난 뒤 여유 있게 눈으로 감상해요.

고인돌: 기록병이 있어서 폰카를 먼저 켭니다.

얌깽: 요즘은 카메라를 먼저 켜는 것 같아요.

미놀타: 눈으로 먼저 즐깁니다. 눈으로 즐기면서 ‘이렇게 찍으면 되겠다’ 하고 생각한 뒤 촬영합니다.

R6: 빠르게 카메라로 먼저 찍고, 그다음 눈으로 즐기려고 합니다.

빛의 전사: ‘카메라를 들어야지’ 하고 생각은 하지만, 항상 눈으로 보다가 놓치는 것 같아요.

사진을 찍으면서 가장 행복한 순간은 언제인가요?

미칵미칵: 의도한 그대로 사진이 나올 때, 그리고 보는 사람이 제가 셔터를 누른 순간의 감정을 그대로 느꼈다고 말해줄 때 가장 행복했어요.

고인돌: 반응이 좋았을 때요. 또 제 사진이 ‘PC 배경화면으로 하고 싶다’ 싶을 정도로 제 취향에 맞는 분위기로 나왔을 때 행복합니다.

얌깽: 친구들 반응이 좋을 때요.

미놀타: 부족한 실력이지만 친구 커플의 결혼 전 야외 웨딩스냅을 찍어준 적이 있었는데, 그 사진을 보고 만족해하고, 본식 때 제가 찍은 사진을 액자로 뽑아 놓은 걸 봤을 때 정말 기뻤습니다. 내가 좋아하는 취미로 주변인들에게 좋은 추억을 남겨줄 수 있다는 게 너무 좋았어요.

R6: 의도하지 않았는데 사진이 마음에 들게 찍혔을 때 행복을 느낍니다!

빛의 전사: 친구들이 제가 찍어준 사진을 SNS 프로필 사진으로 쓸 때 뿌듯하고 기분이 좋습니다!

찍어놓은 수많은 사진들, 어떻게 정리하고 관리하시나요?

미칵미칵: 집에 시놀로지 NAS를 두고 남편과 공유 드라이브를 만들었어요. 여행이나 행사가 끝나면 SD 카드나 스마트폰에서 바로 NAS로 복사합니다. 폴더는 연도-날짜와 행사명으로 분류해요.

고인돌: DAS 외장 스토리지에 차곡차곡 쌓아두고 있습니다.

얌깽: 포토프린터로 뽑거나, 인스타 피드에 박제하거나, 구글 클라우드를 사용하고 있어요.

미놀타: 저도 NAS를 구축해 사용합니다. *RAW 파일은 용량이 크다 보니 촬영일자별로 NAS에 올리고, 보정본 JPG는 휴대폰과 NAS에 함께 저장하며 폴더별로 관리하고 있어요. 필름 사진은 수천 장이 넘어 앨범으로 관리하기엔 양이 많아서 현상된 사진들은 서랍장에 별도로 보관합니다. 요즘은 무한 잉크 포토프린터를 구입해, 디카로 찍은 아기 사진 중 마음에 드는 건 출력해 앨범으로 만들고 있습니다. 잘 나온 사진들은 인스타에도 올려요.

R6: 마음에 드는 사진은 스마트폰 사진첩에서 즐겨찾기해두고, 파일은 구글 드라이브나 전용 SSD에 보관합니다. 아이폰과 아이패드를 모두 사용 중이라 아이클라우드로 연동하니 편하고 좋아요.

빛의 전사: RAW 파일은 용량이 커서 하드에 저장하고, 마음에 드는 JPEG만 골라 휴대폰에 옮겨둡니다. 아이클라우드를 사용하면 폰에는 썸네일용 작은 이미지만 남기고, 원본은 클라우드에 올라가 있어 용량 걱정 없이 쓸 수 있어요. 또 블로그에 일기를 쓰면서 사진을 많이 올립니다.

💾 저장소 가이드

  • NAS: 네트워크로 연결된 저장장치, 여러 기기에서 공유 가능
  • DAS: 직접 연결하는 외장 저장장치
  • 클라우드: 온라인 저장 서비스 (구글 드라이브, 아이클라우드 등)

가장 많이 쓰는 사진 앱이나 편집 도구는 무엇인가요?

미칵미칵: 회사 언론홍보 업무에 필요한 행사나 인터뷰 사진은 어도비 라이트룸에서 AI 인물 보정 기능으로 빠르게 손봐요. 휴대폰으로 찍은 사진은 기본 내장된 갤럭시 포토 에디터를 씁니다. AI 지우개와 ‘편집 내용 복사·붙여넣기’ 기능으로 여러 장을 통일감 있게 보정할 수 있어 자주 활용하고 있습니다.

고인돌: 늘 포토샵을 켜놓고 일하다 보니 포토샵을 가장 많이 쓰고, Picn2k 같은 어플도 다양하게 활용합니다.

얌깽: 갤럭시 사진 앱이나 인스타 필터를 이용합니다.

미놀타: 라이트룸 월 구독을 하고 있어서 모바일과 PC 모두 라이트룸만 사용합니다.

R6: 평소에는 아이폰 기본 사진 앱과 편집 기능을 주로 쓰고, 좀 더 깊은 보정이 필요할 때는 아이패드 클라우드 연동으로 어도비 라이트룸이나 포토샵 익스프레스 앱을 활용합니다.

빛의 전사: 아이폰 기본 편집 앱과 라이트룸을 사용합니다!

좋아하는 사진 촬영 시간대나 날씨가 있나요?

미칵미칵: 자연광에 의존하는 편이라 맑은 날 오전 10시쯤, 부드러운 빛이 들어올 때가 가장 좋아요.

고인돌: 구름이 살짝 껴서 빛이 너무 강하지 않은 오후를 좋아합니다. 실내 촬영도 자연광이 들어오는 걸 선호해요.

미놀타: 아무래도 맑은 날씨를 선호합니다. 사진은 결국 빛을 다루는 작업이니까요. 시간대는 낮부터 해 질 무렵까지가 가장 좋다고 생각합니다.

R6: 맑은 날 정오쯤이나 해 질 무렵의 순간을 좋아합니다. 하늘이 너무 예쁘거든요.

빛의 전사: 주로 실내 촬영을 좋아해 시간이나 날씨에 크게 구애받지 않습니다. 다만 야외라면 해가 넘어갈 때, 시시각각 변하는 하늘의 색감을 담는 걸 좋아해요.

촬영할 때 가장 신경 쓰는 요소나 설정은 무엇인가요?

미놀타: 필름은 후보정이 어렵기 때문에 빛에 특히 신경 씁니다. 디지털은 라이트룸으로 노출·색감을 조정할 수 있어 부족한 빛은 보완 가능하지만, 구도만큼은 보정으로 해결되지 않으니 더욱 주의해요.

빛의 전사: 실내 촬영을 선호하다 보니 빛과 구도에 가장 신경 씁니다. 특히 빛이 너무 부족하면 보정으로도 살릴 수 없더라고요.

미칵미칵: 저도 구도에 가장 신경 씁니다. 노출이나 색감은 후보정으로 다듬을 수 있지만, 구도는 한 번 놓치면 돌이키기 어렵거든요. 인물 사진을 찍을 때는 억지 표정보다 자연스러운 순간을 기다립니다. 일부러 웃긴 이야기를 꺼내 표정을 풀어주기도 해요.

R6: 구도에 가장 신경 씁니다. 특히 수직·수평 구도를 좋아하는데, 오른쪽으로 기울어지는 습관이 있어 고치려고 노력 중이에요. ㅠㅠ

꼭 찍어보고 싶은 장르나 주제가 있다면 무엇인가요?

미칵미칵: 휴직 기간에는 따뜻한 일상 스냅에 도전해보고 싶어요. 아침 햇살이 드는 부엌, 창가에서 하품하는 고양이, 곧 태어날 아기의 작은 손 같은 소소하고 귀여운 순간들을 자연광으로 담아보고 싶습니다.

고인돌: 반딧불이나 별 궤적 사진이요. 명소도 체크해놨는데 일정이 어긋난 뒤 아직 못 가봤습니다. ㅠㅠ

얌깽: 여친 사진을 찍어보고 싶습니다…

미놀타: 오로라 사진입니다. 제 버킷리스트 중 하나인데, 언젠가 오로라를 보러 가서 꼭 촬영해보고 싶어요.

R6: 인물 사진이요. 일상 속에서 멋진 인물 사진을 찍어보고 싶은데 쉽지 않네요.

빛의 전사: 언젠가 사막 풍경 사진을 찍어보고 싶습니다.

사진을 좀 더 감각적으로 찍는 팁이 있다면요?

얌깽: 피사체의 선과 프레임 선을 신경 쓰면서 찍는 편이에요.

빛의 전사: 스마트폰 카메라 설정에서 격자를 켜고 피사체를 선에 맞춰 찍으면 훨씬 멋진 사진을 얻을 수 있어요!

고인돌: 수직과 수평만 잘 맞춰도 기본은 됩니다. 그리고 잘 찍힌 사진들을 많이 보고 따라 해보면 금방 감을 잡을 수 있을 거예요.

미칵미칵: 촬영할 때는 먼저 끝선이나 난간, 벽, 책상 모서리 같은 *리딩 라인을 찾아요. 그 선이 피사체를 향해 자연스럽게 흘러가도록 위치나 카메라 각도를 살짝 조정합니다. 보는 사람의 시선이 그대로 따라와 주제에 집중되고, 사진도 한층 깔끔하게 보이더라고요.

미놀타: 구도는 기본만 기억해도 충분합니다. *황금분할과 *삼분법이 대표적이에요. 예를 들어 바다가 예쁘면 바다를 화면의 2/3로, 하늘은 1/3만 나오게 찍고, 반대로 하늘이 멋지면 하늘을 2/3, 바다는 1/3만 담으면 됩니다. 삼분법은 흔히 말하는 3×3 격자 구도로, 교차점에 피사체를 올리면 안정적인 사진이 나옵니다.

R6: 저도 *격자를 활용해 선을 맞추거나 오브젝트를 배분합니다. 인위적인 보정보다는 최대한 자연광을 살리려고 하고요. 인물 촬영은 인물 모드 + 3배 줌으로 찍으면 왜곡이 적어요. 색감이 마음에 들지 않을 때는 필터를 모노톤으로 바꿔 보는 것도 추천합니다.

📖 구도 가이드

  • 삼분법: 화면을 3×3으로 나누어 교차점에 주요 피사체 배치
  • 황금분할: 화면을 2:3 비율로 나누어 구성
  • 리딩라인: 시선을 피사체로 유도하는 선들 활용
  • 격자 기능: 스마트폰 카메라 설정에서 격자 표시 활성화

사진이 본인의 삶에 어떤 영향을 주었다고 생각하시나요?

미칵미칵: 사진은 시간을 병 속에 담아 두는 일 같아요. 셔터를 누른 순간이 나중에 꺼내 보면 선물이 되어 돌아오거든요. 앨범을 넘기면 그때의 계절, 냄새, 웃음소리가 되살아나서 ‘나는 참 풍성하게 살고 있구나’ 하고 마음이 따뜻해집니다.

요즘은 (제가 찍은 건 아니지만) 아기 초음파 사진을 모아 작은 앨범을 만들었어요. 언젠가 아이가 그걸 넘기며 웃어줄 때, 사진의 힘을 또 한 번 느낄 것 같아요.

고인돌: 좋아하는 걸 하다 보니 자연스럽게 일이 되기도 했고, 작은 수익도 생겼습니다. 내가 좋아하는 걸로 누군가에게 가치를 줄 수 있다는 자존감도 얻었고요. 무엇보다 사진 덕분에 더 많이 바라보고, 더 오래 기억하게 됐습니다. 지금도 사진은 단순한 취미를 넘어 저를 표현하고 세상과 연결해주는 소중한 도구라고 생각합니다.

얌깽: 세상을 아름답게 바라보는 긍정적인 시선을 갖게 해줬습니다.

미놀타: 사진은 제 인생에서 처음으로 꾸준히 해온 일이에요. 고2 때부터 지금까지 23년 동안 사진을 공부하고 즐겼는데, 덕분에 열정이라는 게 무엇인지 알게 됐습니다.

R6: 제가 아미(BTS 팬)인데, RM님이 ‘사람에겐 비빌 언덕이 필요하다’고 했던 말이 떠올라요. 저에게는 사진이 그런 비빌 언덕 중 하나입니다. 셔터를 누르는 순간만큼은 잡생각 없이 집중할 수 있고, 온전히 나만의 것으로 남길 수 있어서요.

빛의 전사: 블로그에 남겨둔 일상 사진들을 다시 보면 그때의 기억이 되살아나면서 행복해요. 같은 장면도 친구가 찍은 것과 전혀 다르게 남아 있더라고요. 그냥 지나쳤다면 기억에 남지 않았을 순간을, 나만의 시선으로 기록할 수 있는 게 사진의 힘인 것 같습니다. 덕분에 행복의 순간을 더 촘촘하게, 더 오래 기억할 수 있어요.

사진을 취미로 하면 생각보다 돈이 많이 드나요? 현실적인 이야기가 궁금해요.

미칵미칵: 저는 장비 욕심이 크지 않아서 비용이 많이 들지 않았습니다. 어릴 때부터 쓰던 카메라를 수리 불가할 때까지 썼고, 지금도 카메라 한 대와 표준 줌 렌즈 한 개로 충분히 만족하며 쓰고 있어요. 먼저 ‘얼마나 자주, 어떤 상황에서 찍을 것인지’를 정하면 지출 한도가 정해진다고 봅니다. 반대로 바디와 렌즈를 자주 바꾸며 최신 기종을 따라가면 비용이 확실히 커지죠. 그런 열정도 멋지지만, 제 경험상 필요할 때 천천히 업그레이드해도 충분히 즐겁습니다. 자신의 촬영 패턴에 맞춰 장비를 늘려 간다면 부담은 크지 않을 거예요.

고인돌: 기종이 워낙 다양해서 결국 적정선을 어디에 두느냐의 문제라고 봅니다. 제 경우는 20년 넘게 장비를 사고팔며 사용했는데, 부수적인 비용까지 합치면 카메라에만 중형차 한 대 값은 쓰지 않았을까 싶습니다.

미놀타: 초기 비용은 디지털 카메라에 많이 들고, 이후 유지 비용은 필름카메라 쪽에서 나오는 것 같아요. 필름 한 롤이 평균 1만 원 중반대, 현상·스캔 비용이 약 1만 원 정도인데, 적당히 타협하면 크게 부담되진 않습니다. 다만 입문 후 기변병이 오면 돈이 줄줄 새죠. 그래서 저는 주변에 처음부터 어느 정도 괜찮은 카메라와 렌즈를 추천합니다. 그래야 기변병이 조금 늦게 옵니다.

R6: 갈수록 장비 욕심이 생기다 보니 확실히 비용이 많이 드는 취미라고 느낍니다. 그래도 ‘장인은 도구를 가리지 않는다’는 말처럼 결국은 개인 만족도의 차이인 것 같아요. (물론 카드 명세서를 보면 눈물이 살짝 납니다.)

빛의 전사: 더 좋은 렌즈로 찍은 사진을 보면 장비병이 생기긴 하지만, 지금 장비로도 충분히 만족하고 있습니다. 가볍고 실용적인 장비가 제 성향에도 잘 맞아요. 본인의 니즈와 예산에 맞는 장비를 고르면 큰 비용 들이지 않고도 오래 즐길 수 있습니다.

사진으로 돈을 벌거나, 작가를 쓰지 않고 직접 찍은 경험이 있나요?

미칵미칵: 청첩장에 들어갈 웨딩 스냅을 직접 찍었습니다. 삼각대에 카메라를 올려 스마트폰 앱으로 구도를 맞추고 장소를 옮겨 다니며 촬영했어요. 전문 작가만큼은 아니었지만, 무더운 날에도 함께 고생하며 웃었던 기억이 의미 있게 남았습니다.

고인돌: 블로그나 커뮤니티 리뷰어 활동을 통해 카메라 협찬이나 원고료를 받으며 리뷰를 작성했습니다. 니콘, 캐논, 삼성, 시그마 등에서 활동했고, 서포터즈로 해외에 다녀온 적도 있어요. 웨딩 스냅, 본식 서브, 돌잔치, 프로필, 쇼핑몰 촬영도 했습니다.

미놀타: 친구들의 야외 웨딩 스냅을 두 번 정도 찍었고, 학교 후배가 쇼핑몰을 시작할 때 제품 사진을 교통비 정도 받고 촬영해줬습니다. 제 결혼 스냅은 사계절 동안 직접 찍기도 했는데, 지금도 그 사진들을 보며 추억을 떠올립니다. 사진을 좋아한다면 한 번쯤 셀프 웨딩 촬영에 도전해보는 것도 추천드려요.

다양한 사진을 보내주셨는데, 그중 인상 깊었던 한 장씩을 골라봤습니다. 해당 사진에 대한 이야기를 들려주세요.

미칵미칵: 4년 전 새벽에 촬영한 사진인데, 집에서 달팽이를 키우고 있었거든요. 그 달팽이를 물끄러미 올려다보던 고양이의 표정이 너무 진지해서 저도 모르게 셔터를 눌렀습니다. 보시는 분들이 ‘무슨 생각을 하고 있을까?’ 하고 미소 지을 수 있으면 좋겠다는 마음으로 제출했습니다.

고인돌: 저희 집 둘째 고양이 사진이에요. 10년도 넘은 사진인데, 당시 루리웹 냥갤에서 인기가 많았고 네이버, 다음 메인에도 올라갔었죠. 짤로 돌아다니거나 도용 제보도 많았을 정도로 제가 찍은 사진 중 가장 이슈가 많았던 작품입니다. 모든 건 다 둘째의 미모 덕분이라고 생각합니다!!

R6: 에버랜드 판다월드에는 세계적인 스타 바오 가족도 있지만, 오밀조밀한 눈·코·입과 삼각김밥 같은 귀, 퐁실퐁실 긴 꼬리로 심장을 저격하는 귀여운 랫서판다들도 있습니다. 이 친구의 이름은 ‘레시’인데, 야구 등 다양한 캐릭터 콜라보 상품이 나올 정도로 인기 있는 친구랍니다. 너무 귀엽지 않나요?

얌깽: 작년 7월, 무척 덥고 습했던 날 홍콩 셩완에 도착하자마자 기념으로 찍은 사진입니다. 여러 여행지 사진을 보냈는데, 이 사진을 골라주신 것 같아요.

미놀타: 코로나가 시작되기 직전인 2019년 12월 말~2020년 1월 초 뉴욕 여행을 다녀왔습니다. 뉴욕 야경 사진을 찍으러 이곳저곳 다니던 중, 랜드마크 중 하나인 라디오시티 뮤직홀의 네온사인이 너무 예뻐서 찍었어요. 시간이 흐른 지금 다시 보니 또 가고 싶은 마음이 들어 선정했습니다. (이제는 아기가 있어 언제 다시 갈 수 있을지는 모르지만요…)

빛의 전사: 올해 초 도쿄에서 찍은 사진인데요. 색감도, 배경도 일본 특유의 분위기가 묻어나고, 흰둥이의 뒷모습까지 귀여워서 마음에 드는 사진입니다.

이제 막 사진에 관심을 갖기 시작한 분들께 가볍게 조언 한마디 부탁드립니다.

미칵미칵: 매일 한 장을 남긴다는 마음으로 일상을 기록해보세요. 평범해 보이는 사진도 모아두면 하루하루가 빛나는 작은 보석함처럼 느껴집니다.

고인돌: 순간을 포착하는 재미와, 다시 들여다볼 수 있다는 점에서 사진은 매력적입니다. 꼭 잘 찍을 필요도 없고, 폰카로도 충분합니다. 비공개라도 좋으니 인스타그램 같은 곳에 매일 기록하다 보면 방향이 잡힐 거예요.

얌깽: 저도 초보라 조언이 부끄럽지만, 일단 많이 찍는 게 좋은 것 같습니다.

미놀타: 카메라는 무조건 들고 다니세요. 저는 결혼 전까지 가방에 항상 필름카메라를 넣고 다녔는데, 순간순간 꺼내 찍다 보니 실력이 많이 늘었습니다. 관심이 있다면 카메라와 친해지는 게 먼저예요.

R6: 소중한 순간을 남기지 못해 후회할 수도 있으니, 찍을 수 있을 때 많이 찍어보세요!

빛의 전사: 많이 찍어보세요. 망했다고 생각한 사진도 시간이 지나면 다 추억이 되더라고요.

이번 사진편에서는 동료들이 직접 들려준 사진 이야기를 통해, 각자가 어떤 시선으로 세상을 바라보고 기록하는지를 엿볼 수 있었다. 어떤 분은 카메라의 묵직한 셔터감에서, 또 어떤 분은 스마트폰의 가벼운 편리함에서 사진의 즐거움을 찾고 있었다. 장비와 방식은 달랐지만 공통적으로 느낀 점은, 사진을 찍는다는 건 결국 ‘내가 지금 보고 있는 세상을 내 방식대로 남기는 일’이라는 것이었다.

사진은 찍는 순간에도 즐겁지만, 시간이 흘러 다시 꺼내 보았을 때에 더 큰 의미를 갖게 되는 것 같다. 평범했던 일상이 특별하게 보이고, 잊었던 감정이 되살아나며, 그때의 공간과 사람들을 다시 만나게 해준다. 그렇기에 사진은 단순한 기록을 넘어, 미래의 나에게 보내는 작은 선물이 되기도 한다.

이번 기사에서 소개된 팁들을 한 번 참고하여 사진을 남겨보길 권한다. 꼭 전문 장비가 아니어도 괜찮다. 스마트폰으로도, 혹은 집 안에 묵혀둔 카메라로도 충분히 시작할 수 있다. 중요한 건 어떻게 찍느냐보다 ‘무엇을 어떻게 담고 싶은지’에 대한 마음이니까.

여러분도 일상 속에서 스쳐 지나가는 순간들을 잠시 멈춰 서서 사진으로 남겨 보시길 바란다. 언젠가 다시 마주했을 때, 그 사진은 단순한 이미지가 아니라 지금의 추억과 감정을 고스란히 전해주는 창이 되어 있을 것이다.

‘컴친소2: 컴투기빙’에서는 참가자들이 직접 굿즈를 기획한다. 1차 굿즈 사전 미팅에서 논의한 결과에 따라, 작가가 카메라와 필름통을 형상화한 일러스트를 제작했다. 이 일러스트는 냉장고나 파티션 등에 사진을 자유롭게 붙일 수 있는 아크릴 자석으로 재탄생하여 실용성을 더했다.

주제가 ‘사진’인 만큼, 참가자들이 보내준 방대한 사진 자료들을 그냥 지나칠 수는 없었다. 다양한 주제의 사진들이 있었지만, 작업의 편의성을 고려해 ‘여행’과 ‘동물’ 두 카테고리로 사진을 분류했다.

이렇게 탄생한 1차 시안은 여행 엽서 3종과 동물 사진으로 제작한 카드 스티커였다. 2차 모임에서 이를 공개하자, 참가자들이 더 많은 사진을 보내주겠다며 적극적인 참여 의사를 보여주었다. 그 결과 약 200여 장의 사진이 추가로 모였다.

엽서 초기 시안

금손 컴친구들이 보내준 소중한 사진들을 담당자만 보기에는 아까워서, 엽서를 14종으로 대폭 확대하고 카드 스티커도 1종을 추가 제작했다. 엽서는 브라운 테마와 블루 테마 두 가지로 나누어, 각각의 사진에 어울리는 디자인 요소를 더해 완성했다.

엽서 제작이 예상보다 늦어져 2차 모임이 끝난 후에야 굿즈 수령을 위해 참가자들이 다시 모였다. 완성된 굿즈를 받아본 모두는 기대 이상으로 높은 퀄리티에 감탄하며 감동했다는 후기를 전했다. 비록 제작된 모든 수량을 선물로 드리진 못했지만, 참가자들은 하나같이 “연말 마켓에서 꼭 구매하겠다”는 의지를 보여주었다.

컴친소 사진편 굿즈가 궁금하다면, 오는 12월 열릴 ‘컴친소2: 컴투기빙’ 마켓을 기다려보자. 참가자들이 직접 기획하고 제작한 만큼, 사진 속 추억과 진심이 고스란히 담긴 특별한 아이템들이 여러분 곁을 찾아갈 예정이다.

🎨이번 [컴친소2: 사진] 일러스트 및 굿즈 제작에는
박정민와이프(일러스트, 아크릴 자석), 누누 작가(카드 스티커)님의 멋진 손길이 더해졌습니다.

컴투기빙의 따뜻한 메시지를 감각적인 비주얼로 담아내 주신 두 작가님께 진심으로 감사드립니다.

처음 회사에 발을 내딛던 날의 설렘과 긴장감을 누구나 한 번쯤 경험해봤을 것이다. 새로운 환경에서 잘 해낼 수 있을까 하는 걱정과 내 능력을 멋지게 발휘하고 싶은 열망이 교차하는 그 순간 말이다.

여기 그 순간을 여전히 생생하게 기억하는 네 명의 주니어가 있다. 각기 다른 경로로 합류했지만, 비슷한 설렘과 고민 속에서 자신만의 강점을 키우고 발휘하고 있는 이들의 이야기를 들어보았다. 하루하루 성장하며 회사에 새로운 활력을 불어넣고 있는 이들이 말하는 ‘나의 첫 회사, 컴투스’는 과연 어떤 모습일까?

인터뷰 참가자

PART 1. 합류 경험

Q. 어떤 경로를 통해 컴투스에 합류하게 되셨나요?

블랭크: 2022년도 상시 채용 공고로 입사했습니다. 타 회사 면접에서 다른 직무를 권유받아 한창 직무 변경을 고민하던 시기였어요. 컴투스의 공고는 합류할 프로젝트가 명시되어 있어, 입사 후 제가 기대한 직무를 수행할 수 있을 것 같아 지원하게 되었습니다.

디디: 2022년 지니어스 인턴십 4기 클라이언트 부문 인턴으로 처음 들어오게 되었습니다. 원래 게임 회사에 관심이 있어서 채용 페이지를 종종 확인하곤 했었어요. 마침 딱 이전 인턴십이 끝났을 때 공고가 올라왔고, 자격 요건에 제가 적합한 것 같아 지원했습니다.

해달짱: 회사 이름이 아직 ‘게임빌컴투스’였던 시절의 2021년… 우연히 공개채용 포스터를 보고 지원하게 되었습니다. 겜성캠핑이라는 주제로 게더타운에 모여 채용설명회를 들었던 기억이 나네요.

KD: 원래 컴투스 게임을 즐겨 하던 유저이자, 게임 업계에 관심이 있는 취준생이다 보니 자연스럽게 컴투스에서 일하고 싶다는 생각을 했어요! 그래서 대학 시절엔 ‘컴투스 플레이어’ 활동을 했고, 해당 프로그램이 종료된 직후엔 ‘지니어스 인턴십’에 지원하여 컴투스 생활을 시작했습니다.

Q. 지원서를 쓰기 전에는 컴투스를 어떤 회사라고 알고 있었나요? 막상 들어와 보니 어떤 점이 달랐나요?

블랭크: 귀여운 IP와 손쉬운 게임으로 기억합니다. 누구든 함께하기 좋은 게임이라 친근감이 높았어요. 입사 후 이 친근한 감각을 위해 수많은 설계와 작업이 뒷받침된다는 것을 알고 무척 놀랐어요.

디디: 피처폰 사용 시절 ‘미니게임천국’을 재밌게 했던 기억이 컴투스에 대한 제 첫 인상이에요. 그래서 모바일 게임 강자라는 이미지를 갖고 있었어요. 그런데 들어와 보니, 스팀 같은 PC 게임 시장으로 발을 넓히는 등 제 생각보다 훨씬 다양한 프로젝트가 있더라고요.

해달짱: ‘미니게임천국’이나 ‘타이니팜’ 같은 인기작뿐만 아니라 ‘더비데이즈’, ‘매직트리’ 같은 다소 마이너한 컴투스 게임까지 섭렵할 만큼 팬이었습니다. 실제로 들어와보니 그보다 더 많고 폭넓은 게임들을 서비스하고 있구나! 하고 알게 되었습니다.

KD: 프로야구를 좋아하는 만큼 야구 게임도 즐겨하다 보니 ‘야구 게임 명가’라는 인식이 가장 강했습니다. 과거 피처폰 시절 유명했던 게임의 대다수를 서비스한 회사라 ‘고전 캐주얼 게임 명가’라고 생각하기도 했고요.

Q. 취업 준비할 때 가장 신경 썼던 부분은 무엇인가요? 지금 취업이나 이직을 준비하는 분들에게 해주고 싶은 조언이 있다면?

블랭크: 역시 포트폴리오가 아닐까요? 먼저, 정해진 양식은 없다고 말씀드리고 싶어요. 저는 진로를 늦게 결정해서 막학기를 앞뒀을 때도 게임 포트폴리오가 다소 부실했어요. 막막했지만, 학점 연계 인턴십을 진행하며 배운 지식들, 무모하지만 열정적으로 도전한 1인 개발 내용 등을 어필했어요. 많은 사람들이 인정해주는 화려한 외부 활동도 좋지만, 꼭 그런 것이 아니더라도 주도적으로 노력한 열정과 꾸준히 습득한 성실성을 전달할 수 있다면 분명 긍정적인 결과가 있을 거라고 생각합니다. 하반기 채용을 앞두고 부족한 경험 때문에 막막해하시는 분들이 있지 않을까, 해서 제 이야기를 적어보았습니다.

디디: 저도 내가 가진 장점 중 어떤 걸 어필할 수 있을지 가장 고민했던 것 같아요. 취업 준비를 하면서 부족한 부분을 채우기 위해 노력하는 것도 좋지만, 사실 짧은 시간 내에 엄청나게 발전하는 게 쉽지 않잖아요. 내가 자신 있고, 잘하는 게 뭔지를 효과적으로 드러내는 게 가장 중요한 전략이라고 생각합니다. 콘텐츠적으로는, 그동안 진행한 프로젝트에서 ‘무엇을 담당했었고, 어떤 걸 배웠고, 이런 걸 할 수 있다’를 강조하고 한눈에 볼 수 있는 포트폴리오를 만들기 위해 노력을 기울였어요!

해달짱: 전형적인 게임업계의 포트폴리오를 만들어야 한다는 선입견에 갇히지 않고, 내가 그림 자체를 즐길 줄 아는 사람이라는 것을 어필하는 것이 저의 돌파 포인트였습니다.

KD: 나만의 강점을 많이 어필하려고 했습니다. 남들과 똑같은 스펙, 자격증보다는 내가 남들에 비해 어필할 수 있는 성격적인 강점이나 특별한 경험이 있는지 생각해봤어요.

Q. 합격 소식을 들었을 때 가장 먼저 떠오른 생각은 무엇이었나요? 혹시 여러 회사 중 선택했다면, 컴투스를 고른 이유도 궁금해요.

블랭크: 사실 결과를 들은 당시에는 실감이 나지 않았어요. 그날 저녁 바로 외식을 했는데, 맛도 잘 안 느껴지고 주변 분위기도 따라가지 못하고 있었어요. 첫 출근날이 돼서야 합격을 실감한 것 같아요. 현실적인 요소를 많이 반영한 게임을 좋아해서, 실사에 가까운 플레이를 위해 어떤 방식으로 작업하는지 배우고 싶다고 생각했습니다.

디디: 너무 다행이다! 지니어스는 전환형 인턴이라 인턴십이 끝난 후 2차 면접을 진행했어요. 인턴십 과정에서 배운 것이 많아 꼭 컴투스에 오고 싶었죠. 다른 곳은 지원하지 않고 합격 여부를 기다렸는데… 불안한 마음을 품고 떠난 여행지에서 합격 메일을 받고, 부모님께 행복한 전화를 돌렸던 기억이 아직도 생생하네요.

해달짱: 서류 접수부터 과제 제출 그리고 1, 2차 면접을 거쳐 최종 발표까지 장장 3개월이 걸렸기 때문에 ‘끝나서 후련하다!’ 하는 마음이 가장 컸습니다. 1차 면접까지는 잘 보이고 싶은 마음에 엄청 떨었어요. 코로나 시기라 화상 면접을 봤는데, 면접관으로 오신 실장님이 왜 이렇게 떠냐고 걱정하실 정도로… (화면을 뚫고 전해지는 진동.) 그때 전부 떨었는지 2차 면접때는 오히려 의연해지더라고요. 몇 번의 관문을 거치면서 채용 과정이 서로를 알아가는 단계라는 걸 느껴서 그런 것 같아요. 최종 발표날짜가 12월 29일이었는데, 전화로 들려온 합격 소식이 저에겐 최고의 한 해 마무리이자 새해 선물이었습니다.

KD: 제 강점을 가장 잘 발휘할 수 있는 프로젝트가 있는 회사이기 때문에, 컴투스에 가장 관심이 갔어요. 지원도 컴투스 하나밖에 하지 않았을 정도로요. 그만큼 가장 가고 싶었던 회사였기 때문에 합격 소식을 듣고 무척 기뻤습니다.

Q. 온보딩 과정에서 기억에 남는 경험이 있다면 소개해주세요.

블랭크: 퀘스트 일지 미션 중 힌트에 맞는 장소를 찾아가는 미션이 기억에 남아요. 첫 출근이라 무척 긴장했는데, 회사보다는 게임 속 맵을 돌아다니는 느낌이라 긴장도 풀리고 즐거웠어요. 정말 게임 회사다운 온보딩 방식이라고 생각했죠!

디디: 인턴때 근무했던 팀에 다시 합류하게 되어 다 알고 있었지만, 마치 처음 뵙는 분들처럼 온보딩을 진행했는데 기억에 남아요. 온보딩 때 주신 커피 쿠폰으로 팀원분들과 더욱 친해질 수 있었어요! 같이 협업하는 다른 팀들과 함께하는 미션이 더 많아지면 좀 더 좋을 것 같아요.

해달짱: 입사 후 3일 동안 오프라인 오리엔테이션을 진행했습니다. 그때 동기들과 말문을 튼 이후 3년이 훌쩍 넘은 지금까지도 잘 지내고 있습니다! 실무에 집중하게 되면 자연스레 다른 직군과 소통할 수 있는 기회가 적어지는데, 이때 만난 든든한 동기들이 있어서 다른 팀 소식도 종종 듣고, 서로를 격려하며 함께 성장할 수 있었습니다.

KD: 다른 직무의 사람들을 만날 수 있는 기회여서 좋았습니다. 일회성에 그치게 되는 인연이 많다는 점은 다소 아쉬웠어요.

PART 2. 슬기로운 컴투스 생활

Q. 첫 사회생활을 시작하면서 가장 크게 느낀 ‘기대와 현실의 차이’는 무엇이었나요?

블랭크: 출근길과 등굣길은 꽤나 다를 것이라 생각했는데, 크게 다르지 않다는 게 현실 같았습니다. 사회생활을 하면 정말 어른이 된다고 생각했어요. 그래서 출근길에는 회사 메신저를 확인하고, 드라마에 나오는 그런 것들을 할 줄 알았습니다. 실제로는 시간연차를 쓸 때를 제외하고는 메신저는 확인하지 않고, 아침에 고민하는 것도 학생 때와 별반 다르지 않네요.

디디: 저는 어렸을 때부터 회사 근처에서 살았어요. 안양천을 바라보며, 점심시간에 사원증을 하고 한 손엔 커피를 들고 돌아다니는 분을 부러워했죠. 그런데 막상 회사 구내식당이 무척 좋아서 점심시간에 밖에 나갈 일이 별로 없더라고요! 그래도 가끔씩 날이 좋은 날이면 나가서 커피도 사고 걸어다니며 로망을 실현해보곤 합니다.

해달짱: 예전에는 멋진 정장에 구두를 신고 출근하는 로망이 있었는데요, (정확히는 로망이라기보다는 어른은 마땅히 그런 것이다! 라는 환상이요!) 하지만, 어느 순간 편한 트레이닝 팬츠에 아이디어가 깃든다는 것을 알게 되었죠….

KD: 직장인이 되면 아메리카노 한 잔을 손에 들고 출근을 하거나 멋지게 업무를 처리할 줄 알았어요. 그런데, 아직도 커피는 맛이 없고 허둥대며 업무를 하곤 합니다.

Q. 지금 소속된 팀의 분위기나 장점, 자랑해주실 만한 포인트가 있다면요?

블랭크: 저희 팀은 꽤 자유로운 분위기입니다. 빌드 이슈가 없다면 업무 방식이나 연차 사용에 큰 제한이 없어요. 팀장님도, 팀원분들도 규율을 강제하기보다는 서로의 스타일을 존중해주시는 편이라, 큰 틀을 제외하고는 각자의 방식으로 업무를 진행합니다. 그렇다 보니 업무할 때는 다소 조용한데, 워크샵 콘텐츠나 회식 메뉴를 고를 때는 다양한 의견이 오고 갑니다. 유연하고 끈끈한 팀워크가 있는 팀이라 생각해요.

디디: 팀원분들에게 뭔가 제안했을 때, 다들 쉽게 고개를 끄덕여주시는 점이요! 예전에 워크숍을 주도한 적이 있는데, 다들 긍정적인 리액션을 해주셔서 결정하는 순간이 막힘없이 술술 진행됐어요. 다들 참여에도 적극적이셔서 진행하면서 뿌듯하더라고요!

해달짱: 팀원들 간 사이가 정말 좋다는 게 가장 큰 자랑 포인트예요~ 친구들과 한 팀이 된 느낌이라고 해야 하나요? 일할 때는 일에 최선을 다하고, 쉴 수 있을 때는 다 같이 신나게 쉬자! 라는 느낌이에요!

KD: 직급 상관없이 의견 교환이 활발하다는 점이 저희 팀의 멋진 점입니다. 사원인 제 의견도 항상 존중해주시죠 ㅎㅎ 저희 팀도 비슷하게, 일을 할 땐 확실하게 하고 쉴 땐 잘 쉬자는 분위기예요. 이런 환경 덕분에 업무에 집중하면서도 개인적인 일상도 놓치지 않고 열심히 즐길 수 있는 것 같습니다.

Q. 입사 후 기억에 남는 첫 프로젝트나 업무 경험은 무엇인가요?

블랭크: 수습기간에 진행한 미니 야구 프로젝트가 가장 기억에 남습니다. 처음에는 주어진 것만 만들어서 시간이 넉넉하다고 생각했어요. 공이 항상 균일한 포물선을 그리고, 안타일 때 UI 효과도 미미한 상태였거든요. 그걸 보신 팀장님이 실제 게임에서 어떤 효과와 방식으로 게임의 ‘재미’를 살리는지에 관한 이야기를 해주셨어요. 프로젝트 의도를 그때 깨달은 것 같아요. 이후엔 공을 던지는 작업 하나에도 며칠이나 필요해서, 결국 야근까지 했던 기억이 납니다. 발표 가능한 수준이 될까 의심했지만, 주변 분들의 도움 덕분에 야구 룰을 따르는 무언가가 나와서 뿌듯했던 기억이 나요.

디디: 제가 처음한 업무는 인턴 때 진행했던 프로젝트를 포팅하는 거였어요. 새로운 플랫폼 위에 기존과 다른 언어로 동일하게 동작하도록 포팅을 진행했었습니다. 덕분에 한 프로젝트를 오랫동안 보고 수정해서 아직까지도 기억에 남아요. 인턴 때 개발했던 거라 지금 다시 보면 너무 부끄럽지만, 덕분에 몰랐던 유니티 기술도 많이 배우고 성장할 수 있었습니다.

Q. 컴투스만의, 혹은 게임 업계라서 그렇구나 싶었던 독특한 문화나 풍경이 있나요?

디디: 점심시간에 다들 게임을 즐겨하는 모습을 보고 역시 게임회사구나 싶었어요! 새로운 게임의 사내 테스트 이벤트를 진행하면, 정말 어떻게 벌써 저기까지 간 거지?? 의문이 들 정도로 빠르게 클리어하시는 분들이 많아 매번 경이로움을 느끼고 있답니다. 이렇듯 소소한 일상 속에서 컴투스 사우분들의 게임을 향한 열의를 느낄 때 특별함을 느껴요.

KD: 작년 아공 게임 대회에 참여하면서 게임 업계의 즐거움을 몸소 체험할 수 있었어요. 다들 게임을 진심으로 좋아하고, 즐겨본 경험이 있어서 그런 대회가 가능했던 것 같아요.

Q. 사내 복지 제도 중에서 개인적으로 가장 만족했던 건 무엇인가요?

블랭크: 사내 복지의 메카인 지하 1층이요! 사무실 다음으로 많이 가는 방앗간 같은 곳이라 꼭 이야기하고 싶었어요. 사내 식당뿐만 아니라 최근 독서 라운지의 역할까지 더해진 사내 카페까지! 카페는 음식과 휴식뿐만 아니라 스터디나, 회의 용도로도 잘 이용하고 있어요!

디디: 다른 분들도 1순위로 뽑을 것 같긴 한데… 역시 복지포인트요! 연마다 250만 원씩 지급되는데, 거의 모든 곳에서 쓸 수 있어서 너무 좋아요. 처음 입사했을 때 받은 걸로 가격 때문에 여러 번 망설였던 키보드를 구매했습니다. 3년이 지난 아직까지도 사무실 메이트로 무척 만족하며 잘 쓰고 있답니다. 연말 연초가 되면 팀원분들이랑 복지 포인트로 사고 싶은 것들로 이야기하는 것도 또 하나의 재미예요ㅎㅎ

해달짱: 막 입사했을 때, 스낵바를 보고 눈이 휘둥그레해졌던 기억이 납니다. 하루에 한두 개씩 간식을 꼭꼭 챙겨먹었죠. 지금은 사내식당이 제일 만족스럽습니다. 균형 잡힌 영양소를 날씨에 구애받지 않고 먹으러 갈 수 있다는 건 엄청난 복지인 것 같아요. 최근에 생긴 컴투북스도 무척 좋은 복지 같아요. 만화책을 잔뜩 읽을 생각에 한껏 신이 나 있답니다~

KD: 저도 복지포인트를 꼽겠습니다! 초반에는 포인트라고 하길래 사용할 수 있는 분야에 제한이나, 불편함이 있을 줄 알았는데 금액도 크고 사용도 편해서 감사히 잘 쓰고 있습니다😆

Q. 앞으로 복지나 제도 면에서 더 추가되거나 개선되었으면 하는 부분이 있다면요?

블랭크: 어려운 것은 알지만, 엘리베이터 문제를 감안하여 이석 시간을 계산할 수 있으면 좋겠습니다😭 (고층민의 비애)

해달짱: 여름 휴가가 갖고 싶어요☺️

Q. 사내 이벤트나 동호회 활동 중에서 가장 즐거웠던 경험은 무엇인가요?

블랭크: 게임 출시 혹은 N주년 이벤트를 좋아합니다. 특식에 상품 가챠나 미니게임 부스가 더해져 축제 분위기가 나는 게 즐겁습니다. 회사를 다니다 보면 아무래도 매일 비슷한 일상을 보내게 되는데, 이런 이벤트 덕분에 리프레시가 돼서 좋습니다. 가챠 운이 좋은 편이라 상품을 자주 타는 것도… 회사 생활의 행복을 더해줍니다🥰

디디: 아이디어 공모전에서 게임대회 했을 때! 원래도 취미로 e-sports 자주 보러 가거든요. 경기가 열릴 때마다 사내 카페에 가서 응원도 하고, 멋진 플레이가 나왔을 때 사우 분들과 함께 하나가 된 것처럼 소리를 지르기도 하고… 무척 즐거운 경험이었어요!

KD: 저는 테니스 동호회에 가입해 활동하고 있습니다. 예전에는 테니스장 예약도 어렵고, 같이 칠 사람도 없어 자주 못 쳤는데요. 사내 동호회에 들어오고 나서는 함께 자주 운동할 수 있어 만족스럽습니다!

Q. 흔히 “게임 회사는 워라밸이 없다”라는 이야기를 하는데, 실제로 다녀보니 어떠셨나요?

블랭크: 야근이 아예 없는 직무와 비교하면 그렇게 보일 수도 있을 것 같아요. 하지만, 다른 직무나 업계에서 일하는 친구들의 이야기를 들어보면 어느 곳이든 추가 근무가 아예 없는 곳은 없는 것 같더라고요. 납품 준비 등의 이유로 가끔씩 야근을 꼭 해야 하는 날도 있지만 이를 상쇄시켜주는 많은 복지 혜택과 유연한 근무 환경이 있어서 저는 만족하고 있습니다.

디디: 바쁠 때는 하루의 절반 이상을 회사에서 보낼 정도로 바쁘지만, 항상 그런 건 아니에요. 사실 이건 어디를 가든 동일하지 않을까요? 저는 오히려 ‘추가 근무나 야근을 몇 시간 하냐?’보다는 회사에서 구성원들의 워라밸을 고려한 제도를 충분하게 운영하고 있는지가 더 중요하다고 생각해요. 저희 회사는 유연근무제가 기본이고, 시간 연차 제도에 리커버리데이까지 있잖아요. 저는 곧 3년 근속을 채워서 첫 장기근속휴가를 맞이할 예정이라, 벌써 이 시간을 어떻게 쓸지 행복한 고민 중이에요! 바쁠 땐 열정적으로 몰입하고, 중요한 이슈가 없을 땐 일상을 챙길 수 있는 여러 제도로 지원하는 게 게임업계의 방식이 아닐까 합니다.

Q. 앞으로 컴투스에서 꼭 경험해보고 싶은 업무나 기회가 있다면 무엇인가요?

디디: 요즘 플레이어 세미나로 여러 마스터분들이 발표하시는 모습을 보면 저도 한번쯤 도전해보고 싶어요. 분야에 대해 잘 모르는 사람이 들어도 이해가 쉽게끔 다들 너무 발표를 잘해주시더라고요. 앞선 분들의 엄청난 퀄리티에 비교당할까 두렵기도 하지만, 언젠가 저도 제가 좋아하는 주제로 마스터가 되어 발표해보고 싶어요!

해달짱: 이런 얘기를 해도 될까요…? 언젠가 이곳에서 AD가 되는 것이 최종 목표입니다😎

PART 3. 직장인으로서의 나

Q. 처음으로 “나도 이제 진짜 직장인이구나!” 하고 실감했던 순간은 언제였나요?

블랭크: 처음 연말정산하는 날 직장인이 된 것을 실감했습니다. 환급, 추가 납부 이런 이야기를 제가 하게 되었다는 게 무척 신기했어요.

디디: 퇴직연금 가입 신청서를 라운지에서 작성했을 때! 이제 정말 직장인이구나 느꼈어요. 이전에도 알바나 인턴으로 월급을 받아본 적이 있어 오히려 첫 월급은 큰 감흥이 없었는데, 외부에서 오신 분에게 제가 다니는 회사를 소개하는 느낌이 새롭더라고요. 친구들과 만나서 자연스럽게 연금, 재테크 같은 주제로 대화하게 될 때도 이제 정말 직장인 다 되었구나 싶습니다.

해달짱: 처음으로 월급을 받았을 때요! 아르바이트로는 볼 수 없었던 단위가 통장에 찍혔을 때, 내가 좋아하는 그림을 그리면서 돈도 받을 수 있다고? 하며 무척 신났던 기억이 납니다.

KD: 금요일 저녁이 기다려지고, 일요일 저녁은 슬퍼지는 일주일을 반복하면서 느꼈습니다..

Q. 입사 초반, 회사 생활을 시작할 때의 마음가짐이 기억나시나요?

블랭크: 입사 초에는 ‘나만 잘하면 된다’는 말을 자주 떠올렸던 것 같아요. 잘 다져진 공동체에 제가 새로 들어가는 것이니까, 처음에는 공동체의 규칙을 파악하는 게 우선이라 생각했거든요. 항상 겸손해야 된다는 의미로도 포함되어 있고요.

해달짱: 이 회사에서 제일 먼저 출근하고, 제일 늦게 가는 사람은 나다!! 라는 각오로 다녔던 기억이… 지금은 일과 휴식 사이 밸런스를 지키는 게 얼마나 중요한지 배웠습니다. 꾸준히 이 일을 즐겁게 하려면 필수더라고요. 입사 초반의 패기였습니다.

KD: 빠릿빠릿하게 잘 하자!라는 마인드로 출근을 했지만, 막상 자리에 앉으면 모르는 일도 너무 많고 정신이 없어서 어떻게 하루하루가 지나갔는지 잘 기억이 안 나네요 ㅋㅋㅋㅋ

Q. 지금도 종종 이불킥하게 만드는 황당한 실수가 있다면요?

블랭크: 입사 일주일도 안 된 시절, 웍스를 둘러보다가 임원분들을 초대한 단톡방을 만든 적이 있습니다. 이것 때문에 뒷자리 선임님께 처음 질문한 것 같아요. 메시지를 보내지 않으면 상대방은 다행히 방의 존재를 모른다 해서 조용히 나왔습니다. 식은땀을 흘릴 정도로 긴장해서 지금도 그 순간이 잊혀지지 않네요.

디디: 팀을 옮기면서 이사를 온 날, 전 팀원분이 캐비닛 옮기다가 열릴 수도 있으니까 잠그고 가라고 해주셨어요. 저는 그게 잠기는지 그때 처음 알았어요. 중요한 물건들을 넣고 처음으로 캐비닛을 잠그고, 자리를 옮겼는데… 가고 나니까 열쇠가 사라져 있더라고요?! 그래서 다시 짐 옮긴 경로를 따라 걸으며 열쇠를 찾다가, 결국엔 이전 사무실까지 가서 컴투스 한바퀴를 돌아버리고 말았죠. 그런데, 놀랍게도 열쇠는 제 바지 주머니 깊숙한 곳에 있었습니다…😭 속으로 첫인상부터 망했다고 눈물을 흘렸던 기억이 납니다.

Q. 그때와 비교했을 때 지금 가장 크게 성장했다고 느끼는 부분은 무엇인가요?

블랭크: 의사소통 능력이 아닐까요? 대표적으로 메신저로 문의할 때 뜸들이는 시간이 줄어들었어요. 입사 초에는 별말 아닌 내용을 보낼 때도 고민하는 시간이 길었거든요. 구두로 문의할 경우에는 질문 내용을 다 숙지하고 갔음에도, 목소리는 떨리고 내용은 횡설수설했던 기억이 납니다. 지금도 설명을 썩 잘하진 않지만, 바짝 긴장하는 모습은 제법 사라진 것 같아요.

디디: 마음가짐이라고 생각해요. 처음엔 걱정 근심이 가득한 상태로 잔뜩 긴장해서 업무를 하다 보니 스트레스를 많이 받았던 것 같아요. 이제는 어느 정도 경험도 쌓이고, 조언도 많이 듣다 보니 많이 달라졌죠! 걱정으로 시간을 보내기보다 해결책을 찾고 동료들과 의논하며 문제를 해결해나가는 긍정적인 사고방식을 갖게 된 덕분이에요.

KD: 여유가 생긴 것 같습니다! 루틴에 익숙해지면서 업무를 처리하는 속도도 빨라지고, 조금 더 디테일을 꼼꼼하게 챙길 수 있게 되었어요. 넓은 시각으로 큰 그림을 볼 수 있도록, 미리미리 여유 있게 업무를 준비하는 습관이 도움이 된 것 같습니다.

Q. 회사 생활을 하며 가장 빨리 깨달은, 나만의 사회생활 신조는 무엇인가요?

블랭크: 감사하다는 말을 잊지 않으려 합니다. 제가 들었을 때 기분이 좋아지는 말이라, 저도 다른 사람에게 꼭 하려고 하고 있습니다.

해달짱: 그 어떤 경험도 쓸모가 있다. 어디서든 배울 수 있으며, 모든 것은 내 마음가짐에 달렸다. 그리고 호의를 받았다면 당연하게 생각하지 말 것!

Q. 지금까지 회사 생활 중 가장 행복하거나 뿌듯했던 순간은 언제였나요?

디디: 기술적으로 어려운 부분을 해결했을 때요. 검색을 아무리 하고 AI를 사용해도 안 되는 걸 제가 구조 파악해서 해결하고 이걸 적용해서 해결이 되었을 때, 그리고 그게 실제 서비스에 반영되었을 때가 참 뿌듯했던 것 같아요.

해달짱: 이전 팀에서 팀원분들을 전부 캐리커처 해서 굿즈로 나눠드린 적이 있었는데요. 다들 사원증 오른쪽 빈 부분에 그 캐리커처 스티커를 붙이고 다니셨을 때의 뿌듯함이란… 우리 팀만의 재밌는 문화를 만든 것 같아서 즐거웠어요.

KD: 제가 직접 기획한 이벤트/콘텐츠/BM 등이 유저들에게 좋은 반응을 얻었을 때 특히 뿌듯해요!

Q. 회사를 다니면서 개인적으로 달라진 가치관이나 태도가 있다면 무엇인가요?

블랭크: 무엇이든 경험해봐야 한다는 가치관이 생겼습니다. 회사를 다니면서 이전보다 다양한 상황을 접할 수 있었어요. 항상 좋은 경험만 있었던 건 아니지만, 그게 어떤 경험이든 결과적으로 제가 성장하는 데 크고 작은 도움이 됐어요. 프로그램으로 치면 조건문이 좀 더 늘어난 것 같습니다. 특정 케이스에 대해 이전에는 1가지 대처만 가능했다면, 이제는 두세 가지의 대처법이 생긴 것 같아요. 이론만으로는 만들 수 없는 부분이죠.

KD: 주 5일 출근하는 모든 직장인들은 모두 대단한 사람들이었구나… 생각하게 됐습니다🤣

Q. 컴투스가 아마 첫 직장으로서 회사 보는 기준이 되었을 텐데요, 만약 미래에 이직을 고려한다면 어떤 점을 가장 중요하게 보실 것 같나요?

블랭크: 구내식당 여부를 먼저 체크할 것 같아요. 외식을 자주 한 주에 확실히 지출이 큰 걸 보고, 회사 덕분에 식비 세이브를 많이 하고 있다는 걸 체감했거든요. 저희 구내식당은 심지어 맛도 좋죠! 늘 신경 써주시는 구내식당 담당자 분들께 감사 인사를 전하고 싶습니다.

디디: 저는 통근 시간도 중요하다고 생각해요. 학교를 편도만 한 시간 반 정도 걸리는 먼 거리로 다녔어서 직장만큼은 가까운 곳으로 가고 싶다고 줄곧 생각했었어요. 지금은 집과 회사가 가까워서 무척 만족하고 있습니다.

해달짱: 비포괄 임금제도가 있는 곳이요. 정신없이 일을 하다 보면 하루 적정 근무시간인 8시간을 넘길 때도 있잖아요? 일한 만큼 받을 수 있으니 시간만 채우고 집에 가는 게 아니라, 좀 더 제가 하는 일에 집중할 수 있어요.

KD: 유연한 근무제도를 볼 것 같습니다. 결국 일도 행복하게 살기 위해서 하는 것이라는 걸 고려하면, 제 스스로를 챙기는 게 먼저인 것 같더라고요. 지금은 근무제도가 유연해서 업무와 개인적인 일상을 모두 챙길 수 있어요. 내 삶의 컨디션이 생각보다 업무에도 영향을 많이 미친다는 걸 깨닫고 나니 더욱더 중요한 부분이라 생각됩니다. 충분히 좋은 근무제도 아래 있는 지금도 하고 싶은 것들을 모두 다 하진 못하는데… 경직된 곳이라면 더욱 힘들지 않을까요?

Q. 앞으로 어떤 시니어, 어떤 동료로 성장하고 싶으신가요?

블랭크: 믿음직한 동료가 되고 싶습니다. 정확히는, 이해하기 쉬운 설명으로 문의에 확실히 답할 수 있는 사람이요! AI 시대이지만 대외비이거나 사람에게 물어볼 수밖에 없는 질문은 여전히 많잖아요. 제가 도움받은 것처럼 저도 도움을 줄 수 있는 믿음직한 동료로 성장하고 싶어요.

디디: 같이 일하면 편한 사람이 되고 싶어요. 업무적으로나 외적으로나 같이 있으면 편하고 믿을 수 있는 사람이요! 같이 일하는 팀원 중 그런 사람이 있으면 무엇이든 할 수 있을 것 같은 든든한 기분이 들더라고요!

해달짱: 어떤 일을 시켜도 자신감 있게 해낼 수 있는 동료이자 시니어, 그리고 리더가 되고 싶어요.

KD: 같이 일하고 싶은 사람이 되고 싶습니다. 어떤 팀이나 프로젝트에 투입되더라도 안정적으로 맡은 역할을 해내는 균형 잡힌 인재가 되고 싶어요.

Q. 마지막으로, 앞으로 멋진 직장인/선배로서 이루고 싶은 포부나 바람이 있다면 들려주세요.

블랭크: 맡은 일을 잘해서, 맡길 수 있는 일에 제한이 없는 사람이 되고 싶어요! 현재는 콘텐츠 개발을 주로 맡고 있는데, 몇 년 후에는 다른 업무도 척척 해낼 수 있는 동료로 성장하고 싶어요. 인터뷰를 진행하면서 흐릿해진 초심을 되새길 수 있어 유익했습니다. 나중에 또 이런 기회가 생긴다면, 그땐 제가 먼저 지식을 나눠드릴 수 있을 만큼 성장한 모습으로 인사드리고 싶어요.

디디: 끊임없이 무언가에 계속 도전하는 사람이 되고 싶어요. 이번 인터뷰를 준비하면서 제가 이전에 어떤 사람이 되고 싶었나 다시 한번 살펴봤어요. 도전을 두려워하지 않고 시도해나가고 싶다고 적었더라고요. 퇴근하고 집에 가면 그냥 누워서 바로 자고 싶고 핸드폰만 보다가 자는 그런 일상을 반복하기도 하지만, 소소하게라도 뭔가 새로운 시도를 꾸준히 해나가고 싶어요. 조금이라도 해본 것과 아예 해보지 않은 것은 차이가 크더라고요. 계속 도전하고 발전해서 주변 동료분들이 멋지다고 생각할 만한 사람이 되고 싶습니다.

KD: 저만의 관점을 가진 사람이 되고 싶습니다. 생각 없이 시키는 대로, 주어진 업무만 반복하다 보면 쉽게 대체 가능한 인력이 되어버리지 않을까? 종종 불안을 느껴요. 돌파구는 저만의 관점과 사고를 계속 발전시켜 나가는 것이 아닐까요? 주변을 꾸준히 관찰하고, 능동적으로 사고하며 끊임없이 발전해 나가겠습니다.


‘처음’ 앞에 서면 누구나 비슷한 고민과 도전을 마주한다. 그래서 이들의 이야기가 더욱 마음에 와닿았다. 서툴렀던 시작도 시간이 흐르며 자신만의 색을 찾아가는 과정이 된다는 것을 이들의 멋진 포부를 들으며 다시 한번 느낄 수 있었다.

지금도 팀 안에서 개성과 능력을 펼치며 컴투스에 새로운 활력을 더하고 있는 이들이 앞으로 한 단계 더 성장해 언젠가 ‘시니어 레벨업 인터뷰’에서 다시 만날 날을 기대한다.

이 글은 PHP 내부의 메모리 할당/관리 방식을 담당하는 Zend Memory Manager(ZMM)를 다룬다. opcache, Zend VM, GC 전반은 범위를 벗어나며, 특히 emalloc/efree 중심의 ZMM 경로를 소스 코드 레벨에서 확인하고, GDB로 실제 동작을 검증한다.

주의 및 준비

git clone --depth 1 --branch php-8.4.10 https://github.com/php/php-src.git

cd php-src
./buildconf --force
./configure --enable-debug --enable-fpm --disable-cgi --with-openssl --enable-phpdbg --enable-phpdbg-debug --enable-opcache
./config.nice 
make -j $(nproc)
make test
sudo make install

php -v

위 명령어의 결과가 php-8.4.10으로 나오면 성공이다. 위 과정에서 필요한 의존성 패키지는 실습자의 환경에 맞게 추가 설치가 필요하다.

기본 정보: Heap, Chunk, Page, Bin

이번 글에서 소개할 내용은 크게 초기화, 할당, 해제로 나눌 수 있다. 또 할당은 3KB 미만의 작은(small) 할당, 2MB 이하의 큰(large) 할당, 2MB 이상의 거대(huge) 할당으로 나눌 수 있다. 이러한 할당들은 하나의 전역변수인 zend_mm_heap 구조체에서 관리된다.

/* zend_alloc.c */
// 설명에 필요하지 않는 부분은 제거했습니다.
struct _zend_mm_heap {
    // 3KB 이하의 해제된 메모리 공간을 링크드 리스트 형태로 가리킵니다. 
	zend_mm_free_slot *free_slot[ZEND_MM_BINS]; /* free lists for small sizes */

	zend_mm_huge_list *huge_list;               /* list of huge allocated blocks */

	zend_mm_chunk     *main_chunk;
	zend_mm_chunk     *cached_chunks;			/* list of unused chunks */
	int                chunks_count;			/* number of allocated chunks */
	int                peak_chunks_count;		/* peak number of allocated chunks for current request */
	int                cached_chunks_count;		/* number of cached chunks */
	double             avg_chunks_count;		/* average number of chunks allocated per request */
	int                last_chunks_delete_boundary; /* number of chunks after last deletion */
	int                last_chunks_delete_count;    /* number of deletion over the last boundary */
};

heap은 여러 개의 2MB 크기의 청크를 관리한다. 중요한 필드는 free_slot이다. free_slot은 3KB 이하의 페이지를 할당한 후 해당 page를 bin의 size만큼 분할한 후 free_slot에서 링크드 리스트(linked list) 형태로 관리한다. 예를 들어 56바이트를 요청하면 먼저 4KB의 page를 할당한다. 4KB에서 56바이트만 필요한 것이기에 4KB를 56바이트로 분할시켜 73개의 slot을 만들고 하나를 할당시킨다. 나머지 72개는 free_slot에 넣어 다음 할당 요청 때 바로 할당할 수 있게 관리한다. 이러한 free_slot의 개수는 30개이다.

/* zend_alloc.c */
struct _zend_mm_chunk {
	zend_mm_heap      *heap;
	zend_mm_chunk     *next;
	zend_mm_chunk     *prev;
    // 현재 청크에서 해제된(미할당) 페이지 개수
	uint32_t           free_pages;				/* number of free pages */
    // 청크의 끝에서 연속된 free page가 시작되는 위치 
	uint32_t           free_tail;               /* number of continuous free pages at the end of chunk */
	uint32_t           num;
	zend_mm_heap       heap_slot;               /* used only in main chunk */
    // chunk가 관리하는 page의 할당 여부를 비트 단위로 저장합니다. 
	zend_mm_page_map   free_map;                /* 512 bits or 64 bytes */
    // chunk가 관리하는 page의 정보를 기록합니다. (작은 할당, 큰 할당, ...)
	zend_mm_page_info  map[ZEND_MM_PAGES];      /* 2 KB = 512 * 4 */
};

하나의 2MB 청크는 512개의 Page(4KB)로 구성되며 각 페이지의 할당 여부 체크, 할당 타입 등의 정보를 저장하고 다음 청크와 연결 리스트 형태로 관리된다. 여기까지 내용을 정리하자면 하나의 heap이 존재하고 heap은 2MB 크기의 여러 chunk를 연결 리스트 형태로 관리하며, 하나의 청크는 512개의 4KB 크기의 페이지(Page)를 관리하고 3KB 이하의 메모리 할당의 경우 Page를 작은 크기로 분할하여 heap의 free_slot에 넣고 관리한다. 청크가 관리하는 512개의 Page 중 첫 번째 Page는 Chunk의 메타데이터를 관리하는 용도로 쓰인다.

청크(Chunk)에서 가장 중요한 필드는 free_map, map, free_tail이다. page는 512개지만 free_map의 크기는 64바이트다. 기록의 단위가 바이트라면 64개만 기록할 수 있지만 비트(bit) 단위로 기록한다면 최대 512개의 기록을 저장할 수 있다. 추후 비트연산으로 인하여 free_map에서 기록의 단위는 비트 단위이며 비트가 1로 세팅되면 해당 위치의 page는 사용 중, 0이면 page는 미사용 중임을 인지해야 한다.

free_tail은 청크의 끝에서 해제된(free) 페이지(page)가 시작되는 지점을 의미한다. 표현이 모호할 수 있기 때문에 직접 예시를 들자면 아래와 같다.

이럴 경우 free_tail의 값은 6이다.

초기화: ZMM 라이프사이클

우선 PHP 모듈의 Lifecycle부터 확인할 필요가 있다.

PHP의 MINIT – MSHUTDOWN이라는 큰 패턴 안에 RINIT – RSHUTDOWN의 작은 패턴이 존재한다. zend_startup -> start_memory_manager 함수를 호출하여 Zend Memory Allocator를 초기화한다. 초기화된 Zend Memory Allocator는 전역변수인 alloc_globals에 저장한다.

typedef struct _zend_alloc_globals {
	zend_mm_heap *mm_heap;
} zend_alloc_globals;

# define AG(v) (alloc_globals.v)
static zend_alloc_globals alloc_globals;
[...]
ZEND_API void start_memory_manager(void)
{
    alloc_globals_ctor(&alloc_globals);
}

static void alloc_globals_ctor(zend_alloc_globals *alloc_globals)
{
[...]
	alloc_globals->mm_heap = zend_mm_init();
}

zend_mm_init 함수를 통해 전역변수인 heap을 초기화한다.

그럼 위의 구조가 형성된다. 첫 번째 페이지(page)에 ZEND_MM_LRUN이라는 값을 대입했다. 이는 할당된 주소가 어떤 타입을 가지는지 저장한다. ZEND_MM_LRUN은 다음에 언급할 3KB < SIZE < 2MB 구간의 경우를 의미하고 ZEND_MM_SRUN 16 <= size <= 3072 구간을 의미한다. 마지막으로 ZEND_MM_FRUN은 현재 메모리 주소가 해제된 상태임을 의미한다.

할당 부분을 넘어가기 전에 이전에 아래 정의 구간을 언급한 적 있다. 이는 16 <= size <= 3072 사이에는 무수히 많은 값이 존재하는데 해당 값 전부를 관리하게 되면 오히려 성능상의 이슈가 발생하기 때문에 해당 구간을 30개 즉, ZEND_MM_BINS만큼 나눠서 관리한다. 이를 bins라고 한다. 대표적인 사이즈 표는 아래와 같다.

zend_mm_free_slot *free_slot[ZEND_MM_BINS];

위 값은 각각 요청 size 범위 – bin number를 의미한다. 예를 들어 요청한 size가 17 <= size <= 24인 경우 bin number가 2임을 의미한다. 이런 식으로 30개의 bin을 관리한다. 또한 0은 제외한다.

추가적으로 각 bin_number는 대표하는 size가 존재하는데 아래 표와 같다.

bin_data_size는 주어진 bin_number가 대표하는 size가 몇인지 관리하는 테이블이다. bin_pages는 주어진 bin_number가 몇 개의 page를 필요로 하는지 관리하는 테이블이다. bin_elements는 주어진 bin_number가 대표하는 size 기반으로 4KB 페이지(page)를 얼마만큼 분할해야 할지 결정하는 테이블이다. 예를 들어 사용자가 56바이트를 요청했다면 bin_number는 6이며 4KB PAGE를 73개로 분할할 수 있다. bin_elements[bin_number:6] -> 73이다.

사용자가 56 사이즈의 메모리를 할당 요청했을 때 56이면 어떤 bin_number인지 확인하고 해당 free_slot을 살펴보고 메모리가 있다면 반환하는 형식이다. 반환 시 링크드 리스트가 서로 다시 연결될 수 있도록 구조화되어 있다.

할당 경로 개요

지금까지의 이야기는 zend memory manager의 구조화된 데이터들과 기본적인 흐름을 설명했다. 다음으로 할당 과정을 조금 더 자세히 살펴본다.

libc에서 제공되는 메모리 할당과 해제 API는 malloc과 free이지만 zend memory manager에서 제공하는 API는 emalloc, efree이다. 자세히 살펴보도록 한다.

작은 할당

사용자가 emalloc 함수를 호출하여 메모리 할당을 요청하면 zend_mm_alloc_heap 함수를 호출한다.

void *zend_mm_alloc_heap(zend_mm_heap *heap, size_t size)
{
	if (size <= ZEND_MM_MAX_SMALL_SIZE) {
		ptr = zend_mm_alloc_small(heap, ZEND_MM_SMALL_SIZE_TO_BIN(size));
		return ptr;
	} 
    
    else if (size <= ZEND_MM_MAX_LARGE_SIZE) {
		ptr = zend_mm_alloc_large(heap, size);
		return ptr;
	} 
    
    else {
		return zend_mm_alloc_huge(heap, size);
	}
}

해당 함수에서 요청 size를 확인한 후에 3KB 이하라면 zend_mm_alloc_small 함수를 호출한다. ZEND_MM_SMALL_SIZE_TO_BIN 매크로 함수를 통해 이전에 말한 size를 align해서 전달한다. 이때 align은 요청된 바이트가 55바이트일 때 56바이트로 변환을 의미한다.

void *zend_mm_alloc_small(zend_mm_heap *heap, int bin_num)
{
	if (heap->free_slot[bin_num] != NULL) {
		zend_mm_free_slot *p = heap->free_slot[bin_num];
		heap->free_slot[bin_num] = zend_mm_get_next_free_slot(heap, bin_num, p);
		return p;
	} 
    
    else {
		return zend_mm_alloc_small_slow(heap, bin_num);
	}
}

free_slot을 살펴보고 해당 bin_number에 해당하는 메모리 주소가 존재한다면 바로 반환한다. 만약 없다면 zend_mm_alloc_small_slow 함수를 호출한다.

해당 함수는 zend_mm_alloc_pages 함수를 호출하여 하나의 4KB 페이지(page)를 할당한다. 그리고 ZEND_MM_SRUN 값을 chunk->map[page_num]에 저장한다. (map은 페이지의 메타데이터를 저장하는 필드이다.) 요청한 size는 56바이트이므로 4KB는 73개로 분할될 수 있다. (이전에 말한 bin_elements이다.) 분할된 조각들은 free_slot에 링크드 리스트(linked list) 형태로 저장한다. 사용자의 다음 56바이트의 요청은 free_slot에서 반환된다.

ZEND_MM_SRUN, ZEND_MM_LRUN같이 chunk->map에 저장하는 매크로는 해당 페이지의 service information을 4바이트 형태로 저장하는 용도이다.

# 2 bits
FUN     (free pages)
LRUN    (first page or large allocation)
SRUN    (first page or small allocation)

# 10 bits
lrun_pages  (allocated pages의 개수)

# 5 bits
srun_bin_num    (bin number)

내부적으로 zend_mm_alloc_pages 함수를 호출하여 실질적으로 필요한 페이지(4KB page)를 할당하는 로직을 수행한다. 해당 함수는 청크의 free_map의 필드를 확인하면서 필요한 pages_count와 비교하면서 best-fit 구조로 알맞은 공간을 찾아낸다.

(best-fit의 개념은 다음 위키피디아 참조 https://en.wikipedia.org/wiki/Best-first_search)

기본적으로 하나의 chunk는 512개의 page를 소유하고 있으며 free_map은 64바이트로 비트연산으로 512개의 page의 할당 여부를 확인한다. (1은 할당, 0은 미할당) 다만 그림으로 512개를 모두 표현하기에는 다소 무리가 있기에 아래 가정을 한다. 다만 할당 알고리즘은 달라지지 않는다.

  1. 하나의 청크는 24개의 page를 관리한다.
  2. free_map은 3바이트로 24개의 page의 할당 여부를 관리한다.
  3. 3개의 page를 필요로 하는 할당 요청이 들어온 상태이다.
  4. 현재 chunk의 page 사용량은 다음과 같다.

그리고 다음 zend_mm_alloc_pages 함수의 내부 구현한다. 다만 내용이 다소 복잡하기 때문에 확인 전에 이해에 필요한 개념이나 변수를 안내한다.

# 필요한 개념  변수 안내
# ex) 블록 구조가 001100 001110  free_tail은 10입니다. 
free_tail :: 청크의 끝에서 free pages가 시작되는 위치입니다. 

pages_count :: 요청한 page 개수

# 이는 필요 page count가 3  가장 최적의 길이는 3 찾습니다. 없다면  다음 사이즈가 됩니다.
best_len :: 최적의 길이

조금 복잡한 알고리즘이지만 요약하면 free_map을 보고 요청된 pages_count에 최적의 공간을 찾아서 청크 내 최적의 page 위치(넘버)를 반환한다고 생각하면 된다.

그럼 위에서 가정한 부분을 가지고 어떤 로직을 타는지 확인한다.

위 사진은 위에서 가정한 예시를 기반으로 커버리지되지 않는 부분은 제거했다.

위의 로직을 거치고 나면 A Chunk의 내부 page 할당 여부는 위와 같이 변경된다.

큰 할당

똑같이 위 로직을 따르지만 small bins와 달리 free_slot에 저장하지 않고 주어진 size를 page 크기만큼 나눠서 필요한 page_count를 지정한다. 그리고 zend_mm_alloc_pages 함수를 호출하여 페이지를 할당한다.

해제 경로

메모리 해제는 efree -> zend_mm_free_heap 함수를 호출하면서 이루어진다.

작은 할당 사이즈의 경우 free_slot에 해제 주소를 삽입하고 linked list의 가장 앞에 설정한다. large size의 경우 해제 page의 free_map에 할당 해제 설정을 진행한다. 또한 청크(chunk) 해제 가능하면 해당 청크를 unmap(2) API를 호출하여 해제한다. 지금까지 할당과 해제 내용을 살펴보았고 다음은 위 내용이 실제로 맞는 내용인지 검증하는 내용이다.

테스트 및 디버깅

테스트는 먼저 확장 모듈을 기반으로 직접 디버깅을 진행한다.

cd php-src/ext
# example php ext_skel.php --ext heap
php ext_skel.php --ext [확장모듈 이름] 

원하는 확장 모듈 이름을 넣고 실행하면 (예를 들어 heap) heap이라는 이름의 폴더가 생기게 된다. 사용자는 다음 파일을 수정하면 된다.

디버깅 시 gdb라는 도구를 사용하며 확장 플러그인 사용자의 편의에 맞게 다양한 플러그인 설치가 가능하다.

  1. heap.c # source code here!
  2. heap_arginfo.h
  3. heap_stub.php

확장 모듈 컴파일하기

cd php-src/ext/heap
./configure
make

확장 모듈 테스트하기

확장 모듈을 만들면 기본적으로 test1 함수가 있다. 그대로 사용한다.

/* heap.c */

// for pending breakpoint
void helloworld(){
    return;
}

PHP_FUNCTION(test1)
{
	ZEND_PARSE_PARAMETERS_NONE();
    helloworld();
	int *a = emalloc(1750);
    int *b = emalloc(1750);

    efree(a);
    efree(b);
}

1750 바이트를 2번 할당하고 해제하는 코드이다. 먼저 예상되는 결과로는 첫 번째 할당 시 이전에 할당된 적이 없는 크기이므로 zend_mm_alloc_pages 함수가 호출되어 페이지(pages)를 할당한다. 그리고 3KB 이하의 크기인 작은(small) 할당이기에 bin number가 26인 free_slot에 할당한 page를 분할하여 저장할 것이다.

phpize
make
make test

<?php
test1();
?>

helloworld 함수를 추가한 이유는 해당 구간에 breakpoint를 걸어서 디버깅의 편의성을 추가하기 위해서이다.

gdb php
pwndbg> set break pending on
pwndbg> b helloworld
Function "helloworld" not defined.
Breakpoint 1 (helloworld) pending.

pwndbg> run test.php

helloworld 함수는 모듈에 정의되어 있으므로 이전에 본 PHP Lifecycle에 따르면 아직 로드되지 않은 함수이다. 그렇기에 pending break를 설정하고 실행한다. 이는 언젠가 발견되면 break 걸 수 있도록 하는 옵션이다.

In file: /home/tuuna/php-src/ext/heap/heap.c:28
   23 /* {{{ void test1() */
   24 PHP_FUNCTION(test1)
   25 {
   26         ZEND_PARSE_PARAMETERS_NONE();
   27         helloworld();
28         int *a = emalloc(1750);
   29         int *b = emalloc(1750);
   30
   31         efree(a);
   32         efree(b);
   33 }

pwndbg> p alloc_globals->mm_heap->free_slot[26]
$4 = (zend_mm_free_slot *) 0x0

현재 bin number가 26인 free_slot은 아직 비어져 있는 상태이다.

pwndbg> p alloc_globals->mm_heap->main_chunk->free_map
$8 = {18446744073709551615, 2305843009213693951, 65472, 0, 0, 0, 0, 0}

free_map을 살펴보면 위와 같다. 이를 이진수로 표현하면 다음과 같다.

1111111111111111111111111111111111111111111111111111111111111111
0001111111111111111111111111111111111111111111111111111111111111
0000000000000000000000000000000000000000000000001111111111000000
0000000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000

zend_mm_alloc_pages 함수를 호출하면 best-fit 할당 방식을 사용하여 위에서 2번째 줄 000부터 3번째 줄 0000까지 사용할 것임을 예측할 수 있다. (7개를 사용할 것이라고 예상한 이유는 bin_pages를 보면 bin_number가 26일 때 page_count가 7개로 설정되어 있는 것을 볼 수 있다.)

pwndbg> n # 진행
pwndbg> p alloc_globals->mm_heap->main_chunk->free_map
$9 = {18446744073709551615, 18446744073709551615, 65487, 0, 0, 0, 0, 0}

1111111111111111111111111111111111111111111111111111111111111111
(111)1111111111111111111111111111111111111111111111111111111111111
000000000000000000000000000000000000000000000000111111111100(1111)
0000000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000

예상된 값으로 바뀐 것을 볼 수 있다. 다음은 free_slot을 살펴본다.

pwndbg> p alloc_globals->mm_heap->free_slot[26]
$10 = (zend_mm_free_slot *) 0xfffff4e7d700

위 주소로 설정되어 있음을 확인할 수 있다. 해당 주소가 어떻게 연결되어 있는지 확인해본다.

pwndbg> set $p = (void **)0xfffff4e7d700
pwndbg> while ($p != 0)
 >printf "ptr = %p\n", $p
 >set $p = *(void **)$p
 >end
ptr = 0xfffff4e7d700
ptr = 0xfffff4e7de00
ptr = 0xfffff4e7e500
ptr = 0xfffff4e7ec00
ptr = 0xfffff4e7f300
ptr = 0xfffff4e7fa00
ptr = 0xfffff4e80100
ptr = 0xfffff4e80800
ptr = 0xfffff4e80f00
ptr = 0xfffff4e81600
ptr = 0xfffff4e81d00
ptr = 0xfffff4e82400
ptr = 0xfffff4e82b00
ptr = 0xfffff4e83200
ptr = 0xfffff4e83900

위 스크립트를 통해 해당 주소에 연결된 next_free_slot을 호출하는데 NULL일 때까지 출력한다. 가장 앞 주소인 0xfffff4e7d700이 다음 할당에 쓰일 것으로 예상된다. 한번 확인해보자.

pwndbg> n
pwndbg> p b
$11 = (int *) 0xfffff4e7d700

그럼 다음과 같이 free_slot이 변경된다.

pwndbg> set $p = (void **)0xfffff4e7de00
pwndbg> while ($p != 0)
 >printf "ptr = %p\n", $p
 >set $p = *(void **)$p
 >end
ptr = 0xfffff4e7de00
ptr = 0xfffff4e7e500
ptr = 0xfffff4e7ec00
ptr = 0xfffff4e7f300
ptr = 0xfffff4e7fa00
ptr = 0xfffff4e80100
ptr = 0xfffff4e80800
ptr = 0xfffff4e80f00
ptr = 0xfffff4e81600
ptr = 0xfffff4e81d00
ptr = 0xfffff4e82400
ptr = 0xfffff4e82b00
ptr = 0xfffff4e83200
ptr = 0xfffff4e83900

여기까지가 앞서 설명한 내용을 기반으로 실제 확장 모듈을 디버깅하여 확인하는 과정이다.

요약

PHP의 메모리를 관리하는 Zend Memory Allocator는 하나의 Heap Manager와 2MB 크기의 Chunk, 각 청크는 512개의 4KB의 Pages를 관리한다. 이때 청크의 첫 번째 Page는 청크의 헤더 즉, 메타데이터를 표시하는데 사용된다. 그리고 청크의 page를 관리하기 위해서는 64바이트 크기의 free_map을 비트연산을 통해 관리한다. map은 각 페이지가 어떤 할당 또는 해제로 이루어졌는지 표시하며 SRUN, LRUN, FRUN이 존재한다. 사용자는 emalloc API를 사용해서 할당 요청이 오면 사이즈를 확인하고 3KB 이하라면 small bin으로 판단하고 heap에서 관리 중인 해제 링크드 리스트인 free_slot에서 이전에 할당 해제된 페이지(주소)를 반환한다. 그 외의 경우(2MB 이하) page 크기만큼 나눠 필요한 page 개수만큼 구한 뒤 best-fit 알고리즘에 따라 최적의 공간을 찾아내고 할당한다. 없다면 새로운 chunk를 할당받는다. 만약 사용자가 이전에 정한 최대 메모리 값을 넘어가게 된다면 할당 불가능 오류 메시지를 내뱉게 된다.

마무리

PHP 언어에서 객체를 할당하게 되면 이는 사용자의 관리 책임에서 벗어나 가비지 콜렉터의 영역으로 넘어가게 되기에 개발자의 관리 책임에서 벗어나게 된다. 하지만 C 언어로 구성된 확장 모듈(pdo, opcache, phpredis … )을 개발하다 보면 앞서 말한 emalloc, efree 등의 Zend Memory Manager의 API를 사용할 때가 온다. 물론 어느 정도 모두 아는 내용이겠지만 아는 내용이 실제로 맞는지 소스코드 또는 디버깅 레벨에서 확인하여 이해하는 영역 또한 필자는 중요하다고 생각했다.

아쉽게도 핵심 영역인 가비지 콜렉터를 다루지 않기 때문에 내용이 조금 지루할 수 있지만 가비지 콜렉터의 기반이기 때문에 아는 것도 중요하다.


TOP