ETC33 MSA 기반 환경에서의 인증과 인가 - 2. 인증 및 인가 프로세스 앞서 MSA 환경에서의 어떤 식으로 인증과 인가 시스템을 구현할 것인가에 대해 대략적인 개요를 살펴보았다. 이번 포스팅에서는 구체적으로 어떤식으로 인증과 인가 프로세스를 밟아 나가는지에 대해 살펴보자. 인증 (Authentication) 흔히 로그인이라고 부르는 인증(Authentication)은 특정 계정에 대해 소유를 확인하는 과정이다. 흔히 ID, Password 를 사용하거나 OAuth 등을 사용하여 인증 과정을 거친다. 1. Client 에서 ID, Password 와 같은 인증 수단의 데이터를 담아 인증(로그인) 요청을 보내면 API Gateway에서 해당 요청을 인증 서버에 라우팅 할 것이다. 2. 이때 인증 서버에서 인증이 성공했을 때 Access Token과 Refresh Token을 응.. 2021. 5. 29. MSA 기반 환경에서의 인증과 인가 - 1. 개요 서비스가 성장하고 서비스에서 다루는 도메인이 복잡해 짐에 따라 도메인 별로 서비스를 분해하여 각 도메인 간의 커플링을 느슨하게하고 도메인의 응집도를 높이며 이를 통해 빠르고 안정적인 개발이라는 장점을 취하기 위해 MSA를 행하는 곳이 많아졌다. 그리고 내가 속한 조직 역시 기존 monolithic 환경에서 MSA로 이전하는 작업을 진행 중이고 그 중에서 나는 사용자와 인증/인가 관련 서비스를 작업하였다. 이 포스팅은 MSA 환경에서 인증/인가를 구현하면서 어떤 식으로 시스템을 구축하였고 어떤 고민을 하였는지에 대해 정리하는 글이다. 웹 서비스에서 크게 Session 또는 JWT(JSON Web Tokens)기반의 Access Token을 통해 Security를 구현한다. MSA 환경에서 인증과 인가에 대.. 2021. 5. 20. 코드리뷰에 대하여 왜 우리는 코드리뷰를 하는가?에 대해 사내에 발표하기 위한 자료를 정리하여 올립니다. 이 포스팅은 정답이 아닌 개인적인 의견과 관점이고 팀마다 상황이 다르고 조직마다 지향하는 바가 다르기에 상황에 맞게 적절한 전략으로 코드리뷰를 진행하는 것이 좋다고 생각합니다. :) Why? 우리는 왜 코드리뷰를 하는가? 버그가 될 수 있는 부분을 사전에 파악하기 위해 코드의 성능, 가독성을 증가시키기 위해 팀 코드 스타일의 일관성 유지시키기 위해 새로운 feature 코드를 공유하고 잠수함 패치를 방지하기 위해 작업한 사람을 탓하지 않기 위해 (책임을 분배하기 위해) ⭐️ 서로의 코드를 통해 배울 수 있음 Reviewer를 통해 배우기 val inputStream = new FileInputStream("text.tx.. 2021. 2. 24. WebSocket Server에서 Connection 'close' 이벤트를 받지 못할 때 (2020-08-17에 작성된 글입니다) WebSocket 서버를 운영하다보면 가끔 Client WebSocket Connection이 끊겨졌음에도 서버에서는 close이벤트를 수신하지 못할 때가 있다. 아마 WebSocket 서버에서 WebSocket Connection이 close될 때 해당 Connection과 관련된 데이터를 정리하는 코드를 작성해놨을텐데, close 이벤트가 제대로 동작하질 않으니 이 데이터 정리 코드가 실행되지 않을 것이고 이는 곧 버그로 이어질 가능성이 높다. 나도 WebSocket을 사용한 실시간 서비스 서버를 개발하면서 이러한 문제를 겪었고 그 원인에 대해 찾아보고 대처를 한 것에 대해 정리하고자 이 글을 포스팅한다. 먼저 내가 해당 문제를 재현한 방법은 WebSocket.. 2021. 1. 6. BCrypt로 Password Hashing 하기 (2020-04-30에 작성된 글입니다) 사용자의 비밀번호와 같은 credential한 값은 hashing을 통해 관리자 조차도 원래 값을 알 수 없도록 암호화하여 저장해야한다. 이번 포스팅은 비밀번호 암호화 관련하여 BCrypt를 적용한 것과 관련하여 알아본 바를 정리한다. (* update 2021-01-02: 요즘은 Argon2라는 알고리즘이 떠오르는 것 같다.) SHA는 사용하지 마라 일반적으로 Hashing에 사용되는 SHA 방식의 경우 비밀번호와 같은 보안과 관련되서는 사용되지 않는다. 왜냐하면 SHA 방식은 빠르기 때문에 해커들이 반복 연산을 보다 빠르게 할 수 있기 때문이다. 이는 해커가 비밀번호를 얻어내기 좀 더 수월하다는 위험성을 갖는다. 왜 BCrypt를 사용하는가 BCrypt 같은 .. 2021. 1. 2. Sync & Async / Blocking & Non-Blocking (2019-10-06에 작성된 글입니다.) 나는 원래 Java를 사용하여 개발을 했는데, 이제는 Node.js 기반으로 개발을 하는 입장으로서 Non-Blocking에 대한 개념이 중요하게 됐고, 이에 더해서 Sync와 Blocking에 대한 차이도 이해하는 것이 필요하다고 느꼈는데, 최근 Slipp에서 주최한 세미나에서 자바지기님의 발표를 통해서 이러한 점이 명쾌하게 이해가 되었다. 이번 글은 그 기반으로 Sync & Async / Blocking & Non-Blocking 에 대해서 알아보고 정리한 것이다. Sync & Async / Blocking & Non-Blocking Sync와 Blocking, Async와 Non-Blocking 서로 비슷한 개념이라고 생각할 수 있다. 나 역시 이 점에 대.. 2021. 1. 2. 이전 1 2 3 4 5 6 다음