ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [기혁이의 아장아장 백엔드 도전기] 1화, 무엇을 어떻게 습득해야할까?
    백엔드 도저언 2020. 12. 14. 18:43

    백엔드 개발자가 되기 위해서는 어떻게 해야할까?

     

    ㅗㅜㅑ..

    음.. 이야...

    일단 위의 엄청난 커리큘럼을 따라가기 전에 기반을 닦아보자.

    첫 번째 스텝으로 백엔드 직군의 역할은 무엇인지에 대하여 파악해야할 것이며

    두 번째 스텝으로 백엔드의 전체적인 구조에 대하여 알고 있어야 하며

    세 번째 스텝으로 어떤 언어들이 있고 각 언어, 프레임워크들이 어떤 특징을 갖고 있는지 알아야 하며

    마지막으로 내게 필요한 언어와 프레임워크를 통하여 실습하며 점점 고도화를 진행하면 좋을 것 같다.

     

    잔잔하게 앞에서 뒤로 침투해보자.

     

    1. 백엔드란?

    위키에 따르면 백엔드란 서버개발자와 같은 말이라기 보다 프론트엔드, 백엔드의 완전한 분리 구조를 지향하는 업무 스타일의 개발 방식에서 나온 단어이다. 백엔드 개발자는 DB와 API 서버를 개발 하고, M(odel)V(iew)C(ontroller)패턴에 빗대어 생각하면 Model과 Controller가 백엔드의 소관이다.

    위와 같은 업무 스타일에서는 웹퍼블리셔(UI 개발자)와 개발자(서버 개발자)의 업무가 분리 되는데. 이 경우 주로 서버사이드가 클라이언트를 감싸는 방식이고, 전반적인 비지니스 로직은 개발자(서버 개발자)가 맡게 된다. 하지만 웹 개발의 트렌드가 Single Page Application으로 바뀌고 여러 UI 라이브러리가 출시 되면서 프론트엔드 개발영역의 변화가 생기게 되었다. 그로 인하여 서버사이드의 개념이 예전 같지 않고 비즈니스 로직 또한 프론트엔드 업무로 넘어가기도 했다. (프로젝트 성격에 따라 천차만별이다.)

     

     결국, 웹 개발 형식에 따라 프론트엔드, 백엔드의 업무가 유동적으로 바뀌고 있지만 변하지 않는 것은 백엔드 개발은 DB와 API 서버를 다루는 것이다.

     프론트엔드, 백엔드 개발의 정의는 개인별로 모두 다르다. 하지만, 내가 경험한 웹 개발에서는 프론트엔드는 View를 만들고, 서버에서 받아온 데이터를 View에 맞추어 가공하는 일을 하고 백엔드는 데이터를 안전하게 저장하고, 필요에 따라 데이터를 새로 가공하는 일을 하는 것 같다.

     

    Naver D2 글(링크)에서 프론트를 보컬에 빗대었고, 백엔드는 드럼이나 베이스로 빗대었다. 이 말이 적절 한 것 같다. 누구를 위해 일을 하느냐에 따라 차이가 있지만 음악을 한다는 공통점이있다. (프론트는 유저를 위해 일을 하고, 백엔드는 팀을 위해 일한다 생각한다.)

     

    2. 무슨 일을 할까?

    위에서 백엔드의 뜻을 찾다가 백엔드는 DB와 API서버를 개발한다.라는 문장을 찾게 되었다. 추상적인 것 말고, 조금 더 자세히 그들의 역할에 대해 알아보자. 그들의 역할에 대하여 가장 쉽게 단서를 찾는 방법은 채용 공고를 찾아보면 좋다. 백엔드가 무엇을 해야할지 가장 잘 아는 사람 중 하나는 백엔드를 채용하고 싶어하는 기업이 아닐까?

     

    (몇몇 채용 공고를 재구성 해보았다.)

    직무 내용

    • 서비스 백엔드 시스템 개발

     

    자격 요건

    • AWS 및 클라우드 환경에서 서비스 구축, 운영 경험
    • REST API에 대한 설계 및 개발 경험
    • Spring 프레임워크 사용 경험
    • 데이터 베이스 설계 및 SQL에 대한 이해도
    • DBMS, NoSQL 운영
    • RDBMS 또는 Elasticsearch 등을 활용한 시스템 구축
    • Docker 기반 환경의 서비스 구축 경험

     

    우대 사항

    • (대충 기타 여러 언어, 프레임 워크 개발 경험)
    • 대용량 트래픽 경험 (분산처리에 대한 이해)
    • 서버리스 및 마이크로 아키텍쳐에 대한 이해
    • 리눅스 환경에 친숙
    • 빌드/테스트/배포 자동화(CI/CD) 경험이 있으신 분

     

    무언가 굉장히 요구 사항이 많아 보이지만 결국 주 된 업무는 DB를 구축하고 그것을 보다 효율적으로 관리하기 위해 설계하고 이를 프론트에서 사용할 수 있게 API서버를 구성하는 것이 주된 업무라는 것을 추측해볼 수 있다. 아직 확실한 개념이 있는 것은 아닌 상태이지만 나머지 기술은 주된 업무를 좀 더 고도화 시키기 위한 것들로 생각 되고, 기타 업무들은 Devops라는 직군의 역할이 포함 되어있는 것 같다. (Devops는 개발 방법론 중 한 가지 이지만 하나의 직군이기도 하다. 주 된 업무에는 반복적인 일을 자동화 하는 것이고 CI,CD 자동 배포 혹은 서비스,인프라 모니터링이 있다.)

     

    프론트엔드를 세세하게 나누어 보면, 전체적인 서비스 로직이나 최적화를 신경쓰는 업무가 있고 스타일을 담당하는 업무가 있듯. 백엔드 또한, 세세하게 나누어 보면 클라우드 서버 혹은 자체 서버 구축 업무DB 설계, API 서버 구성 업무가 있는 것 같다.

     

    3. 실제 서비스에서 빗대어 보는 역할

    암호화화폐 거래소 업비트를 예로 들어보자. 내가 알고 있는 프론트엔드 지식으로 프론트의 역할을 생각 해보면 아래와 같다.

     

    [프론트]

     

    (1) API를 통하여 받아온 정보를 필요에 따라 프론트에서 사용할 수 있도록 재가공 한다.

    • Orderbook은 소수점 4자리까지만 표현 한다.

    • 거래 내역들을 통하여 차트를 표현 한다.

    • 하나의 코인 정보를 별도로 저장하지 않고, 통합하여 관리한다.

     

    (2) 서비스에 필요한 로직을 작성한다.

    • 각 코인별 거래 대금, 이름, 현재 가격 등을 통하여 정렬 할 수 있게 기능을 만든다.

    • 각 코인 별 검색이 가능하도록 한글 초성을 저장하고, 검색할 수 있도록 한다.

    • 매수, 매도 주문 입력시 유저가 사용하기 편하게 10%, 25%, 50%, 100% 등 현재 보유 수량에 따른 개수 계산이 가능하도록 한다.

    • 수치를 조작하여 입력을 넣어도 API를 보내지 않게 예외처리를 한다. (ex. 잔액이 없지만 n개를 구매하려고 요청 하는 등)

     

    (3) 스타일 작업

    • 현재 가격이 변경 되면 유저가 인식할 수 있게 깜빡이는 효과를 넣어 준다.

    • 어떤 디바이스로 접근해도 동일한 기능을 체험할 수 있게 반응형으로 설계한다.

    • 상승, 보합, 하락에 따른 색 표현

    • 재사용 가능 하도록 컴포넌트 설계

     

    (4) 유저 경험, 성능 최적화

    • 유저 경험 상승을 위하여 적절한 로딩 기법 활용

    • 성능 최적화를 위한 각 라우트 별 번들 파일 묶기

     

    간략하게 4가지의 분류로 생각해볼 수 있을 것 같다. 프론트엔드는 백엔드의 부하를 최소화 하기 위해 불필요 요청을 줄이고, 컴포넌트의 재사용과 유저 경험 상승에 최선을 다해야한다.

     

    오늘 찾아본 백엔드의 역할을 생각해보면 아래와 같다.

     

    [백엔드]

     

    (1) API Interface 설계 및 작성

    • 어떤 정보를 어떻게 요청해야 하며, 어떻게 반환 하는지 설계한다.

     

    (2) DataBase 설계

    • 어떤 데이터를 어디에 저장할지 설계 한다. 중복 되는 데이터가 없고, 효율 적으로 꺼내 쓸 수 있게 한다. (여기서 많은 방법론이 등장할 것 같다.)

     

    (3) 서비스 로직 작성

    • 매칭 알고리즘을 도입 하여 매도 물량, 매수 물량이 체결 되게 하고, 데이터 변동 사항을 수정 하고 체결 내역을 생성하여 DB에 기록한다.

    • UTC+9 시점 마다 전날 대비 변동성을 갱신한다. (전날 대비 상승, 보합, 하락)

    • 일정시간 거래 체결이 없으면 candle(n분 봉) 데이터에 체결 없음을 저장한다.

     

    (4) 성능 최적화 그리고 안정성

    • 백엔드가 추구해야할 것은 유저 경험 보단 서버의 안정화인 것 같다.

    • 요즘 많은 회사들이 자체 어플을 홍보 하는데. 유튜브 네고왕에서 나온 대부분의 홍보들이 제대로 이루어지지 못했다. (트래픽이 몰려 서버가 터져서 광고 효율이 제대로 나오지 않았다.)

     

    4. 결론

    백엔드의 의미와 역할에 대하여 알아보았다. 어렴풋이 짐작은 하고 있었던 것을 정리하고 글로 쓰니 한결 이해가 쉬웠다. 이런 식으로 차근 차근 접근 한다면 어떤 궁금증도 해결할 수 있지 않을 까 생각 되었다. 같은 듯 다른 역할이지만 난 어떤 대상을 위해 개발하느냐에 차이가 있다고 생각하려한다.

     

    [TMI]

    • UTC+9 시점 마다 전날 대비 변동성을 갱신한다.

    • 일정시간 거래 체결이 없으면 candle(n분 봉) 데이터에 체결 없음을 저장한다.

     

    이 부분에 대해서 난 데몬이라는 표현을 썼다. 이게 맞는 표현인가 궁금 했는데.

    스케줄러, 크론, 데몬 등의 표현이 있는 것 같다.

     

    스케줄러, 크론은 일정 주기로 실행 되는 것을 말하고,

    데몬은 특정 이벤트가 발생 되면 실행 되는 것을 의미한다고 한다.

     

    개발자 분들께 여쭈어 본 것이고, 팩트체크는 하지 않았으니. 그냥 흘러가는 정도로만..

    댓글

Developer RyuK