[작성자:] Saturn

  • R 파이프 연산자 %>% 사용법: 데이터 분석 흐름을 쉽게 읽는 방법

    R 파이프 연산자 %>% 사용법: 데이터 분석 흐름을 쉽게 읽는 방법

    R에서 파이프 연산자(%>%)를 통해 R 프로그래밍 코드의 가독성과 효율성을두 가지 요소를 동시에 증가시킬 수 있습니다.

    R 파이프 연산자는 여러 단계의 데이터 처리 과정을 위에서 아래로 읽을 수 있게 도와주는 문법입니다. 중첩 함수가 많아질수록 코드가 복잡해지는데, 파이프를 사용하면 분석 흐름을 자연스러운 순서로 정리할 수 있습니다. 이 글에서는 %>%의 기본 구조와 읽는 방법, 데이터 분석에서 자주 쓰는 패턴을 설명합니다.

    본 글에서는 이러한 파이프 연산자가 무엇인지, 왜 필요한지, 그리고 어떻게 활용할 수 있는지에 대해 상세하게 알아보도록 하겠습니다.

    1. 파이프 연산자 %>%란 무엇인가?

    %>% 연산자, 즉 파이프 연산자는 주로 dplyrtidyverse 패키지에서 사용됩니다. 이 연산자의 주 목적은 데이터나 결과를 다음 함수로 명확하게 전달하는 것입니다.

    이로써 코드를 더욱 모듈화하고, 각 단계에서 어떤 작업이 이루어지는지 명확하게 파악할 수 있습니다.

    # 간단한 예시
    result <- data %>%
      filter(age > 30) %>%
      select(name, age)

    2. 왜 파이프 연산자 %>%를 사용해야 하는가?

    1) 코드 가독성 향상

    복잡한 데이터 처리 과정을 한 눈에 이해하기 쉽게 만들어 줍니다. 일반적으로 R 코드에서 여러 함수와 연산이 한 줄에 나열되면, 그 코드를 읽는 데 상당한 노력이 필요합니다.

    하지만 파이프 연산자를 사용하면, 각 단계를 명확하게 구분하여 보다 직관적으로 코드를 이해할 수 있습니다.

    2) 유지보수성 증가

    파이프 연산자를 통해 작성된 코드는 수정이나 확장이 쉽습니다. 특정 단계에 새로운 연산을 추가하거나 삭제해야 할 경우, 해당 부분만을 수정하면 됩니다. 이는 코드의 유지보수를 간편하게 해줍니다.

    3) 직관적인 데이터 처리

    파이프 연산자는 데이터의 흐름을 수직으로 표현합니다. 이는 데이터가 어떻게 변형되는지를 더 직관적으로 이해할 수 있게 도와줍니다.

    3. 파이프 연산자 활용 예시

    %>% 연산자는 파이프 연산자라고도 하며, R에서 특히 dplyr 패키지나 tidyverse 패키지에서 주로 사용됩니다. 이 연산자의 기본적인 역할은 함수의 입력과 출력을 명확하고 읽기 쉬운 방식으로 연결해주는 것입니다.

    파이프 연산자는 데이터를 받아 처리한 후 그 결과를 다음 함수의 첫 번째 인자로 전달합니다. 이로 인해 코드가 훨씬 더 읽기 쉬워지며, 데이터 처리 흐름을 더 명확하게 파악할 수 있습니다.

    예를 들어, dplyrfilter()select() 함수를 사용하는 다음 두 코드는 동일한 작업을 수행합니다.

    파이프 연산자를 사용하지 않는 경우:

    filtered_data <- filter(data, age > 30)
    result <- select(filtered_data, name, age)

    파이프 연산자를 사용하는 경우:

    result <- data %>%
      filter(age > 30) %>%
      select(name, age)

    파이프를 사용한 두 번째 예에서 코드가 데이터(data)로부터 시작해서 어떤 변환(filter, select)을 거치는지 한눈에 볼 수 있습니다. 이런 식으로 파이프 연산자는 코드의 가독성을 높이고 로직을 더 명확하게 표현할 수 있게 도와줍니다.

    1) 파이프 연산자 기본적인 데이터 처리

    먼저 dplyr 패키지를 로드하고, 간단한 데이터 필터링과 선택, 그리고 정렬을 해보겠습니다.

    # dplyr 패키지 로드
    library(dplyr)
    
    # 데이터 필터링
    filtered_data <- mtcars %>%
      filter(mpg > 20)
    
    # 데이터 선택 및 정렬
    sorted_data <- mtcars %>%
      select(mpg, cyl) %>%
      arrange(desc(mpg))

    2) 파이프 연산자 복잡한 데이터 처리 시나리오

    복잡한 데이터 처리도 파이프 연산자를 통해 간결하게 표현할 수 있습니다.

    아래의 예시는 mtcars 데이터를 필터링, 그룹핑, 요약, 정렬하는 과정을 한 번에 표현한 것입니다.

    result <- mtcars %>%
      filter(mpg > 20) %>%
      group_by(cyl) %>%
      summarise(avg_mpg = mean(mpg)) %>%
      arrange(desc(avg_mpg))

    4. 마치며

    파이프 연산자 %>%는 R 프로그래밍에서 데이터를 효과적으로 처리할 수 있는 강력한 도구입니다. 코드의 가독성을 높이고, 유지보수성을 향상시키며, 데이터 처리의 로직을 명확하게 표현할 수 있습니다.

    따라서, R에서 데이터 분석이나 데이터 사이언스 작업을 수행할 때 이 연산자의 활용은 거의 필수적이라고 할 수 있습니다. %>% 연산자를 통해 더 효율적인 데이터 분석 경험을 가져보세요.

    R 프로그램을 다운로드하려면 R 프로그램 공식 웹사이트(https://www.r-project.org/)에서 다운로드 링크를 클릭하여 다운로드할 수 있습니다.

    R 프로그램 모두보기

    함께 읽으면 좋은 글

    핵심 확인 체크리스트

    • 분석 순서를 위에서 아래로 읽을 수 있는가?
    • 중첩 함수보다 파이프 코드가 더 명확한가?
    • 각 단계의 입력과 출력 데이터가 무엇인지 확인했는가?
    • 필요 이상으로 긴 파이프 체인을 만들고 있지는 않은가?

    함께 읽으면 좋은 R통계 글

    FAQ

    R 파이프 연산자 %>%는 왜 사용하나요?

    여러 함수를 중첩해서 쓰면 코드가 안쪽부터 바깥쪽으로 읽혀 초보자가 이해하기 어렵습니다. 파이프 연산자를 쓰면 데이터 처리 순서를 위에서 아래로 읽을 수 있어 분석 흐름이 명확해집니다.

    파이프 연산자는 기본 R 함수와 어떻게 다른가요?

    기본 R 함수와 역할이 충돌하는 것은 아닙니다. 파이프는 함수 실행 결과를 다음 함수의 입력으로 넘겨주는 연결 방식이며, 기존 함수들을 더 읽기 쉬운 순서로 묶어주는 도구입니다.

    초보자가 파이프 코드를 읽을 때 가장 중요한 순서는 무엇인가요?

    가장 먼저 시작 데이터가 무엇인지 확인하고, 각 줄에서 어떤 변환이 일어나는지 차례대로 보면 됩니다. 중간 결과를 머릿속으로 추적하면 전체 분석 흐름을 이해하기 쉽습니다.

  • Nginx + Php8 설정

    Nginx + Php8 설정

    1. Nginx와 PHP 8 연결

    nginx php8 패키지를 설치했다고 웹서버에서 php파일이 적용되는 것은 아닙니다. nginx가 php8를 서비스할 수 있도록 일부 파일의 수정이 필요합니다. 설정이 올바르지 않다면 nginx에서 php8이 제대로 작동하지 않습니다. 특히 php파일이 다운로드 되거나 phpinfo 또는 php 코드를 실행시 아무것도 나타나지 않는 문제가 생깁니다.

    지금 확인하는 부분은 nginx와 php8 설정을 통해서 웹서버에서 php가 정상적으로 작동하는데 도움을 줄 것입니다.

    1개의 파일 유무와 3개의 파일을 수정해야 합니다.

    1. /etc/nginx/nginx.conf 파일이 존재하는지
    2. /etc/nginx/fastcgi_params의 fastcig_param 확인 및 추가
    3. /etc/nginx/sites-available/default 설정에서 php script 추가 및 수정
    4. /etc/nginx/nginx.conf의 default_type

    4번째는 수정하지 않는 경우 php파일이 실행되지 않고 다운 받아지는 문제가 생깁니다.

    1) /etc/nginx/nginx.conf 확인

    앞선 설치 및 진행을 따라 했다면 nginx.conf 파일은 존재합니다. 만약 없다면 다음 내용을 복사해서 파일을 생성하면 됩니다. 아래 내용을 복사해서 파일을 만든다면 4번의 단계는 생략해도 됩니다.

    아래에서 php버전에 따라 설정된 user가 다를 수 있습니다. user는 sudo nano /etc/php/8.1/fpm/pool.d/www.conf의 user, group, listen.owner, listen.group 정보와 일치해야 합니다.

    파일을 생성합니다.

    sudo nano /etc/nginx/nginx.conf

    다음 코드를 붙여넣습니다.

    user www-data;
    worker_processes auto;
    pid /run/nginx.pid;
    include /etc/nginx/modules-enabled/*.conf;
    
    events {
            worker_connections 768;
            # multi_accept on;
    }
    
    http {
            ##
            # Basic Settings
            ##
            sendfile on;
            tcp_nopush on;
            types_hash_max_size 2048;
            # server_tokens off;
            # server_names_hash_bucket_size 64;
            # server_name_in_redirect off;
            include /etc/nginx/mime.types;
            #default_type application/octet-stream;
            default_type text/html;
            ##
            # SSL Settings
            ##
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
            ssl_prefer_server_ciphers on;
    
            ##
            # Logging Settings
            ##
            access_log /var/log/nginx/access.log;
            error_log /var/log/nginx/error.log;
    
            ##
            # Gzip Settings
            ##
            gzip on;
            # gzip_vary on;
            # gzip_proxied any;
            # gzip_comp_level 6;
            # gzip_buffers 16 8k;
            # gzip_http_version 1.1;
            # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    
            ##
            # Virtual Host Configs
            ##
            include /etc/nginx/conf.d/*.conf;
            include /etc/nginx/sites-enabled/*;
    }
    
    #mail {
    #       # See sample authentication script at:
    #       # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
    #
    #       # auth_http localhost/auth.php;
    #       # pop3_capabilities "TOP" "USER";
    #       # imap_capabilities "IMAP4rev1" "UIDPLUS";
    #
    #       server {
    #               listen     localhost:110;
    #               protocol   pop3;
    #               proxy      on;
    #       }
    #
    #       server {
    #               listen     localhost:143;
    #               protocol   imap;
    #               proxy      on;
    #       }
    #}
    

    2) /etc/nginx/fastcgi_params의 fastcig_param 확인 및 추가

    편집기로 /etc/nginx/fastcgi_param을 열고 다음 내용이 없으면 추가합니다.

    sudo nano /etc/nginx/fastcgi_params

    첫 번째 줄에 다음 코드를 추가합니다.

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    [Step 8] fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 추가

    3) /etc/nginx/sites-available/default 설정에서 php script 추가 및 수정

    default 파일을 편집기로 실행하고 location 부분을 다음과 같이 수정합니다. 여기서는 8.1버전을 기준으로 수정합니다. 기존 파일에서 다음 부분을 찾아 변경하면 됩니다.

    # pass PHP scripts to FastCGI server
    
    location ~ \.php$ {
           include snippets/fastcgi-php.conf;
    
           # With php-fpm (or other unix sockets):
           fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    }
    [Step 9] pass PHP scripts to FastCGI server 추가

    Nginx와 php를 모두 재시작 합니다.

    sudo systemctl restart nginx
    sudo systemctl restart php8.1-fpm

    4. PHP 8 실행 및 확인

    php정보를 확인할 파일을 생성합니다. 파일은 web root 에 생성합니다.

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

    php 코드 규칙에 따라 다음 내용을 복사해서 붙여 넣습니다.

    <?php
    phpinfo();
    ?>

    웹사이트에서 localhost/info.php 또는 주소/info.php로 php 정보를 확인합니다.

    [Step 10] php info 확인

    이 글은 nginx 설치 이후 PHP8 셋팅에 있는 내용 중 문제해결에 대한 부분만 별도로 골라내서 작성된 글로 이전 글과 중복되어 있습니다. nginx 설치에 대해서 자세히 알고 싶다면 다음 링크를 클릭하세요

    Nginx 웹서버 설치(ubuntu) – Thinknote

    ubuntu의 nginx가 설치된 상태에서 php8을 설치하고자 한다면 다음 링크를 클릭하세요. php설치는 wordpress를 설치하기 위한 준비 단계로 진행됩니다.

    PHP 8 설치(ubuntu) – Thinknote

    함께 읽으면 좋은 글

  • PHP 8 설치(ubuntu)

    PHP 8 설치(ubuntu)

    1. PHP 이해 및 특징

    1) PHP 이해

    PHP 8 설치는 Nginx 웹서버와 연동하여 WordPress를 사용하기 위한 목적입니다. 향후 PHP를 활용하여 데이터를 일부 조작하고 PHP 코드를 삽입하는 방법에 대해서도 다루겠지만 그보다는 PHP로 개발된 WordPress를 운영하기 위한 목적에서 설명합니다.

    PHP는 Hypertext Preprocessor의 약자로 동적 웹페이지를 구현하기 위해 설계되었습니다.  PHP로 작성된 코드를 PHP 엔진에서 html 파일과 같이 처리하여 원하는 웹 페이지를 만들수 있습니다. php는 8.x 버전으로 넘어가고 있으며 7.0이후에는 PHP 코드와 HTML을 별도 파일로 분리하여 작성하며 웹서버가 아닌 php-fpm(PHP FastCGI Process Manager)을 통해 실행하는 경우가 늘어나고 있습니다.

     서버 측 오픈 소스 소프트웨어는 PHP로 구현된 경우가 많습니다. PHP에 기반한 대표적인 프로그램으로 워드프레스, 미디어위키, 넥스트클라우드 등이 있습니다. PHP는 텍스트와 HTML의 처리에 강점을 가지고 있어 URL의 파싱이나 폼 처리, 정규 표현식 등을 다양하게 적용할 수 있고 다양한 데이터베이스를 지원합니다.

    자바, 파이썬 등 다양한 프로그래밍 언어가 널리 활용되고 있지만 오픈소스의 영향력에 기반하여 지속적인 개발이 진행되고 있습니다.

    2) PHP 특징

    php는 단순, 능률, 안전, 유연성, 친숙함의 4가지 특징을 갖고 있습니다.

    • PHP는 시스템 기능, 즉 시스템의 파일에서 생성, 열기, 읽기, 쓰기 및 닫을 수 있습니다.
    • PHP는 양식, 즉 파일에서 데이터를 수집하고, 파일에 데이터를 저장하고, 이메일을 통해 데이터를 보내고, 사용자에게 데이터를 반환 할 수 있습니다.
    • PHP를 통해 데이터베이스 내의 요소를 추가, 삭제, 수정합니다.
    • 쿠키 변수에 액세스하고 쿠키를 설정합니다.
    • PHP를 사용하면 사용자가 웹 사이트의 일부 페이지에 액세스하도록 제한 할 수 있습니다.
    • 데이터를 암호화 할 수 있습니다.

    3) PHP 활용

    자바나 C 언어에서 접근하려면 여러 Include 등을 통해야 했던 작업들이 내장함수로 있어서 적은 코드로도 쉽게 구현이 가능합니다. 현재의 PHP는 절차적인 형태에서 ‘객체지향(클래스- Class)’ 프로그램 작성이 가능한 상태로 진화되었습니다.

    • PHP는 동적 페이지 콘텐츠를 생성 할 수 있습니다.
    • PHP는 서버에서 파일을 만들고, 열고, 읽고, 쓰고, 삭제하고, 닫을 수 있습니다.
    • PHP는 양식 데이터를 수집 할 수 있습니다.
    • PHP는 쿠키를 보내고받을 수 있습니다.
    • PHP는 데이터베이스의 데이터를 추가, 삭제, 수정할 수 있습니다.
    • PHP를 사용하여 사용자 액세스를 제어 할 수 있습니다.
    • PHP는 데이터를 암호화 할 수 있습니다

    2. PHP 8 설치

    1) PHP 8 사전 준비

    ubuntu의 패키지를 업데이트 및 업그레이드를 진행합니다.

    sudo apt update
    sudo apt upgrade
    php 8
    [Step 1] 패키지 업데이트

    2) PHP 8 패키지 확인 및 설치

    apt list 명령으로 php와 관련된 항목을 확인할 수 있습니다. 하지만 php관련 패키지가 너무 많기 때문에 무엇을 설치해야 할지 망설여집니다. 특히 php 버전도 다양하기 때문에 기존 프로그램의 개발 환경에 따라서 특정 버전이 필요할 수도 있습니다.

    php 설치의 core는 php-fpm입니다. php 버전에 따라서는 php7.x-fpm, php8.x-fpm 등 버전별로 존재합니다. 특정 버전을 설치하는 방법은 다른 글에서 다루도록 하겠습니다.

    apt list *fpm으로 php 8 설치의 핵심 패키지를 확인합니다. 여기서는  php-fpm은 8.1버전이고 php-fpm은 8.1.2 버전으로 나옵니다. 최신 버전이 좋을 수도 있지만 호환성에서 문제가 발생될 수 있기 때문에 가장 최신 버전은 피하는 것도 방법입니다.

    sudo apt list *fpm
    php 8
    [Step 2] 패키지 확인

    여기서는 php을 설치합니다.

    sudo apt install php8.1-fpm
    php 8
    [Step 3] php-fpm 설치
    php 8
    [Step 4] php-fpm 설치
    php 8
    [Step 5] php-fpm 설치

    3) PHP 8 상태 확인

    설치가 완료되고 잘 작동되고 있는지 확인하기 위해서 sudo systemctl status php8.1-fpm 명령어를 실행합니다. 앞서 특정 버전을 설치했다면 php뒤에 버전을 함께 작성해서 확인하면 됩니다.

    sudo systemctl status php8.1-fpm
    php 8
    [Step 6] php 서비스 확인

    서비스가 정상적으로 실행되고 있습니다. 출력된 내용을 보면 서비스는 php8.1-fpm.service로 작동되며 conf 파일은 /etc/php/8.1/fpm/php-fpm.conf 파일입니다.

    4) WordPress를 위한 php 8 패키지 추가 설치

    패키지 중에는 지금 당장 필요하지 않은 패키지도 있습니다. 하지만 미리 설치해도 큰 상관이 없기 때문에 기본적인 패키지는 모두 설치합니다.

    sudo apt install php8.1-common php8.1-mysql php8.1-xml php8.1-xmlrpc php8.1-curl php8.1-gd php8.1-imagick php8.1-cli php8.1-dev php8.1-imap php8.1-mbstring php8.1-opcache php8.1-redis php8.1-soap php8.1-zip
    php 8
    [Step 7] php 추가 패키지 설치

    3. Nginx와 PHP 8 연결

    php 패키지를 설치했다고 웹서버에서 php파일이 적용되는 것은 아닙니다. nginx가 php를 서비스할 수 있도록 일부 파일의 수정이 필요합니다.

    1개의 파일 유무와 3개의 파일을 수정해야 합니다.

    1. /etc/nginx/nginx.conf 파일이 존재하는지
    2. /etc/nginx/fastcgi_params의 fastcig_param 확인 및 추가
    3. /etc/nginx/sites-available/default 설정에서 php script 추가 및 수정
    4. /etc/nginx/nginx.conf의 default_type

    4번째는 수정하지 않는 경우 php파일이 실행되지 않고 다운 받아지는 문제가 생깁니다.

    1) /etc/nginx/nginx.conf 확인

    앞선 설치 및 진행을 따라 했다면 nginx.conf 파일은 존재합니다. 만약 없다면 다음 내용을 복사해서 파일을 생성하면 됩니다. 아래 내용을 복사해서 파일을 만든다면 4번의 단계는 생략해도 됩니다.

    파일을 생성합니다.

    sudo nano /etc/nginx/nginx.conf

    다음 코드를 붙여넣습니다.

    user www-data;
    worker_processes auto;
    pid /run/nginx.pid;
    include /etc/nginx/modules-enabled/*.conf;
    
    events {
            worker_connections 768;
            # multi_accept on;
    }
    
    http {
            ##
            # Basic Settings
            ##
            sendfile on;
            tcp_nopush on;
            types_hash_max_size 2048;
            # server_tokens off;
            # server_names_hash_bucket_size 64;
            # server_name_in_redirect off;
            include /etc/nginx/mime.types;
            #default_type application/octet-stream;
            default_type text/html;
            ##
            # SSL Settings
            ##
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
            ssl_prefer_server_ciphers on;
    
            ##
            # Logging Settings
            ##
            access_log /var/log/nginx/access.log;
            error_log /var/log/nginx/error.log;
    
            ##
            # Gzip Settings
            ##
            gzip on;
            # gzip_vary on;
            # gzip_proxied any;
            # gzip_comp_level 6;
            # gzip_buffers 16 8k;
            # gzip_http_version 1.1;
            # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    
            ##
            # Virtual Host Configs
            ##
            include /etc/nginx/conf.d/*.conf;
            include /etc/nginx/sites-enabled/*;
    }
    
    #mail {
    #       # See sample authentication script at:
    #       # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
    #
    #       # auth_http localhost/auth.php;
    #       # pop3_capabilities "TOP" "USER";
    #       # imap_capabilities "IMAP4rev1" "UIDPLUS";
    #
    #       server {
    #               listen     localhost:110;
    #               protocol   pop3;
    #               proxy      on;
    #       }
    #
    #       server {
    #               listen     localhost:143;
    #               protocol   imap;
    #               proxy      on;
    #       }
    #}
    

    2) /etc/nginx/fastcgi_params의 fastcig_param 확인 및 추가

    편집기로 /etc/nginx/fastcgi_param을 열고 다음 내용이 없으면 추가합니다.

    sudo nano /etc/nginx/fastcgi_params

    첫 번째 줄에 다음 코드를 추가합니다.

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    [Step 8] fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 추가

    3) /etc/nginx/sites-available/default 설정에서 php script 추가 및 수정

    default 파일을 편집기로 실행하고 location 부분을 다음과 같이 수정합니다. 여기서는 8.1버전을 기준으로 수정합니다. 기존 파일에서 다음 부분을 찾아 변경하면 됩니다.

    # pass PHP scripts to FastCGI server
    
    location ~ \.php$ {
           include snippets/fastcgi-php.conf;
    
           # With php-fpm (or other unix sockets):
           fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    }
    [Step 9] pass PHP scripts to FastCGI server 추가

    Nginx와 php를 모두 재시작 합니다.

    sudo systemctl restart nginx
    sudo systemctl restart php8.1-fpm

    4. PHP 8 실행 및 확인

    php정보를 확인할 파일을 생성합니다. 파일은 web root 에 생성합니다.

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

    php 코드 규칙에 따라 다음 내용을 복사해서 붙여 넣습니다.

    <?php
    phpinfo();
    ?>

    웹사이트에서 localhost/info.php 또는 주소/info.php로 php 정보를 확인합니다.

    [Step 10] php info 확인

    참고로 워드프레스를 설치하기 위해서는 php.ini 파일의 수정이 필요합니다. php 파일 실행 및 php.ini 파일 수정은 wordpress 설치 글에서 다루도록 하겠습니다.

    함께 읽으면 좋은 글

  • Nginx 웹서버 설치(ubuntu)

    Nginx 웹서버 설치(ubuntu)

    1. Nginx 웹서버 Vs Apache 웹서버

    여기서는 Nginx 웹서버 설치를 진행합니다. 리눅스에서 설치되는 웹 서버는 Nginx 웹서버와 apache 웹서버로 나눠지며 다음과 같은 차이점을 갖고 있습니다. 아파치는 오픈 소스 HTTP 서버인 반면 Nginx는 오픈 소스, 고성능 비동기 웹 서버 및 역방향 프록시 서버입니다.

    아파치 HTTP 서버의 개발 및 발전은 전 세계 사용자 커뮤니티(Apache Software Foundation)에서 관리 및 유지되지만 Nginx는 2011년에 설립된 동일한 이름의 회사에서 유지 및 관리 됩니다.

    Apache는 클라이언트 요청 및 웹 트래픽을 처리하는 다양한 다중 처리 모듈을 제공하지만 Nginx는 최소한의 하드웨어 리소스로 여러 클라이언트 요청을 동시에 처리하도록 설계되었습니다.

    아파치에서 단일 스레드는 하나의 연결과 연결되지만 Nginx의 단일 스레드는 여러 연결을 처리할 수 있다. 이 프로세스는 메모리를 적게 소모하여 성능이 향상시킵니다.

    아파치 HTTP Server에는 확장성이 없는 다중 스레드 아키텍처지만 Nginx는 여러 클라이언트 요청을 처리하기 위한 비동기 이벤트 기반 접근 방식을 따릅니다.

    아파치 서버는 기존의 메서드를 사용하여 정적 콘텐츠를 제공하고 웹 서버 자체 내에서 기본적으로 동적 콘텐츠를 처리한다. 반면 Nginx는 동적 콘텐츠를 내부적으로 처리할 수 없고 위해 외부 프로세스에 의존합니다.

    2. Nginx 웹서버 설치

    apt update와 apt upgrade로 패키지 정보를 업데이트 합니다. list 옵션으로 nginx와 관련된 패키지를 확인합니다. nginx 설치 명령어로 nginx 웹서버를 설치합니다.

    • nginx 관련 패키지 정보를 출력하는 명령어입니다.
    sudo apt list nginx*
    nginx ubuntu
    [Step 1] 패키지 정보 확인
    • nginx 설치를 위한 명령어를 실행합니다.
    sudo apt install nginx
    nginx ubuntu
    [Step 2] nginx install
    • 설치된 nginx의 버전을 확인합니다.
    sudo nginx -v
    nginx ubuntu
    [Step 3] nginx 버전 확인
    • nginx 서비스의 상태를 확인합니다.
    sudo systemctl status nginx
    nginx ubuntu
    [Step 4] 패키지 정보 확인

    2. 외부 접속을 위한 포트 설정

    웹서버가 설치되었다고 바로 접속이 가능한 것은 아닙니다. ubuntu가 설치된 환경은 호스트 컴퓨터의 가상 서버로 구성되어 있고 ubuntu 서버는 iptables로 방화벽이 서비스되고 있습니다.

    첫 번째 단계는 ubuntu 서버의 포트를 개방하는 것입니다. iptables에 대한 이해가 필요하다면 다음 글을 통해서 확인할 수 있습니다.

    1) nginx http 포트 허용

    http 포트는 80을 사용합니다. iptables에서 tcp 80번 포트를 사용하도록 열어주고 iptables에 체인이 등록되었는지 규칙을 출력합니다.

    • -A : 체인에 추가
    • -p tcp : 프로토콜 tcp
    • -m tcp : tcp 일치, 확장일치
    • –dport : 포트번호
    • — j : 대상 점프
    • ACCEPT : 허용
    sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
    sudo iptables -S
    iptables
    [Step 1] iptables에 80번 포트 추가

    추가된 규칙을 저장하고 Reload 합니다.

    sudo netfilter-persistent save
    sudo netfilter-persistent reload
    iptables
    [Step 2] iptables 저장 및 reload

    2) VirtualBox 포트 추가

    VirtualBox에 포트를 추가해야 호스트 컴퓨터의 IP 또는 localhost(127.0.0.1)에서 접속이 가능합니다. 그리고 공유기를 사용하고 있다면 공유기의 DMZ기능이나 공유기 포트 포워딩 기능을 사용하면 외부에서도 접속이 가능합니다. 여기서는 공유기의 DMZ 설정에 대해서는 다루지 않습니다.

    VirtualBox의 상세한 절차를 알고 싶다면 아래 링크를 클릭해서 확인할 수 있습니다.

    아래 이미지와 같이 80번 포트에 대한 포워딩을 추가합니다.

    virtualbox 80 port
    [Step 3] VirtualBox 80번 포트 포워딩

    3. Nginx 웹서버 접속 확인

    포트 개방이 완료되고 호스트 컴퓨터의 인터넷 브라우저를 통해 ubuntu 서버의 nginx 웹서버에 접속합니다.

    • localhost 접속(127.0.0.1)
    nginx
    [Step 1] 127.0.0.1
    nginx
    [Step 2] http://localhost
    • 호스트 컴퓨터의 내부 IP로 접속
    nginx
    [Step 2] http://localhost
    • 외부IP로 접속
    nginx
    [Step 2] http://220.xxx.xxx.xxx

    함께 읽으면 좋은 글

  • Ubuntu SSH 포트 설정 및 연결

    Ubuntu SSH 포트 설정 및 연결

    1. Ubuntu SSH 포트 개방

    SSH 포트 개방을 위해서는 2가지 작업을 진행해야 합니다. 첫 번째는 ubuntu iptables에 22번 포트를 개방해야 하고 두 번째는 virtualbox의 포트를 포워드 해야 합니다. 만약 외부 ip를 사용해서 ubuntu를 설치 했다면 첫 번째 작업만 해도 무방합니다.
    만약 호스트 PC가 공유기에 물려 있다면 DMZ 설정 및 포트 포워드로 22번 포트를 호스트 PC에 연결해야 외부에서 접속이 가능합니다.

    1) 기본 환경 구성

    지금부터 시작되는 내용은 다음과 같은 환경을 가정하고 진행합니다.

    • Virtual로 ubuntu가 설치됨
    • 호스트 PC는 내부 공유기로부터 IP를 할당
    • Virtual IP: 10.0.2.15

    2) Iptables SSH 포트 허용

    SSH 포트는 22을 사용합니다. Iptables에서 tcp 22번 포트를 사용하도록 열어줍니다.

    • -A : 체인에 추가
    • -p tcp : 프로토콜 tcp
    • -m tcp : tcp 일치, 확장일치
    • –dport : 포트번호
    • — j : 대상 점프
    • ACCEPT : 허용
    sudo iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

    iptables에 체인이 등록되었는지 규칙을 출력합니다. 추가된 규칙을 저장하고 Reload 합니다.

    sudo iptables -S
    sudo netfilter-persistent save
    sudo netfilter-persistent reload
    [Step 1] ubuntu ssh 포트 추가

    ubuntu의 IP를 확인하겠습니다. ip addr명령으로 IP를 확인하면 다음과 같이 출력되며 ubuntu의 IP가 10.0.2.15인 것으로 확인됩니다.

    ip addr
    [Step 2] ubuntu ip 확인

    2. VirtualBox의 SSH 포트 포워딩

    ubuntu의 SSH 포트 개방으로 Ubuntu의 연결은 허용되었지만 아직 호스트 컴퓨터에서는 접속을 할 수 없습니다. 호스트 컴퓨터에서 MobaXterm으로 ubuntu에 접속하기 위해서는 VirtualBox에서 포트를 포워딩 해야 합니다.

    VirtualBox에서는 가상머신을 종료하지 않고 설정에서 포트 포위딩을 할 수 있습니다. 가상PC 설정의 네트워크를 클릭합니다.

    virtualbox ssh
    [Step 1] virtualbox 관리자 실행
    virtualbox ssh
    [Step 2] virtualbox 네트워크 설정

    네트워크 Advanced를 확장하여 포트 포워팅 버튼을 클릭합니다.

    virtualbox ssh
    [Step 3] virtualbox 네트워크 포트 포워딩 추가

    포트 포워팅 규칙을 추가하기 위해 오른쪽 상단의 플러스 아이콘을 클릭합니다. 이름[SSH], 프로토콜[TCP], 호스트 IP(로컬호스트로 접속하기 때문에 비워두어도 됩니다.)[ ], 호스트 포트[22], 게스트 IP(ubuntu IP는 ip addr 명령으로 확인할 수 있습니다.)[10.0.2.15], 게스트 포트[22]를 입력합니다.

    virtualbox ssh
    [Step 4] virtualbox ssh 포트(22) 포워딩 설정

    3. MobaXterm으로 Ubuntu 터미널 접속

    MobaXterm을 실행합니다. 아직은 등록된 Session이 없기 때문에 새로운 Session을 등록하기 위해 왼쪽 상단의 Session을 클릭합니다.

    mobaxterm ssh
    [Step 1] MobaXterm 실행

    SSH를 사용해서 ubuntu에 접속하기 위해서 왼쪽 상단의 SSH를 클릭합니다.

    mobaxterm ssh
    [Step 2] MobaXterm ssh session

    Remnote Host는 ubuntu IP가 아닌 호스트 PC의 IP를 의미합니다. Host IP는 cmd명령으로 호스트 PC의 터미널을 실행하고 ipconfig /all 명령으로 확인할 수 있습니다. 여기서는 localhost IP로 접속하기 때문에 127.0.0.1을 입력하겠습니다. OK 버튼을 클릭해서 창을 닫습니다.

    mobaxterm ssh
    [Step 3] MobaXterm ssh session 추가(localhost 및 host IP)

    MobaXterm의 왼쪽 user session 부분에 127.0.0.1 세션이 추가된 것을 확인할 수 있습니다. 해당 세션을 더블 클릭해서 로그인 터미널이 나타나면 포트가 정상적으로 개방된 것입니다.

    mobaxterm ssh
    [Step 3] ubuntu 접속

    함께 읽으면 좋은 글

  • Ubuntu OpenSSH 설치 및 MobaXterm 설치

    Ubuntu OpenSSH 설치 및 MobaXterm 설치

    1.  OpenSSH 개념 및 특징

    1) OpenSSH 개념

    OpenSSH의 개념을 이해하고 OpenSSH 설치 및 MobaXterm 프로그램을 사용하여 Ubuntu에 원격 접속하도록 하겠습니다. SSH 프로토콜은 telnet 및 rlogin에 비해 향상된 보안을 지원합니다. SSH 프로토콜은 SSH1 및 SSH2에서 사용이 가능합니다.

    SSH1 유형은 7.6 release부터는 지원되지 않고 있습니다. SSH2 유형은 RSA와 관련된 특허를 우회하며 CRC 데이터 무결성 문제를 해결하기 위해 발명되었습니다. 또한 SSH2 프로토콜은 대칭 및 비대칭 암호에 대한 다양한 선택 사항과 기능을 지원합니다.

    따라서 OpenSSH는 SSH 프로토콜을 사용한 원격 접속에 가장 이상적인 도구라고 볼 수 있습니다. OpenSSH는 도청, 연결 하이재킹 및 기타 공격을 제어하기 위해 모든 드래픽을 암호화 합니다. 그리고 대규모 보안 터널링, 다양한 인증, 정교한 옵션 구성을 제공합니다.

    OpenSSH 제품군은 다음 도구로 구성됩니다.

    • 원격 작업은 ssh , scp 및 sftp 를 사용하여 수행됩니다 .
    • ssh-add , ssh-keysign , ssh-keyscan 및 ssh-keygen 을 사용한 키 관리 .
    • 서비스 측은 sshd , sftp-server 및 ssh-agent 로 구성 됩니다.

    2) OpenSSH 특징

    OpenSSH는 완전한 오픈 소스 프로젝트로 인터넷을 통해 누구나 무료로 사용할 수 있습니다. 코드 재사용 및 코드 검토를 통해 누구나 버그를 찾고 수정할 수 있습니다. OpenSSH는 모든 목적으로 사용할 수 있으며 여기에는 상업적 사용이 포함됩니다. 

    강력한 암호화(AES, ChaCha20, RSA, ECDSA, Ed25519…)는 인증 전에 시작되며 암호나 기타 정보는 암호화되지 않은 상태로 전송됩니다. 다양한 암호 및 키 유형을 사용할 수 있으며 레거시 옵션은 일반적으로 합리적인 시간 내에 단계적으로 제거됩니다.

    X11 전달은 원격 X Windows 트래픽의 암호화를 허용하므로 아무도 원격 xterm을 스누핑하거나 악의적인 명령을 삽입할 수 없습니다. 프로그램은 서버 시스템에서 자동으로 디스플레이를 설정하고 보안 채널을 통해 모든 X11 연결을 전달합니다. 

    포트 포워딩(레거시 프로토콜을 위한 암호화된 채널)을 사용하면 암호화된 채널을 통해 TCP/IP 연결을 원격 시스템으로 포워딩할 수 있습니다. POP와 같은 안전하지 않은 인터넷 응용 프로그램을 보호할 수 있습니다.

    강력한 인증(공개 키, 일회용 암호)은 IP 스푸핑, 가짜 경로 및 DNS 스푸핑과 같은 여러 보안 문제로부터 보호합니다. 일부 인증 방법에는 공개 키 인증, s/key를 사용한 일회용 암호 및 Kerberos를 사용한 인증(-portable에서만)이 포함됩니다.

    에이전트 포워딩은 사용자의 랩탑 또는 로컬 워크스테이션에서 실행되는 인증 에이전트를 사용하여 사용자의 인증 키를 보유할 수 있습니다. OpenSSH는 모든 연결을 통해 자동으로 연결을 인증 에이전트로 전달하며 네트워크의 모든 시스템(사용자 자신의 로컬 시스템 제외)에 인증 키를 저장할 필요가 없습니다. 

    선택적 데이터 압축은 암호화 전에 데이터를 압축하면 느린 네트워크 링크의 성능이 향상됩니다.

    2.  OpenSSH 설치 및 확인

    1) OpenSSH 설치

    설치부터 함께 했다면 SSH는 설치되어 있습니다. 터미털에서 현재 상태를 확인하기 위해서 systemctl 명령어로 확인합니다.

    sudo systemctl status ssh
    ssh openssh
    [Step 1] OpenSSH 상태 확인

    OpenSSH를 설치 했지만 서비스는 ssh.service로 작동합니다. 이미지의 Cgroup부분을 면 /system.slice/ssh.service로 나와 있습니다. 실제 설치된 패키지를 확인해 보겠습니다. apt list 명령을 활용해서 openssh와 관련해 설치된 패키지를 확인하면 3개의 패키지가(openssh-client, openssh-server, open-sftp-server) 설치되 있습니다.

    sudo apt list openssh*
    ssh openssh
    [Step 2] ssh.service enable

    외부에서 원격으로 접속하기 위해서는 openssh-server가 반드시 설치되어 있어야 합니다. 만약 설치가 되지 않았다면 다음 명령어로 openssh-server를 설치합니다. 그리고 부팅시 자동 실행되도록 enable 합니다.

    sudo apt install openssh-server
    ssh openssh
    [Step 3] openssh 설치
    sudo systemctl enable ssh
    ssh openssh
    [Step 4] ssh.service enable

    재부팅 후 ssh가 서비스되고 있는지 확인합니다.

    reboot
    sudo systemctl status ssh
    ssh openssh
    [Step 5] OpenSSH 상태 확인

    3.  SSH 원격 접속을 위한 MobaXterm 설치

    1) MobaXterm 특징

    MobaXterm은 원격 접속 프로그램으로 Windows 응용 프로그램에서 프로그래머, 웹마스터, IT 관리자가 보다 간단한 방식으로 원격 작업을 위해 맞춤화된 많은 기능을 제공합니다.

    MobaXterm은 모든 중요한 원격 네트워크 도구 (SSH, X11, RDP, VNC, FTP, MOSH, …) 및 Unix 명령 (bash, ls, cat, sed, grep, awk, rsync, …)을 Windows 데스크탑에 제공합니다.

    SSH 를 사용하여 원격 서버에 연결할 때 원격 파일을 직접 편집하기 위해 그래픽 SFTP 브라우저 가 자동으로 팝업됩니다. MobaXterm Home Edition을 무료로 다운로드하여 사용할 수 있습니다. 

    2) MobaXterm 다운로드

    MobaXterm 웹사이트에 접속하여 설치 파일을 다운로드 합니다.  파일은 installer edition과 portable edition으로 구분되는데 여기서는 installer edition으로 진행하겠습니다.

    웹페이지 : MobaXterm free Xserver and tabbed SSH client for Windows (mobatek.net)

    다운로드 페이지 : https://mobaxterm.mobatek.net/download-home-edition.html

    MobaXterm
    [Step 1] MobaXterm 사이트
    MobaXterm
    [Step 2] Home Edition 선택
    MobaXterm
    [Step 3] Installer edition 다운로드

    3) MobaXterm 설치

    MobaXterm 압축 파일을 해제하고 설치를 진행합니다.

    MobaXterm
    [Step 4] MobaXtrm 설치 프로그램 실행
    [Step 5] 동의하고 Next 클릭
    MobaXterm
    [Step 6] 기본 폴더 선택하고 Next 클릭
    MobaXterm
    [Step 7] Install 클릭
    MobaXterm
    [Step 8] 설치 진행 중
    MobaXterm
    [Step 9] Finish 클릭하여 설치 종료

    4) MobaXterm 실행

    MobaXterm 실행하면 다음과 같이 프로그램이 실행됩니다. 여기서는 창을 종료하고 접속이 가능하도록 포트 및 방화벽을 설정하도록 하겠습니다.

    MobaXterm
    [Step 10] MobaXtrm 실행 창

    함께 읽으면 좋은 글

  • Ubuntu 방화벽 iptables 설정 및 관리

    Ubuntu 방화벽 iptables 설정 및 관리

    1.  iptables 방화벽 이해 및 설치

    여기서는 Ubuntu 방화벽 iptables 설정 및 관리에 대해 이야기 합니다. 방화벽 관리의 대부분은 네트워크에 트래픽 제한을 적용할 개별 규칙 및 정책을 결정하는 것입니다. 

    Ubuntu는 기본 방화벽으로 ufw를 제공하고 있으나 iptables을 사용하면 규칙이 적용되는 구조적 프레임워크를 상세하게 관리할 수 있습니다.

    우선 ufw 방화벽 사용을 중지하고 iptables 패키지를 활용하여 방화벽을 구성하는 방법으로 진행됩니다. iptables은 합리적인 기본값을 제공하고 확장성을 장려하는 프레임워크를 설정하는 데 중점을 두고 있습니다.

    2. Iptables 설정(초기)

    방화벽은 두 가지 방법 중 하나로 구성할 수 있습니다. 기본 규칙을 설정하여 특정 규칙으로 원치 않는 트래픽을 허용한 다음 차단하거나 규칙을 사용하여 허용된 트래픽을 정의하고 다른 모든 것을 차단할 수 있습니다. 후자는 클라우드 서버에 액세스하려고 시도해서는 안 되는 연결을 반응적으로 거부하지 않고 선제적으로 트래픽을 차단할 수 있으므로 종종 권장되는 접근 방식입니다.

    1) iptables 현재 규칙 확인

    Ubuntu 서버는 어떠한 제한도 적용되지 않지만 나중에 참조할 수 있도록 현재 iptables 규칙을 확인합니다. 리스트 확인은 -L 옵션 또는 -S옵션으로 확인할 수 있습니다. -L 옵션은 체인에 대한 규칙의 리스트화 하여 보여주는 반면 -S 옵션은 체인을 출력합니다.

    출력하면 input, forward, output의 세가지 체인 목록이 출력됩니다. 체인 이름은 각 목록의 규칙이 적용될 트래픽을 나타내며, 입력은 클라우드 서버로 들어오는 모든 연결입니다. 출력은 외부로 나가는 모든 트래픽이며 통과하는 모든 트래픽에 대한 연결입니다. 또한 트래픽이 특정 규칙과 일치하지 않는 경우 트래픽 처리 방법을 결정하는 정책 설정이 있으며 기본적 설정은 허용입니다.

    • PREROUTING: 패킷들은 라우팅 결정이 만들어지기 전에 이 체인에 포함됩니다..
    • INPUT: 패킷이 로컬상에서 전달될 경우 체인의 규칙을 따릅니다.
    • FORWARD: 라우팅되고 로컬 전달이 아닌 모든 패킷들은 전달됩니다.
    • OUTPUT: 서버에서 보내진 패킷들의 경우 체인의 규칙을 따릅니다.
    • POSTROUTING: 라우팅 결정이 만들어졌을 때, 패킷들은 하드웨어에 보내지기 전에 이 체인에 들어옵니다.
    sudo iptables -L
    sudo iptables -S
    iptables 설정
    [Step 1] 현재 설정 확인

    2) 모든 규칙 삭제

    현재 설정된 모든 규칙을 삭제합니다. -F 옵션은 모든 체인에 포함되어 있는 규칙을 삭제합니다. -X 옵션은 사용자 정의된 체인을 모두 삭제합니다.

    -F 옵션과 -X 옵션으로 모든 체인을 삭제합니다. 모든 규칙을 삭제하고 체인에 연결된 규칙이 있는지 -L 옵션과 -S 옵션으로 확인합니다. 초기 설치 후 명령어를 실행했다면 설정된 규칙이 없기 때문에 출력은 동일합니다.

    sudo iptables -F
    sudo iptables -X
    sudo iptables -L
    sudo iptables -S
    iptables 설정
    [Step 2] 모든 체인 삭제

    3) 로컬 체인 추가

    로컬 네트워크에 접속이 가능하도록 체인을 추가합니다. 체인을 추가 할때는 -A 옵션을 사용합니다. -i 옵션은 네트워크 인터페이스 이름을 지정하는 옵션입니다.

    sudo iptables -A INPUT -i lo -j ACCEPT
    iptables 설정
    [Step 3] 로컬 연결 추가

    4) 인바운드 트래픽 규칙 추가

    iptables 사용을 시작하려면 먼저 필요한 서비스에 대해 허용된 인바운드 트래픽에 대한 규칙을 추가해야 합니다. iptables는 연결 상태를 추적할 수 있으므로 아래 명령을 사용하여 설정된 연결을 계속할 수 있습니다. related, established 패킷의 접속을 허용하는 규칙을 추가하며 이는 필요한 서비스에 대해 허용하도록 설정된 연결입니다.

    sudo iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
    iptables 설정
    [Step 4] 서비스 연결 허용

    5) 규칙 저장 및 재시작

    체인을 추가했다고 바로 반영되는 것은 아닙니다. reload 명령어를 사용해서 저장된 체인이 반영되도록 해야 합니다. 하지만 reload 명령어만 사용하면 재시작 된 이후에는 추가된 체인이 사라지게 됩니다. 따라서 변경한 체인을 저장하고 재시작해야 합니다.

    저장은 service+netfilter-persistent+save 명령어로 실행합니다. netfilter-persistent 명령은 flush, force-reload, reload, restart, save, start ,stop의 실행 명령어로 구성되어 있습니다.

    변경된 체인을 저장하고 반영합니다.

    sudo service netfilter-persistent save
    sudo service netfilter-persistent reload
    iptables 설정
    [Step 5] 설정 저장 및 재시작

    3. Iptables 설정(사용법)

    • iptables – [ACD] 체인 규칙 사양 [옵션]
    • iptables -I 체인 [규칙 번호] 규칙 사양 [옵션]
    • iptables -R 체인 규칙 번호 규칙 사양 [옵션]
    • iptables -D 체인 규칙 번호 [옵션]
    • iptables -[LS] [체인 [규칙 번호]] [옵션]
    • iptables – [FZ] [체인] [옵션]
    • iptables -[NX] 체인
    • iptables -E 이전 체인 이름 새 체인 이름
    • iptables -P 체인 타겟 [옵션]
    • iptables -h 도움말 출력

    5. Iptables 설정(명령어)

    • –append -A chain      :  체인에 추가
    • –check -C chain          :  체인의 규칙 존재 여부 확인
    • –delete -D chain        :  일치하는 체인 규칙 삭제
    • –delete  -D chain rulenum : 체인의 룰 번호로 삭제  
    • –insert  -I chain [rulenum]  :  규칙 번호로 체인에 삽입 (기본값 1 = 첫 번째)
    • –replace -R chain rulenum : 체인에서 규칙 규칙 번호(1 = 첫 번째) 바꾸기
    • –list -L [chain [rulenum]] : 체인 또는 모든 체인의 규칙 나열
    • –list-rules -S [chain [rulenum]] :  체인 또는 모든 체인에서 규칙 인쇄
    • –flush -F [chain] : 체인의 모든 규칙 또는 모든 체인 삭제
    • –zero -Z [chain [rulenum]] : 체인 또는 모든 체인의 제로 카운터
    • –new -N chain : 새 사용자 정의 체인 만들기
    • –delete-chain -X [chain] : 사용자 정의 체인 삭제
    • –policy  -P chain target : 체인에서 대상으로 정책 변경
    • –rename-chain -E old-chain new-chain : 체인 이름 변경(참조 이동)

    6. Iptables 명령어(옵션)

    • –ipv4  -4  :  없음(ip6tables-restore에서 라인이 무시됨)
    • –ipv6  -6  :  오류(iptables-restore에서 라인이 무시됨)
    • –protocol  -p proto  : 프로토콜 번호 또는 이름으로, 예. `tcp’
    • –source  -s : address[/mask][…]   소스 사양
    • –destination  -d : address[/mask][…]   대상 지정
    • –in-interface  -i : 입력 name[+]  네트워크 인터페이스 name ([+] for wildcard)
    •  –jump  -j : 대상, 규칙의 대상(대상 확장 프로그램을 로드할 수 있음)
    • –goto  -g :   체인, 리턴 없이 체인으로 점프
    • –match  -m : 일치 확장 일치(확장 프로그램을 로드할 수 있음)
    • –numeric  -n : 주소 및 포트의 숫자 출력
    • –out-interface  -o : 출력 name[+]  네트워크 인터페이스 name ([+] for wildcard)
    • –table  -t : 테이블, 조작할 테이블 (default: `filter’)
    • –verbose  -v : 자세한 정보 표시 모드
    • –wait  -w [seconds] : 포기하기 전에 xtables 잠금을 획득하기 위한 최대 대기 시간
    • –wait-interval -W [usecs] :xtables 잠금을 획득하기 위한 대기 시간 기본값은 1초
    • –line-numbers : 나열할 때 줄 번호 인쇄
    • –exact  -x : 숫자 확장(정확한 값 표시)
    • –fragment  -f : 두 번째 또는 추가 조각만 일치
    • –modprobe=<command>  : 이 명령을 사용하여 모듈을 삽입
    • –set-counters PKTS BYTES :  삽입/추가 중에 카운터 설정
    • –version   -V : 패키지 버전 출력

    7. Iptables 포트 활용

    1) openssh 포트


     

    함께 읽으면 좋은 글

  • Ubuntu 방화벽 iptables 설치 및 활성화

    방화벽은 서버 보안에서 중요한 단계로 iptables 설치 및 활성화를 다룹니다. 방화벽 관리의 대부분은 네트워크에 트래픽 제한을 적용할 개별 규칙 및 정책을 결정하는 것입니다. 

    1.  iptables 방화벽 이해 및 사전 준비

    Ubuntu는 기본 방화벽으로 ufw를 제공하고 있으나 iptables을 사용하면 규칙이 적용되는 구조적 프레임워크를 상세하게 관리할 수 있습니다.

    우선 ufw 방화벽 사용을 중지하고 iptables 패키지를 활용하여 방화벽을 구성하는 방법으로 진행됩니다. iptables은 합리적인 기본값을 제공하고 확장성을 장려하는 프레임워크를 설정하는 데 중점을 두고 있습니다.

     1) 사전 준비

    ufw 방화벽 상태를 확인하고 방화벽을 중지합니다. Ubuntu 설치부터 함께 따라왔다면 ufw 방화벽을 active(활성화) 되어 있습니다. 이때 sudo ufw status 명령을 입력하면 inactive(비활성화)로  나옵니다. iptables을 설치하는데 ufw 방화벽을 비활성화하지 않는다면 충돌이 발생합니다. 서비스를 관리하는 명령어는 systemctl 또는 [서비스명.service]의 형태로 관리할 수 있습니다.

    2) ufw 상태 확인

    sudo systemctl status ufw
    [Step1] ufw 상태 확인

    3) ufw 중지 및 비활성화

    서비스를 중지는 stop 명령어를 활용할 수 있지만 stop은 시작 활성화에 영향을 미치지 않습니다. 반면 disable 명령은 시작 시 서비스를 비활성화시키며 –now 명령어를 추가면 즉시 반영됩니다. 아래 명령어로 ufw 서비스를 비활성화하고 reboot 명령으로 재시작 합니다.

    sudo systemctl disable --now ufw
    reboot
    [Step2] ufw 비활성화
    sudo systemctl status ufw
    [Step3] ufw 상태 확인

    2.  iptables 설치 및 활성화 문제 확인

    1) iptables 설치(iptables-persistent)

    ufw를 중지했다면 iptables 패키지를 설치합니다. Iptables 설치 후 규칙 세트를 저장하고 부팅 시 자동으로 적용되도록 할 수 있습니다.

    sudo apt install iptables-persistent
    [Step4] Y를 입력하여 계속 진행
    [Step5] IPv4 rules에 대해 YES 선택 후 Enter
    [Step6] IPv6 rules에 대해 YES 선택 후 Enter

    2) iptables 시작 시 활성화(enable)

    • Iptables 상태 확인
    sudo systemctl status iptables
    [Step7] iptables 상태 확인
    • Iptables 상태 시작 시 활성화
    sudo systemctl enable iptables
    reboot
    [Step8] iptables 활성화 명령어 및 재시작

    3) iptables 활성화 문제 확인(시작 시 자동 활성화 안됨)

    • Iptables 상태 확인

    ubuntu 20에서는 정상적으로 활성화되지만 ubuntu 22에서는 활성화가 안되어 있습니다. iptables의 상태를 확인하면 별칭(alias)이 등록되어 있지 않기 때문에 별칭을 등록해야 합니다.

    sudo systemctl status iptables
    [Step9] iptables 상태 확인

    3.  iptables 별칭 등록 및 시작 시 활성화

    1) Iptables 시작 활성화를 위한 별칭(alias) 등록

    iptables.service의 위치는 상태에서 확인이 가능하고 nano 편집기로 파일을 불러옵니다. vi 편집기를 사용해도 무방합니다. 파일 아래쪽 [install] 하단에 별칭을 등록해 줍니다. 여기서는 Alias=iptables.service로 등록합니다.

    sudo nano /lib/systemd/system/iptables.service
    [Step10] iptables 서비스 alias 등록
    [Step11] 편집기를 활용하여 내용 추가(Alias=iptables.service)

    Iptables를 비활성화 후 다시 활성화를 진행합니다. 이때 –now 명령을 추가하면 활성화와 함께 서비스가 함께 실행됩니다.

    sudo systemctl disable iptables
    sudo systemctl enable iptables

    2) 재시작 후 서비스 활성화 확인

    서버를 재시작하여 서비스가 시작 시 활성화 되는지 확인합니다. 아래 이미지처럼 netfilter-persistent.service와 dependency 충돌이 발생하면 netfilter-persistent.service를 재시작합니다. systemctl 명령어로 iptables 서비스가 정상적으로 활성화 된 것을 확인할 수 있습니다.

    reboot
    sudo systemctl status iptables
    sudo systemctl restart netfilter-persistent.service
    [Step12] 재시작 후 iptables 자동 활성화 확인

    3.  iptables 모든 연결 차단

    앞의 설정은 INPUT, FORWARD, OUTPUT가 모두 허용된 설정입니다. INPUT, FORWARD는 모두 닫아 주도록 하겠습니다. 구성을 출력하면 INPUT, FORWARD가 닫힘으로 표시되어 있습니다. 앞으로 서비스를 추가하면 관련 서비스에 대한 포트만 오픈하여 실행되도록 하겠습니다.

    sudo iptables -P INPUT DROP
    sudo iptables -P FORWARD DROP
    sudo iptables -S
    [Step13] INPUT, FORWARD DROP

    변경된 설정을 저장하고 reload 합니다. reload는 재시작하지 않고 규칙을 적용하기 위한 명령입니다. 다음 코드를 실행하지 않으면 변경한 정보가 ubuntu 재시작시 적용되지 않습니다.

    sudo netfilter-persistent save
    sudo netfilter-persistent reload

    함께 읽으면 좋은 글

  • ubuntu update 및 upgrade

    ubuntu update 및 upgrade

    1. Update와 Upgrade

    Ubuntu를 최신 상태로 유지하기 위해서 update 또는 upgrade 명령어를 사용합니다. Update와 upgrade가 같을 수도 있지만 차이가 있습니다. update 명령어는 패키지가 최신 버전으로 변경되는 것이 아니라 시스템에서 사용할 수 있는 최신 버전에 대한 정보를 가져오는 것입니다.

    즉, 패키지를 다운로드 하거나 설치하는 것은 아닙니다. 패키지를 다운로드하고 설치하려면 upgrade 명령어를 사용해야 합니다. 시스템은 사용 가능한 패키지 데이터베이스에서 작동합니다.

    데이터베이스에는 패키지가 포함되지 않고 패키지의 메타데이터(버전, 리포지토리, 종속성 등)만 포함됩니다. 따라서 데이터베이스를 업데이트하지 않으면 시스템은 사용 가능한 최신 패키지가 있는지 여부를 알 수 없습니다.

    Update와 upgrade는 관리 명령으로 root 권한으로 실행해야 합니다. sudo를 사용하면 Ubuntu 루트로 명령을 실행할 수 있습니다. 따라서 두 명령 모두에 root로 로그인하거나 sudo를 사용합니다. 

    1) apt update

    apt update 명령으로 패키지에서 업데이트된 메타 데이터를 가져옵니다. 로컬 패키지 캐시가 업데이트 되며 업그레이드할 수 있는 패키지를 확인할 수 있습니다.

    apt update: 패키지 캐시를 업데이트 합니다(설치하거나 업그레이드할 수 있는 패키지 버전을 파악)

    • 패키지 업데이트
    sudo apt update

    패키지 캐시를 업데이트 할 때 apt와 apt-get 명령어를 사용할 수 있습니다. 두 명령어는 동일하지만 차이가 있다면 apt 명령어는 업그레이드 가능한 패키지의 개수를 표시해 줍니다. 여기서는 59개의 업그레이드 가능한 패키지가 있는 것으로 표시되고 있습니다.

    sudo apt update
    [Step 1] 업그레이드 이전 패키지 캐시 업데이트

    2) apt upgrade

    sudo apt upgrade로 모든 (업그레이드 가능한) 패키지를 업그레이드할 수 있습니다. Enter 또는 Y 키를 눌러 업그레이드를 진행하거나 N을 눌러 취소할 수 있습니다.

    apt upgrade: 패키지를 새 버전으로 업그레이드

    • 패키지 업그레이드 목록 보기
    sudo apt list --upgradeable

    sudo get upgrade 명령으로 전체 패키지를 업그레이드 할 수도 있지만 그전에 업그레이드가 가능한 패키지가 무엇인지 리스트를 확인할 수 있습니다.

    sudo apt list --upgradeable
    [Step 1] 업그레이드 가능한 목록 확인 명령어
    sudo apt upgrade
    [Step 2] 업그레이드 가능한 패키지 목록 출력 결과
    • 패키지 업그레이드
    sudo apt upgrade

    업그레이드를 시작 전에 계속 여부를 묻습니다. 업그레이드를 진행하려면 Y, 취소하려면 n를 입력하고 enter를 누릅니다. 여기서는 업그레이드 진행을 위해 Y를 입력하고 계속 진행합니다.

    sudo apt upgrade
    [Step 3] 업그레이드 실행 명령어
    sudo apt upgrade
    [Step 4] 업그레이드 진행

    업그레이드가 완료되면 서비스 재시작을 묻는 창이 표시됩니다. 여기서는 OK를 선택하고 계속합니다. 업그레이드가 완료되면 재시작된 서비스를 확인할 수 있습니다.

    sudo apt upgrade
    [Step 5] 업그레이드 완료 및 서비스 재시작

    sudo apt update 명령어를 다시 입력해보면 업그레이드 가능한 패키지가 없는 것을 확인할 수 있습니다.

    sudo apt upgrade
    [Step 6] 패키지 캐시 업데이트 및 업그레이드 가능 패키지 확인

    함께 읽으면 좋은 글

  • Ubuntu 22.04.1 설치(VirtualBox)

    Ubuntu 22.04.1 설치(VirtualBox)

    1. 가상 PC(이하 ubuntu 서버) 실행

    ubuntu 설치는 설정된 가상 환경을 실행하여 진행합니다. Ubuntu 22.04 버전은 설치 시에 한글 설치가 불가능하기 때문에 설치를 완료하고 한글 입력기를 추가로 설치해야 한글을 사용할 수 있습니다.

    • VirtualBox 관리자를 실행하고 상단 메뉴에서 시작을 클릭합니다.
    ubuntu 설치
    [Step1] VirtualBox 관리자 화면 실행
    ubuntu 설치
    [Step2] VirtualBox 시작 메뉴 클릭

    2. Ubuntu 설치

    • IDE 컨트롤러에 장착된 ubuntu iso 이미지를 로딩하여 설치 화면으로 연결됩니다.
    ubuntu 설치
    [Step1] ubuntu 설치 초기 화면
    • 언어 설정에서 한글이 없어 영어로 설치합니다.
    ubuntu 설치
    [Step2] ubuntu 설치 언어 설정
    • Installer는 업데이트 없이 계속합니다.
    ubuntu 설치
    [Step3] 업데이트 없이 계속
    • 키보드 언어는 English를 선택하고 완료를 클릭합니다.
    ubuntu 설치
    [Step4] 키보드 언어 영어로 설정
    • Ubuntu 설치 타입은 Ubuntu Server를 선택하고 완료를 클릭합니다.
    ubuntu 설치
    [Step5] ubuntu server 기본 옵션 선택
    • 네트워크 설정은 기본 설정으로 진행합니다. 자동으로 설정된 IP주소는 Virtualbox에서 할당된 주소입니다.
    ubuntu 설치
    [Step6] 네트워크 설정
    • Proxy 설정의 proxy 주소는 입력하지 않고 완료를 클릭합니다.
    ubuntu 설치
    [Step7] proxy address 설정
    • Ubuntu archive mirror은 기본 설정을 선택하고 완료를 클릭합니다.
    ubuntu 설치
    [Step8] ubuntu archive mrrior address 설정
    • 스토리지 설정은 구성에 따라 사용자 스토리지 레이아웃으로 설정해도 되지만 여기서는 신규 디스크를 사용하기 때문에 기본 설정으로 선택하고 완료를 클릭합니다.
    ubuntu 설치
    [Step9] Storage 설정
    • 기본으로 구성된 파티션이 보여지는데 root 파티션과 boot 파티션이 20G 구성되어 있고 비어 있는 공간(free space)가 20G 있는 걸 확인할 수 있습니다.
    ubuntu 설치
    [Step10] 파티션 구성 확인
    • 할당되지 않은 공간을 /home 디렉토리로 구성하기 위해 Create Logical Volume를 선택합니다.
    ubuntu 설치
    [Step11] 논리 볼륨 생성
    • 아래와 같이 home으로 이름을 작성하고 최대 공간을 할당합니다. 비워두면 자동으로 최대 공간으로 할당됩니다. Format 방식은 ext4, Mount는 /home으로 선택하고 Create를 클릭합니다.
    ubuntu 설치
    [Step12] /home 디렉토리 설정
    • 파티션 구성 정보에서 /home 디렉토리가 추가된 것을 확인할 수 있습니다. 완료를 클릭합니다.
    ubuntu 설치
    [Step13] 변경된 파티션 확인
    • 확인 창에서 Continue를 선택하고 클릭합니다.
    ubuntu 설치
    [Step14] 설정 저장 및 계속 진행
    • Ubuntu의 이름과 서버 이름을 입력합니다. 추가로 사용자 이름과 패스워드도 함께 입력합니다. 여기서 입력된 사용자 이름과 패스워드는 로그인 아이디와 패스워드로 사용됩니다.
    ubuntu 설치
    [Step15] 이름 설정 및 사용자 등록
    • OpenSSH Server는 외부에서 SSH 프로그램을 활용해서 접속을 위한 패키지 입니다. 터미널 접속을 위해서 OpenSSH server는 선택하고 완료를 클릭합니다.
    ubuntu 설치
    [Step16] OpenSSH 설치
    • 추가로 구성할 Server Snaps를 선택합니다. 여기서는 설치하지 않고 완료를 클릭합니다.
    ubuntu 설치
    [Step17] 추가 서버 패키지 설치
    • 설치가 시작되며 설치 내용을 보고 싶으면 view full log를 클릭하면 됩니다.
    ubuntu 설치
    [Step18] 설치 진행
    • 설치가 완료되면 Cancel update and reboot 메뉴가 보이며 클릭하여 서버를 재시작 합니다.
    ubuntu 설치
    [Step19] 설치 완료 및 재부팅
    • 재시작이 완료되면 로그인 터미널이 나타나면 [Step 15]에서 입력한 username과 password로 로그인하면 됩니다.
    ubuntu 설치
    [Step20] 설치 완료 및 사용자 로그인
    • 로그인이 완료되면 ‘사용자명@호스트명:~’의 터미널을 입력 명령 줄이 나타나며 설치가 완료되었습니다.

    함께 읽으면 좋은 글

  • ubuntu 다운로드 및 ubuntu 설정(virtualbox)

    ubuntu 다운로드 및 ubuntu 설정(virtualbox)

    1. Ubuntu 소개 및 다운로드

    1) Ubuntu란?

    Ubuntu 설정은 ubuntu 22.04.1 LTS 버전으로 진행합니다. Ubuntu는 인터넷의 백본으로 설계 및 엔지니어링된 Linux 배포용 오픈 소스 운영 체제입니다. Ubuntu Server는 공개 또는 비공개 데이터 센터에 경제적 및 기술적 확장성을 제공합니다. 특히 OpenStack 클라우드, Kubernetes 클러스터 또는 50,000노드 렌더 팜을 배포하려는 경우 Ubuntu Server는 사용 가능한 최고의 가치 확장 성능을 제공합니다. ubuntu 설치는 22.04.1 LTS 버전으로 진행합니다.

    Ubuntu에는 코어, 서버 및 데스크톱을 포함하여 다양한 유형의 시스템에서 실행할 수 있는 여러 에디션이 있습니다. 각각의 에디션은 개인용 컴퓨터, 서버, 슈퍼컴퓨터, 클라우드 컴퓨팅 등에서 사용할 수 있습니다.

    Ubuntu는 안전하고 사용하기 쉬운 무료 오픈 소스 솔루션으로 사용자에게 매력적 운영체제입니다. 또한 사용자 친화적이고 사용자 정의가 가능하며 OS 내에서 향상된 보안을 제공합니다.

    2) Ubuntu 서버와 데스크탑의 차이

    Ubuntu Server Edition 및 Ubuntu Desktop Edition 은 동일한 apt 리포지토리를 사용하므로 Server Edition에서와 마찬가지로 Desktop Edition에 서버 응용 프로그램을 쉽게 설치할 수 있습니다.

    한 가지 주요 차이점은 Desktop Edition에 사용되는 그래픽 환경이 서버용으로 설치되지 않는다는 것입니다. 여기에는 그래픽 서버 자체, 그래픽 유틸리티 및 응용 프로그램, 데스크탑 사용자에게 필요한 다양한 사용자 지원 서비스가 포함됩니다.

    3) Ubuntu 설치 시스템 요구사항

    Ubuntu Server Edition은 파일/인쇄 서비스, 웹 호스팅, 이메일 호스팅 등과 같은 다양한 서버 응용 프로그램을 위한 공통적이고 미니멀한 기반을 제공합니다. Ubuntu Server Edition 버전은 4개의 64비트 아키텍처를 지원합니다.

    • amd64(인텔/AMD 64비트)
    • arm64(64비트 ARM)
    • ppc64el(POWER8 및 POWER9)
    • s390x(IBM Z 및 LinuxONE)
    • CPU: 1GHz 이상
    • RAM: 1GB 이상
    • 디스크: 최소 2.5GB

    4) Ubuntu 설치 준비

    Ubuntu Server Edition을 설치하기 전에 시스템의 모든 데이터가 백업되었는지 확인해야 합니다. 컴퓨터에 운영 체제를 처음 설치한 것이 아니라면 Ubuntu를 위한 공간을 만들기 위해 디스크를 다시 분할해야 할 수 있습니다.

    Ubuntu 다운로드 및 설치, 가상 머신 ubuntu 설정
    [Step 1] 사이트 접속
    Ubuntu 다운로드 및 설치, 가상 머신 ubuntu 설정
    [Step 2] 다운로드 메뉴로 이동
    Ubuntu 다운로드 및 설치, 가상 머신 ubuntu 설정
    [Step 3] 초록색 다운로드 버튼 클릭(Download Ubuntu Server 22.04.1 LTS)
    Ubuntu 다운로드 및 설치, 가상 머신 ubuntu 설정
    [Step 4] 다운로드 시작

    2. Virtualbox에 가상 머신 ubuntu 설정

    1) Ubuntu 설정

    가상 머신 Ubuntu 설정은 자신의 호스트 컴퓨터 사양에 따라서 적절한 수준으로 진행하면 됩니다.

    가상 머신 ubuntu 설정
    [Step 1] virtualbox 관리자 실행

    가상 머신의 이름, 저장 폴더, 다운받은 ubuntu iso 이미지를 선택합니다.

    가상 머신 ubuntu 설정
    [Step 2] virtualbox 관리자 메뉴에서 새로 만들기 클릭

    호스트 컴퓨터 사양을 고려하여 가상 머신에서 사용할 기본 메모리와 Processors의 개수를 설정합니다.

    가상 머신 ubuntu 설정
    [Step 2] virtualbox 관리자 메뉴에서 새로 만들기 클릭

    기존 가상 디스크를 사용할 수도 있지만 여기서는 가상 디스크를 생성합니다.

    가상 머신 ubuntu 설정
    [Step 2] virtualbox 관리자 메뉴에서 새로 만들기 클릭
    가상 머신 ubuntu 설정

    설정이 완료되면 VirtualBox 관리자 메뉴에서 가상 PC의 하드웨어 구성을 확인할 수 있습니다.

    가상 머신 ubuntu 설정

    함께 읽으면 좋은 글

  • VirtualBox 버추얼박스 가상머신 다운로드 및 설치

    VirtualBox 버추얼박스 가상머신 다운로드 및 설치

    1. 가상 머신(Virtual Machine)이란?

    VirtualBox(버추얼박스)는 무료 소프트웨어로 누구나 사용할 수 있는 Virtual Machine입니다. 가상 머신()은 물리적 하드웨어 시스템에 생성된 자체 CPU, 메모리, 네트워크 인터페이스 및 스토리지가 있는 가상 환경입니다. KVM(커널 기반 가상 머신)과 같은 하이퍼 바이저가 장착된 물리적 머신을 호스트 머신, 호스트 컴퓨터, 호스트 운영 체제 또는 간단히 호스트라고 합니다.

    하이퍼 바이저는 CPU, 메모리 및 스토리지와 같은 컴퓨팅 리소스를 기존 게스트 간에 또는 새 가상 머신으로 쉽게 재배치할 수 있습니다. 가상머신은 리소스를 많이 사용하는 3D, 그래픽, 물리엔진 등에 활용하기에는 적합하지 않습니다.

    가상머신은 MacOS, Linux, Windows 등 다양한 운영 체제를 설치할 수 있으며 각각의 운영체제는 물리적 환경과 유사하게 구성됩니다.

    1) 가상 머신 종류

    가상 머신은 호스트 PC의 운영체제에 따라 다양한 소프트웨어가 있습니다. 다음은 무료로 사용할 수 있는 가상 머신 소프트웨어 입니다. 여기서는 VirtualBox 소프트웨어를 활용하여 가상환경을 구축하겠습니다.

    • Virtualization Manager
    • VM Monitor
    • VMware Fusion (Mac)
    • Parallels
    • VMware Workstation Player
    • Hyper-V
    • VirtualBox
    • QEMU
    • Gnome Boxes
    • Red Hat Virtualization

    2. VirtualBox(버추얼박스) 이해

    1) VirtualBox 특징

    VirtualBox는 무료 소프트웨어로 누구나 사용할 수 있습니다. VirtualBox는 원래 Innotek GmbH에 의해 만들어졌으며 2008 년 Sun Microsystems에 인수되었으며 2010 년 Oracle에 인수되었습니다.

    VirtualBox는 엔터프라이즈 시각화, 가정용으로 다양한 가상 환경에서 개발이 요구되는 개발자에게 가장 적합한 소프트웨어입니다. VirtualBox는 x86 컴퓨터를 위한 오픈 소스 하이퍼 바이저로 가상 머신의 생성 및 관리를 지원하는 최고의 VM 소프트웨어 중 하나입니다.

    VirtualBox는 윈도우, 리눅스, BSD 및 기타 OS를 설치하고 실행할 수 있습니다. VirtualBox의 주목할 만한 점은 한 호스트에서 다른 호스트로 가상 머신을 전송하는 기능입니다.

    2) VirtualBox 가상화

    VirtualBox의 사용자는 단일 호스트 운영 체제 (호스트 OS)에서 여러 게스트 OS를로드 할 수 있습니다. 각 게스트는 자체 가상 머신 내에서 독립적으로 시작, 일시 중지 및 중지할 수 있습니다.

    사용자는 각 가상 머신을 독립적으로 구성하고 기본 호스트 하드웨어가 지원하는 경우 소프트웨어 기반 가상화 또는 하드웨어 지원 가상화 중에서 선택하여 실행할 수 있습니다.

    호스트 OS와 게스트 OS 및 애플리케이션은 공통 클립보드 및 가상화된 네트워크 기능을 포함한 여러 메커니즘을 통해 서로 통신할 수 있습니다. 게스트 가상 머신은 서로 직접 통신하도록 구성된 경우 통신할 수도 있습니다. 

    3) VirtualBox 기능

    • 창 크기를 조정할 수 있습니다.
    • 다중 화면 해상도를 지원합니다.
    • Windows 10은 드래그 앤 드롭 기능을 지원합니다.
    • PC에서 모든 응용 프로그램을 실행할 수 있는 유연성을 제공합니다.
    • 동일한 컴퓨터에서 여러 게스트 창을 동시에 실행할 수 있습니다.
    • 원활한 모드를 사용하면 macOS 및 Windows 응용 프로그램을 나란히 실행할 수 있습니다.
    • Linux, Mac, Windows, Solaris 및 OpenSolaris 플랫폼을 지원합니다.

    4) 가상화 지원 OS

    • 윈도우 7 이상
    • 윈도우 서버 2012 이상
    • 리눅스 배포판
    • 버전 10.13 하이 시에라에서 10.15 카탈리나까지의 macOS(Intel 기반 Mac에만 해당)
    • 오라클 솔라리스

    5) VirtualBox 링크

    3. VirtualBox(버추얼박스) 설치

    Virtualbox Download
    Virtualbox Download

    2) VirtualBox 설치(Windows hosts 설치)

    Virtualbox Setup
    Virtualbox Setup
    Virtualbox Setup
    Virtualbox Setup
    Virtualbox Setup
    Virtualbox Setup
    Virtualbox Setup

    3) VirtualBox 관리자 실행

    VirtualBox 버추얼박스 execute

    함께 읽으면 좋은 글