공부하는 블로그

소프트웨어 엔지니어는 뭐하는 사람일까 본문

스타트업

소프트웨어 엔지니어는 뭐하는 사람일까

devtimothy 2019. 7. 20. 23:14

소프트웨어 엔지니어는 뭐하는 사람일까

보시기 전에 광고 배너 한번씩 클릭해주신다면 블로그 운영에 큰 도움이 됩니다 (_ _)

제품개발팀 구성원

기획자
  • 원청업체/디자이너/엔지니어와 커뮤니케이션
  • 디자인 구현을 위한 일명 스케치(Wireframe, UI)

제품의 큰 그림을 설정하고 서비스를 만들어갑니다. 디자이너, 엔지니어와 함께 커뮤니케이션합니다.

프로덕트 매니저 (PM)

PM은 본래 시니어 소프트웨어 엔지니어로서 경력이 오래된 개발 리더급이 담당합니다. 제품의 개발, 출시, 업데이트, 타 팀과의 커뮤니케이션 조율 등을 담당하며 프로젝트 전반을 관리합니다. 또한 기술 도입 등에 대해서도 함께 고려하고 방향을 결정합니다.

보통 작은 조직에서는 기획자와 PM 역할을 함께 하기도 합니다.

디자이너

  • UI / UX
  • 제품 키워드와 컨셉에 의해 톤앤매너를 결정하여 페이지 디자인 작업

디자이너는 기획자와 소통하며 만든 컨셉을 실제 화면에 구현합니다. 보통 UI/UX라는 것을 들어보셨을 겁니다.

UI란 User Interface의 약자인데요, UI를 쉽게 설명하자면 백화점에서 사람들의 동선을 고려해서 제품을 배치하는 것도 하나의 UI가 될 수 있습니다. 소프트웨어 개발팀에서 UI는 각 화면에 어디에 버튼, 리스트 같은 요소가 배치되도록 할 수 있겠죠.

UX란 User Experience의 약자입니다. 즉 사용자 경험을 이야기하는데요, 5,60대 어르신들을 대상으로 사용하는 앱에서 글씨가 작고 사용하기가 어렵다면 어떨까요? 어르신들이 사용하지 않으시겠죠? 그렇다면 어르신들을 위해 기본적인 글씨 크기가 크고 사용하기 쉬워야 할 것입니다. 사용자의 느낌, 태도, 행동 등을 고려하는 것이 UX 디자인의 역할입니다.

프론트와백엔드

백엔드 엔지니어

  • 소프트웨어의 보이지 않는 부분을 담당하며, 사용자와 만나지 않고 Front-End와 연동하여 기술적인 부분을 처리합니다.

  • C#, JAVA, Node.js, Ruby, Spring…

  • 인프라 엔지니어, DBA, 머신러닝, 빅데이터

소프트웨어에서 보이지 않는 부분이란 무엇을 의미할까요? 우리 몸을 생각해보면, 우리가 음식을 먹으면, 몸 속에서 소화를 시키고, 영양분을 공급하는 과정이 있습니다. 눈에 보이지 않지만 분명 일어나는 일이지요. 백엔드 엔지니어는 이러한 눈에 보이지 않는 데이터를 컨트롤 하는 역할을 합니다.

프론트엔드 엔지니어

  • 소프트웨어에서 눈에 보이는 부분을 담당하며, 사용자(user)와 직접 접촉하며 상호작용이 이루어집니다.
  • HTML / CSS / Javascript…
  • UX designer, Web designer와 협업합니다.

프론트엔드 엔지니어는 그와 반대로 눈에 보이는 부분을 담당합니다. 사용자들이 직접 보는 화면을 만들어냅니다. 디자이너가 제작한 산출물을 바탕으로, 각 페이지의 상호작용을 컨트롤합니다.

앱에서 무슨 일이 일어날까

우리가 흔히 사용하는 카카오톡을 생각해봅시다. 채팅방에서 우리가 메시지를 입력하고 전송 버튼을 누를 때, 어떤 일들이 일어날지 생각해보셨나요? 우리가 글자를 입력하고, 사진을 보낼 때 이루어지는 모든 액션들은 당연한 게 아닙니다.

이것 은 제가 재미로 만들었는 사이드 프로젝트인데요, 페이크 카카오톡 앱입니다. 여기서 제가 아무개 님에게 카톡을 보내는 것 같이 외형을 만들어보았습니다. 그러면, 카톡과 똑같아보이는 이 앱에서 보낸 메시지가 아무개님에게 보내질까요? 보낼 수 없겠죠. 이것은 그냥 카톡의 외형만 따라한 앱이고, 동작하는 환경이 다르기 때문입니다.

이와 같이 각각의 서비스에는 그에 맞는 개발 환경이 존재합니다.

소프트웨어 인프라의 구조를 간략하게 그려봤습니다. 가장 끝에는 모바일 앱과 브라우저가 존재합니다.

모바일 앱과 브라우저를 통해서 사용자와 소프트웨어는 상호작용 합니다. 서버에서는 API라는 것을 정해서 API를 통해서 앱/브라우저와 상호작용하는데요, API(Application Programming Interface)는 쉽게 말하자면 웹 사이트(혹은 앱)와 서버 간에 소통의 언어를 맞춰 주는 것입니다.

예를 들자면 여기 우리 홍콩인 직원 체리가 있습니다. 저와 체리는 원래 말이 통하지 않는 사람이었습니다. 그런데 우리가 서로 소통할 수 있게 해주는 인터페이스는 무엇일까요? 바로 한국어입니다. 체리가 한국어를 배우고 말할수 있기에 우리는 소통할 수 있지요. 웹(앱)과 서버 간에도 그런 소통할 수 있는 채널이 필요한데, 그게 바로 API 입니다.

뭐라고

(이러면 안되겠죠...)

그래서 블로그 글을 조회하면, 많은 정보가 담겨있죠? 블로그 글 내용만 있는 것이 아니라, 글 작성자, 댓글, 관련 스팟 정보 등등… 그러한 정보등을 취합하여 클라이언트에게 전송해줍니다.

그리고 데이터베이스가 있습니다. 데이터베이스는 뭘까요? 이것도 어디서 많이 들어봤죠? 데이터베이스는 말 그대로 데이터(data)의 기반(base)이 되는 곳입니다. 서비스에 있는 정보들을 정보의 성격별로 구분하여 보관했다가, 서버의 요청이 있으면 정보를 알맞게 취합하여 서버에 전송합니다. 서버에서 데이터베이스에 정보를 요청할때는 SQL이라는 언어를 통해서 소통합니다.

어려운 용어가 많이 있죠? 아래 범주로 생각하시면 소통이 좀 더 원활하실 겁니다 :)

이미지

출처: 탈잉 광고

Workflow

workflow

출처: https://www.slideshare.net/ahastudio/software-development-workflow-for-team

보통 제품개발 팀에서는 아래와 같은 흐름으로 업무를 진행합니다. 보통 2주 단위로 업무 목표를 정해서 개발 후 테스트를 거쳐 운영 서버에 반영하는데, 이를 '스프린트' 라고 부릅니다.

  • 요구분석: 사용자들로부터 받은 피드백과 경험을 바탕으로 요구사항을 도출합니다.

  • 이슈발행: Github이라는 소프트웨어 관리용 도구를 통해 업무 태스크와 코드를 관리합니다. 이슈를 발행하고, 업무를 분담합니다.

  • 개발: 요구사항에 맞추어 소프트웨어를 작성합니다.

  • 테스트: 테스트 서버에 개발이 완료된 기능을 배포하여 버그가 없는지, 기능은 잘 동작 하는지 등을 확인합니다.

  • 릴리즈: 확인 후 실제 운영중인 서비스에 배포합니다.

  • 회고

    • 지난 스프린트 동안 있었던 일을 반성합니다. 가령 예를 들면, 저번 스프린트 때 앱의 하위 호환을 고려하지 못하고 서버를 배포하여 지난 버젼 앱들이 그냥 종료되어버리는 버그가 발생한 적이 있습니다. 이러한 일이 있을 때, 다음 번에는 하위 호환을 고려하여 설계하고, 테스트를 할 수 있도록 하겠다! 등의 반성을 하여 실수를 관리하고 더 나은 방향으로 팀이 발전하도록 합니다.

사례

최근 우리 서비스에서 일어난 버그에 대해서 한번 살펴볼게요. 최근에 서비스 내에서 별점이 안 뜨고, 이상하게 뜨는 오류가 발생했습니다. (링크) 보시면 별점이 5.5점으로 표기되는 등의 오류를 확인하실 수 있습니다. (현재는 고쳐졌음) 그런데, 이것만 별점이 표기가 제대로 안 되고, 다른 게시물은 잘 표기되는 것을 확인할 수 있습니다.
문제입니다. 여기서 문제가 발생한 곳은 어디일까요? 답은 백엔드 쪽입니다. API에서 계산하는 로직에 문제가 있었죠. 이것을 깨달으셨다면 당신은 센스쟁이입니다! :)

실제 업무를 하면서도, 개발자와 기획자 사이에 이런 대화가 오고간다면 아주 좋겠죠.

기획자: 프론트엔드 개발자님, 현재 신격동사진관 별점 표기가 안 되고 있는데, 이 부분에 대해 확인을 해주시겠어요?

프론트엔드 개발자: 아, 그게 API에서 별점 평균을 내주어야 하는데, 별점 평균이 5.5점으로 내려주고 있습니다. 서버 측에서 평균 별점을 내는 부분의 API 확인이 선행되어야 할 것 같습니다.

기획자: 그렇다면 클라이언트 단에서는 문제가 없다는 뜻이군요. 알겠습니다. 서버 개발자님께 말씀드려서 해당 버그에 대해서 Assign 할 수 있도록 하겠습니다.


기획자: 서버 개발자님, 현재 신격동사진관 별점 표기가 제대로 이루어지지 않고 있는데 API를 한번 확인해주실 수 있나요?

서버 개발자: 네, 확인해보니 OOO 부분에서 문제가 있었네요. 수정 후 배포하도록 하겠습니다!

마무리

사람들은 우리 소프트웨어 개발 직군을 보통 "개발자" 라고 부릅니다. 그러면, 컨텐츠를 만들고 이용자들에게 유용한 컨텐츠를 제공하는, 우리 컨텐츠팀과 마케팅 팀이 없다면 우리 서비스는 발전하고, 개선할 수 있을까요? 없을 것입니다.

컨텐츠 팀은 컨텐츠를 통해 우리 서비스를 '개발'하는 사람들이고, 제품 팀은 소프트웨어를 통해 우리 서비스를 '개발' 하는 사람들입니다. 우리 모두 같이 한마음이 되어 좋은 소프트웨어를 만들어가도록 합시다. 이상 발표를 마치겠습니다. :)

도움이 되셨다면 광고 배너를 클릭해주시면 감사하겠습니다. (_ _)

Comments