2021/07/05

토큰을 이용하여 유저의 로그인상태 확인할때…

로그인 된 사람만 볼수있는 페이지를 로그인이 되지 않은채로 들어갔을때 로그인 페이지로 보낸다. 이때 브라우저에 토큰이 저장되있는 경우 제거해야한다. 제거를 하지 않으면 로그인 페이지로 보냄 -> 토큰이 있어서 다시 본 페이지로 보냄 -> 다시 로그인 페이지로 보냄…의 무한루프가 발생할 수 있다.

2021/07/06

브라우저는 URL에 파일이 지정되있지 않다고 생각하면 index.html을 찾아서 보여준다. 그래서 naver.com, naver.com/index.html 은 같다. 하지만 언제나 그런건 아니다. 예를들어 github.com, github.com/index.html은 다르다.

I forgot to add “return;” at the end of the if statement in the register back-end code. As a result, ID: rrr PW: rrr123 was accepted and entered the database when it shouldn’t have. I should be more careful.

2021/07/07

테스트용 라이브러리 Jest는 React에 최적화되어있다.

백엔드의 손님은 프론트엔드이다. 프론트엔드가 얼마나 개떡같이 데이터를 넘겨주더라도 백엔드는 그걸 견뎌내야한다.

2021/07/08

Difference between Null and Undefined:

The difference is on the intent of the programmer. They both mean that a variable does not have a value. While null is explicitly stating that the variable has been defined/declared but just does not have a value, undefined means that the variable has not been defined. Everything is undefined until you define it.

Don’t use ==. Use === instead.

0 == ‘ ’ returns true

0 == false returns true

BUT, when you want to mix null and undefined, use ==. For example, if you’re not sure whether an object will return null or undefined, write the function as == null, so that even when it returns undefined, there is no bug.

2021/07/09

According to bcrypt’s official doc, bcrypt’s compare() function is not safe from timing attacks. In timing attacks, the time difference can be as small as nano and microseconds, but it is enough to extrapolate significant discrepancies.

2021/07/10

Difference between authentication and authorization

§ Authenticating is like login

§ Authorization is like jsonwebtoken, session

Unlike cookies, JWT is stored at the client.

- Say a bank has 2 servers because it handles lots of information. When a user is moved from server A to server B, the user does not have to log in again if you use JWT and the two servers share the secret key.

- Because two identical strings result in same hash strings, it may make it easier for hackers. Therefore to store passwords, I can add a salt, so that the hash strings are different even for identical original strings.

2021/07/11

Don’t memorize code. Learn the big concepts.

You don’t memorize what 38 X 551 is. Instead, you learn the concept of multiplication and work out the problem.

Instead of opening up a bunch of youtube videos on different concepts, choose one topic and dive deep. Take it one at a time.

From Web-Dev Simplified, summary of mistakes he made from learning to code:

1. Not having a clear goal or path

i. Because the field of programming is so vast, you need to choose a specific path. But some people don’t choose a specific path and instead learn everything bit by bit, which adds up to nothing.

2. Starting something new once it gets hard

i. Don’t jump ship to another area just because the material is getting more difficult. Push through the difficult things instead of concluding that “you’re not fit for this specific field”.

3. Not having a structured curriculum

i. Without a curriculum, you will be learning inefficiently because of repetitive content, and you will have holes in your knowledge. Youtube recommendation is not your curriculum.

4. Spending too much time refactoring code

i. Clean/efficient/strong code is good. But don’t spend too much time on it. Move on after a certain stage.

5. Watching too many or not enough tutorials

i. The Tutorial Hell — watching tons of tutorials but when you actually try to build stuff, you realize the tutorials were useless. Don’t research too much. Apply the knowledge first-hand first, and when you get stuck, then do the research to fix the problem.

ii. But don’t try to do everything on your own. Learn from the experts. Trial and error takes a long time, and you won’t learn much.

6. Never finishing any projects

i. 80% completed projects don’t mean anything. Finish the project, deploy it, and fix the bugs.

ii. When you encounter problems and hard things while coding the project, you get the urge to give up and work on another project idea. Suppress that urge. Fight the problems and difficult concepts head-on.

7. Not learning hard things

i. Things you need to learn are not always fun and easy. But you need to learn them nevertheless.

2021/07/13

MongoDB에서 기본적으로 제공해주는 _id를 쓰지않고 내가 따로 documentId, roomId 등을 만들어서 쓸 수 있다. 하지만 꼭 indexing을 해주자.

_id를 가져오고 프론트엔드에 documentId로 넘겨주기 위해서 포문 돌리지 말자. 애초에 schema를 잘 설계하자.

내가 만드는 웹사이트의 타겟층은 누구인가? 팀원들과 회의 후 비대면으로 단기 프로젝트

하는 사람들이라고 결정했다. 타겟을 분명히하고 구체화해야 웹사이트에 ‘색깔’이 입혀진다.

2021/07/14

기본키는 무엇으로 할까? 자연키 vs 인조키

- 자연키는 전화번호, 이름, 주민번호 등 자연적으로 회원가입이나 유저가 활동하면서 생성되는 데이터 정보. 자연적으로 생성되기때문에 가져다가 기본키로 사용해도 된다. 하지만 전화번호는 변경될수있고, 이름은 중복될수있다. 주민등록번호를 기본키로 사용하는 경우가 많았지만 법에서 주민등록번호를 저장할 수 없게 하기때문에 DB를 갈아엎으며 고생한 회사가 많았다. 그래서 인조키를 생성하는게 추천된다.

- 인조키란 몽고디비의 _id 나 uuid와 같이 프로그래밍적으로 생성해낸 키값이다. 너무 간단하면 해커가 공격하기 쉽기때문에 길어야하며 중복되지않아야한다. 몽고디비의 _id는 나름 순서대로 되어있어서 정렬이 가능하고 인덱싱이 가능하다. 하지만 uuid를 그대로 사용하면 정렬이 되지 않기떄문에 인덱싱을 하기 위해선 unix epoch timestamp를 추가하는 방법을 사용해볼 수 있다.

Weekly I learned

노드 기초반과 과제를 끝내고 나서도 이해 안가는 부분이 많았다. 하지만 노드 심화반 강의와 과제를 하면서 불명확하던 부분이 많은 부분 해소가 되었다.

코드 추상화와 테스팅을 접해보면서 역시나 지금까지 내가 하고있던 코드는 애들 장난이었다는걸 느꼈다. 튜터님의 조언대로 이제부터 테스팅을 하는걸 습관화 해야겠다.

지금까지 들었던 온라인 강의를 통틀어서 강승현 튜터님의 노드 심화반 강의가 제일 좋았다. 개념적으로 제일 어려운 강의였지만 설명을 논리적 흐름에 맞게 해주셨기 때문에 이해하기가 비교적 수월했다.

또한, 지금까지는 개념 공부를 할때 이것저것 띄엄띄엄 공부를 했었는데 이제부터는 하나의 개념을 골라서 진득하게 공부를 해야겠다. 이것저것 다 한꺼번에 공부하려니까 확실히 공부하게되는 개념도 없고 계속 잊어버리는거같다.