권한 관리, 언제까지 if-else로 땜빵할 거야? (RBAC부터 Zanzibar 찍먹까지)
·
Development
TeoConf에서 '권한 관리' 세션을 듣고 작성하는 포스팅.개념은 알고 있었지만 설명할 정도가 되지 않기 때문에 학습용으로 공부하기 위해 정리하는 글이다. 들어가며얼레벌레 개발 5년 차. 이제 로그인(Authentication)은 '익숙한 고통' 정도다. JWT? OAuth2? 여전히 설정할 때마다 삽질은 좀 하지만, 그래도 라이브러리가 워낙 잘 되어 있고 레퍼런스도 넘쳐나니 어떻게든 구현은 된다.근데 진짜 빌런은 항상 '권한(Authorization)'이다. 처음엔 `user.role === 'ADMIN'` 한 줄이면 세상 평화로웠는데, 기획자가 갑자기 이런다. 관리자, 사용자 역할별로 분리해주세요. 사용자는 관리자, 사용자 역할 모두 가질 수 있어요 그리고 이게 끝이 아니었다.프로젝트 초기에는 단..
[TEOConf] 첫 네트워킹 컨퍼런스, TEOConf 다녀왔습니다.
·
Daily
프롤로그내가 컨퍼런스에 가게 된 이유올해는 꼭 한번 컨퍼런스를 가보자고 마음먹던 차에 '테오콘'을 발견하고 신청했다.전공생으로 시작해 개발자로 일 한지 꽤 오랜 시간이 흘렀고, 특히 풀스택 개발자로 일한 지는 어느덧 2년이 다 되어가지만,학교 행사를 제외하고서는 거의 참석 한 적이 없는 것 같다.즉, 아마도 이건 첫 자발적 커퍼런스 참여..? 주변 프론트 개발자 지인들에게도 공유해서 같이 신청했는데, 놀랍게도 나만 당첨이 되었다. (운명인가...😲) 그날 약속이 있어 양도를 고민하기도 했지만, 지인들도 시간이 안 된다고 하고 너무 가보고 싶었던 마음이 커서 친구들에게 양해를 구하고 참석을 결정했다. 준비 과정 & 입장선물 교환식이 있다고 해서 엄청 긴장하며 선물을 골랐다. 키캡을 살까 고민하다가 취..
"제발 그 파일 좀 지우지 마세요": package-lock.json과 yarn.lock이 존재하는 이유
·
Development/JavaScript
패키지 잠금 파일 package-lock.json, yarn.lock 1. 들어가며: "내 컴퓨터에선 되는데요?"협업 중에 이런 경험 한 번쯤 있을 것이다.분명 내 로컬 환경에서는 잘 돌아가던 코드가, 동료의 컴퓨터나 배포 서버에서는 에러를 뿜어내는 상황 말이다. 코드는 똑같은데 왜 결과가 다를까요? 범인은 바로 '미묘하게 다른 라이브러리 버전'일 확률이 높다.오늘은 Node.js 생태계(React, Vue, NestJS 등)에서 개발할 때 필수로 생성되지만, 귀찮은 존재로 오해받기도 하는 package-lock.json과 yarn.lock에 대해 정리해본다. 2. package.json만으로는 부족하다우리는 프로젝트에 필요한 라이브러리를 package.json에 명시한다. 하지만 자세히 보면 버전 ..
[Cursor] Playwright로 테스트부터 디버깅까지 한번에 끝내기
·
Development
요즘 개발 트렌드를 보면 코드 짜는 것 자체보다 디버깅에 쏟는 시간이 훨씬 길어지는 것 같다. 특히 `Cursor`, `ChatGPT` 같은 AI 코딩 도구의 도움으로 코드를 빠르게 생성할 수록, 생성된 코드를 읽고 이해하며 잠재된 버그를 찾아내는 데 더 많은 시간이 필요하다는 아이러니한 상황에 직면하곤 한다. 😭 프론트엔드 개발자라면 UI 자동화 테스트의 중요성을 익히 알고 있을 것이다. 하지만 테스트 코드를 짜는 것만큼이나 어려운 것이 테스트 실패 시 원인 파악과 디버깅이다. 테스트 코드의 중요성을 알지만, 테스트 코드를 작성하는 비용 때문에 망설이는 개발자도 많은 것 같다. (일단 나부터 그러하다.) 매번 브라우저를 띄워 수동으로 재현해보고, 콘솔 로그를 뒤져보고... 이 과정에서 소중한 개..
[CS] "나누기 0"은 왜 어떤 언어에선 에러가 나고, 어떤 언어에선 무한대(Infinity)가 될까?
·
Development
자바 예외처리(exception)에 대해 보다가 문득 ArithmeticException에 대해 궁금해져서 정리하게 된 글입니다. 개요아래 코드의 실행 결과는 뭘까?public class Main { public static void main(String[] args) { int a = 5, b = 0; try { System.out.print(a / b); } catch (ArithmeticException e) { System.out.print("출력1"); } catch (ArrayIndexOutOfBoundsException e) { System.out.print("출력2"); ..
[React] 배포 후 간헐적으로 개발 서버에서 화면 에러가 뜨는 이유
·
Development
기록용으로 찾아보며 정리한 글로, 해당 내용에 대해 틀린 내용이 있을 수 있습니다! 틀린 내용은 지적해 주시면 감사하겠습니다:)개요개발 서버에 배포하면 간헐적으로 모든 라우터에서 에러바운더리가 발생하고 화면이 뜨지 않는 문제가 종종 발생하였다.새로고침 시나 라우터 이동 으로는 해결되지 않고 모든 페이지에서 발생했다. 그리고 브라우저에서 캐시 비우기 및 강력 새로고침을 하면 정상 동작하였다. 강력 새로고침만 했을 때는 동작하지 않음.즉, 캐시 비우기가 핵심인데 왜 이런 건지? 왜 개발 서버에서만 발생하고 로컬 환경에선 괜찮은 건지 이유가 궁금했다.강력 새로 고침: `Cmd + Shift + R` 예를 들어 스타일시트 수정이나, 이미지 수정은 크롬 브라우저에서 일반 새로고침 시에 캐시 때문에 반영이 안 되는..
[Web] 브라우저 “탭( Tab )”을 노리는 공격, Tabnabbing
·
Development
정보처리기사 실기를 공부하면서 브라우저 탭(Tab) 관련 보안 용어를 정리했습니다. 실무 경험담이 아니라, 문서/자료를 기반으로 정리한 글입니다. 아래 용어 중에서, 올바른 용어를 고르는 문제였는데, 정답은 Tabnabbing이다. 나머지는 문맥적으로 조합하여 부를 수는 있으나, 실제로 통용되는 정확한 정식 용어는 아닌 것으로 보인다. 문제에 출제된 단어와 문맥상으로 해석한 것은 아래와 같다.용어 요약용어내용표준성Tabnabbing (Reverse Tabnabbing)target="_blank"로 연 탭이 window.opener를 통해 원래 탭을 피싱 페이지로 바꿔치기널리 쓰임Tabjacking / Tabhijacking스크립트/확장프로그램이 탭의 콘텐츠/히스토리/포커스를 가로채거나 바꿔치기혼용Tabs..
[C언어] return 0, 그리고 0과 1의 진짜 의미
·
Development
오랜만에 C언어 보기 👀정보처리기사 실기 프로그래밍 언어에는 C언어, 자바, 파이썬이 나온다. 고로 두루두루 알고 있어야 함!! C언어는 대학교 1학년 때 배운 이후로 다 까먹은.. C언어의 return 0은 왜 True가 아닐까?return 0;이 “정상 종료”라는 건 알고 있지만, “그럼 0이 True인가?”, “if문에서 0이면 실행되나?” 같은 궁금증이 문득 들었다. 이 글은 C언어와 Shell에서 0과 1의 의미를 설명한다. C에서의 0과 1 (False / True)값의미조건식에서의 동작0거짓(False)분기 진입 안 함0 이외의 모든 값참(True로 간주)분기 진입if (0) puts("실행 안 됨");if (1) puts("실행 됨");if (-5) puts("이것..