분류 전체보기(67)
-
payment-lab 기술적 이슈 -1- 로깅 중 비밀번호 노출의 위험성 및 대비책
회원가입은 기능을 구현하는 것 자체는 매우 간단합니다. 그러나, 회원가입을 안전하게 수행하는 방법을 적용하여 보안을 강화하고자 한다면 그 기능은 점점 더 어려워집니다. 회원가입을 안전하게 수행하는 방법은 여러 가지가 있지만, 저는 그중에서 회원가입 과정에서 로깅을 수행할 때 비밀번호가 노출되었을 때의 위험성과 그 대응방안을 모색하고자 합니다. 먼저 문제가 발생할 수 있는 코드부터 보여드리겠습니다. class AccountRegister( private val accountRepository: AccountRepository, private val encrypt: PasswordEncrypt ) { fun register(email: String, password: String, username: Stri..
2023.11.12 -
개인정보 의미와 안전성 확보를 위한 개발자의 역할
개인정보 유출에 따른 부작용은 매우 심각합니다. 그래서 개인정보 보호법에서는 개인정보를 안전하게 관리하기 위한 최소한의 의무 사항을 정해두고 있습니다. 현재 사내에서 진행하고 있는 프로젝트는 이러한 부분에 대한 조치가 전혀 없는 상황이기에 최소한의 조치를 취하기위해 개인정보에 의미와 안전성을 확보를 위한 조치로 무엇이 있는지를 알아보기로 하였습니다. 개인정보의 의미 개인정보는 단순히, 특정 인물의 이름, 나이와 같은 신상정보만을 의미하지 않습니다. 사용자가 서비스를 이용하는 과정에서 자동 생성되는 로그, 통화내역, 상품 구매내역, GPS 위치정보 등도 개인정보가 될 수 있습니다. 광범위한 개인정보 활용범위 '개인정보 수집' 이라고 하면, 얼핏 회원가입/로그인 기능 외에는 크게 신경쓸 필요가 없는 것처럼 ..
2023.10.21 -
정확한 결제 상태 추적 이슈 -1-, StateMachine 에 대해 알아보자
결제 api를 작업하던 중 결제 상태를 변경해야하는 상황이 생겼습니다. 물론 현재는 결제 서비스를 제공하는 것보다는 정확한 정산에 집중하고 있기 때문에 아직은 크리티컬하진 않지만 결제 서비스가 진행되는 중에 수행해야하는 결제 상태 변경을 소홀히 한다면 결제 정산을 하는 의미가 없기 때문에, 아직은 급하지 않은 지금 더 제대로 파고들어 근본적인 해결을 수행하고자 합니다. State Machine State machine은 Java가 태어나기 훨씬 이전부터 나온 개념입니다. State machine은 1943년 Warren McCulloch와 Walter Pitts에 의해 소개된 논문에서 나왔습니다. 이러한 개념이 생긴 이후로 Mealy Machine과 Moore Machine이 소개되었습니다. State ..
2023.08.23 -
이벤트는 무엇이고 언제 사용해야할까
MSA, 혹은 멀티 모듈 같이, 하나의 애플리케이션 서버를 도메인 혹은 사내 규정에 따른 기능을 기준으로 분류하는 서비스들은 거의 예외 없이 ‘이벤트’ 프로그래밍을 선호합니다. 그러다 보니, 요즘에는 거의 rabbitMQ 혹은 kafka를 사용할 줄 알아야 하는 경우가 많습니다. 그러나, 이 두 기술 중 하나 혹은 혼용해야 한다는 것은 결국 별도의 ‘브로커 서버’가 추가되는 것이고 서버가 추가된다는 것은 네트워크 통신 횟수가 늘어난다는 뜻입니다. 따라서, 만약에 ‘이벤트’ 프로그래밍을 왜 해야 하고, 선택에 따른 트레이드오프를 계산할 줄 모른다면, 오히려 서비스의 응답시간을 늘리는 요소가 될 수 있습니다. 이벤트? 이벤트의 사전적 의미는 ‘사건’입니다. 그런데, 프로그래밍 용어는 정말 평범한 용어를 참 ..
2023.08.22 -
어떻게 하면 Http api의 응답속도가 느려질까?
웹, 앱 플랫폼으로 개발하시는 분들은 여러 가지 이유로 postman을 통해 api를 실제로 실행을 해봅니다. 보통은 http 응답코드가 의도한 데로 나오는지 확인하고 끝내는 것이 일반적이긴 한데요. 그런데 한 가지 의문이 듭니다. 같은 api를 실행할 때 처음 실행했을때와 그 이후에 실행했을 때와의 응답속도 차이가 거의 10배 이상 차이가 납니다. 구글링을 해봐도 딱 명쾌하게 답을 주는 경우가 거의 없습니다. 물론 이 원리를 몰라도 개발을 하는데 전혀 문제가 없습니다. 그러나, 개발 프로젝트의 규모가 커지고 MAU가 증가할 경우 성능 최적화가 필수이며 최적화 작업을 하기 위해선 내가 사용하는 api의 동작원리를 제대로 파악할 필요가 있습니다. HTTP 통신의 응답속도를 늦추는 요인 1. 네트워크 관점 ..
2023.06.09 -
equals()와 hashCode()
java를 공부하시거나 업무를 수행하시는 분들은 이 두 함수가 매우 낯이 익을겁니다. 하지만 개인적으로 느끼기에 너무도 흔하기에 오히려 제대로 알기 어려운 부분인듯 하여, 이번에 이 두 함수의 차이점을 다시한번 짚어보며, 최대한 자세하게 알아볼까 합니다. equals()와 hashCode()는 무엇일까? equals() 메소드는 비교 대상인 두 객체가 서로 같은지를 비교할 때 사용합니다. 이 메소드는 두 객체의 내용이 같은지를 확인하여 같음과 다름의 여부를 반환합니다. 즉, 동일하다면, true를 리턴하고 그렇지 않다면 false를 리턴하죠. 일반적으로는 클래스의 모든 필드를 비교하는 방식으로 해당 메소드를 구현합니다. hashCode() 메소드는 객체를 식별하는데 사용합니다. 이 메소드는 정수 값으로 ..
2023.06.01