목록분류 전체보기 (179)
FrontEngineer JungBam
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/tbNQb/btrRJonBT13/XUyk39UY0sqRvk304R3kJ0/img.png)
1주차 프로젝트가 처음에 생각했던 부분이 150%였다면 100%로 중간조정했지만 100% 안에서는 잘 마무리되었다고 생각이 들었다. 가장 좋은건 팀원들이었다. (갑자기 프로젝트 끝났다고 고생했다고 커피를 주셨다.) 4일 뿐이었지만 매일같이 새벽 2시까지 같이하면서 정이 들었는지 조가 바뀐다는데 아쉬움이 컸다. 프로젝트를 하면서 API 측면에 있어 가장 중요하게 고민한 부분은 사용자-게시글-댓글의 관계를 만들고 각 메인키와 외래키를 어떻게 넘겨주고 받아오는 것이냐였다. 우리 팀은 팀원들의 노력 덕분에 어렵지 않게 댓글 기능을 구현할 수 있었다. (두개 페이지의 댓글기능을 작업하는데에 구상-디자인-구현(프론트, 빽) 합쳐서 3시간 걸렸나?) 댓글은 직전 두번의 프로젝트에서 적용했던 동적경로를 통해 글에 대한..
① 암묵적 결합 - 전역에 변수를 선언하는 것은 코드 어디서든 참조하고 변경할 수 있는 암묵적 결합을허용하는 것 - 변수의 스코프가 클수록 해당 변수의 목적이 애매해지고 사용되는 기능이 많아질수록 가독성이 떨어지게 됨. - 또한 암묵적 결합으로 인한 의도치 않은 변경으로 인한 위험성도 동반된다. ② 긴 생명주기 - 생명주기란 것은 결국 메모리 자원을 할당하고 있는 기간인데 전역에 선언하는 것은 코드가 끝날 때까지 생명주기를 부여하는 것과 같다. 생명주기가 긴 객체들이 많다는 것은 그만큼 메모리 자원이 많이 할당된다는 것이고 의도치 않은 스코프에서 의도치 않게 변경 조작되어 생각치 못한 런타임 에러를 가져올 수 있다. ③ 스코프 체인 종점에 존재 - 스코프 체인이란 변수를 찾는 자바스크립트의 방식으로 현재..
1. var는 전역 스코프와 함수 스코프만을 갖고 있어 {}블록 스코프를 이용한 변수의 생명주가를 부여하지 못하고 {}단위에서의 변수를 사용하고자 할때 사용할 수 없음. let과 const는 블록 스코프를 가지며 이로 인해 함수 내부 블록 스코프에서도 별도의 스코프로 변수들이 존재하는 범위를 지정하여 사용할 수 있음. 2. var의 중복선언 가능한 점이 휴먼 이슈로 이어질 수 있는 부분 ※ var a로 중복 선언이 가능함. var a = 2 var a = 3 → 1번 이유와 2번 이유를 합치면 함수 내부에서 의도치 않은 선언 으로 인하여 예기치 못한 오류와 예상하지 못한 결과를 반환할 수 있음. 3. 호이스팅의 차이 var는 변수 호이스팅 과정에서 선언되는 코드 이전에도 식별자는 선언되어 있어 참조가 가..
깊은 복사 : 값을 복사하는 것. 얕은 복사 : 값을 갖고있는 주소값을 복사하는 것. → 이 때에는 실제 값을 갖고 있는 메모리 셀이 변경되면 주소값을 복사했기 때문에 그 값이 의도하지 않더라도 변하게 됨. ★ 이러한 얕은 복사로 인한 원본 손상에 대한 방지를 위한 Object 메소드로 Object.freeze()가 있다. 깊은 복사와 얕은 복사를 각각 사용해야 할 경우를 고민하고 사용해야함. 스프레드 연산자를 이용한 깊은 복사 ☞ 배열이나 깊이가 1인 객체의 경우 가능하나, 깊이가 2 이상인 경우 참조값에 따른 값을 가져오는 것이 아니기 때문에 어려움. ☞ 깊이가 2 이상인 객체의 깊은 복사는 별도의 방법이 필요함. 「 ① JSON객체 사용 - const 식별자 = JSON.parse(JSON.stri..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/JNQlf/btrRvbWMudi/NSP85hypOwcoQ8VjcvVNI1/img.png)
JavaScript의 타입 : 느슨한 타입의 동적 언어 ☞ 어떤 특정 타입과 연결되지 않으며, 모든 타입의 값으로 할당 / 재할당 가능 어떤 값들이 있는가 원시값(언어의 최고 로우레벨에서 직접 표현되는 불변 데이터) ① Boolean true / false 값으로 논리 값을 말함. 비교 연산자의 결과값으로 반환되는 값 ※ Boolean 객체 : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Boolean 「truthy와 falthy」 - truthy : falthy 값을 제외한 모든 값으로 논리값을 기대하는 문맥에서 true로 평가되는 값 - falthy : 0, -0, 0n, "", null, undefined..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/zl3lt/btrRnpIKJH1/JkbKbKBsFEV0ZSVY7JKqwk/img.png)
/board 에서 post 요청을 하고 다시 /board로 보내고 새로고침을 하게 되면 아주 신기한 일이 생긴다. 똑같은 입력의 반복 ㅎㅎ 왜그런지 이유를 찾던 중 네트워크로 새로고침이 될때마다 다시한번 POST 요청이 보내지는 것을 알게 되었고 url을 보니 모든 것이 이해가 되었다. @app.route("/post/board", methods=["POST"]) def board_post(): title_value = request.form["title"] content_value = request.form["content"] now = dt.datetime.now() doc={ # 유저 값 토큰에서 받아서 넣어야 함. 'title' : title_value, 'content' : content_val..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/xbYi0/btrRnPGGuXg/mutY77I1Sk4ApntdLohkB0/img.png)
로그아웃에 대해서 혼자 만지작하다가 간단한 $.removeCookie()를 안하려고 또 혼자만의 공부에 들어갔다. 내 생각은 프론트에서 요청을 하면 시간을 백에서 만료시킨 토큰을 보내서 로그아웃 시킨다였다. 4시간동안 이것만 했는데 결론은 이 플라스크에서 jwt로 가져올때 유효하지 않는 시간은 안보낸다는 것... 덕분에 쿠키 공부도 많이하고 j쿼리(앞으로 쓸일이 있으려나...)로 쿠키작업하는 건 완전 감잡았다. 쿠키 작업 함수(참고용)(feat.용민님) function setCookie(name, value, exp, path) { var date = new Date(); date.setTime(date.getTime() + exp * 60 * 60 * 1000); document.cookie = `${..
노드 작업을 하다보니 자동으로 만들어진 gitignore에 익숙해졌는지.. 모든 파일이 올라가고 있다는 사실을 뒤늦게 깨닫고 캐시삭제, 깃헙 파일 삭제를 하고 gitignore를 만들었다. 작업하는 언어에 맞는 gitignore 생성은 매우 간단하다. https://www.toptal.com/developers/gitignore/dp gitignore.io Create useful .gitignore files for your project www.toptal.com 사이트에 접속하면 아래와 같은 창이 뜨는데 내가 사용하는 언어를 누르고 생성을 누르면 끝!