블로그로 돌아가기

Ubuntu 20.04에서 Roundcube를 이용한 웹메일 클라이언트 설치: 튜토리얼

Ubuntu 20.04에서 Roundcube를 이용한 웹메일 클라이언트 설치: 튜토리얼

Roundcube은 오픈소스 IMAP 브라우저 기반 이메일 클라이언트입니다. ACL을 지원하고 AJAX (Asynchronous JavaScript and XML) 기술을 활용하는 것으로 인기를 얻었습니다. 이메일 관리, MIME 지원, 폴더 조작 등 뛰어난 기능과 엔드투엔드 기능을 갖추고 있습니다. 또한 Roundcube는 메시지 검색, 맞춤법 검사, 캘린더 및 연락처 관리를 원활하게 제공합니다. 무엇보다도 다른 대중적인 브라우저 기반 클라이언트에 비해 강력한 플러그인 저장소와 추가적인 사용자 정의 옵션을 제공합니다.

Roundcube는 MUA입니다. MTA와 달리 이메일을 관리하는 서비스가 필요하며, 가급적 메일 서버를 사용하는 것이 좋습니다. 다음 메일 서버 구성 튜토리얼을 참고하여 원하는 메일 서버를 추가해 보세요.

이메일을 보낼 때 MUA는 SMTP를 사용하여 이를 MTA 서버로 전송합니다. 몇 번의 홉을 거친 후, 수신 측 MTA가 이메일을 수신하고 IMAP을 사용하여 이를 해당 MDA로 전송합니다. 마지막으로 수신자는 MUA를 사용하여 이메일을 확인합니다.

이 용어들을 이해해 봅시다:

  • MUA: 메일 사용자 에이전트(mail user agent)는 사용자가 이메일을 보고 보낼 수 있도록 상호작용을 가능하게 하는 인터페이스입니다.
  • MTA: 메일 전송 에이전트(mail transfer agent)는 발신자로부터 수신자에게 이메일을 전송합니다.
  • SMTP: 간이 우편 전송 프로토콜(Simple Mail Transfer Protocol)은 MUA가 MTA로 이메일을 보낼 때 사용하는 프로토콜입니다.
  • MDA: 메일 배달 에이전트(mail delivery agent)는 MTA로부터 전송된 모든 이메일을 수신하고 저장합니다.
  • IMAP: 인터넷 메시지 접속 프로토콜(Internet Message Access Protocol)은 MDA가 MUA로 메일을 전달할 때 사용하는 프로토콜입니다.

이 튜토리얼에서는 Ubuntu 20.04에서 Roundcube를 사용하여 웹메일 클라이언트를 설치하는 단계를 안내합니다..

시작해 봅시다!

Prerequisites

이 튜토리얼을 진행하려면 다음이 필요합니다:

  • 시스템에 설치된 최신 버전의 Ubuntu.
  • 시스템 사용자는 sudo 권한방화벽.
  • LAMP 스택.
  • IMAP 기반 이메일 서버.
    • 이 튜토리얼에서는 이해를 돕기 위해 Gmail 서버를 사용합니다. 또는 다음과 같은 다른 IMAP 기반 이메일 서버를 자유롭게 사용하셔도 됩니다: Outlook, Yahoo 등.

1단계: 확장 프로그램 및 종속성 설치

시작하기 전에 소프트웨어 충돌을 방지하기 위해 저장소를 업데이트해 보겠습니다:

다음으로 Roundcube 종속성을 설치하고 PHP를 구성합니다. 다음 명령어를 사용하여 PHP 확장 프로그램 및 라이브러리를 설치합니다:

기본적으로 몇 가지 PHP 라이브러리는 비활성화되어 있습니다. php.ini 파일이 위치한 서버의 /etc/php/7.0/apache2/php.ini 경로로 이동하여 해당 라이브러리들을 활성화해야 합니다. nano 텍스트 편집기를 사용하여 php.ini 파일을 엽니다:

해시태그( #)로 시작하는 대부분의 일반적인 주석 옵션과 달리, 여기서는 세미콜론( ;)을 사용하여 줄을 주석 처리하거나 주석을 해제합니다. 줄을 주석 처리하려면 앞에 세미콜론을 추가합니다. 마찬가지로 주석을 해제하려면 세미콜론을 제거합니다.

다음으로 시작하는 주석 처리된 줄이 포함된 섹션을 살펴보겠습니다: extension=. 세미콜론을 제거하여 php_mbstring.dllphp_xmlrpc.dll 확장 프로그램의 주석을 해제합니다:

또한, extension=dom.so 를 확장 프로그램 블록의 맨 아래에 추가합니다:

  • 파일 수정:
    • 다음 항목을 변경합니다: date.timezone:

설정 옵션으로 이동하여 다음으로 이동합니다: date.timezone의 주석을 해제합니다. 다음으로, 따옴표를 사용하여 시간대를 추가합니다. 다음을 확인해 보세요: PHP 시간대 페이지에서 형식화된 시간대가 php.ini 파일에서 어떻게 보이는지 확인하세요. 예를 들어, 유럽에 거주하는 경우 파일은 다음과 같이 표시됩니다:

    • 다음 파일을 수정합니다: upload_max_filesize 파일:

그런 다음, upload_max_filesize 설정으로 이동합니다. 기본적으로 최대 제한이 2MB로 설정되어 있는 것을 볼 수 있습니다. 필요에 따라 최대 파일 크기를 원하는 만큼 늘릴 수 있습니다. 그러나 대부분의 이메일 서버는 총 첨부 파일 크기를 최대 10MB로 제한합니다. 이 가이드에서는 여러 사용자가 동시에 첨부 파일을 추가할 수 있도록 최대 크기를 13MB로 유지합니다:

    • 다음 파일을 수정합니다: post_max_size 파일:

이제 다음을 검색합니다: post_max_size. 첨부 파일에 적용되는 upload_max_filesize 설정과 달리, post_max_size은 전체 이메일 크기(첨부 파일 포함)에 적용됩니다. 교착 상태를 방지하기 위해 post_max_size 값을 더 높은 값으로 설정해 보겠습니다:

    • 다음 값을 설정합니다: func_overload 값:

마지막으로, mbstring.func_overload = 0을 찾아 주석을 해제합니다. 또한 멀티바이트 문자열 함수를 지원하도록 해당 값이 null로 설정되어 있는지 확인합니다:

모든 수정 사항을 저장한 다음 파일을 닫습니다. 이제 서버에 LAMP 스택, Roundcube의 의존성 패키지 및 필요한 PHP 설정이 완료되었습니다. 다음 단계에서는 Roundcube 소프트웨어를 다운로드하고 설치 및 구성해 보겠습니다.

2단계: Roundcube 다운로드

Roundcube 다운로드 페이지로 이동하여 안정 버전(Stable version) 섹션을 선택하고 전체 패키지(Complete package)를 찾습니다. 그런 다음 다운로드 버튼을 마우스 오른쪽 버튼으로 클릭하고 링크 주소 복사를 선택합니다. 복사한 주소를 wget과 함께 사용하여 서버에 Roundcube 타르볼(tarball)을 다운로드합니다:

그 후, Roundcube 아카이브의 압축을 풀어야 합니다:

사용된 인자(argument)들이 혼란스럽게 느껴질 수 있습니다, 특히 완전히 처음 접하는 경우라면 더욱 그렇습니다. 각 플래그가 의미하는 바는 다음과 같습니다:

  • x: 추출(extract)을 의미합니다.
  • v: 상세 정보 표시(verbose)를 의미합니다.
    • tar가 압축 해제된 파일의 경로와 이름을 출력하도록 합니다.
  • z: tar가 tar 래퍼를 제거하고 gzip을 사용하여 아카이브 압축을 풀도록 지시합니다.
    • 압축된 gzip 파일 확장자 끝에는 .gz 가 붙습니다.
  • f: 파일(file)을 의미합니다.

끝에 있는 다음을 생략합니다: / (디렉토리 이름에서). 디렉토리 내부의 콘텐츠뿐만 아니라 전체 디렉토리를 이동하고 이름을 변경하는 것이기 때문입니다. 이제 압축을 푼 디렉토리를 다음으로 이동합니다: /var/www 로 이동하고 이름을 roundcube:

Apache가 설정 및 로그 파일을 생성하고 편집할 수 있도록 권한을 설정합니다. 그런 다음 소유자와 그룹을 www-data로 변경합니다. 또한 소유자와 그룹에 대해 읽기 및 쓰기 권한을 허용해야 합니다:

Roundcube의 코드를 다운로드하고 필요한 권한을 설정했지만, 설치는 아직 완료되지 않았습니다. Roundcube의 GUI를 통해 데이터베이스에 Roundcube를 연결하는 작업이 아직 남아 있습니다. 더 진행하기 전에 Apache 및 해당 설정을 업데이트하여 Roundcube의 기본 위치를 알려야 합니다.

3단계: Apache 설정 및 구성

이 단계에서는 가상 호스트 파일을 편집하여 Apache를 구성합니다. Apache 가상 호스팅을 사용하여 단일 서버에서 여러 사이트를 호스팅할 것입니다. Apache가 단일 사이트만 호스팅하더라도, Apache 설정을 직접 편집하는 것보다 가상 호스트 설정 파일을 사용하는 것이 덜 복잡하고 간단합니다. 보안을 한층 더 강화하려면 Let’s Encrypt로 Apache 보안 설정하기.

.conf 파일(위치: /etc/apache2/sites-available/)은 서로 다른 사이트를 나타냅니다. 여기에 Roundcube를 위한 가상 호스트 파일을 생성하고 Apache가 브라우저에서 사용할 수 있도록 설정해 보겠습니다.

먼저, 새 파일의 시작점으로 사용할 기본 설정 파일을 복사합니다:

다음 편집기를 사용하여 파일을 엽니다: nano 텍스트 편집기:

수정해야 할 몇 가지 변경 사항이 있습니다. 각 항목을 살펴본 다음 복사하여 붙여넣을 수 있는 전체 파일을 제공하겠습니다.

먼저, 기존 VirtualBlock 호스트에서 다음 지시문을 변경합니다:

  • ServerName: Apache가 도메인을 선택하도록 지시합니다.
    • 단일 서버를 사용하는 경우, 이 ServerName 은 서버 IP 주소 또는 도메인 이름이 됩니다.
  • DocumentRoot: 트래픽이 들어올 때 이를 보낼 경로를 지정합니다.
    • 이 튜토리얼에서는 트래픽을 다음 위치의 Roundcube로 보냅니다: /var/www/roundcube.
  • ServerAdmin: Apache에 문제가 발생할 경우 연락할 이메일 주소를 지정합니다.
  • ErrorLog CustomLog: 이 사이트의 성공적인 연결 로그 및 오류 로그를 저장할 위치를 정의합니다.
    • 오류 로그를 정의할 때 구체적인 이름을 사용하여 사이트 전용 문제가 발생할 경우 쉽게 감지할 수 있도록 하십시오.

그런 다음, Apache에 Roundcube 디렉토리를 어떻게 처리할지 알려주는 새로운 Directory 블록을 추가합니다. Directory 블록은 두 단어로 구성되며, 각 줄의 첫 번째 단어는 설정 이름이고 그 뒤에 실제 설정 옵션이 옵니다.

  • Options -Indexes: index.html 또는 index.php 파일이 누락된 경우 경고를 표시하도록 Apache에 지시합니다. 기본적으로는 디렉토리의 내용을 표시합니다.
  • AllowOverride All: 로컬 .htaccess 파일이 감지되면 전역 설정을 재정의해야 함을 Apache에 알립니다.
  • Order allow,deny: 클라이언트의 사이트 액세스를 일치시키고 일치하지 않는 액세스는 거부하도록 Apache에 지시합니다.
  • allow from all: 허용되는 클라이언트 유형을 정의합니다.

이러한 변경을 완료하면 파일은 다음과 같이 보일 것입니다:

모든 변경 사항을 저장하고 파일을 닫습니다. 이제 Apache에 기본 사이트 호스팅을 중단하도록 요청해 보겠습니다:

그 후, Apache가 대신 Roundcube 사이트를 호스팅하도록 지시할 것입니다. 사이트를 활성화할 때 다음을 포함하지 마십시오. .conf  왜냐하면 a2ensite 은 확장자가 없는 파일 이름을 요구하기 때문입니다:

다음으로, ON 상태로 변경합니다. 대상: mod_rewrite Apache 모듈:

마지막으로, Roundcube 설치에 액세스할 수 있도록 Apache를 재시작합니다:

마지막 단계에서는 Roundcube가 앱 전용 데이터를 저장하고 관리할 수 있도록 데이터베이스를 구성해야 합니다.

4단계: MySQL 설정 및 구성

IP 주소 또는 도메인 이름을 사용하여 서버에 접속해 보십시오. 페이지에 구성 오류가 나타나는 것을 볼 수 있습니다. 여기서 Roundcube는 구성 설정 중에 생성된 파일을 확인하지만, 현재 구성 설정이 불완전합니다. 구성을 설정하기 전에 데이터베이스를 준비해 보겠습니다.

  1. MySQL에 연결: 사용자 이름과 비밀번호를 사용하여 MySQL 대화형 셸에 연결해 보겠습니다:
    위 명령어를 입력하면 MySQL을 설치할 때 생성한 root 비밀번호로 인증하라는 메시지가 표시됩니다.
  2. 데이터베이스 및 사용자 생성: 성공적으로 로그인했으므로 이제 데이터베이스와 데이터베이스 사용자를 생성해 보겠습니다. 그 후, 사용자가 새 데이터베이스에서 명령을 실행할 수 있도록 권한을 허용할 것입니다.
  3. 데이터베이스 생성: 다음 명령어를 사용하여 roundcubemail 이라는 이름의 데이터베이스를 생성합니다. 다음으로, 사용할 문자 집합과 같은 데이터베이스 옵션을 제공합니다. utf8:
    MySQL은 강력한 보안과 고급 안전성을 제공합니다. 이름과 연결 소스로 사용자를 정의합니다. 위 명령어는 roundcube라는 사용자를 생성하고 해당 사용자가 다음 위치에서 연결하도록 정의합니다. localhost.
  4. 데이터베이스 이름 변경: 사용자의 이름을 변경하고 비밀번호를 수정해 보겠습니다:
  5. 권한 설정: roundcube 사용자에게 roundcubemail 데이터베이스 및 테이블에 대한 모든 권한을 허용합니다:
    변경 사항을 저장하고 MySQL 대화형 셸에서 나갑니다:

다음 단계는 Roundcube가 모든 정보를 저장하는 데 도움이 되는 데이터베이스 구조를 설정하는 것입니다. Roundcube에는 데이터를 자동으로 설정하는 데이터베이스 파일이 포함되어 있어, 수동으로 구성하는 번거로운 노력을 줄여줍니다.

다음 명령어를 사용하면, MySQL은 새로 생성된 사용자를 사용하여 다음 파일을 읽어옵니다. /var/www/roundcube/SQL/mysql.initial.sql. 또한, 해당 구성을 다음 데이터베이스에 적용합니다. roundcubemail:

이제 roundcube 사용자의 비밀번호를 입력하라는 메시지가 표시됩니다. 데이터베이스 설정이 완료되면 Roundcube를 사용할 준비가 되고 올바른 권한을 확인할 수 있습니다. 모든 단계가 성공적으로 완료되면 아무런 피드백 없이 명령 프롬프트로 돌아갑니다. 다음 단계에서는 Roundcube에 이메일 설정을 알리고 설치를 완료하겠습니다.

5단계: Roundcube 설정 및 구성

지금 Roundcube 설치 페이지에 접속하려고 하면 오류 페이지가 표시됩니다. 설치를 완료하려면 http://your_server_ip_or_domain/installer 에 접속하십시오.

설정이 올바르게 완료되면 녹색 OK 모든 라인 항목의 오른쪽에 표시됩니다. 하지만 MySQL의 선택적 LDAP 설정에서는 녹색 OK가 표시되지 않을 수 있습니다. 만약 다음과 같은 메시지가 표시된다면 NOT AVAILABLE 메시지가 다른 라인 옆에 표시되면, 이 사용할 수 없는 의존성 패키지들을 설치해야 합니다. 의존성 패키지 중 일부를 다운로드하지 못했다면, 해당 URL로 이동하여 바로 다운로드할 수 있습니다.

설정이 완료되면 아래로 스크롤하여 NEXT 버튼을 클릭합니다. Roundcube 설정 파일을 생성하는 과정을 살펴보겠습니다. 수정해야 할 양식의 부분을 확인해 보세요.

  • 일반 설정

일반 설정 섹션에서 수정할 몇 가지 사용자 정의 및 일반 설정이 있습니다:

  • ip_check: 보안 설정 옵션으로, 세션 인증 시 클라이언트의 IP를 검증합니다.
  • product_name: 제품 이름을 원하는 대로 변경합니다. 이 이름은 텍스트에서 “Roundcube”에 매핑되며 이 이름으로 대체됩니다.
  • support_url: Roundcube 설치 시의 지원 URL입니다. 전용 헬프데스크 사이트가 없다면 walker:paul@demo.com과 같은 이메일 주소를 사용하는 것이 좋습니다.
  • skin_logo: Roundcube 로고를 다음으로 교체합니다. skin_logo. HTTPS를 활성화하려면 HTTPS URL 이미지(178px x 47px)를 선택하세요.

기존 설정은 기본값으로 유지합니다.

  1. 로깅 & 디버깅: 기본 옵션으로 진행하겠습니다.
  2. 데이터베이스 설정: Roundcube는 메일을 직접 사용하는 대신 MySQL을 사용하여 웹 클라이언트 실행을 위한 정보를 저장합니다. 여기서는 Roundcube가 다음 단계에서 설정한 데이터베이스에 액세스하도록 알려야 합니다. 4단계. 이전에 생성한 데이터베이스 자격 증명을 사용하세요:
    • 데이터베이스: MySQL
    • 서버: localhost
    • 데이터베이스 이름: roundcubemail
    • 사용자: roundcube
    • 비밀번호: demo12345@
      • 다음 단계에서 설정하고 정의한 비밀번호를 사용하세요. 4단계.
    • Db_prefix: 다른 앱과 데이터베이스를 공유하여 사용하는 경우가 아니라면 이 옵션은 선택 사항입니다.
  3. IMAP 수정: 이메일 서버의 IMAP 및 SMTP 설정을 지정해 보겠습니다. 이 튜토리얼은 Gmail을 예로 사용하는 데 중점을 두고 있으므로 IMAP 설정에서 Gmail 설정을 사용합니다. 하지만 Yahoo나 Outlook과 같은 다른 서비스 제공업체를 선택하는 경우 해당 설정을 사용해야 합니다. 많은 이메일 제공업체가 암호화가 있거나 없는 연결을 지원합니다. 안전하지 않은 연결을 사용하지 않도록 SSL IMAP/SMTP URL 및 포트를 사용하는 것을 표준화하세요.
    • default_host: ssl://imap.gmail.com
    • default_port: 993
    • auto_create_user: Yes
      • 이 항목을 선택 해제하면 Roundcube가 자체 데이터베이스에 사용자를 생성하지 않아 로그인이 불가능해집니다.
    • *_mbox 필드: 기본값을 유지합니다.
      • 이 설정은 나중에 Roundcube UI에서 업데이트할 수 있습니다.
  4. SMTP 수정: SMTP 서버는 이메일을 보내는 데 사용되는 이메일의 필수적인 부분입니다. IMAP 서버 섹션과 마찬가지로 SSL URL과 포트를 사용합니다. SMTP 서버 사용에 익숙하지 않다면 SMTP 모범 사례를 따라 이러한 서버에 대해 자세히 알아보세요. 여기서는 Gmail을 예로 사용하고 있습니다:
    • smtp_server 필드: ssl://smtp.gmail.com
    • smtp_port 필드: 465
    • SMTP 및 IMAP는 서로 다른 두 가지 서비스이므로 둘 다 사용자 이름과 비밀번호가 필요합니다. 하지만 Roundcube에서는 IMAP 자격 증명을 사용할 수 있으므로 다시 생성할 필요가 없습니다. 다음 아래의 필드를 비워두고 smtp_user/smtp_pass 'SMTP 인증에 현재 IMAP 사용자 이름 및 비밀번호 사용' 옆의 확인란을 선택하세요.
    • smtp_log: Yes
  5. 디스플레이 설정 & 사용자 기본 설정 수정: 기본 디스플레이 설정 및 사용자 기본 설정으로 진행하겠습니다. Roundcube 설치를 사용자 정의하려면 설정 페이지에서 RFC1766 링크를 클릭하고 language 필드를 수동으로 업데이트하세요.
  6. 플러그인: Roundcube는 추가 보안을 제공하는 플러그인 지원을 제공합니다. 플러그인은 선택 사항이지만, 이를 활용하면 작업을 더 쉽게 만들 수 있습니다. 가장 많이 사용되는 플러그인 목록을 살펴보겠습니다:
    • archive: 이 플러그인은 Gmail의 작동 방식과 유사한 Archive 버튼을 제공합니다.
    • emoticons: 이 플러그인을 사용하면 이메일에서 이모티콘을 사용할 수 있습니다.
    • enigma: GPG 이메일 암호화를 쉽게 사용할 수 있도록 해줍니다.
    • filesystem_attachments: 임시 보관 이메일을 저장할 때 첨부 파일을 Roundcube 서버에 임시로 저장할 수 있도록 합니다.
    • hide_blockquote: 이 플러그인은 UI를 깔끔하게 유지하기 위해 답장 이메일의 인용된 부분을 숨깁니다.
    • identity_select: 사용자가 이메일을 작성하는 동안 여러 이메일 주소를 선택할 수 있도록 합니다.
    • markasjunk: 이 플러그인은 이메일을 스팸으로 표시하고 스팸 보관함으로 이동할 수 있도록 합니다.
    • newmail_notifier: 브라우저 알림 시스템을 사용하여 새 이메일을 알려줍니다.

설정을 저장하려면 UPDATE CONFIG 버튼을 누르십시오. 마지막 단계에서는 모든 것이 제대로 작동하는지 확인하기 위해 Roundcube 구성을 테스트합니다.

6단계: Roundcube 설정 테스트

구성을 업데이트하면 페이지가 새로 고침되고 페이지 상단에 다음과 같은 노란색 안내 상자가 나타납니다. 구성 파일이 Roundcube 설치 경로의 RCMAIL_CONFIG_DIR 디렉토리에 성공적으로 저장되었습니다.

그런 다음, CONTINUE 버튼을 클릭하여 구성을 테스트합니다. 의존성 검사 페이지와 마찬가지로, 오류가 없으면 모든 줄에 녹색 OK 표시가 나타납니다. 오류가 표시되면 뒤로 돌아가 입력한 내용을 다시 확인하십시오.

각각 Test SMTP configTest IMAP config 섹션에 IMAP 및 SMTP 사용자 이름과 비밀번호를 입력하여 나머지 구성을 테스트합니다. 마찬가지로, Send test emailCheck login을 클릭합니다. 모든 단계를 올바르게 수행했다면 페이지가 새로 고침되고 테스트된 섹션 아래에 녹색 OK 표시가 나타납니다.

참고: 2단계 인증이 활성화된 Gmail을 사용하는 경우, Roundcube는 2단계 인증 토큰을 요청하는 방법을 알지 못하므로 앱 비밀번호를 생성하는 것을 고려하십시오. Yahoo 또는 Outlook과 같은 다른 이메일 서버 대안을 사용할 때도 동일한 비밀번호 생성 절차를 따르십시오.

SMTP 및 IMAP 연결이 모두 잘 작동하는지 확인한 후, 다음 단계는 SSH를 사용하여 설치 프로그램 디렉토리를 제거하는 것입니다. 설치 프로그램 디렉토리를 제거하면 다른 사람이 새 구성을 생성하고 올바른 설정을 덮어쓰는 것을 방지할 수 있어 안전합니다.

마지막으로, 서버의 IP를 사용하여 Roundcube 인스턴스로 이동하고 이메일을 확인할 수 있습니다.

결론

이 튜토리얼에서는 Ubuntu 20.04에서 Roundcube를 사용하여 웹메일 클라이언트를 설치하는 방법을 배웠습니다. 위에서 설명한 단계 외에도 HTTPS 지원 및 GPG 암호화와 같이 추가를 고려해야 하는 다른 보안 옵션이 있습니다. 다음을 사용하여 서버를 보호하는 것을 책임으로 삼으십시오: 강력한 보안 조치.

또한, Redis 및 PHP에 관한 다양한 학습 자료를 다음에서 확인하실 수 있습니다: 블로그:

즐거운 컴퓨팅 되세요!

author

Pranay Kapgate

작성자 · CloudSigma

Preslav Dobrev는 CloudSigma의 크리에이티브 디자이너로서, 전통적이고 혁신적인 마케팅 채널을 활용하여 일관된 비즈니스 정체성을 구축하는 데 중점을 두고 있습니다. 그는 영향력 있는 브랜드 내러티브를 창출하기 위해 예술적 비전과 전략적 마케팅을 결합하는 데 능숙합니다.

댓글

아직 댓글이 없습니다. 첫 번째로 작성해 보세요.