달러💰 이렇게 비싸져도 되냐?! AWS를 탈출하고 비용절약하자!

AWS를 사용해오다 자체 서버로 전환한 과정과 이유를 공유합니다. 비용 절감, 보안 강화, 물리 서버 운영의 장점, 그리고 다단계 인증(MFA)을 적용한 방법을 소개합니다. B2B 서비스의 특성을 고려한 성공적인 서버 운영 전략을 확인해보세요.

안녕하세요, 저는 2013년부터 AWS를 사용해왔지만, 최근 회사에서는 자체 서버를 구축하기로 결정했습니다. 오늘은 이 과정과 그 이유, 그리고 여러분께 도움이 될만한 조언들을 공유하려고 합니다.
 

왜 AWS에서 자체 서버로 전환했는가?

AWS는 확장성과 안정성, 보안 측면에서 많은 장점을 가지고 있습니다. 특히, 사용자가 폭증할 때 유연하게 대처할 수 있다는 점이 큰 장점입니다. 그러나 우리의 경우 B2B 서비스를 제공하기 때문에 사용자가 급격하게 늘어날 가능성이 적습니다. B2B의 경우 계약 프로세스에서 계약 건수를 조절할 수 있기 때문에 확장성에 있어 큰 문제가 없습니다. 실제로 해시스크래퍼가 창업된 이후로 그러한 경험을 겪은 적은 없습니다. 따라서, 비용 절감을 위해 자체 서버를 구축하기로 했습니다.
 
해시스크래퍼 본사에 구성한 서버들(맥미니 및 맥북 등)
해시스크래퍼 본사에 구성한 서버들(맥미니 및 맥북 등)
 

전환 과정에서의 도전 과제와 해결 방법

아직 많은 부분을 이전하지는 않았지만, 데이터베이스, 스테이징 서버, 신규 개발 중인 서비스 등을 내부 서버로 옮겼습니다. 현재까지는 큰 어려움 없이 진행되고 있습니다. 물리적인 서버 자원을 잘 활용하면 비용 면에서 큰 이점을 얻을 수 있습니다.
 

자체 서버 운영의 장기적인 이점

자체 서버를 운영함으로써 우리는 비용 절감뿐만 아니라 기존의 물리적 서버 자원을 최대한 활용할 수 있었습니다. 보안 강화나 성능 향상 등도 충분히 달성할 수 있다고 생각합니다.
 

다른 개발자와 IT 회사에 주는 조언

서버 인프라 기술이 계속 발전하면서 인프라 설정과 운영이 더 쉬워졌습니다. GPT 같은 도구를 활용하면 서버 설정에 대한 많은 힌트를 얻을 수 있습니다. 이를 통해 복잡한 가이드를 읽는 시간을 줄이고, 시행착오를 줄여 예전보다 인프라 설정에 큰 시간을 들이지 않아도 됩니다. 물리적 서버를 저렴하게 구입한 후, GPT를 활용해 서버를 구축하면 큰 비용 절감 효과를 기대할 수 있습니다.
 

애플 실리콘 칩과 도커의 활용

또한, 저는 애플 실리콘 칩, 특히 Mac Mini M1이나 M2를 추천합니다. 이 제품들은 가격 대비 성능이 매우 뛰어나며, 안정성도 높습니다. 도커를 이용하면 배포도 매우 쉽게 할 수 있어, 서버 운영을 더 효율적으로 만들 수 있습니다.
 

다단계 인증(MFA)을 통한 보안 강화

자체 서버에서도 AWS에서 제공하는 높은 수준의 보안을 유지하기 위해, 다단계 인증(MFA)을 도입할 수 있습니다. 이를 통해 보안을 한층 강화할 수 있습니다. 다음은 다단계 인증을 자체 서버에 구현하는 방법에 대한 간단한 가이드입니다.
  1. MFA 솔루션 선택: Google Authenticator, Authy, Yubikey와 같은 솔루션을 선택합니다.
  1. 서버 구성: 사용자 인증 흐름에 MFA 단계를 추가합니다. 사용자가 ID와 비밀번호를 입력한 후, MFA 토큰을 입력해야만 로그인할 수 있도록 합니다.
  1. API 통합: MFA 솔루션에서 제공하는 API를 사용하여 애플리케이션 서버와 통합합니다.
  1. 사용자 인터페이스: 로그인 페이지에 MFA 입력 필드를 추가하고, MFA 설정 페이지를 만들어 사용자가 자신의 MFA 장치를 등록하거나 관리할 수 있도록 합니다.
  1. 백엔드 로직: 사용자 인증 시, ID와 비밀번호를 검증한 후 MFA 토큰을 검증하는 단계를 추가합니다.
  1. 테스트 및 배포: 다양한 시나리오에서 테스트를 진행하여 보안이 잘 작동하는지 확인하고, 서버에 변경 사항을 배포합니다.

    추가적인 궁금증

    Q: 자체 서버로 전환하면서 데이터 보안에 대해 어떻게 대비하고 계신가요? AWS는 기본적으로 높은 수준의 보안 서비스를 제공하는데, 자체 서버에서는 이를 어떻게 보완하고 있는지 궁금합니다.
    A: 보안에 있어서는 ChatGPT의 도움을 받아 다양한 보안 조치를 취하고 있습니다. 먼저, 접근 권한 관리 측면에서 IP 대역 설정과 ID 및 패스워드 관리 외에도 다단계 인증을 도입해 보안을 강화했습니다. 물리적 보안 측면에서는 서버가 위치한 데이터 센터의 출입 통제와 감시 시스템을 통해 보호하고 있습니다. 또한, 정기적인 보안 점검과 취약점 분석을 통해 잠재적인 위협을 사전에 차단하고 있습니다. 백업 전략으로는 주기적인 데이터 백업과 외부 스토리지에 대한 저장을 통해 데이터를 안전하게 보호하고 있습니다.
    또한, 물리적 서버를 여러 대 운영하면서 데이터베이스 복제(리플리케이션)를 통해 데이터의 안전성을 높이고 있습니다. 여러 서버에 데이터를 분산하여 운영하기 때문에 백업에 대한 위험 요소가 상당히 줄어들었고, 데이터 손실의 위험을 최소화할 수 있습니다. 웹서버 역시 여러 물리 서버에서 운영함으로써 안정성을 높였습니다.
     
    Q: AWS에서 자체 서버로 이전하는 과정에서 예상치 못한 문제나 추가 비용이 발생한 사례가 있었나요? 그렇다면 이를 어떻게 해결하셨는지도 궁금합니다.
    A: 예상치 못한 문제나 추가 비용 발생 사례로는 초기 서버 설정 과정에서의 호환성 문제와 일부 하드웨어 업그레이드 필요성이 있었습니다. 특히, 기존의 소프트웨어와 하드웨어 간의 호환성 문제로 인해 예상보다 많은 시간과 비용이 소요되었습니다. 이를 해결하기 위해 GPT의 도움을 받아 호환성 문제를 빠르게 진단하고 해결할 수 있었으며, 추가적으로 필요한 하드웨어 업그레이드는 신중한 계획을 통해 비용을 최소화할 수 있었습니다. 전체적으로는 초기 설정 비용이 있었지만, 장기적인 비용 절감 효과는 여전히 매우 긍정적입니다.
     
    Q: 자체 서버로의 전환이 개발자들에게 어떤 영향을 미쳤나요? 팀의 업무 방식이나 효율성에 변화가 있었는지도 궁금합니다.
    A: 자체 서버로의 전환은 개발자들에게 새로운 도전이자 기회가 되었습니다. 처음에는 서버 관리와 설정에 대한 추가 학습이 필요했지만, GPT의 도움을 받아 필요한 지식과 기술을 빠르게 습득할 수 있었습니다. 이 과정에서 팀의 협업이 강화되고, 서버 관련 문제를 해결하는 데 있어 더 많은 주도성을 가지게 되었습니다. 결과적으로, 인프라 관리에 대한 이해도가 높아져 개발 효율성도 향상되었습니다.
     
    Q: 자체 서버 운영을 시작한 후, 시스템의 성능 모니터링과 최적화는 어떻게 진행하고 계신가요?
    A: 우리는 다양한 모니터링 도구를 활용해 시스템 성능을 지속적으로 모니터링하고 있습니다. 주요 성능 지표를 실시간으로 확인하고, 문제가 발생할 경우 자동 알림을 통해 신속하게 대응하고 있습니다. 또한, 주기적인 성능 리뷰와 최적화 작업을 통해 시스템의 안정성과 효율성을 유지하고 있습니다. 이를 통해 서비스 가용성을 높이고, 사용자 경험을 최적화할 수 있었습니다.
     
    MFA 예시 코드 (Python Flask와 Google Authenticator 사용)
    import pyotp from flask import Flask, request, render_template, redirect, url_for, session app = Flask(__name__) app.secret_key = 'supersecretkey' # 사용자별 비밀 키 저장 (데모 목적) user_secret = {} @app.route('/setup_mfa', methods=['GET', 'POST']) def setup_mfa(): if request.method == 'POST': username = request.form['username'] secret = pyotp.random_base32() user_secret[username] = secret otp_uri = pyotp.totp.TOTP(secret).provisioning_uri(username, issuer_name="YourApp") return render_template('qrcode.html', otp_uri=otp_uri) return render_template('setup_mfa.html') @app.route('/verify_mfa', methods=['GET', 'POST']) def verify_mfa(): if request.method == 'POST': username = request.form['username'] token = request.form['token'] totp = pyotp.TOTP(user_secret.get(username)) if totp.verify(token): session['authenticated'] = True return redirect(url_for('protected')) else: return 'Invalid token', 403 return render_template('verify_mfa.html') @app.route('/protected') def protected(): if not session.get('authenticated'): return redirect(url_for('verify_mfa')) return 'Protected content' if __name__ == '__main__': app.run(debug=True)
     
    MFA 예시 코드 (Ruby on Rails와 Google Authenticator 사용)
    # Gemfile gem 'rotp' gem 'rqrcode' # 터미널에서 다음 명령어로 gem을 설치합니다. # bundle install # app/controllers/mfa_controller.rb class MfaController < ApplicationController def setup @username = params[:username] @secret = ROTP::Base32.random_base32 session[:mfa_secret] = @secret totp = ROTP::TOTP.new(@secret, issuer: "YourApp") @qr_code = RQRCode::QRCode.new(totp.provisioning_uri(@username)) end def verify username = params[:username] token = params[:token] totp = ROTP::TOTP.new(session[:mfa_secret]) if totp.verify(token) session[:authenticated] = true redirect_to protected_path else render plain: 'Invalid token', status: :forbidden end end end # config/routes.rb Rails.application.routes.draw do get 'setup_mfa', to: 'mfa#setup' post 'verify_mfa', to: 'mfa#verify' get 'protected', to: 'mfa#protected' end # app/views/mfa/setup.html.erb <%= form_with url: verify_mfa_path, method: :post do %> <%= hidden_field_tag :username, @username %> <%= image_tag RQRCode::QRCode.new(@qr_code).as_png.to_data_url %> <%= label_tag :token, 'Enter MFA Token' %> <%= text_field_tag :token %> <%= submit_tag 'Verify' %> <% end %> # app/controllers/application_controller.rb class ApplicationController < ActionController::Base before_action :authenticate private def authenticate redirect_to verify_mfa_path unless session[:authenticated] end end # app/controllers/mfa_controller.rb class MfaController < ApplicationController skip_before_action :authenticate, only: [:setup, :verify] def protected render plain: 'Protected content' end end
     
    결론
    자체 서버로의 전환은 비용 절감, 보안 강화, 성능 향상 등 여러 가지 이점을 제공합니다. AWS와 같은 클라우드 서비스를 사용하면 높은 확장성과 안정성을 누릴 수 있지만, B2B 서비스처럼 사용자 수가 급격히 변동하지 않는 경우에는 자체 서버 운영이 더 합리적인 선택일 수 있습니다.
    물리적 서버를 저렴하게 구입하고, 최신 기술과 도구들을 활용하여 서버를 구축하면 초기 설정과 운영이 더 쉬워졌습니다. 특히, GPT 같은 도구를 사용하면 복잡한 가이드를 읽는 시간을 줄이고, 시행착오를 최소화할 수 있어 인프라 설정에 큰 시간을 들이지 않아도 됩니다.
    또한, 다단계 인증(MFA) 등의 보안 조치를 통해 자체 서버에서도 높은 수준의 보안을 유지할 수 있습니다. 애플 실리콘 칩과 도커를 활용하면 비용 효율성과 운영 효율성을 극대화할 수 있습니다.
    자체 서버 전환을 고려하는 다른 개발자와 IT 회사들에게 이 글이 유익한 정보를 제공하길 바랍니다. 질문이 있거나 추가적인 정보가 필요하다면 언제든지 hedgehog@hashscraper.com 으로 질문을 남겨주세요. 감사합니다!
     

    이 글도 함께 읽어보세요: