본문 바로가기
TIL

2020.09.06

by 시계의온도 2020. 9. 7.

[09.03일 세운 계획]

인증(authentication) 스프린트 진행. --> 9/04 못하고 9/05 완성

toy-32번 풀기. --> 완료!

 

[계획 외 추가로 한 것]

toy-33번 풀기. --> 완료!

 

[오늘 한 것 - 세부내용] 

무려 하루를 건너 뛰다니..? ㅋㅋㅋㅋ 어제는 약간 미쳤는지.. 풀어졌는지.. 걍 개겼..다.ㅠ

아 왜이러지 또.. ㅋㅋ 쉬는날인데 하루에 공부시간이 6-7시간 남짓 나오는건 좀 너무 하지 않냐. 

 

가디언테일즈가 너무 재밌어서 + 친구가 취직해서 + 운전을 해야해서 + 과장시험도 따라가야해서 + 

쉬는날이지만 업무를 보긴 해야해서 + 등등을 합쳐서 하루가 날라갔..다. 페어프로그래밍을 했음 딴짓 못했을텐뎋ㅎ..

 

그렇다면 오늘 열심히 죽어라(?) 했는가..는 또 아님에 다시 반성. 아 모르겠다. 회사다니면서 뭔갈할라니 맘도 싱숭생숭 둥그리당당하고 피곤하고.. 소소한 기쁨은 이번 솔로 스프린트가 깊게 파면 어렵겠지만 일단 테스트 케이스와 개념은 쉬윘다는점? 

 

그리고 토이 문제들이 다 좀 술술 풀렸다는 점이라고 할 수 있겠다.. 

 

dd toy-32

 

 삽입정렬 관련예제였는데, advaced는 시간상 구현해 보지 못하고 bare minimum 은 통과하였다. 이건, 개념을 잡고서 시작해야 할 것 같아서, 1시간 정도 유튜브 등으로 개념을 공부하다가 제로초님 블로그를 보고 최종 해결했다. 

 

[레퍼런스]

https://www.zerocho.com/category/Algorithm/post/57e39fca76a7850015e6944a

삽입정렬이란, 첫번째를 두고 두번째 수부터 첫번째(왼쪽)과 비교해가면서 정렬하는 방식을 말한다. 

 

예를 들어 [1,9,7,5] 라는 배열이 있다면, 9를 뽑아서, 1과 비교한 다음 더 작다면 배열의 위치를 바꿔주는 방식으로 구현할 수 있다. 

일단 비교할 숫자를 두번째 부터 뽑는다. 

9는 1보다 작으므로, 현재위치에 다시 뽑은 숫자를 넣어준다. 

7같은 경우, 바로 왼쪽에 있는 수인 9와 비교했을 때 더 작다.

9가 더 크고 7은 뽑아서 저장해놨으므로, 9를 7자리에 넣는다. 

1과 7을 비교했을 때, 위치 변경이 필요없다. 

그렇다면 7은 1 뒤인 현재 위치에 놓는다. 

 

역시 글로 풀어서 쓰자니 좀 복잡하다. 제로초님 코드를 보고 배운점, 

 배운것 1: for문 안에서 정의되었는데도 for문 밖에서 j를 쓸 수 있다..! 호이스팅이 되서 그런가? 앞에서 j를 정의해 주었으니. 
 배운것 2: for문의 조건절을 다양하게 사용할 수 있다. 조건절이 계속 도는게 아니라 특정 조건만 만족하게 코드를 짤 수 있다.
배운것 3: 생각의 전환! 숫자를 기준으로 +/- 를 통해 왼쪽 오른쪽을 선택할 수 있다.

인데 과연 내가 이걸 생각해서 응용할 수 있을까..! 싶은 논리의 코드였다. 

 

반복되는 패턴들은 계속 하다보면 어느순간 쓰고 있는 나를 발견할 수 있으니( 리커젼~오..)  계속 알고리즘 문제들을 풀다보면 온전히 내가 생각한 논리로 코드를 짤 수 있는 순간이 오겠지. 사실 다른 사람들이 짜놓은 훌륭한 로직!을 기초단계에서는 꾸준히 학습하는게 더 중요한 것 같기도 하다. 소설의 멋드러진 비유들은 체험과 경험에서 나오는 것일 테니. 

 

dd toy-33

string이 주어지면 반복횟수를 계산해서 

* descending order by frequency
* ascending order by character.

정렬한다음 이중배열로 키-밸류 값을 리턴하라는 문제였다. 

주어진 문자열을 배열로 바꾸고, 문자열 순으로 정렬된 배열을 다시 객체로 만들어서 카운트한다음, 객체의 value들을 내림차순으로 정렬하고, 이걸 다시 객체로 만들어서, 이중배열로 만들었다! ㅎㅎ

 

새롭게 안 사실은 sort() 안에 콜백을 넣을 수 있다는 점이다. 콜백함수를 일종의 조건절처럼 사용할 수 있다. 

 

[레퍼런스] - array.sort(compareFunction)

https://www.w3schools.com/JSREF/jsref_sort.asp

 

z  쿠키와 세션

쿠키는 클라이언트에 정보를 저장해서, 서버가 클라이언트를 식별할 수 있게 해준다. 세션관리, 개인화, 트래킹을 위해서 사용한다고 MDN에서는 설명하고 있다. node.js 에서 쿠키를 사용하는 방법은 

https://developer.mozilla.org/ko/docs/Web/HTTP/Cookies

 

node.js 에서 쿠키를 사용하는 방법은, 

response.setHeader('Set-Cookie', ['type=ninja', 'language=javascript']);

저렇게 string으로 키와 밸류값을 넣어주면 된다. 해주면, 서버는 request요청시 브라우저에게 쿠키 정보를 담아서 response하게 되며, 네트워크 탭 Headers와 Cookies에서 내용을 확인 할 수 있다. 

 

쿠키로도 아이디/비밀번호를 저장해서 사용자가 로그인 되었을 때를 기준으로 html을 변경해서 보여줄 수 있지만 ( = 즉 authentication 이 가능하지만) 쿠키정보를 확인하기가 쉬워서, 보안상 심각한 이슈가 발생할 수 있다. 그래서, session_id를 통해서 사용자를 식별하게 할 수 있는데, 결국 이 것도 id/password 대신 session_id / hashing token 의 조합이다. 

 

이 스프린트에서만 보자면 session_id도 일종의 쿠키이지만, hashing을 통해서 의미없는 정보로서 노출된다. 위의 그림에서 보면, session_id에 의미를 알 수 없는 문자+숫자 조합이 생성되어 있는 것을 알 수 있다. 하지만, 이 session_id가 노출되면, 이걸 브라우저에 복붙해서 !! 다른 사람이 나인 것처럼 로그인이 된다..!  생활코딩에서 보여주셨다..

 

대부분의 사이트에서는 이런 문제를 어떻게 해결하고 있을까..? 나중에 시간이 좀더 있을때 한번 파봐야겠다. 개인 토이 프로젝트때는 구글이나 네이버 아이디 인증으로.. ㅎㅎ 대체.. ㅎㅎ 내가 짜는 함수보다는 훨~~~씬 보안적으로 안전하지 않을까 싶은 생각. 

 

생각보다 TIL인데 글이 자꾸 길어진다;; 짧게 쓰는게 좋은 것 만은 아니니깐.. 

 

오늘 리뷰 끝!

 

[내일 할 것] 

toy-34

toy-35

toy-36

오피스 아워. 

'TIL' 카테고리의 다른 글

2020.09.12 카카오 코딩테스트, shortly express  (0) 2020.09.13
2020.09.09  (0) 2020.09.10
2020.09.05 Session 과 Cookie  (0) 2020.09.05
2020.09.04  (0) 2020.09.05
2020.09.03 sequelize mvc 스프린트 처음부터 구현하기  (0) 2020.09.03

댓글