분류 전체보기154 코드리뷰에 대하여 왜 우리는 코드리뷰를 하는가?에 대해 사내에 발표하기 위한 자료를 정리하여 올립니다. 이 포스팅은 정답이 아닌 개인적인 의견과 관점이고 팀마다 상황이 다르고 조직마다 지향하는 바가 다르기에 상황에 맞게 적절한 전략으로 코드리뷰를 진행하는 것이 좋다고 생각합니다. :) Why? 우리는 왜 코드리뷰를 하는가? 버그가 될 수 있는 부분을 사전에 파악하기 위해 코드의 성능, 가독성을 증가시키기 위해 팀 코드 스타일의 일관성 유지시키기 위해 새로운 feature 코드를 공유하고 잠수함 패치를 방지하기 위해 작업한 사람을 탓하지 않기 위해 (책임을 분배하기 위해) ⭐️ 서로의 코드를 통해 배울 수 있음 Reviewer를 통해 배우기 val inputStream = new FileInputStream("text.tx.. 2021. 2. 24. JUnit5 테스트 시 @BeforeEach, @AfterEach가 실행되지 않을 때 JUnit5 기반으로 테스트 실행 시 @BeforeEach, @AfterEach로 지정한 기능이 실행되지 않을 때 상황마다 다르겠지만 나같은 경우 간단하게 해결할 수 있었다. 바로 @Test를 org.junit.Test의 @Test가 아닌 org.junit.jupiter.api.Test의 @Test로 사용하면 된다. class MyTest { @org.junit.jupiter.api.BeforeEach fun setUp() { println("SetUp method") } // @BeforeEach로 지정해놓은 메서드가 실행되지 않는다 @org.junit.Test fun junitTest() { println("This test won't trigger setUp") } // @BeforeEach로 지정.. 2021. 1. 10. WebSocket Server에서 Connection 'close' 이벤트를 받지 못할 때 (2020-08-17에 작성된 글입니다) WebSocket 서버를 운영하다보면 가끔 Client WebSocket Connection이 끊겨졌음에도 서버에서는 close이벤트를 수신하지 못할 때가 있다. 아마 WebSocket 서버에서 WebSocket Connection이 close될 때 해당 Connection과 관련된 데이터를 정리하는 코드를 작성해놨을텐데, close 이벤트가 제대로 동작하질 않으니 이 데이터 정리 코드가 실행되지 않을 것이고 이는 곧 버그로 이어질 가능성이 높다. 나도 WebSocket을 사용한 실시간 서비스 서버를 개발하면서 이러한 문제를 겪었고 그 원인에 대해 찾아보고 대처를 한 것에 대해 정리하고자 이 글을 포스팅한다. 먼저 내가 해당 문제를 재현한 방법은 WebSocket.. 2021. 1. 6. WebStorm으로 TypeScript debug 모드 사용하기 (2019-12-17에 작성된 글입니다) WebStorm을 비롯한 JetBrains IDE를 사용할 때 강력한 debug 모드를 제공한다. 이번 포스팅에서는 TypeScript을 사용할 때 WebStorm으로 debug 모드 사용법을 알아보겠다. 먼저 빈 디렉토리를 생성하여 pacakage.json, tsconfig.json을 생성하자 $ npm init -y # init npm project $ tsc -init # init typescript config 그리고 실행할 간단한 ts 파일 2개를 생성한다. // hello.ts export default function hello(name: string): string { return `Hello ${name}`; } // index.ts import .. 2021. 1. 5. TypeScript ESLint 적용하기 (+ Airbnb) (2019-10-09에 작성된 글입니다) 토이 프로젝트 같은 경우 혼자 작업하기 때문에 코드 스타일이 거의 일관되지만 협업을 하면 모두 각자의 코딩 취향이 있기 때문에 코드 스타일이 정해지지 않았다면, 코드에 개발자의 개성이 가득 남을 것이다. 개인적으로 팀 프로젝트엔 개발자의 개성이 적게 들어가고, 일관화되는 편이 좋다고 생각하기 때문에 linting tool을 사용하는 것이 좋다고 생각한다. 그런 의미로 이번에 Typescript에 lint를 적용하기 위해 TypeScript ESLint를 설정하는 법에 대해 알아보겠다. 굳이 ESLint를 사용하지 않고 TSLint라는 선택지도 있지만 TSLint는 곧 deprecated 될 예정이기 때문에 TSLint는 고려하지 않았다. (https://githu.. 2021. 1. 5. BCrypt로 Password Hashing 하기 (2020-04-30에 작성된 글입니다) 사용자의 비밀번호와 같은 credential한 값은 hashing을 통해 관리자 조차도 원래 값을 알 수 없도록 암호화하여 저장해야한다. 이번 포스팅은 비밀번호 암호화 관련하여 BCrypt를 적용한 것과 관련하여 알아본 바를 정리한다. (* update 2021-01-02: 요즘은 Argon2라는 알고리즘이 떠오르는 것 같다.) SHA는 사용하지 마라 일반적으로 Hashing에 사용되는 SHA 방식의 경우 비밀번호와 같은 보안과 관련되서는 사용되지 않는다. 왜냐하면 SHA 방식은 빠르기 때문에 해커들이 반복 연산을 보다 빠르게 할 수 있기 때문이다. 이는 해커가 비밀번호를 얻어내기 좀 더 수월하다는 위험성을 갖는다. 왜 BCrypt를 사용하는가 BCrypt 같은 .. 2021. 1. 2. 이전 1 ··· 20 21 22 23 24 25 26 다음