pile·
백엔드·데브시스터즈데브시스터즈·

킹덤 서버! 튜토리얼

데브시스터즈 킹덤 서버팀이 신규 입사자를 위해 설계한 Scala 함수형 프로그래밍(FP) 온보딩 과정을 소개한다. Stage 1(FP 기초) → Stage 2(ZIO/ZPure) → Final Stage(실제 서비스 개발)의 단계적 구조로, 생소한 패러다임을 체계적으로 흡수할 수 있도록 설계됐다.

핵심 포인트
  • Scala의 불변성 원칙: Java처럼 기존 컬렉션을 수정하는 대신 새로운 상태를 생성해 반환한다
  • 함수를 일급 객체로 취급 — 변수에 할당하고 다른 함수의 인자로 전달, 람다식으로 간결하게 표현
  • ZPure: 부수 효과 없는 순수 계산 계층으로 "어떻게 변해야 하는가"만 기술한다
  • ZIO: DB 조회·네트워크 통신 등 실제 부수 효과를 관리하는 실행 계층, 동시성 제어·재시도·에러 처리 제공
  • 온보딩 Final Stage에서 유닛 테스트·시나리오 테스트 작성 후 실제 버그 수정 → 콘텐츠 개발 순으로 실무 기여
상세 정리
  • 배경: 킹덤 서버팀은 Scala 기반 FP를 채택해 운영하며, 객체지향 경험자에게는 패러다임 전환이 필요하다
  • Stage 1 - 순수 함수: "동일 입력 → 동일 출력" 보장, 외부 상태 변경(부수 효과) 금지 원칙부터 학습한다
  • Stage 1 - 불변성: 기존 값을 수정하지 않고 변환 결과로 새 값을 생성하는 스타일로 사고방식을 전환한다
  • Stage 1 - 일급 함수: 함수를 변수에 저장하고 파라미터로 넘기는 패턴, 람다식으로 코드를 간결하게 만든다
  • Stage 2 - ZPure: 외부 효과 없이 상태 변환 로직만 담당 — 비즈니스 규칙을 순수하게 표현할 수 있다
  • Stage 2 - ZIO: 실제 실행 환경(DB, 네트워크)과 접하는 계층으로, ZPure와 분리해 테스트 가능성을 높인다
  • Final Stage - 개발 사이클: 기획 → 설계 → 구현 → 코드 리뷰 → 배포 → 모니터링 전 과정을 경험한다
  • 실제 사례 - Random 함수: 값이 결정되는 시점을 ZIO 계층에서 관리해야 동일 입력·동일 출력 보장이 가능함을 보여준다
  • 결론: 생소한 기술 스택도 체계적인 온보딩과 팀 지원으로 충분히 흡수할 수 있다는 경험을 공유한다
왜 읽나Scala 또는 ZIO 생태계 진입을 고려하는 백엔드 개발자에게 FP 패러다임 전환의 실제 학습 로드맵 레퍼런스.
데브시스터즈
데브시스터즈 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 백엔드·github-engGitHub Engineering·

    조기 종료를 없애야 벡터화된다 — 메모리 속도 소스 코드 케이스 폴딩

    GitHub의 코드 검색 엔진 Blackbird는 480TB 이상의 소스 코드를 인덱싱하기 전 모든 바이트에 case folding을 적용한다. 이 글은 Rust로 구현한 case folding을 메모리 대역폭 한계(45+ GiB/s)까지 끌어올린 두 가지 반직관적 최적화를 상세히 다룬다. 핵심은 루프 조기 종료(break) 제거로 LLVM 벡터화를 유도하고, UTF-8을 디코딩하지 않고 바이트 공간 산술만으로 fold를 수행하는 것이다.

    #rust#unicode#simd+2
  2. 백엔드·여기어때 (GC컴퍼니)여기어때 (GC컴퍼니)·

    트랜잭션 스크립트에서 숙소 메타 + 가격 계산 모듈로 — 전시 아키텍처 개선기 (2/3)

    여기어때 전시개발팀이 숙소 상세(PDP) API를 해부한 결과, 코드상으로는 DB 호출 3번처럼 보이던 요청이 실제로는 MongoDB $lookup 체인으로 컬렉션을 19회 접근하는 구조였다. 이 트랜잭션 스크립트 방식의 핵심 문제는 "aggregation이 I/O를 가린다"는 점으로, 독립적인 쿼리 10개가 단일 파이프라인에 직렬화되어 병렬화 기회를 잃고, 가격 때문에 거의 안 바뀌는 이미지까지 매 요청마다 읽어야 하는 읽기 증폭이 발생했다. V3에서는 "조회 시점 조립"을 "쓰기 시점 사전 조립"으로 전환하고, 화면별로 복제되던 가격 계산 로직을 goodsprice 단일 모듈로 수렴했다. 4개 API(PLP/PDP/RDP/ILP)의 반복 마이그레이션은 Claude Code skill로 절차를 고정하고 쉐도잉 + 동일성 검증으로 안전망을 마련하는 방식으로 진행됐다.

    #architecture#migration#caching+2