Backend
-
📌 Intro고객 계층 관리를 위해 통합 로그인 기능 개발이라는 새로운 프로젝트를 담당하게 되었다. 이번 프로젝트에서는 보안 강화를 위해 Oauth 2.0 프로토콜에서 RTR(Refresh Token Rotation) 방식을 도입하고, 인증 방식으로는 JWT(Json Web Token)을 사용하기로 했다. 그러나 개발 과정에서 Refresh Token 동시성 이슈가 발생하여 간헐적으로 토큰 갱신이 실패하고 사용자가 로그아웃 되는 이슈가 있었다.다행히 이 이슈는 QA 과정에서 발견되었어서, 리얼 배포 전에 조치하였다🫠 이번 포스팅에서는 RTR 방식에서 발생한 Refresh Token 동시성 이슈와 이를 해결한 과정을 기록하고자 한다.🔖 용어 정리RTR: Refresh Token RotationJWT..
[OAuth] RTR 방식에서 Refresh Token 동시성 이슈 해결하기📌 Intro고객 계층 관리를 위해 통합 로그인 기능 개발이라는 새로운 프로젝트를 담당하게 되었다. 이번 프로젝트에서는 보안 강화를 위해 Oauth 2.0 프로토콜에서 RTR(Refresh Token Rotation) 방식을 도입하고, 인증 방식으로는 JWT(Json Web Token)을 사용하기로 했다. 그러나 개발 과정에서 Refresh Token 동시성 이슈가 발생하여 간헐적으로 토큰 갱신이 실패하고 사용자가 로그아웃 되는 이슈가 있었다.다행히 이 이슈는 QA 과정에서 발견되었어서, 리얼 배포 전에 조치하였다🫠 이번 포스팅에서는 RTR 방식에서 발생한 Refresh Token 동시성 이슈와 이를 해결한 과정을 기록하고자 한다.🔖 용어 정리RTR: Refresh Token RotationJWT..
2024.11.25 -
사내 서비스에 소나큐브로 정적분석을 도입한 후, 무수히 많은 Bugs와 Code Smells가 발견되었다 😑대체 어떤 버그가 이렇게 많은 것일까.. 궁금했던 나는 Overall Code 기준으로 심각도가 높은 Bugs를 모두 파헤쳤고, 빈번하게 발생한 Bugs를 정리해보았다.최소한 기본적인 버그는 만들지 않는 개발자가 되자! 🤔 🚦 Levels: Blocker⛔️ Create class "Exception" in namespace or check correct import of class🔖 IssueClass of caught exception should be defined사용하는 클래스는 꼭 import를 해주자✅ How to fix// AS-IS// ..생략} catch (Exception ..
소나큐브 PHP 코드 분석: 주요 Bugs 및 해결 방안 정리사내 서비스에 소나큐브로 정적분석을 도입한 후, 무수히 많은 Bugs와 Code Smells가 발견되었다 😑대체 어떤 버그가 이렇게 많은 것일까.. 궁금했던 나는 Overall Code 기준으로 심각도가 높은 Bugs를 모두 파헤쳤고, 빈번하게 발생한 Bugs를 정리해보았다.최소한 기본적인 버그는 만들지 않는 개발자가 되자! 🤔 🚦 Levels: Blocker⛔️ Create class "Exception" in namespace or check correct import of class🔖 IssueClass of caught exception should be defined사용하는 클래스는 꼭 import를 해주자✅ How to fix// AS-IS// ..생략} catch (Exception ..
2024.08.18 -
📌 TipsIf a method can be static, declare it static. Speed improvement is by a factor of 4.➜ static 메서드는 일반 메서드보다 4배 빠르다echo is faster than print.➜ echo가 print보다 빠르다Set the maxvalue for your for-loops before and not in the loop.➜ for 루프을 위핸 최대값(탈출조건)을 루프 안에서가 아니고 루프 시작 이전에 지정하라.Unset your variables to free memory, especially large arrays.➜ 메모리를 해제하기 위해 변수를 unset하라. 특히 커다란 배열은 그래야 된다.Avoid magic ..
PHP 코드 최적화 관련 팁 모음📌 TipsIf a method can be static, declare it static. Speed improvement is by a factor of 4.➜ static 메서드는 일반 메서드보다 4배 빠르다echo is faster than print.➜ echo가 print보다 빠르다Set the maxvalue for your for-loops before and not in the loop.➜ for 루프을 위핸 최대값(탈출조건)을 루프 안에서가 아니고 루프 시작 이전에 지정하라.Unset your variables to free memory, especially large arrays.➜ 메모리를 해제하기 위해 변수를 unset하라. 특히 커다란 배열은 그래야 된다.Avoid magic ..
2024.08.03 -
⏰ 읽는 시간: 15분 들어가기 전유지보수를 하는 개발자에게 로그는 생명이다🧐 라이브 서비스와 관련된 오류 및 결함이 접수되면,가장 먼저 로그를 확인하고 로그를 토대로 이슈 구간을 확인하여 버그 원인을 추적해야 하기 때문이다 로그에 필요한 내용을 잘 기록하는 만큼 문제 해결 시간을 단축할 수 있지만반대로 로그가 부족하다면.. 그만큼 에러 원인을 찾기까지의 시간이 소요되어 서비스에 대한 고객의 만족도가 떨어지게 된다. 로그의 종류는 여러가지지만!아파치 로그, 커스텀 웹로그, 쿼리로그 등등.. 오늘은 Query Log에 대한 이야기를 하고자 한다 :)특히, 유지보수의 전쟁터인.. 현업에서의 경험을 바탕으로 쿼리 로그가 필요한 시점, 로그에 담아야할 내용 등을 정리해보려고 한다. DB Log / Query ..
[LOG] 현업에서 느낀 Query LOG 에 들어가야 할 내용⏰ 읽는 시간: 15분 들어가기 전유지보수를 하는 개발자에게 로그는 생명이다🧐 라이브 서비스와 관련된 오류 및 결함이 접수되면,가장 먼저 로그를 확인하고 로그를 토대로 이슈 구간을 확인하여 버그 원인을 추적해야 하기 때문이다 로그에 필요한 내용을 잘 기록하는 만큼 문제 해결 시간을 단축할 수 있지만반대로 로그가 부족하다면.. 그만큼 에러 원인을 찾기까지의 시간이 소요되어 서비스에 대한 고객의 만족도가 떨어지게 된다. 로그의 종류는 여러가지지만!아파치 로그, 커스텀 웹로그, 쿼리로그 등등.. 오늘은 Query Log에 대한 이야기를 하고자 한다 :)특히, 유지보수의 전쟁터인.. 현업에서의 경험을 바탕으로 쿼리 로그가 필요한 시점, 로그에 담아야할 내용 등을 정리해보려고 한다. DB Log / Query ..
2024.02.22 -
🐳 들어가기 전작년부터 우선 순위를 가장 높여 처리하고 있는 업무가 하나 있다.바로 DB 접속 정보 보관 장소를 옮기는 것! 기존에는 웹서버 내 database.yml 내에 DB 접속 정보가 평문으로 노출되어 있었다.이는 해킹 등의 보안 이슈를 야기할 수 있는 원인이 되었기 때문에작년부터 모든 상점의 DB 접속 정보를 Vault로 옮기는 작업을 하고 있다. 솔루션에서는 Vault에 직접 접근하여 DB 접속 정보를 가져오지는 않고,중개 API에서 상점별 DB 접속 정보를 읽어와 로컬 캐시, Memcached에 저장하여 사용하는 방식을 택했다. 현재까지 솔루션에서 Memcached를 쓰고 있지 않았기에 새로 도입했어야 했다. 그 과정에서 Memcached 와 관련하여 겪었던 내용들을 정리해보고자 한다 !✅..
[Cache] PHP에서 Memcached(멤캐시) 사용하기🐳 들어가기 전작년부터 우선 순위를 가장 높여 처리하고 있는 업무가 하나 있다.바로 DB 접속 정보 보관 장소를 옮기는 것! 기존에는 웹서버 내 database.yml 내에 DB 접속 정보가 평문으로 노출되어 있었다.이는 해킹 등의 보안 이슈를 야기할 수 있는 원인이 되었기 때문에작년부터 모든 상점의 DB 접속 정보를 Vault로 옮기는 작업을 하고 있다. 솔루션에서는 Vault에 직접 접근하여 DB 접속 정보를 가져오지는 않고,중개 API에서 상점별 DB 접속 정보를 읽어와 로컬 캐시, Memcached에 저장하여 사용하는 방식을 택했다. 현재까지 솔루션에서 Memcached를 쓰고 있지 않았기에 새로 도입했어야 했다. 그 과정에서 Memcached 와 관련하여 겪었던 내용들을 정리해보고자 한다 !✅..
2024.01.14 -
🐳 들어가기 전2023년 8월 초, 타 쇼핑몰 업체가 우리 업체의 솔루션으로 이전해왔다.작업 규모가 컸기 때문에 데이터 이전을 위한 임시 TF 팀이 신설되었고, 이런저런 이유로 나는 중간에 합류하게 되었다.마이그레이션 작업을 위한 로직은 파이썬으로 개발 중이었고 덩달아 나도 실무에서 처음 파이썬을 써보게 되었다.메신저가 온 걸 모르고 있었는데, 무심코 고개를 돌리니까 TF팀 팀장님이 옆에 서계셨다 (?ㅋㅋㅋ)"파이썬 처음인거 알고 있는데, 어려우면 GPT가 해줄거에요~" 라는 말에 빵터지면서 🤣 본격적으로 업무를 시작했다 ✅ 게시판나는 게시판 이전을 담당했다.우리 파트에서 내가 주로 담당한 도메인은 상품이었는데, 게시판이라 조금 낯설었지만게시판 관련 이슈를 몇번 처리한 적은 있어서 크게 부담되지는 ..
게시판 데이터 마이그레이션 with Python🐳 들어가기 전2023년 8월 초, 타 쇼핑몰 업체가 우리 업체의 솔루션으로 이전해왔다.작업 규모가 컸기 때문에 데이터 이전을 위한 임시 TF 팀이 신설되었고, 이런저런 이유로 나는 중간에 합류하게 되었다.마이그레이션 작업을 위한 로직은 파이썬으로 개발 중이었고 덩달아 나도 실무에서 처음 파이썬을 써보게 되었다.메신저가 온 걸 모르고 있었는데, 무심코 고개를 돌리니까 TF팀 팀장님이 옆에 서계셨다 (?ㅋㅋㅋ)"파이썬 처음인거 알고 있는데, 어려우면 GPT가 해줄거에요~" 라는 말에 빵터지면서 🤣 본격적으로 업무를 시작했다 ✅ 게시판나는 게시판 이전을 담당했다.우리 파트에서 내가 주로 담당한 도메인은 상품이었는데, 게시판이라 조금 낯설었지만게시판 관련 이슈를 몇번 처리한 적은 있어서 크게 부담되지는 ..
2023.08.15