[앱 만들기 번외편] 보안 2탄: 마법의 방패와 신분 확인 시스템! 🛡️ (암호화, 인증/인가)

안녕하세요! ‘레고 박사가 되는 길: 더 깊이 있는 개발 이야기’ 시리즈, 오늘은 ‘보안’에 대한 두 번째 시간입니다.

지난 10편에서는 앱 보안의 중요성과 함께 ‘개인 정보 보호’가 왜 그렇게 중요한지, 그리고 끔찍한 해킹 사고 사례들과 앱의 ‘보안 설정’을 통해 스스로를 보호하는 방법까지 알아보았어요. 이제 우리 앱이라는 레고 성을 지키는 기본적인 마음가짐과 사용자로서의 역할은 충분히 이해하셨을 거예요.

오늘은 여기서 한 걸음 더 나아가, 앱 개발자들이 사용자들의 소중한 정보를 외부의 위협으로부터 더욱 강력하게 보호하기 위해 사용하는 ‘비밀 무기’들에 대해 알아보겠습니다. 바로 ‘암호화(Encryption)’와 ‘인증(Authentication) / 인가(Authorization)’입니다.

마치 레고 성의 보물 창고를 ‘마법의 방패’로 가리고, 성문에는 ‘똑똑한 경비원’을 배치하여 아무나 들어오지 못하게 하는 것과 같아요. 자, 그럼 앱 보안의 최전선을 지키는 강력한 기술들을 함께 파헤쳐볼까요?

1. 암호화 (Encryption) | 소중한 정보를 ‘마법의 방패’로 가리는 기술!

가장 먼저 알아볼 기술은 ‘암호화 (Encryption)’입니다. 암호화는 앱에서 주고받거나 저장하는 중요한 정보들(예: 비밀번호, 카드 번호)을 ‘아무도 알아볼 수 없는 형태로 바꿔서 저장하거나 전송하는 기술’을 말해요. 쉽게 말해, 해커가 정보를 훔쳐 가도 그것이 무슨 내용인지 알 수 없게 ‘마법의 방패’로 가려버리는 것이죠.

  • 레고 비유: 레고 성의 보물 창고에 아주 귀한 황금 블록이 있다고 해봅시다.
    • 그냥 황금 블록을 두면 해커가 훔쳐 가서 바로 사용할 수 있겠죠?
    • 암호화는 이 황금 블록을 ‘이상한 기호와 모양으로 변형시켜서’ 보관하는 것과 같아요. 해커가 훔쳐 가도 이게 황금 블록인지, 돌멩이인지 알 수 없게 만드는 거죠. 나중에 성주(앱)가 필요할 때만 다시 황금 블록으로 되돌려서(복호화) 사용하는 겁니다.

앱 개발에서의 암호화도 똑같습니다.

우리가 사용하는 앱에서 로그인할 때 입력하는 ‘비밀번호’가 암호화의 대표적인 예시입니다.

  • 비밀번호 암호화: 내가 ‘1234’라는 비밀번호를 입력하면, 앱은 이 비밀번호를 서버에 그대로 저장하지 않습니다. ‘abcdXYZ!@#$’ 같은 알아볼 수 없는 형태로 암호화해서 저장해요.
    • 만약 해커가 서버를 해킹해서 이 암호화된 비밀번호를 가져가도, 그것이 ‘1234’라는 것을 알 수 없으니 내 계정을 훔쳐갈 수 없게 됩니다.
    • 우리가 로그인할 때 입력한 비밀번호도 다시 암호화해서 서버에 저장된 암호화된 비밀번호와 비교하는 방식으로 작동합니다.
  • 통신 암호화 (SSL/TLS): 우리가 앱으로 인터넷 쇼핑을 하거나 은행 업무를 볼 때, 스마트폰과 서버 사이를 오가는 정보들(카드 번호, 계좌 이체 정보)도 암호화됩니다.
    • 주소를 보면 http:// 대신 https://로 시작하는 웹사이트들이 있죠? 이 ‘s’가 바로 ‘Secure(보안)’를 뜻하며, 정보가 암호화되어 안전하게 오간다는 의미입니다.
    • 마치 스마트폰과 서버 사이에 **’아무도 엿볼 수 없는 비밀 통로’**를 만들어서 정보를 주고받는 것과 같아요. 중간에 해커가 이 정보를 가로채도 암호화되어 있어서 내용을 알 수 없습니다.

왜 암호화가 중요할까요? 암호화는 설령 해커가 침입에 성공해서 정보를 훔쳐 가더라도, 그 정보가 ‘무의미한 데이터 덩어리’가 되도록 만듦으로써 최후의 방어선 역할을 합니다. 사용자들의 가장 민감한 정보들을 지키는 데 필수적인 ‘마법의 방패’인 셈이죠.

요약: 암호화 = 소중한 정보를 ‘아무도 알아볼 수 없는 형태로 바꿔서’ 해커로부터 보호하는 마법의 방패!

2. 인증 (Authentication) | ‘누구세요?’ 신분을 확인하는 성문 경비원!

다음은 ‘인증 (Authentication)’입니다. 인증은 어떤 사람이 ‘본인이 맞는지 신분을 확인하는 과정’을 말해요. “당신이 누구세요? 신분증 좀 보여주세요!” 하고 묻는 성문 경비원과 같습니다.

  • 레고 비유: 레고 성의 성문 앞에 한 사람이 서 있어요. 이 사람이 성주인지, 아니면 성주를 사칭하는 침입자인지 확인해야겠죠?
    • 성문 경비원(인증 시스템)이 “당신의 이름과 비밀번호를 말해보세요!” 하고 묻습니다.
    • 올바른 정보를 말하면 “확인 완료! 성주님 맞으시군요!” 하고 성문을 열어주는 것이 바로 인증입니다.

앱 개발에서의 인증도 익숙하실 거예요.

  • 아이디/비밀번호 로그인: 가장 흔한 인증 방식입니다. 내가 입력한 아이디와 비밀번호가 서버에 저장된 정보와 일치하는지 확인해서 본인임을 증명하는 거죠.
  • 생체 인식 (지문/얼굴): 스마트폰에 등록된 내 지문이나 얼굴 정보가 실제 나와 일치하는지 확인하여 로그인하는 방식입니다.
  • 2단계 인증: 지난 10편에서 배운 가장 강력한 인증 방식이죠. 비밀번호 외에 문자 메시지로 받은 인증번호, OTP 번호 등을 한 번 더 확인해서 ‘본인이 확실하다’는 것을 이중으로 증명하는 방법입니다.

왜 인증이 중요할까요? 인증은 허락되지 않은 사람이 우리 앱에 접근하는 것을 막는 가장 첫 번째 방어선입니다. 만약 인증 시스템이 없다면, 아무나 내 계정에 접속해서 개인 정보를 훔쳐 가거나, 내 이름으로 다른 사람에게 피해를 줄 수도 있겠죠. 성문 경비원이 없으면 누가 진짜 성주인지 알 수 없는 것과 같습니다.

요약: 인증 = ‘당신이 본인인지’ 정확하게 신분을 확인하는 성문 경비원!

3. 인가 (Authorization) | ‘어디까지 허락할까?’ 권한을 부여하는 사령관!

마지막으로 ‘인가 (Authorization)’는 인증 다음 단계입니다. 인가는 ‘본인임이 확인된 사람이, 앱 안에서 무엇을 할 수 있도록 허락할지 결정하는 과정’을 말해요. “당신이 성주님은 맞지만, 이 보물 창고에는 들어갈 수 없습니다!” 하고 권한을 부여하는 사령관과 같습니다.

  • 레고 비유: 성주임이 인증된 사람이 성으로 들어왔어요. 하지만 이 성주에게도 모든 곳에 접근할 권한이 있는 것은 아닐 수 있습니다.
    • 사령관(인가 시스템)이 “성주님은 회의실에는 들어갈 수 있지만, 아직 비밀 금고에는 접근할 수 없습니다”라고 알려줍니다.
    • 또 다른 예를 들면, 일반 병사는 식당과 막사에만 갈 수 있고, 지휘관은 모든 곳에 갈 수 있게 하는 것이 인가입니다.

앱 개발에서의 인가도 다양하게 사용됩니다.

  • 관리자 vs 일반 사용자: 앱 관리자는 모든 사용자의 정보를 볼 수 있고, 공지사항을 작성할 수 있지만, 일반 사용자는 자기 정보만 보고 게시글만 작성할 수 있습니다. (마치 성주와 일반 병사의 권한이 다르듯이)
  • 유료 기능 접근: 특정 앱의 유료 기능을 결제한 사용자만 그 기능에 접근할 수 있게 하는 것도 인가의 예시입니다. (돈을 낸 사람에게만 특별한 방에 들어갈 권한을 주는 것)
  • 친구 공개/전체 공개: 소셜 미디어에서 내가 올린 사진을 ‘친구에게만 공개’할지, ‘전체 공개’할지 설정하는 것도 인가 시스템 덕분입니다. 내가 허락한 사람에게만 내 사진을 볼 권한을 주는 것이죠.

왜 인가가 중요할까요? 인증만으로는 부족합니다. 본인이 맞다는 것이 확인되어도, 그 사람이 불필요한 정보에 접근하거나, 앱의 중요한 기능을 함부로 조작하는 것을 막아야 해요. 인가는 앱 내부에서 질서와 보안을 유지하고, 각 사용자의 권한을 명확히 함으로써 앱의 안전성을 한층 더 높여줍니다.

요약: 인가 = ‘누가 본인이 맞다면’, 그 사람이 ‘무엇을 어디까지 할 수 있는지’ 권한을 부여하는 사령관!

총정리: 암호화, 인증, 인가로 우리 앱 성을 난공불락으로!

이제 앱 보안의 핵심 기술인 암호화, 인증, 인가가 어떤 역할을 하는지 확실히 이해되셨기를 바랍니다.

  • 암호화: 소중한 정보를 ‘마법의 방패’로 가려서 해커가 알아볼 수 없게 만듭니다.
  • 인증: ‘누구세요?’ 신분을 확인하는 성문 경비원처럼, 본인이 맞는지 정확히 확인합니다.
  • 인가: ‘어디까지 허락할까?’ 권한을 부여하는 사령관처럼, 본인임이 확인된 사람이 무엇을 할 수 있는지 결정합니다.

이 세 가지 기술은 서로 협력하여 우리 앱이라는 레고 성의 보안을 난공불락으로 만들고, 사용자들의 소중한 정보와 신뢰를 지켜주는 가장 강력한 방어 블록들이랍니다.

이것으로 ‘레고 박사가 되는 길: 더 깊이 있는 개발 이야기’의 첫 번째 주제인 ‘AI 블록’과 세 번째 주제인 **’보안 블록’**에 대한 이야기가 마무리되었습니다.

다음 시간에는 “[8편] 성능 1탄”으로 돌아가, “우리 앱, 겉모습만 멋질까? 속도 깔끔하게 조립하자! (클린 코드 & 리팩토링)”라는 주제로 찾아뵙겠습니다. 앱의 속도와 안정성을 높이는 방법에 대해 다시 한번 깊이 있게 다룰 예정이니 기대해주세요! (연재 순서가 교차되는 점 다시 한번 안내 드립니다!)

‘레고 박사가 되는 길’ 시리즈에 계속해서 많은 관심 부탁드려요!

댓글 남기기