HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
💻
프로그래밍
/
🎤
airbnb에서 사용하는 프론트엔드 기술의 역사
🎤

airbnb에서 사용하는 프론트엔드 기술의 역사

태그
웹기술
모노리틱
분산형 SOA
CSR/SSR
대주제
세미나/특강
상태
완료
수정필요 부분
중분류
Front-End
생성일
May 27, 2022 11:52 PM
📅  날짜 : 5/28
😎  강사님: airbnb 박호준님
🔗  강의시간 : 120분
🔗  강의질문: slido링크

어떠한 질문도 멍청한 질문은 없다. 개발자로서도 굉장히 중요한 자세이다.
세션 후 느낀 점
💡
한 시간안에 프론트엔드의 발전 과정과 그에 따른 기술의 등장과 변화를 정말 너무나도 흡입력 있게 설명해주셨다. 엔지니어링 분야는 문제를 해결하는 일이고, 기술은 Trade-off를 가지고 있어, 당면한 문제를 가장 잘 해결하는 기술이 선택된다는 것을 또 그 흐름을 이해하는 것이 정말 중요하다는 것을 느끼게 되었다.
1. 프론트엔드 기술의 기원2. Airbnb의 분산형 구조앞으로의 웹 기술?3. Q&A

1. 프론트엔드 기술의 기원

프론트엔드의 모든 기술들
notion image
 
웹기술의 기원
  • HTML의 문서기반의 정보공유에서 시작
    • 약 50년정도 밖에 되지 않음
  • [ 텍스트 저장 → 문서 양식 저장 ]
    • 텍스트 저장 형태에서 문서 양식 저장 형태로의 발전
      • 그래픽의 발전과 더해, font, bold, h1, h2, .. 등 기반의 문서 양식 발전
  • [ 문서 vs 웹문서 ]
    • 실제 서류형태의 문서가 아니라 / 빠르고, 동일 형식의 문서를 전달하기 위한 웹문서로 발전
      • 인터넷의 등장으로 가능
    • 웹문서를 읽어 화면에 출력하기 위해서, [인터넷 브라우저]가 등장
      • 인터넷 브라우저에서 보다 쉽게 문서를 읽기 위해서 규격화된 형식의 [XML]의 등장
  • [ 정적서버 vs 동적서버 ]
    • 하나의 웹서버에 resourse들을 저장하는 정적서버
    • 1년 내내 같은 구글 사이트(정적) → 1년 내내 data가 바뀌는 네이버 사이트(동적)
    • notion image
  • [모노리틱 아키텍쳐]
    • 하나의 웹 서버에 모든 기능(프론트, 백엔드, 데이터베이스)가 들어있는 기존의 구조
    • 서비스규모와 범위가 커져 확장될 때, 유연하게 서비스 운영하는 방법
      • [기존] 하나의 게이트웨이에서 부하도가 낮은 웹서버에 해당 요청을 몰아주어 해결
      • 전형적인 MVC 구조로 설계
        • notion image
  • [SSR → SPA]
    • SSR
      • 매 요청 시마다 Server로 부터 html파일을 받아 렌더링
      • 깜빡임 현상과 같은 사용성 문제
    • SPA
      • js를 통해
      • 빈화면(html)을 받고, 이후 data 요청을 통해, 코드만을 내려받아 화면을 구성한다.
        • 브라우저 API를 통해 data로 손쉽게 화면을 렌더링할 수 있게 됨
        • 화면을 더 쉽게 그리기 위한 프레임워크들의 등장 (JQuery, …)
      • SPA에서의 MVC 패턴 도입
        • backbone.js
          • 단순히 화면 출력 이외의 전체 애플리케이션의 핵심을 프론트엔드에서 담당하기 시작
        • 웹앱의 발전으로 코드복잡성이 증가하는 문제가 발생
          • → [ React ]의 등장
          • JSX를 통해, 복잡한 브라우저 API를 고려하지 않고, html을 다루듯이 사용가능
            • notion image
               
      • [ 프론트엔드에서의 API 연동과정 ]
        • REST 서비스가 자리 잡으면서, API 호출 함수의 형식이 자리잡음
          • CRUD 연동 과정을 각각의 함수로 맵핑
            • axios.get(…), axios.post(…)
        • 같은 규약을 통해 프로젝트들간의 생산성이 향상되고, 개발자들간의 업무효율이 증가됨
        •  
  • [ 상태관리 라이브러리 ]
    • 비동기 처리가 어려운 점
      • 처리 코드가 어렵기보다는, 여러 곳에서 발생하는 비동기 요청에 대해 끝나는 시점을 확정할 수 없기 때문
      • Redux를 통해 비동기 처리를 감시하고, 제한하여 동기적 형식으로 처리
        • isLoading 등을 통해
    • Redux를 사용한 API 요청 데이터 관리
      • 미들웨어: 비동기처리(redux-thunk, redux-pack)
      • Devtools: 강력한 디버깅 기능
      •  
    • 로그인 창 하나를 위해 redux, action, redux-saga, redux-form ,… 등
      • 프로젝트 초기 비용의 급격한 증가 → 학습장벽
      • 코드를 직관적으로 받아드리고 이해하기 위한 기술의 등장-[ React Query, useQuery Hook ]
       
    • [ React Query, useSwr, useQueryHook ]
      • hook을 통해 세부구현을 숨기고, 실제 사용시에는 필요한 부분만 꺼내서 사용
        • 문제를 쉽게 이해하고, 팀원과 공유하고, 문제를 해결하기 위한 방법으로의 진화임
           
  • [ CSS 관리 ]
    • 전처리기를 이용한 CSS [SCSS]
    • js를 통한 [ css-in-js ] - styled-component, emotion
      • css의 classnames들이 굉장히 길 때, js가 배포될 때 해시화를 통해 css 자체의 용량크기를 많이 줄일 수 있다는 큰 장점을 가지고 있다.
      • 주의 서버 사이드 렌더링 지원을 하는지 여부를 반드시 체크해야함
        • js로 css를 생성하기 때문에, 최초의 js 실행이 반드시 필요한 기술이기 때문에
        •  
  • [ 애니메이션 처리 ]
    • css를 이용한 처리 방법
      • 기본적으로 css transition을 통한 처리 방법이 선호 됨
        • css 호환성이 크고, 더 빠르게 처리되기 때문
    • js를 이용한 처리 방법
      • 복잡한 애니메이션 처리를 위해 사용
      • lottie.js 와 같이 adobe에서 작동하는 애니메이션을 export, import 방식으로 사용
       
  • [ 패키징 ]
    • 프론트엔드에서 화면을 만드는 것 뿐만 아니라, 패키징을 최적화 하는 업무도 담당하고 있음
    •  
  • [ 다시 돌아온 SSR ]
    • 이유 데이터 페칭을 통해, 화면이 채워질 때 까지 사용자가 화면을 볼 수 없는 근본적인 SPA 문제가 존재함

2. Airbnb의 분산형 구조

  • [ 모노리틱 아키텍쳐의 한계 ⇒ 서비스 기반 아키텍쳐 - SOA ]
    • 전부 같은 웹서버를 사용하다 보니, 서비스 성격에 맞는 코드 수정이 어려움을 가지게 됨
    • 숙박서비스, 유저서비스, 결제서비스 들이 각각 독립적으로 서버를 가지게 됨
      • notion image
  • 여러 서비스들로 분산화 되면서, 코드의 복잡도가 올라가게 됨
    • 각 서비스마다 담당 개발자가 다르고, 각 서비스들의 접점에서 conflict 가능성 증가
    • 따라서 Strongly typed data Object 방식, Thrift IDL (Interface Definition Language) 등으로 서로 다른 언어를 사용하더라도, 스키마를 지정해두었기 때문에, 같은 언어로 변환하여 적용할 수 있도록 함
    • 스키마를 공통적으로 지정하고, 해당 스키마를 반영하도록 각각의 서버에서 코드를 구현함
      • notion image
  • 이러한 과정에서 GraphQL 이 등장
    • 서비스 기반 아키텍쳐 - SOA , Thrift IDL 관점에서 graphQl 등이 등장하게 됨
    • 기존 Rest 방식으로는 서로 다른 서버의 3번의 요청을 각각 해야함
      • graphQl을 한 번의 요청으로 필요한 데이터를 받아오게 됨 (스키마 단계에서 요청하는 것과 유사)
        • notion image
  • [ Server-driven UI ]
    • 문제들
      notion image
      notion image
      해결 : meta 데이터를 통해, section 단위로 데이터를 묶어놓아 재배치 편의성을 높임
      keyword: 섹션컴포넌트, 원소스 멀티 유즈
       

앞으로의 웹 기술?

[증강현실]
문제 3차원 데이터의 처리 기술은 미리 발전해있었지만, 3차원 데이터를 받아 입력하는 단계가 어려웠었다.
해결 핸드폰 카메라의 발전으로 3차원 데이터의 입력문제가 점점 해결됨
  • 2장 이상의 사진을 통해, 2d 화면을 사용자 기준에서의 위치 좌표(3d화면)으로 변경할 수 있다.
 

3. Q&A

  • 에어비엔비에서는 airbnb 린트 룰을 전부 지키나요?
    • 90% 이상 기본적으로 호환되는 prettier 설정을 공유하여 사용하고 있고,
    • 나머지 10%의 경우는 huskey등을 통해 merge 전에 반드시 처리한다.
    • lint룰에 더해 access 룰도 정해져 있어서 이것도 지켜야 merge 할 수 있다
      • font 명도 몇 이상 등등..
      • 단, 담당 팀이 있기 때문에 이러한 부분 통과를 적극적으로 도와주고 있다.
      •  
  • 취업을 위한 공부는 어떻게 할까요?
    • 각 단계에 맞는 공부를 해야한다.
      • 평소에 프로젝트나 학습을 쌓아두어야하고, 어느정도 쌓였다고 판단할 때, 코딩테스트나 면접 공부 단계로 넘어가 지원과 함께 준비한다.
      •  
  • 해외와 국내 개발 문화의 차이는?
    • 평가 방식의 차이에서 오는 차이
      • 한국은 위에서 아래를 평가
        • 기술명세서가 상세하게 나오고, 이에 맞춰 개발
      • 미국은 동료가 동료를 평가
        • 러프한 기술명세서를 가지고, 개발 방식을 토의하며 개발
        •  
  • 처음 학습 방법에 대해 말씀해 주실 때 모든 걸 다 할 수 없으니 하나씩 배워나간다! 라고 하셨는데 호준님은 학습하실 때 공식 문서로 시작하시는지, 직접 작은 단위 프로젝트에 적용해나가시는지 궁금합니다!
    • 트렌드 위주로 공부한다.
    • 즉 트렌드를 즐긴다!
      • Twitter, Youtube 등을 통해 hot한 트렌드를 자연스럽게 익힌다.
  • 곧 저희가 첫 팀 프로젝트가 진행되는데 현재 배운 것을 기반으로 프로젝트를 진행할지, 혹은 현재 공부하고 있는 것들을 적용하는 프로젝트로 진행할지 고민입니다! 호준님의 개인적인 추천을 듣고 싶습니다 ☺️
    • 무조건 현재 잘하는 것을 우선적으로 사용하고, 짧은 프로젝트 기간 이후의 기능 개선이라던가 추가 기능에 있어 새로운 기술을 도입하는 방향을 추천
  • 개발자의 목표, 개발할 때 어떤 점이 제일 재밌는지
    • 새로운 기술을 통해, 기존의 일을 개선했을 때 너무 재밌다.
      • 배운다고 생각하면 개발자의 삶이 너무 힘들다.
      • 게임처럼, 강한 스킬을 배워서 몬스터들을 잡는다고 생각하면 즐거운 것
 
  • 저도 언젠가는 세션, 강의등을 통해 지식과 경험의 나눔을 하고 싶은데, 호준님은 언제 어떤마음으로 이런 공유 활동들을 시작하셨는지 궁금합니다. (내질문 ㅎㅎ)
    • 우연한 계기로 프론트엔드 기술에 대해 발표할 기회
      • 준비하면서 많이 공부도 하게 되었고, 1번의 발표 이후에 여러 곳에서 강의요청이 오게되었다.
        • 강의요청과 함께 책제안.. 자연스럽게 잡았지만 많이 힘들었다.
        •  
  • 신입에게 가장 필요한 능력은?
    • 질문을 적극적으로 하는 능력
    • 자기가 못하는 것을 드러내고 도움을 요청하는 능력