겨울나기 준비
아무래도 정신을 똑바로 차리지 않으면 안되겠다.
스타트업 시장에 혹한기가 찾아왔고, 우리 회사에도 차가운 바람이 불어오고 있다.
혹한의 추위 속에서 주니어 개발자로서 살아남기 위한 노력을 지금보다 더 치열하게 하지 않으면 안되겠다.
이번 인프콘 2023 정주행이 겨울나기 준비에 있어서 유용한 양분이 되어주기를.
모든 세션 3줄 요약 + 1줄 감상
소프트웨어 설계와 추상적, 구조적 사고 🤨
- 문제 해결을 위해서는 유연하게 해결할 수 있는 유연한 방법론을 제시할 수 있어야 한다.
- 추상화: 가능한 만큼 단순화해서 분해해서 공통되는 특성을 추출하고 파악하는 것
- 구조화: 나눠진 것들을 겹치지 않게 빈틈없이, 목적에 따라 순서대로 나열하는 것
- "이 세션은 설명법 자체가 지나치게 추상적이어서 이해하기에 어려웠다."
코프링 프로젝트 투입 일주일 전 🤩
- Why 코틀린? ⇒ 자바 대비 간결한 문법, 언어 레벨의 다양한 기능들, 지속적인 업데이트 및 활발한 커뮤니티
- Why 코프링? ⇒ 스프링 진영의 적극적인 지원, 국내 많은 IT 기업에 의해 검증됨, 레퍼런스도 꾸준히 증가하고 있음
- 다양한 도구들과 함께 사용하면 더욱 좋다! (Kotest, MockK, kotlin-logging, ...)
- "개인적으로 무척 관심 있는 기술 스택이기 때문에 무척 유용했다."
타입스크립트는 왜 그럴까? 👍
- 타입을 서로 포함하고 포함되는 집합의 관계로 보면 이해하기에 쉽다.
- 타입 호환성: 특정 타입의 값을 다른 타입으로 취급해도 괜찮은지 판단하는 것
- 타입 계층도에는 Unknown, Never, Any 라는 특수 타입들이 있다.
- "정말로 집합의 관점에서 보니 타입을 이해하기에 훨씬 수월해졌다."
당신의 웹페이지는 몇점인가요? 👍
- 웹 성능 개선 = 사이트 내 로드 시간 단축 + 매끄러운 상호작용 + 사용자 체감 성능
- 결국 중요한 것은 로딩 성능과 렌더링 성능
- Lighthouse 검사 후 개선사항 몇 개 정도만 반영해도 90점대 이상의 높은 점수를 충분히 달성할 수 있다.
- "Lighthouse 고점 달성이 생각보다 쉽다는 걸 깨달았다."
구글 Apps Script와 ChatGPT로 많은 동료들 생산성 향상 시킨 썰 🙂
- 프로그래밍을 이루는 3가지 = 문제 이해, 해결 방법 제시, 해결 방법 표현
- 해결 방법을 표현하는 부분은 ChatGPT로도 많이 해결할 수 있다.
- Google Apps Script와 ChatGPT를 사용해서 전사적으로 유용하게 쓰이는 프로그램을 짧은 시간 내에 만들 수 있었다.
- "기술적으로 유용하진 않았지만 동료들의 생산성을 위해 힘쓰는 모습이 인상 깊었다."
지속 가능한 소프트웨어 개발을 위한 경험과 통찰 🤔
- 개발 = 변화하는 요구사항에 대한 지속적 수용
- 주니어 = 일정에 맞는 기능 + 품질 + 매번 질문하기
- SW를 잘하려면 배우는 것의 전문가가 되어야 한다.
- "개발자의 소프트 스킬 요약 정리"
출시 3일만에 앱스토어 2위를 달성한 사이드 프로젝트 😮
- 조코딩님 유튜브를 통해 GAS라는 앱에 흥미를 느껴, 한국의 중고등학생 익명 투표앱을 만들어보기로
- 소셜 앱 부문에서 당근에 이어 2위 달성
- 한국 250만 대비 600만 중고등학생이 있는 일본 진출 계획
- "도전과 열정으로 넘치는 IT 특성화고 친구들이 부러웠다."
2곳 중 1곳은 무조건 합격하는 개발자 이력서 만들기 🤩
- 0퍼센트에서 60퍼센트로 합격률 올린 썰
- 포트폴리오를 킥으로 사용하자.
- 어떤 개발자가 되고 싶은지를 써라, 포부는 중요하지 않다.
- "나도 포트폴리오를 주력으로 삼아서 이직 준비를 해야겠다!"
인프런 아키텍처 2023 ~ 2024 👍
- 1개의 레거시 프로젝트, N개의 목적 조직의 불편한 동거 상황을 개선해야 했음
- Divide and Conquer - 거대한 레거시를 복제해서 각자가 격파하자!
- N개의 프로젝트 분할 과정 (요약 불가)
- "말그대로 레거시를 '격파'하는 느낌이 들어서 재밌고 유용했다."
EKS 비용 절감 전략 😕
- Spot instance를 활용한 비용 절감 전략
- Karpenter, Kubecost, CronJob, Botkube, OPA Gatekeeper 적용
- 노드 비용 80% 절감
- "쿠버네티스, 나에겐 아직 먼 이야기"
오늘도 여러분의 API는 '안녕'하신가요? 😮
- API 문서와 실제 동작의 불일치, 설계의 막막함, 변경사항 반영, 사용되지 않는 API 관리 등의 어려움
- API First Design = 하나의 API를 만드는 것은 하나의 계약서를 작성하는 것과 같다.
- Open API 명세 기반의 API 계약서를 우선순위 1순위로 고려하여 협업하고 설계해야 한다.
- "API의 중요성을 깨달았다. Swagger, Codegen의 활용 방법을 공부하자."
Turborepo, Next.js, TypeScript를 이용한 프론트엔드 모노레포 적용기 😐
- 모노레포 = 하나의 레포지토리에서 독립적인 여러 프로젝트를 관리하는 방법
- 개발자, 고객사, 운영팀의 여러 시점을 고려했을 때 공통 패키지를 함께 사용하는 모노레포가 합리적
- 모노레포는 하나의 제품에 필요한 패키지를 여러 개 만들어야 할 때 적절하다.
- "사실 내가 직접 Turborep로 개발해보는 입장이 되어야 와닿을 만한 이야기"
Raw Query 리팩토링을 통한 주니어 개발자의 성장 이야기 🙂
- 동일한 쿼리 중복 사용을 개선했다.
- TypeORM의 Entity Manager가 유용했다.
- 잦은 hotfix 덕분에 테스트 코드의 중요성을 체감했다.
- "같은 주니어 개발자로서 참고하기에 좋은 회고였다."
커뮤니케이션을 잘 하는 개발자의 4가지 습관 😐
- 좋은 개발자 = 커뮤니케이션 잘 하는 개발자
- 스펙 구현형 개발자가 아닌 문제 해결형 개발자가 되어야 한다.
- 1. 해결하려는 문제와 의도 질문 / 2. 내가 이해한 바 공유 / 3. 안 된다고 할 때는 대안 제시 / 4. 또 다른 해결 방법 고민
- "다소 뻔하다는 생각도 들지만, 그만큼 중요한 이야기이므로 명심하자."
변별력을 200% 더 높인 개발자 채용 방법 : 코드 리뷰 테스트 🙂
- 코딩 테스트 - 지원자 부담 ↓ 검증 범위 ↓ / 과제 - 지원자 부담 ↑ 검증 범위 ↑
- 코드 리뷰 테스트 - 지원자 부담 ↓ 검증 범위 ↑
- 집을 지어보라고 하는 대신에 이미 지어진 집에 대해 피드백을 해달라는 방식
- "한번쯤 꼭 경험해보고 싶은 코드 리뷰 테스트"
안타깝게도 오늘의 TDD는 실패한 것 같군요. 내일은 가능할지도...? 🙂
- 우리는 얼렁뚱땅 문제를 해결하지만 어떻게 성공했는지 기억을 못함
- 요구사항을 이미 찾은 것처럼 가정하고 거꾸로 연구해야 한다.
- TDD 처음에 실패하는 테스트를 작성하는 것은 요구사항을 작성하는 것
- "TDD를 현실의 문제의 관점에서 보니까 정말로 합리적인 방법론으로 보인다."
왜 내가 만든 서비스는 아무도 안 쓰지? 🙂
- 비전공자로 시작해서 29개의 사이드 프로젝트와 함께 성장해 온 이야기
- 좋은 문제를 찾고, 이해하고, 해결하는 서비스를 만들어야 한다.
- 핵심 기능 하나에 집중해서 빨리 완성하고, 만든 여정을 기록해야 한다.
- "사이드 프로젝트를 학습용과 상품용으로 나눠서 많이 만들어봐야겠다!"
왜 구글 시니어 개발자는 코딩을 안할까? 🙂
- 해외의 시니어, 스태프, 대마법사는 연차가 쌓일수록 코딩을 거의 안하고 미팅이나 문서 작성을 정말 많이 한다.
- "소프트웨어 엔지니어링은 시간과 다른 프로그래머들을 더할 때 발생하는 현상입니다." - Russ Cox
- 시니어 개발자는 개발 조직 전체의 아웃풋 향상을 위해 '곱빼기 코딩 / 진명 / 정원사' 로서 활동한다.
절반의 성공, 마이크로 서비스 아키텍처 도입과 조직 구조 😕
- spotify의 스쿼드 형태를 따라서 조직을 매트릭스 조직과 목적 조직으로 나누었음
- 버즈빌의 MSA 도입 사례
- 버즈빌의 MSA 도입 이후의 10가지 배움
- "MSA, 언젠가는 나도 꼭 경험해보고 싶지만 아직은 🙅♂️"
Armeria로 gRPC 실전 적용하기 😐
- Armeria를 사용하면 서비스 장애에 대응할 수 있게 된다.
- Armeria를 통해 메트릭을 수집할 수 있고 분산 트레이싱도 적용할 수 있다.
- gRPC의 아쉬운 점들(Swagger와 Postman 사용불가, 별도의 포트를 사용해야 하는 점)을 보완해준다.
- "저번 인턴 경험 이후 아직은 gRPC를 다시 탐구할 일이 없어서 그닥."
어느 날 고민 많은 주니어 개발자가 찾아왔다 2탄 👍
- 1탄은 취업과 이직에 초점을 뒀다면, 2탄은 취업 이후 회사 안에서의 성장에 초점
- 경기(회사 업무)와 훈련(업무 외 학습 시간)을 통해 성장해야 한다.
- 기술을 학습하는 시간만큼 비즈니스 이해에도 똑같이 투자해야 한다.
- "비즈니스를 이해해서 꼭두각시 같은 개발자 신세에서 벗어나야 한다!"
유니크론의 시대 😵
- 근 3개월 간 약 10,000개의 언어 모델이 등장했다.
- 2017년부터 언어 모델이 어떻게 발전해왔는지
- 더 큰 팜을 만들고 계속해서 큰 모델을 만드는 사이클은 GPU가 사람보다 싼 이상 계속된다.
- "아직 AI/ML 이야기는 듣기만 해도 너무 어렵지만, 이번 세션을 통해 발전상을 알아볼 수 있었다."
Hello, Interactive Developer 🤩
- Interactive Developer = 인터렉션을 기반으로 예술적인 웹 사이트를 개발하는 사람
- WebGL을 통해 화려하고 인터렉션이 많은 그래픽을 웹에서 처리할 수 있음
- Three.js를 활용한 작업 과정은 마치 촬영과 같다.
- "생각지도 못한 분야에서 엄청난 자극과 영감을 받을 수 있어서 좋았다."
그 많던 코드는 누가 다 먹었을까 😮
- 클라이언트와 서버 전체 영역으로 코드를 공유하는 Kotlin Multiplatform 개발기
- 장점 = 생산성 향상 / 단점 = 러닝 커비
- 멀티플랫폼으로 코드를 공유하고 싶은 경우에 활용하기 좋다.
- "이런 것도 있구나, 배울 것이 참 많다."
점진적 추상화 🤔
- 추상화 방향 - 소프트웨어 발전 방향과 일치하는 추상화를 해야 한다.
- 추상화 범위 - 너무 넓은 범위를 추상화하면 인터페이스를 자주 변경해야 하니 추상화는 필요한 만큼만 하자.
- 추상화 시기 - 추상화 기준을 잘 잡고, 적절한 시기를 찾는 균형의 예술을 해야 한다.
- "추상화를 실제로 적용해보면서 많이 공부해봐야겠다."
팀 플레이어 101 😐
- 존경 받는 개발자들은 코딩 외 능력들이 뛰어나다.
- "요즘 잘 지내세요?" - 동료의 미묘한 답답함을 해결해주어라.
- 업무 전후 본질이 무엇인지, 어떤 관계가 얽혀 있는지, 말하지 않은 속마음이 무엇인지 되물어보자.
- "늘상 보고 들어오던 이야기 같지만, 역시 마음 속 깊이 체득이 되어 있는가는 다른 문제인 것 같다."
인프런에서는 수천 개의 테스트 코드를 이렇게 다루고 있어요 😮
- WHY - 코드의 문서화, 기존 기능에 대한 회귀 테스트, 복잡도와 코드 스멜 파악을 위해
- HOW - 단위 & 통합 & E2E 테스트
- NEXT - 테스트를 개선하기 위한 방법들
- "테스트는 역시 따로 놓고 봐도 배워야 할 부분이 넓고도 깊은 분야이다."
실시간 추천 시스템 구축하기 😵
- 유저에게 개인화된 추천 모델 개발기
- 데이터 정의 → 데이터 처리 → 데이터 활용
- 다양한 클라우드 서비스를 적극적으로 활용한 경험이 좋았다.
- "전반적으로 어려운 내용들이 많았다."
함수형 프로그래밍 3대장 경험기 - 클로저, 스칼라, 하스켈 😵
- Clojure - 현대판 LISP
- Scala - OOP + FP 멀티패러다임 & 불변 영속 데이터 구조
- Haskell - 참조투명성 & 등식추론
- "Kotlin과 JS 진영에서도 FP를 할 수 있으니, 언젠가는 꼭 공부해야 할 영역"
주니어 프론트엔드 엔지니어의 성과 및 역량 향상을 위한 실전 가이드 🧐
- 탁월한 개발자의 5가지 필수 역량
- 문제 해결(잘 하기)과 역량 향상(자라기)은 동전의 양면
- 목표 설계는 EXACT 모델에 따르자.
- "주니어 개발자의 성장을 일종의 방법론으로 바라보는 것 같아서 참신했고, 도움이 많이 되었다."
스프링과 함께 더 나은 개발자 되기 🤩
- 스프링의 모든 핵심 기술은 IoC와 DI로 이루어짐
- IoC와 DI는 객체지향 설계 원칙에 충실하다.
- 스프링 기술의 설계 방식, 디자인 패턴을 파악하면 애플리케이션 코드에도 동일한 원리와 설계를 적용할 수 있다.
- "스프링 기술, 안다고 생각하지 말고 한 번 더 깊이 공부해보는 시간을 가져보자."
DevOps를 가속화하는 플랫폼 엔지니어링 😮
- Platform Engineering = 셀프 서비스 기능을 사용할 수 있도록 툴체인과 워크플로우를 설계하고 구축하는 분야
- DevOps 팀의 Shadow Operation - 명목상 DevOps 팀이 있지만 실제로는 운영팀이 따로 있다면 의미가 없다.
- SRE = 운영팀을 위한 소프트웨어 엔지니어 ⇒ 소프트웨어로 문제를 해결하겠다!
- "DevOps 분야가 어떻게 발전해 왔는지, SRE팀 무엇인지 새롭게 알 수 있어서 좋았다."
우리는 이렇게 모듈을 나눴어요 🤩
- 멀티 모듈 설계 방법 (어떻게 분리할 것인가)
- 멀티 모듈 설계 시 고려사항
- 멀티 모듈보다 더 중요한 것은 신뢰 자본 쌓기
- "멀티 모듈 이야기 뿐만이 아니라, 회사와 함께 성장한 이야기를 들을 수 있어서 유익했다."
웹뷰를 이용해 웹 서비스를 앱으로 빠르게 구현하기 🙂
- 웹 앱 = 모바일 화면'도' 구성한 웹 / 모바일 앱 = 모바일 화면'만' 구성한 앱
- 웹뷰 = 앱이 웹 컨텐츠를 표시하는 데 사용할 수 있는 내장형 브라우저
- 웹뷰는 Bridge라는 JS 인터페이스를 통해 통신한다.
- "생소한 웹뷰 개발 과정을 시연과 함께 볼 수 있었기 때문에 해당 분야에 대해 어느 정도는 알게 된 느낌"
SSR의 기쁨과 슬픔 😮
- SSR의 변천사 - Static Web Site → CGI → Server Side Template → CSR → SSR
- 당근의 동네생활을 CSR에서 SSR로!
- 빠르게 그릴 수 있는 부분은 먼저 그리는 Streaming SSR
- "그동안 CSR vs SSR, 가타부타 말이 많아서 어지러웠는데 Streaming SSR... 한 번 공부해보는 것도...?"
시니어 개발자 너머의 성장 😐
- 점점 익숙해지면, 성장은 느려짐
- 능숙해진 이후의 성장은 시니어 개발자의 영역
- 스태프 엔지니어는 RFC(Request for Comments)와 ADR(Architecture Decision Record)을 위해 필요하다.
- "아직은 넘볼 수 없는 시니어 개발자의 영역"
패션 이커머스 서비스의 아키텍처 성장 기록 🙂
- 모놀리식 - 단순함이 주는 명확함이 있지만 구조적 한계와 레거시 코드의 문제가 있었다.
- Output Goal vs Input Goal - 내가 얻고자 하는 목표에 대한 관심만 많고, 실행 목표에 관심이 적으면 안된다.
- 서비스 성장 속도를 유지하면서 높은 품질을 유지하기 위한 노력들
- "아직 나는 MSA를 경험하기엔 부족하지만, 그래도 이 회사의 성장 기록을 보면서 자극을 받을 수 있었다."
기적의 4일! Go-성능 선착순 예매 시스템 구현 👍
- KSUG 기술 컨퍼런스 스프링캠프 2023 티켓 예매 이벤트 기능을 단 4일 만에 구현해야 했음
- circuit breaker와 fallback 패턴을 활용한 선착순 번호표 API를 개발했음
- 트래픽 스파이크에 대해 견고하고 유연한 시스템 구현을 경험해볼 수 있었음
- "사례가 유용했고, 나도 한 번 선착순 서비스 개발을 경험해보고 싶어졌다."
What's next?
배워야 할 것들이 정말 많다고 느꼈지만 내가 할 수 있는 것, 내가 해야 할 것들에 집중해야 한다.
우선은 나만의 포트폴리오 페이지를 만들 생각이다.
내 기술 블로그에 포트폴리오 페이지를 하나 만들어서 꾸준히 업데이트해야겠다.
앞으로 책이나 강의를 공부하고서 학습한 내용으로 한 달 동안 학습용 프로젝트를 만들어서 포트폴리오에 올릴 생각이다.
포트폴리오가 2개 완성되었을 때 Figma를 활용해서 이력서를 만들고, Rallit 이력서도 업데이트할 것이다.
작은 성공을 꾸준히 하면서 어제보다 더 나은 주니어 개발자가 될 수 있도록 노력하자.
'Essay > Conference 후기' 카테고리의 다른 글
Games on AWS 2023 (0) | 2023.10.24 |
---|---|
INFCON 2022 다시보기 (1) | 2023.10.23 |
AWS Summit Seoul 2023 (0) | 2023.05.04 |
Games on AWS (0) | 2022.10.26 |
이게 무슨 일이야! 컨퍼런스 (0) | 2022.04.01 |