본문 바로가기
개인 공부(컴퓨터상식->기본교육과정)

*******중요(기술면접-> 대비)--> 웹 기초*******

by 백엔드개발자0107 2021. 8. 23.

나는 개발자로써 취업할때 가장 중요한 점이 그냥 코딩 잘하면 되는줄 알았다.

 

하지만, 비전이 있는 회사(토스,네이버,삼성전자,카카오)등은 대부분 웹 기초지식을

 

가장 중요시 한다고 한다. 실제로 내 후배중에 토스에서 웹기초지식만 물어보고 

 

코딩능력은 그 다음이라고 한다며 웹기초의 지식의 중요성을 역설하였다...ㅠㅠ

 

난 지금 학점도 엉망이고 앞으로 올린다고는 쳐도 이미 전공중요과목

 

데이터베이스 ,컴퓨터네트워크에서 날라먹었기 떄문에 아마 이 부분에서 기술면접에

 

유난히 태클이 걸려오지 않을까 싶다... 그래서 미리 공부를 더 하도록 한다..!

 

 

웹 기초란....

1. 클라이언트와 서버

1. client: 침대에서 뒤적뒤적 거리며 핸드폰을 만지며 인터넷을 하는 일반인
2. server: 그 일반인들이 들어가는 사이트를 관리하는 컴퓨터


2. HTTP
1.  hypertext transfer protocol(하이퍼텍스트 작성할때 규칙정도록 이해하자...!)
2. 웹에서 일반적으로 client와 server가 통신할때 쓰는 약속
3. 이 request와 response과정은 선조들이 정해놓은 약속에 의해 이뤄진다.


3. 웹페이지 접근

1. https://wiki.plus.or.kr/login 을 친다.
2. 브라우저는 HTTP요청으로 변환 후 전송(HTTP request)
3. 서버에서는 HTTP 요청을 해석해 결과를 내놓음(HTTP response)


4. HTTP request

1. GET method: url에 ?name1=value1&name2=value2 같은 식으로 정보 전달 
--> 아무래도 보안면에서 취약하다.. 당연한 이야기지만, 예를 들어 당신의 비밀번호가
url에 다 뜬다고 쳐보자 ,,, 큰일나는거다..!
그리고 GET메도는 주로 데이터 목록을 가져올때(조회할때) 이용한다. 당연히 데이터 목록을 조회하기 위해서는
데이터를 가져와야 할때니 쿠키기능이 저장되어 있을것이다..
그렇가면 쿠키란 무엇인가? ㅋ
컴퓨터용어에서 간단히 말하자면 일종의 일시적 저장 메모리기능을 가지는 하드디스크 역할정도로 보면 될듯하다.

2. POST method : body에 name1=value1&name2=value2 같은 식으로 정보 전달

--> 아무래도 보안면에서 GET method보다는 강하다. body부분은 해커나 사용자가 어떻게 건들수가 없다..
게시물에서 글을 작성하거나 할때 글이 생성된다.. 
GET메소드와 차이점은 바로 쿠키 기능이 없다고 생각하면 된다.

5. cookie,set-cookie

•Cookie는 request header의 한 종류 (일종의 콘센터)(브라우저)

•Set-Cookie는 response header의 한 종류(일종의 어뎁터)(서버)

•cookie는 browser의 local storage이며, Set-Cookie:로 야 이 쿠키들 저장해! 라고 서버에서 알려주면 저장하게 되고 reqeust를 보낼 때 저장한 쿠키들을 Cookie: 로 보냄

•보통 로그인 정보(session)를 cookie로 많이 저장함 : 로그인 하면 유저가 특정 쿠키를 갖게 하고 쿠키 체크로 유저 확인

•Cookie: 1P_JAR=2018-6-24-23; OGPC=19006965-1

•Set-Cookie: NID=RDOXRKvNtnYGR; expires=Mon, 24-Dec-2018 23:02:31 GMT; path=/; domain=.google.co.kr;

•Set-Cookie: WMI=zWGsdlf; expires=Mon, 24-Dec-2018 23:02:31 GMT; path=/; domain=.google.co.kr;


6. user agent

•request header의 한 종류

•사용자의 기기를 알려주는 용도

•User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36


7. referer

request header의 한 종류
원래는 referrer이 맞는 표현이지만 그냥 굳은 표현
사용자가 어느페이지에서 request를 보낸건지 알려주는 용도(예를 들어 링크를  탄 페이지)
ex: Referer: https://www.google.com

8. location
response header의 한 종류
대신 갈 주소를 알려줌
브라우저가 바로 이 location으로 점프해줌
주로 redirection response code 3xx 와 같이 쓰임

location: https://www.example.org/

9. url encoding
기본적으로는 nonprintable,non ascii 문자를 printable로 치환하기 위한 encoding
필요에 따라 encode하거나 decode하는 경우가 많음
사용하는 틀에 따라 내가 쓴 내용을 url:encode/decode해서 보내는 경우도 있고, 그대로 보내는
경우도 있으니 주의

예를 들어 크롬 브라우저 url창은 기본으로 한번 decoding 을 해준다.
10. client side web page


•브라우저의 주소창에 쳐서 보낸 request의 response body는 브라우저가 받는 웹페이지! -> HTML 문법

•브라우저는 텍스트(HTML)로 된 response body를 해석해서 렌더링해 이쁜 웹페이지로 보여준다 (content-type : text/html)

•html 페이지가 추가로 css, js 등의 코드를 사용할 수 있다

•html : 기본 웹페이지 골격

•css : 코디충

•js : 기능충


11. web 환경 구성

브라우저: 크롬,오페라,사파리 ,IE(INTERNET EXPLORER의 약자)
웹 서버: nginx,apache등
웹 어플리케이션: PHP,Django,Flask,node.js등
데이터베이스:MYSQL,SQLite,MariaDB등

12. client와 server의 구별


•webhacking.kr 가입을 해보자

•http://webhacking.kr 에서 준 index.html 에 주석으로 숨겨진 join 버튼이 있다

•여기서 버튼이 중요한 게 아니라 버튼을 누르면 발동하는 request :

•get method로 http://webhacking.kr/join/includ2_join__frm__0001.php?mode=aa9b0aabbaf0e39e7a71536e68ec8538라는 곳에 요청을 보내야 join 페이지가 나온다는 사실이 중요한 것 (onclick=location.href는 버튼을 누르면 브라우저가 저 페이지로 가게 해주는 기능)

•결국 client가 받은 웹페이지는 server에 어떤 기능이 있는지 안내해주는 역할도 하는 것이다


13. client와 server의 구별

•webhacking.kr join 페이지를 봐보자

•<form method="post" name="joinfrm"> : post method request 날리는 기능, joinfrm이라는 이름으로 접근 가능

•<input type="text" name="id"> : post method request의 body에서 name을 지정, value는 input한 값 (사용자가 빈칸에다 쓴 정보)

•<input type="button" onclick="join_ck()"> : 버튼을 클릭하면 join_ck()라는 js function 실행

•join_ck() : joinfrm의 구성요소 체크를 한 후 joinfrm.submit()으로 post request를 드디어 날림


14. request는 거짓말이 가능하다
--> 즉 해커가 사용하는 주 해킹기술임 ㅋㅋ


•referer : request header이므로 얼마든지 주작 가능

•cookie : request header이므로 얼마든지 주작 가능

•애초에 내가 의도한 버튼을 눌러야 request를 날리도록 웹페이지(html)을 구성했는데 버튼을 누르지 않아도 request는 얼마든지 가능



•이처럼 원래 referer는 사용자가 어느 페이지에서 왔는지 알려주는 header고, cookie는 클라이언트의 상태를 담기 위해 만들어진 header임

•브라우저는 이 약속을 토대로 referer, cookie를 보내준다

•하지만 결국은 client쪽에서 자발적으로 보내는 것이기 때문에 사실과 다른 정보를 보내는 것이 가능하다


15. bad server example


•client : 야 id는 hae고 pw는 bin이야 로그인 버튼 꾹 -> GET method http://example.org?id=hae&pw=bin 의 형태로 request 전송

•server : 오 GET이 왔군 id는 hae고 pw는 bin이니 db를 검사해서 id-pw 쌍이 있는지 확인해보고 있으면 쿠키를 할당해줄게 (session) -> Response header의 Set-Cookie : login_id=hae;

•client : 야 내가 쓴 메모가 보고 싶어 -> GET method http://example.org/memo, request header의 Cookie : login_id=hae;

•server : 어 메모가 보고 싶다고? login_id Cookie가 있는 상태네? ㅇㅋ 로그인했구나 넌 hae니까 니가 쓴 메모를 보여줄게

•client : ...? 야 내가 쓴 메모가 보고 싶어 ㅎㅎ -> GET method http://example.org/memo, request header의 Cookie : login_id=admin;

•ㅇㅋ 넌 admin이구나 admin이 쓴 메모를 보여줄게


16. request는 거짓말이 가능하다


•이때문에 client side filtering (js)은 억제력이 별로 없다 전부 개무시하고 보내기 가능

•결국 client side에서 어떤 생각치 못한 request가 들어와도 다 튕겨낼 각오로 server를 구성해야 하는 것


17.  요구되는 능력


•js 많이(해석, 코딩)

•html css 조금 (대충 해석만 해도 일단은 ㄱㅊ?)

•서버 설정 숙지 (이것도 알아서 ㅎ)

•웹의 원리 숙지

•킹색 (검색)


18. HTTPS(중요~!)


•인증서를 통해 서버를 검증하고, HTTP 통신을 암호화 (HTTP 통신은 평문 전송이므로 너무 취약해서)

•보통 툴들에서는 https 통신도 복호화해서 보기 가능


19. URL(Uniform Resource Locator) 과 URI(Uniform Resouce Identifier) 의 차이


--> URI는 식별하고, URL은 위치를 가르킨다.



******************정리 및 후기*******************

 

기술면접에서 다시한번 말하지만 개발자들은 웹의 기초지식을 더 중요시한다.

 

위 내용은 개발자들이 알아야할 가장 기본적인 웹 기초내용을 내가 타 자료들을

 

토대로 만들어 보았다. 열심히 공부하자!