본문 바로가기

전체 글170

📈 스톡옵션을 받으셨나요? 관련 용어/개념 알아보기 스타트업이나 IT 기업에 다니게 된다면 흔히 스톡옵션을 받게 됩니다. 스톡옵션... 단순히 주식을 준다고 생각할 수 있지만 관련 대화를 들어 보면 외계어로 가득차 있어 알아 듣기가 힘들 수 있습니다. 재직 6개월 후 그랜트 되고 클리프 2년에 반 베스팅, 클리프 3년에 나머지 베스팅 할 수 있어요 이 글을 끝까지 읽으시면 이 말을 이해하실 수 있고, 스톡옵션이 대충 어떤 건지 아실 수 있습니다! 🐜 옵션이 애초에 뭘까? 옵션은 파생상품입니다. 파생상품은 어떤 자산(기초자산)에서 파생돼 나온 계약을 말합니다. 즉, 옵션은 계약서에 사인하고 효력이 생기는 계약(약속)입니다. 뭐를 약속하냐면 기초자산을 얼마에 사거나 팔 것인지를 약속합니다. 이렇게 말하도 와 닿지 않으시죠? 옵션을 왜 사고 팔까요? 여러분이 .. 2024. 2. 26.
무중단, 카나리 배포 환경에서 DB Schema 수정하기 문제 상황 자주 있는 상황은 아니지만 DB의 Column을 수정해야 할 일이 있습니다. 굳이 왜 수정해야 하나? 어차피 이름만 다른거 아니야? 하실 수 있지만 이름과 사용 용도가 다르면 장기적으로는 인지 비용이 높아져 팀 전체의 자원이 더 많이 들게 됩니다. 무중단의 핵심은 이 작업으로 인해 에러를 만나는 유저가 1명도 없어야 한다는 것입니다. 그럼 가장 먼저 떠올리는게 DB Column 변경과 배포를 딸깍딸깍 동시에 진행하면 되지 않을까 생각할 수 있습니다. 솔직히, 팀 리소스가 부족한 상황에서는 좋은 해결책이라 생각합니다. 새벽 시간 트레픽이 없을 때를 틈타 작업하면 큰 문제가 없을 수도 있습니다. 하지만 서비스의 중요도가 높거나 카나리 배포를 하고 있는 환경에서는 이것도 어렵습니다. 이 상황에서 정.. 2024. 2. 25.
🤑 연봉 관련 용어 총 정리! (계약연봉, 원천 징수액, 추가수당, 인센티브, IC, TC) 취업한지 얼마 안 됐을 때 들었던 각종 연봉 관련 용어들을 떠올려 보면, 굉장히 낯설고 어지러웠습니다. 저 같이 이런 용어들에 익숙하지 않은 분들을 위해 연봉 관련 기초적인 용어들을 정리해 보았습니다! 추가로 IT 업계에 계신 분들이라면 IT 선진국인 미국의 얘기를 들을 일도 많아 미국에서 쓰는 연봉 관련 내용도 정리했습니다. 한국에서 많이 쓰는 연봉 관련 용어 용어 설명 계약연봉, 기본급 근로 계약서에 있는 근로시간 만큼 딱 근무했을 때 받게 되는 돈입니다. 보통 세전, 각종 수당이나 인센티브를 제외하고 말합니다. 그래서 기본급 * 12가 연봉이 되는 경우는 거의 없습니다. 추가수당 (연장근로, 휴일근로, 야간근로) 근로 계약서에 있는 근로시간 외에 근무하면 받는 보상들을 말합니다. 정해진 근로시간 보.. 2024. 2. 15.
다양한 로그인 방법을 알아보자 (OAuth, Open ID, OIDC, SSO, SFA, 2FA, MFA, OTP, PassKey) 🐜 큰 그림 우선, 로그인이란 나만 아는 정보를 제공해서 모두가 접근할 수 없는 특정 정보를 접근하는 것을 말합니다. 당연히 보안이 좋기 위해서는 나만 알 수 있는 정보들을 최대한 많이 제공하는게 좋겠죠. 하지만 로그인 할 때 마다 아이디/비밀번호를 입력하고, 지문이나 얼굴 인증을 하고, OTP 코드를 입력한다면 너무 불편해서 거의 쓰지 않겠죠? 그래서 보안과 편의성 사이의 저울질이 중요합니다. 🐜 분류하기 SFA, 2FA, MFA = 1번만 인증을 하냐, 여러번 인증을 하냐? 로그인 할 때 아이디/비밀번호든, 생체인증 (얼굴, 지문 등)이든, 1개의 인증정보만 제공하면 SFA (Single Factor Authentication)입니다. 여기에 더해 추가로 흔하게는 OTP (One-Time Passwo.. 2024. 2. 8.
Kotlin Sequence (스퀸스) 에 대해 알아보자 🐜 Sequence, 본질적으로 뭘까? Type Kotlin의 Sequence는 Type입니다. Collection 처럼 값을 담고 있지만 Eager하게 만드는게 아닌 Lazy하게 만들어 대량의 데이터를 효율적으로 다루거나 무한히 계속되는 데이터를 다룰 수 있게 해 줍니다. 예를들어 아래와 같이 특정 연산을 하고 난 결과의 1번째 값을 가져오는 코드가 있다고 해 봅시다. (100 until 2_000_000) .map { it * 2 } .filter { it % 3 == 0 } .first() 이 코드의 내부 동작을 살펴보면 우선 map으로 모든 원소를 2배 한 후, filter로 모든 원소의 나머지를 계산해 0인 원소만 남긴 뒤, 여기서 첫 번째 원소를 가져옵니다. Eager 하게 동작하기 때문에 이.. 2024. 2. 4.
핵사고날? 클린 아키텍처? DDD? 🐜 취준생들의 단골멘트 취준생들의 이력서에 단골로 등장하는 단어가 있습니다. 이름도 멋진 헥사고날 Architecture입니다. 처음 헥사고날 Architecture류의 용어들 (헥사고날 Architecture, DDD, Clean Architecture)를 접했을 때 저는 쓸데없이 복잡하고 혼란스러운 이것들을 왜 써야 하는지 도저히 이해할 수가 없었습니다. 그도 그럴게, 헥사고날 Architecture가 왜 좋은지 알려면 Business Logic이 꽤 복잡한 애플리케이션을 다뤄야 하기 때문입니다. 간단한 CRUD 애플리케이션에 핵사고날 아키텍처를 써 봤자 쓸데없이 복잡할 뿐이죠. 그럼 헥사고날 Architecture가 왜 태어났고 왜 유용한지 여태까지 이해하고 경험한 내용들을 써 보겠습니다. 🐜 용어.. 2024. 1. 28.
📖 규칙 없음 : 넷플릭스는 어떻게 일할까? 🐜 평점 : 3 / 5 (★★★☆☆) 넷플릭스의 일하는 방식을 엿볼 수 있어서 재밌었고, 급진적으로 보이는 문화에도 나름의 탄탄한 이유가 있어서 지켜보는 것 만으로도 재밌었습니다. 게다가 제가 다니고 있는 회사 (토스)의 문화랑도 비슷해 공감하면서 본 부분도 있었습니다. 하지만 재미를 제외하면 현실적으로 해당 내용을 현실에 적용하기에는 많은 무리가 있을 거 같은데, 이런 고민에 관련된 내용은 없고 단순 소개 위주의 내용이였습니다. 🐜 규칙 없음을 읽게 된 이유 최근에 토스라는 회사에 입사하게 됐는데 누군가가 토스의 문화가 넷플릭스의 문화와 관련이 많다고 해서 넷플릭스의 문화를 소개하는 규칙없음이라는 책에 흥미가 생겼습니다. 기업 덕후(?)라 기업에 관한 여러 책을 읽는 걸 좋아해서 읽게 됐습니다. 🐜 요.. 2024. 1. 27.
3️⃣ 2023년 회고, 2024년 목표 2023년, 난 무엇을 했을까 🐜 취업 전까지 미친듯이 공부 재밌게도 9월에 취업하기 전까지 매일 공부시간을 측정했습니다. 대충 "독서실에 몇 시에 가서 몇 시에 왔으니깐 오늘 공부는 몇 시간" 수준이 아니라, 정말 집중할 때만 타이머를 눌러 측정했습니다. 아무래도 혼자 공부하다 보니 불안한 마음을 이런 볼 수 있는 수치로 나타내지 않았나 싶습니다. 그 과정에서 깨달은게 있다면... 생각보다 평균으로 따지면 공부시간이 많지 않다 (주말에 쉬고 하면) 주말에 쉬려고 마음을 먹지 않았는데도 5일 정도 하면 집중력에 한계가 온다 (이렇게 훈련된 건지 이게 보통 사람의 한계라 사회가 주 5일로 일하는지는 모르겠지만...) 그래서 정리도 할 겸 평균 공부시간과 그 달에 배운 것을 간단하게 적었습니다. 평균 공부시.. 2024. 1. 1.
📚 2023년 독서 활동 정리 + 회고! 선요약 후설명 이번년도는 총 103권의 책을 읽었습니다! 🎉 한국어책 99권, 영어책은 4권을 읽었습니다 놀랍게도 문학 1권, 나머지는 모두 비문학 / 실용서...! 🥲 2023년 독서 경향 읽고 싶은 거만 읽자 돌이켜 보면 평생 독서를 무언가의 도움이 되기 위해 해 왔던거 같아요. (공부에 도움이 되지 않을까? 외국어에 도움이 되지 않을까?) 근데 2023년은 읽기 싫은 책은 읽지 말자는 생각으로 정말 읽고 싶은 책만 읽었습니다. 그 덕분에 인생에서 가장 많은 책을 읽었지만 돌이켜 보면 정말로 도움이 된 책은 굉장히 적었습니다. 보통 도움이 되거나 좋았던 책은 평소 읽지는 않지만 추천을 받아서 읽거나, 서점에서 우연히 발견한 책인 경우가 많았는데 읽고 싶은 책만 읽으니 성향에 맞는 책만 찾게 되고, 그.. 2023. 12. 31.
Thread Pool에 적합한 Thread의 개수는 몇 개 일까? Thread가 많다고 무조건 좋지는 않다 일반적으로 1개의 요청에 1개의 Thread를 사용하는 Spring 같은 Framework를 사용한다면 Thread를 최대한 많이 할당하고 싶은 충동을 느낄 수 있습니다. 하지만 Thread는 논리적 단위라는 걸 기억해야 합니다. 결국 Thread가 돌아가는건 Process 위에서 결국 Process가 돌아가는 CPU Core 위에서 Thread를 실제로 실행하는 주체를 고려하지 않고 무작정 Thread 개수를 늘리기만 하면 Context Switching으로 인한 Overhead만 증가합니다. Core의 개수만큼 Thread? CPU-Bound한 작업이 대부분이라고 가정할 때, CPU 개수 만큼의 Thread를 두는게 좋습니다. 결국 Thread를 실행하는건 C.. 2023. 12. 25.
☁️ Swift Data를 써서 iCloud 연동 기능 만들기 Swift Data 간단 소개 Apple의 ORM (Object Relational Mapping) ORM이란 Application 내부 객체와 DB 상의 객체를 연결시켜 주는 기술입니다. 어떤 언어나 어떤 DB를 써도 쉽게 찾아볼 수 있는 기술이지만, Apple의 레전드라면 이게 이번년도 (2023년)에 나왔다는 것입니다... 즉, Swift Data를 쓴 프로젝트를 구동하려면 iOS 15 이상이 필요하고, 자연스럽게 개인 토이 프로젝트 아니면 현실적으로 쓸 수 없습니다. 하지만 저는 토이 프로젝트를 하니 과감하게 iOS 15 미만은 고객에서 포기하고 써 봤습니다. Swift Data를 쓰기 위해서는 3가지 단계를 거치면 됩니다. Model을 정의 ModelContainer를 주입 context나 Pr.. 2023. 12. 24.
🥤 빨대의 구멍은 몇 개 일까? 발단 퇴근 길에 블라인드를 보던 중 흥미로운 인기글을 봤습니다. 바로 빨대의 구멍은 몇 개 인가라는 글이였는데요. 댓글에서는 예상대로 뜨거운 논쟁이 벌어지고 있었는데, 댓글의 반응을 요약하면 크게 4가지로 갈린거 같아요. (이유없이) 1개/2개다 ~한 이유로 1개/2개다 위상수학적으로 1개다 구멍의 정의는 ~하고 빨대는 이 정의에 부합하지 않아서 구멍이 없다 쓸데없어 보이는 논쟁이지만 사람마다 답이 갈린다는게 신기했고, 또 제가 생각하는 답은 댓글에 없어서 정리해서 적어보면 재밌을 거 같아 제 생각을 적어보게 됐습니다! 제 자신의 배경 소개 후광효과를 바라고 하는건 아니고, 어떤 배경과 경험을 했냐에 따라 답이 달라질 거 같아서 제 자신을 간단히 소개하겠습니다. 빨대 논쟁(?)에서 유효한 제 경험은 2가.. 2023. 12. 16.
CQRS (Command Query Responsibility Segregation) 알아보기 CQRS(Command Query Responsibility Segregation)가 뭔데 CQRS는 영어 줄임말 그대로 Command와 Query를 분리한다는 개념입니다. Command가 뭐고, Query는 또 뭐고, 왜 분리해야 할까요? Query - 읽는 동작입니다. 읽기만 할 뿐 데이터나 상태를 절대 변경시키면 안 됩니다. Command - 변경하는 동작입니다. 보통 내부 상태나 데이터를 구체적으로 어떻게 변경할지는 명시하지 않고 도메인에 맞는 동작을 전해주는 경우가 많습니다. 여기서 Command에 대해 자세히 알아봅시다! Command가 상태를 변경한다고 해도 이를 명시적으로 하면 결국 어떤 동작을 해야 할지 각각의 도메인에 가서 다 확인해야 합니다. 예를들어 배송 시스템이 있다고 하고 유저가.. 2023. 12. 8.
🏦 연말정산 간단히 알아보기! 연말정산이 뭐야 우리가 월급을 받으면 세금을 미리 떼고 줍니다. (소득세, 지방소득세, 4대 보험 등) 이를 원천징수이라 부르는데요. 근데 우리가 세금을 얼마 내야 되는지 국가가 어떻게 정확히 알까요? 사실 모릅니다. 국가는 다양한 요소를 고려해서 세금을 매기는데요. 예를들어, 가상의 인물 2명이 있다고 해 봅시당. 혼자 사는 사람 부모님을 모시고 살면서 아이도 3명 낳고 지병이 있어서 병원비도 많이 나오는 사람 이 2명에게 같은 세금을 부과한다면 불공평하지 않을까요? (적어도 한국의 세법은 불공평하다고 봅니다) 그래서 일단 원천징수로 세금을 미리 떼고, 연말이 되면 여러가지 요소를 고려해서 진짜 내야할 세금을 다시 계산합니다. 이 진짜 내야할 세금을 결정세액이라 합니다. 연말정산은 여러가지 자료를 정부.. 2023. 12. 3.
IT 스타트업의 제품 성공 전략 스타트업과 중소기업의 차이점 처음 취업준비를 시작했을 때 의문을 가졌던게 있습니다. 바로 스타트업과 중소기업의 차이점이 뭐지입니다. 그때 나름 내렸던 결론이 그냥 중소기업이라 하면 사람들이 안 오니깐 스타트업이라고 멋있게 말하나보다였습니다. 하지만 스타트업에 대해 알아보고 공부해 보니, 꼭 그렇지는 않을 수도 있다고 생각했습니다. 사실 단어의 정의라 사람마다 말하는게 다를 수 밖에 없고, 사실 어떤 단어를 쓰는지는 중요하지도 않습니다. 핵심은 스타트업은 2가지 특징이 있다는 겁니다. 시장이나 제품에 대한 가설이 있고 이를 검증하려 한다 빠른 성장을 추구한다 스타트업이 무조건 좋을까? 스타트업은 결국 기업이 성공하기 위한 1개의 전략입니다. 업종이나 산업이 스타트업의 전략에 맞지 않으면 스타트업이 하면 안.. 2023. 12. 2.
🐶 신입 개발자가 3개월 현업에서 굴러본 후기 오랫동안 꿈꿔왔던 토스에 취업해서 일한지도 3개월이 지났습니다. 아직까지는 하루하루 뛰어난 분들 곁에서 일한다는게 감사하고, 세상에 도움이 되고 있다고 믿는 제품에 기여하는 것도 즐겁습니다. 서당개도 3년이면 풍월을 읊는다고 하니, 서당개 달성률 10%가 지난 시점에서 지난 3개월을 회고해 봅니다. 취업준비 할 때 중요할 거라 생각했던 것들과 실제로 중요한게 너무 다르다 취업준비를 위해 저는 여러 새로운 기술과 포트폴리오를 만드는 것에 집중했습니다. K8S, ES, QueryDSL, Kafka 같은 여러 최신 기술들을 공부하고, 필요하다고 생각하지는 않지만 배움을 위해 포트폴리오를 MSA로 만들기도 했습니다. 하지만 이런 기술들의 기반을 적극적으로 개발하고 최적화 하는 팀이 회사에 얼마나 있을까요? 적어.. 2023. 11. 26.
😵 1달동안 MSA 다시 Mono로 전환한 후기 취준생 시절에 열심히 만들었던 책잇아웃이라는 독서 관련 사이트 있습니다. 처음에는 취업을 위해서 시작했지만 갈수록 제품에 애정이 생겨 취업 후에도 계속 운영하고 있었는데요. (운영이라고 해도 AWS에 서버 띄어 놓는 게 다이지만...) 문제는 프로젝트가 상당히 크고 복잡해서, 유지보수는 커녕 운영도 힘들다는 것이었습니다. 일단 서버 비용이 1달에 거의 20만원 가까이 나왔습니다... 9개의 서버를 동시에 띄워야 하는 MSA 구조 때문이었는데요, 서버 비용뿐만 아니라 여러 이유로 MSA 구조였던 프로젝트를 다시 Monolithic 구조로 전환하기로 하였습니다. 1달 동안 회사를 다니면서 주말에 틈틈이 프로젝트를 진행했는데, 없는 시간 쪼개서 하는 거니 기왕이면 뭔가를 더 하고 싶어 모두 Kotlin으로 재.. 2023. 11. 13.
Kotlin의 inline 함수 알아보기 inline이 뭐하는 걸까? 우리가 코딩을 할 때 적극적으로 의식하지는 않지만, 함수를 호출하는건 어느정도 Overhead를 동반합니다. 보통은 현대 컴퓨터 성능이 워낙 좋고, 컴파일러가 최적화를 최대한 해 줘서 굳이 의식할 필요는 없습니다. 하지만 Kotlin에서는 함수가 일등시민이기 때문에, Parameter에 함수를 Argument로 넘기거나, 함수를 Return Type으로 가지는 함수가 있을 수 있습니다. 이는 자바에서는 FunctionN 객체를 만들거나 Closure를 사용할 경우 함수를 호출하는 방식으로 처리합니다. 이 경우 Kotlin에서 함수형 스타일의 코드가 성능에 어느정도 영향을 줄 수 있겠죠? 그럴때 inline을 쓰면 함수 호출 부분을 없애고 코드안에 함수 내용을 넣어 줍니다. I.. 2023. 10. 9.
Logback 간단하게 알아보기 Logback이 뭐 하는 걸까? Logback은 Java에서 가장 많이 사용되는 Logging 라이브러리입니다. Logback Home Logback Project Logback is intended as a successor to the popular log4j project, picking up where log4j 1.x leaves off. Logback's architecture is quite generic so as to apply under different circumstances. At present time, logback is divided into three mod logback.qos.ch Logback의 간단한 구조 Logback은 크게 3가지로 구성되어 있습니다. Logger.. 2023. 10. 1.
Redis, RabbitMQ, Kafka를 각각 Message Queue로 사용할 때의 장단점 Message Queue를 신중히 선택해야 하는 이유 MSA 환경에서 비동기로 무언가를 처리하거나, Transaction을 처리하기 위해 많이 쓰이는 방식이 바로 Message Queue를 사용하는 방법입니다. Message Queue, 그거 아무거나 대충 쓰면 되지 왜 신중히 선택해야 할까요? 모든 SW 기술들이 그렇지만, 결국 장단점이 있기 때문입니다. 속도-비용-정합성 사이의 아찔한 줄타기를 이어간 결과, 크게 3가지 선택지가 주어지게 됐는데요. 이 3가지를 비교해 보고 어떤걸 선택해야 할지 알아보겠습니다. Redis의 장단점 아무튼 빠름. 근데 잃어도 알빠? Redis하면 보통 Cache를 떠올리시겠지만, Message Queue의 기능도 지원하기 때문에 Message Queue로도 사용할 수 있.. 2023. 9. 30.
🔒 분산 Architecture에서 Redlock으로 Lock 걸기 분산 Architecture에서 Lock 걸기의 어려움 Monolithic Architecture에서도 성능을 고려하면 Lock 걸기가 복잡했습니다. 여러 Transaction Level을 고려하고, 재시도 매커니즘을 고안하고, Deadlock 상황에서 어떻게 해야할지 고려하고.. 근데 여기에 더해 MSA 같은 분산 Architecture에서 Lock을 걸어야 한다면 어떨까요? 성능을 더욱 고려해야 하고, Transaction 거는 것도 훨씬 복잡하고, Deadlock은 밥 먹듯이 있지 않을까요? Redis Instance가 1개일 경우 만약 Redis 1개를 공유하면 Lock을 구현하는건 비교적 간단합니다. Lock 별로 고유한 Key를 정의한 후, setNX를 사용해서 있을 경우 set하고, 없을 경.. 2023. 9. 28.