본문 바로가기

안녕

(118)
느슨해진 권한 관리 씬에 긴장감을 주다 대부분의 IT 서비스에는 관리자가 접속할 수 있는 어드민 페이지가 있다. 우리 회사 또한 어드민 계정이라면 유저, 매출 등 다양한 정보를 어드민 페이지에서 관리할 수 있다. 문제는 회사가 빠르게 성장하면서 구성원도 늘어났는데 이 많은 사람들이 본인의 업무가 무엇이든 간에 어드민 권한 하나만 있으면 모든 정보에 접근할 수 있게 되었다는 것이다. 자칫하면 내부의 누군가가 민감한 정보를 유출하거나 조작할 가능성이 있었다.1. AS-IS메인 서버Node.js 환경의 레거시 서버다. 너무 덩치가 커져버려서 MSA로 계속 분리하고 있으나 아직 대부분의 로직이 메인 서버에 존재한다. 로그인 및 어드민 권한 관리 또한 메인 서버에서 담당한다.Firebase SDK구글에서 제공하는 툴이다. 로그인이나 권한이 필요한 페이..
휴면 처리를 하시겠읍니까, 휴먼? - 2 이번 편은 당일 기준으로 접속한 지 1년이 된 유저를 휴면 상태로 전환하는 로직에 대해 공유하려 한다. 3. 휴면 유저 전환 1편에서 설명했듯 하나의 Job은 여러 Step으로 구성된다. 그리고 이 Step은 Reader, Processor, Writer가 된다. 이 프로젝트에서는 휴면 유저를 선별하는 코드를 Reader에, 휴면 상태로 전환해서 저장하는 부분은 Writer에 구현한다. @Configuration @RequiredArgsConstructor public class ConvertToDormantUserBatchConfig { ... @Bean public Job convertToDormantUserJob() { return jobBuilderFactory.get(JOB) .preventRe..
휴면 처리를 하시겠읍니까, 휴먼? - 1 어느 서비스든 유령 회원은 존재한다. 특히 내가 일하고 있는 교육 서비스라면 더더욱 그럴 것이다. 뭐라도 하나 배워볼까? 하고 들어왔던 유저들이 작심삼일 후 우리의 존재를 잊어버리기 일쑤이기 때문이다. '고갱님, 그러지 말고 다시 한번 들어와서 뭐라도 배워보세요' 하고 마케팅 메일을 보내는 순간, '써본 적도 없는(?,,,잘 생각해보세요,,,우리 좋았잖아요,,,ㅠ) 서비스에서 내 개인정보를 가져다 쓰냐' 며 항의 CS가 빗발친다. 사실 장기 미접속자는 법적으로도 꽤나 민감한 이슈다. 장기 미접속자 정보를 분리 보관, 파기하지 않을 경우 과태료를 물게 되며, 개인정보가 유출되면 회사 이미지 훼손은 물론 과징금도 물게 된다. 중요한 건 꺾일 거지만 하는 마음 문제는...관련 법이 올해 9월에 폐지 예정이라는..
[2020년 회고] 테스 형, 올해 인생이 왜 이래? 오랫동안 블로그에 들어오지 못했다. 회사에서 여러 일로 절망에 빠져있었고 스스로 생각이 정리될 때까지 충동적이고 감정적으로 글을 남기고 싶지 않았다. 그건 순간적인 감정 토로일 뿐, 아무 해결책도 되지 않기 때문이다. 글을 쓰면서 북받쳐 괜한 자기 연민에 빠지고 싶지도 않았다. 중요한 건 부족한 점을 깨닫고 이겨내는 것이니까. 다행히 좋은 지인들 덕분에 조금씩 길을 찾고 있고, 올해 회고를 쓰며 그 내용을 공유해보려고 한다. 1. 회사 생활 1-1. 무슨 일이 있었나 생각해보니 1년이라는 시간 동안 퇴사 - 이직 - 휴직 - 복직 이라는 다이나믹한 사건이 연달아 있었다. 퇴사 맞지 않는 업무, 적응하기 힘든 사내 문화로 2년 만에 퇴사를 했다. 막 대리급으로 승진한 시기였고 그만큼 포기해야 할 것이 많았..
대기업에서 스타트업으로 이직하면 행복할까 - 2 지금의 회사로 옮긴 이유 회사를 이렇게 사랑할 수 있다고? 회사 사람들은 언제나 나의 적이라고 생각했다. 3년간 지켜본 전 직장은 서로 책임 소재를 떠넘기고 싸우기 바빴기 때문이다. 친구들도 모이기만 하면 각자의 회사 욕을 하느라 정신이 없었다. 퇴사하겠다고 노래를 불렀다. 그래서 막연히 다들 이렇게 살겠거니 했다. 그러다 해링이라는 친구의 SNS 게시물을 보았다. 회사를 다니는 게 즐거워보였고, 무엇보다 회사에 대한 자부심이 엄청났다. 회사를 이렇게 사랑할 수가 있다고? 진심이야? 나는 빨리 퇴근할 궁리만 하고 출근하는 게 지옥이었는데? '원래 SNS에는 좋은 글만 올리는 법이니까...' 하면서 의심의 눈초리로 해링의 SNS를 예의주시(!) 하기 시작했다. 하지만 이후 상황은 더 충격적이었다. 회사 동..
대기업에서 스타트업으로 이직하면 행복할까 - 1 나는 얼마 전 꿈을 좇아 충동적으로 퇴사를 지르고 스타트업으로 이직했다. 그리고 오늘은 내 생일이자 입사한지 딱 한 달 째인 날이다. 기념으로 내 경험을 주절주절 읊어본다. 전 직장을 떠난 이유 노답 문화 성희롱 + 군대 문화 + 파벌 형성의 대환장 콜라보였다. 아래는 내가 직접 듣고 겪은 사례들이다. 1. 입사 첫 날, 이제 신입이 회식 장소를 잡으라며 단란주점을 추천함 2. 워크샵 때 그 깡시골에서 불법 성매매 업소 찾아서 놀러 감 3. 너 그렇게 쌀 밥 안 먹으면/몸매가 그러면 나중에 애 낳기 힘들다고 잔소리(심지어 남자라 출산 경험도 없으면서ㅎㅎ) 4. 40대 차장이 자신을 오빠라고 지칭함 5. 애인은 왜 없는지, 결혼은 왜 안 하는지, 혹시 동성을 좋아하는 건 아닌지 주기적으로 물어 봄 여기에 ..
[TypeGraphQL] User 등록하기 1. resolver 이동 및 수정 index.ts에 있던 resolver를 옮겨볼게요. import {Mutation, Query, Resolver} from "type-graphql"; @Resolver() export class RegisterResolver { // gql은 종종 쿼리나 스키마가 없을 때 까다로워지는 경우가 있어 아래는 사용은 안하지만 남겨놓는다. @Query(() => String, {name: 'helloWorld'}) async hello() { return "hello world!"; } @Mutation(() => String) async register() { return "hello world!"; } } 서버를 실행하고 스키마를 확인하면 정상적으로 mutation이 ..
[TypeGraphQL] 설치 및 resolver, entity 생성하기 1. 필요한 라이브러리 설치 graphql, express, typescript 등을 이용해 간단한 서버를 구축해봅시다. TypeGraphQL은 graphql 사용을 도와주는 라이브러리예요. yarn init -y # dependencies yarn add apollo-server-express express graphql reflect-metadata type-graphql # dev dependencies yarn add -D @types/express @types/graphql @types/node nodemon ts-node typescript 터미널에 위와 같이 입력해 설치합니다. 여기서 잠깐, dependencies와 devDependencies의 차이를 짚고 넘어갈게요. dependencie..