서버 클라이언트
조회수 494회
개념적으로는 클라이언트에서 요청하고 서버에서 답한다고 그랬는데
예를 들어 회원가입같은 경우에서 클라이언트에서 아이디/ password를 서버에 넘기면 서버에서는 true/false 같은 형식으로 클라이언트에 답하는 형식으로 구성한다고 된다고 생각하는데 과연 이게 맞는 방법인지 그리고 보내는 형식은 post or get 이런 방식으로 하면 되는건지 ?
그러면 굳이 서버를 nodejs 이런 걸 로 하지말고 그냥 자바 스크립트에서 함수로 구현하면 되지 않는지 ?
또 서버 같은 경우에는 거의 함수랑 유사하지 않나라는 생각도 드는데 맞는 개념인지 ?
1 답변
-
Q1. 과연 이게 맞는 방법인지?
A1. 네. 왜냐하면 지금 이게 하필이면 로그인(authorization)이라는 시나리오에 관한 것이기 때문입니다.
Q2. 보내는 형식은 post or get 이런 방식으로 하면 되는건지 ?
A2. 비밀번호를
GET
요청변수에 담아서 보내면 URI 자체에 비밀번호가 그대로 노출돼 버리니 아무래도POST
방식으로 서버에 요청 보내는 게 낫지요.Q3. 그러면 굳이 서버를 nodejs 이런 걸 로 하지말고 그냥 자바 스크립트에서 함수로 구현하면 되지 않는지 ?
A3. 아니요. 왜냐하면 지금 이게 하필이면 인증(authorization)이라는 시나리오에 관한 것이기 때문입니다.
Q4. 서버 같은 경우에는 거의 함수랑 유사하지 않나라는 생각도 드는데 맞는 개념인지 ?
A4. 서버 코드도 함수를 쓰고 클라이언트 코드도 함수를 쓰지요. 같은 JS라서 본질은 같은데요. 다만 그 함수가 사용자 인증(authorization)을 제대로 할 수 있느냐 없느냐의 차이가 있습니다.
아까부터 자꾸 인증 시나리오가 어쩌구저쩌구 하는데 뭐냐 싶으시죠? 아주 극단적인 사례를 생각해 봅시다. 이런 웹페이지가 있다고 해 볼께요.
<h1>작전과 전산망에 접속하려면 로그인하십시오.</h1> <p>무심코 흘린 아이디/비밀번호, <span class="red">적</span>의 먹잇감이 됩니다!</p> <form class="form-horizontal pt-3" id="loginForm"> <div class="form-group row"> <label class="col-md-3 col-form-label" for="username">아이디</label> <div class="col-md-9"> <input type="text" name="username" class="form-control" /> </div> </div> <div class="form-group row"> <label class="col-md-3 col-form-label" for="password">비밀번호</label> <div class="col-md-9"> <input type="password" name="password" class="form-control" /> </div> </div> <div class="form-group row"> <div class="offset-md-3 col-md-9"> <button type="submit" class="btn btn-primary">로그인</button> </div> </div> </form> <script> var login = function (form) { var username = form.username.value; var password = form.password.value; if (username == '작전과' && password == '작전12!') { alert('작전과 로그인 성공'); window.location.href = 'http://6.9.20.145/육군20사단145연대/작전과/index.jsp'; } else { alert('작전과 로그인 실패'); return false; } return false; }; var loginForm = document.getElementById('loginForm'); loginForm.addEventListener('submit', function (e) { e.preventDefault(); login(e.target); }); </script>
이 웹페이지는 겉으로 봐서는 철통 보안이 된 것 같습니다.
하지만 F12 눌러서 소스를 까보는 순간 작전과 아이디가
작전과
이고 비밀번호가작전12!
라는걸 바로 알 수 있죠. 인증이 무의미해지는 것입니다.하지만 만약
username
과password
입력값을 특정 서버로 요청 보내서, 그 서버의 응답만 가지고 작전과 로그인이 가능한지 어떤지 알 수 있게 바꾼다면, 적어도 F12 한방에 보안이 뚫리는 어처구니 없는 일은 일어나지 않겠지요?그래서 사용자 인증 시나리오에서는 어쩔 수 없이 (ㅎㅎ) 인증 로직이 서버단에 할당됩니다.
뭐 다른 시나리오라면 서버까지 갈 필요 없지요. 예를 들면 전역계산기 같은 거. 그건 그냥 입대한 날짜만 입력하면 공식에 맞춰 계산하는 게 전부기 때문에 서버가 데이터를 받아서 클라이언트와 분리된 독립적인 로직을 수행할 필요가 없지요. 함수만 잘 만들어서 입력 출력 해주면 될 뿐이니까요. 그래서 전국 수많은 군부대 행정반의 전역계산기들이 서버는커녕 인터넷 연결조차 없지만 그래도 잘 작동하는 것입니다.
답변이 되었는지 모르겠네요.
댓글 입력