코드스테이츠 PMB 부트캠프 7주 차 회고 (기획자로서 필요한 개발지식)

2021. 11. 20. 13:58PM 성장 스토리/Story

출처 - 슬로워크

기획자 시선에서 바라보는 개발 지식

코드스테이츠 7주 차가 지났다. 솔직히 7주 차가 지났으면 모든 부트캠프가 끝났다고 봐도 된다. 왜냐하면 총 13주지만 8주 차까지는 일반 커리큘럼이고 9주 차부터 기업 협업 및 킴 프로젝트가 진행되기 때문이다.

 

그럼 막바지에 다다른 7주 차에서는 무엇을 배웠는가? 바로 내가 가장 좋아하는 기획자로서 알아야 할 '개발 지식'이다. IT서비스가 보편화되면서 수많은 프로그래밍 위주에 서비스가 나오고 있다. 그러면서 개발자라는 직업 또한 핫하게 떠오르고 있고 기획자로서 개발자와 협업할 일이 점점 많아지고 있다.

 

평소 개발 공부를 꾸준히 해왔기에 어려움은 없었지만 이번 7주 차를 통해 느낀 것은 개발 지식 보다는 '개발 지식을 배경으로 커뮤니케이션하는 방법'이었다. PM은 실제로 코딩하는 사람이 아니다. 본인이 구상한 서비스를 개발자가 이해하고 구현할 수 있도록 커뮤니케이션할 줄 알아야 하는 사람이다. 그럼 굉장히 광범위한 개발 지식을 어느 정도 이해하고 있어야지 개발자와 소통할 수 있을 것이다. 

 

이번 포스팅에서는 7주 차에서 이론적이지만 중요하다고 생각되는 내용들을 메모하고 다시 한번 상기시키는 과정을 거치도록 하겠다. 

 

 

7주 차 핵심 키워드 & 요약 정리


  • PM으로서 필요한 Tech 지식
  • 프레임워크와 라이브러리 차이
  • 앱의 종류

 

앞서 이야기한 것처럼 IT 산업에서 기획자에게 필요한 것은 '파이선'이나 '자바'같은 언어가 아니라 '커뮤니케이션'이다. 우리는 이것을 꼭 명심하고 개발의 원리를 이해하려고 해야지 언어에 뜻을 이해하려는 것은 좋지 않다. 

 

PC와 모바일에서의 IT 서비스 비교

PC: 키보드 마우스 -> 웹 브라우저 -> 웹 서버 -> 데이터 서버

모바일: 터치 패널, 센서 -> 스마트폰 앱 -> 앱 서버 -> 데이터 서버

 

두 서비스의 제일 큰 차이는 주로 클라이언트 부분에서 발생하며 어떤 플랫폼을 정하느냐에 따라 클라이언트 개발자가 사용하는 기술 스택이 달라진다.

 

프레임워크 VS 라이브러리 차이

개발을 조금이라도 공부했다면 프레임워크와 라이브러리라는 말을 많이 들었을 것이다. 예시로 "자바의 대표적은 프레임 워크는 '스프링'이다!"라는 말이 있는 것처럼 프레임워크와 라이브러리 이야기가 정말 많이 들린다. 어감으로 봤을 때는 대충 무엇을 도와주는 툴로 이해할 수 있는데 반은 맞고 반은 틀린 생각이다.

 

본인도 코드스테이츠를 알기 전까지는 두 가지 개념의 차이를 정확히 알지 못하였는데, 수업을 통해 개념을 습득한 후 유튜버 '노매드 코더'님의 영상을 본 뒤에 보다 확실히 개념을 이해할 수 있었다.

 

프레임워크: 프레임워크가 나를 부르는 것 (ex. Django)

라이브러리: 라이브러리는 우리가 필요할 때만 부르는 것 (ex. 제이쿼리)

출처 - 노마드코더

위 이미지처럼 프레임워크는 말 그대로 정해진 Frame(틀) 안에서 한정되어 코드를 작성하는 방법으로, "프레임워크가 나를 부른다"라는 개념으로 이해하면 좋다.

 

또한 라이브러리 같은 경우에는 일종의 상생관계와 같이 "우리가 필요할 때마다 부르는 것"이라고 이해하면 좋을 것이다. 

 

실제 예시로 Pyrhon의 대표적인 프레임워크인 Django는 정해진 틀 안에서 규칙을 정해 Django에서 제공하는 서비스들만 이용할 수 있다. 그러나 제이쿼리 같은 경우에는 Head 부분에 제이쿼리 연동 코드를 넣고 우리가 원할 때마다 제이쿼리 코드를 불러서 사용할 수 있고, 원치 않으면 사용하지 않아도 된다.

 

 

HTML, CSS, JavaScript의 역할

HTML의 역할: 구조 만들기

  • 콘텐츠의 레이아웃을 제어합니다.
  • 웹 페이지 디자인을 위한 구조 제공
  • 모든 웹 페이지의 기본 빌딩 블록

CSS의 역할: 웹사이트 스타일 지정

  • 웹 페이지 요소에 스타일을 적용합니다.
  • 웹 페이지를 반응형으로 만들기 위해 다양한 화면 크기를 대상으로 합니다.
  • 주로 웹 페이지의 "모양과 느낌"을 처리합니다.

JavaScript의 역할: 상호 작용 증가

  • 웹 페이지에 상호 작용 추가
  • 복잡한 기능 및 기능 처리
  • 기능을 향상하는 프로그래밍 코드

 

앱 종류

  • 네이티브 앱 - 모바일 OS에 최적화된 언어를 사용해 개발한 앱으로서 안드로이드, iOS에서 제공하는 SDK를 사용해 개발합니다.
  • 모바일 웹 - 모바일 기기에서 사용하기 편한 방식으로 개발된 '웹 페이지'기반 서비스를 의미합니다. 웹브라우저에서 동작합니다.
  • 웹 앱 - 앱의 형태를 가지고 있지만 실제 내용은 대부분 웹에서 구현해 보여주는 페이지입니다. 네이티브 앱에 비해 간단하게 구현이 가능합니다.
  • 하이브리드 앱 - 네이티브 앱의 구조를 가지고 있으나, 일부 기능들을 웹으로 구현해 개발하는 방식입니다. 웹의 기능을 쉽게 연결할 수 있는 특징이 있습니다.

 

서버의 역할

앞서 살펴본 것과 같이 인터넷 기반 서비스는 사용자가 클라이언트에 접속하면, 인터넷을 통해 사용자의 요청을 서버에서 전달하고 이를 처리해 인터넷을 통해 다시 클라이언트에 전달해 주는 구조입니다.

사용자와 소통하는 프론트엔드와 달리 백엔드는 사용자에게 동작이 보이지는 않습니다. 다만 서버에 유입된 데이터를 바탕으로 실질적인 서비스의 기능을 만들어내는 역할을 하는 부분이며 대부분의 데이터 처리와 기능 구현이 백엔드에서 일어나는 것이 일반적입니다.

서버와 데이터베이스

클라이언트룰 통해 유입된 사용자의 요청들에 따라 서버는 필요한 기능을 수행해 클라이언트로 전송하게 됩니다. 서버는 요청한 기능을 수행하기 위해 데이터가 필요한데, 이 데이터들은 데이터베이스에 저장이 되어있습니다.

 

기술 스택을 정하는 기준

기술 스택을 설정하는 데 고려해야 하는 중요한 요소 4가지가 있습니다.

  1. 높은 생산성 빠르게 개발하고 빠르게 테스트할 수 있는가, MVP를 빠르게 만들 수 있는가를 고려해야 합니다. 아무리 좋은 퍼포먼스를 낸다고 하더라도 개발 난이도가 높고 개발 기간이 오래 걸린다면 문제가 될 수 있습니다.
  2. 신뢰성 새로 나온 언어나 프레임워크는 기존에 오래 사용해 온 것에 비해 신뢰성이 낮을 수 있습니다. 유사한 문제가 발생하더라도 오래 사용된 언어는 각종 이슈에 대한 해결방법들 나와있는데 비해, 신생 스택의 경우는 그렇지 않을 수 있습니다. 이는 최종적으로 문제가 발생할 빈도와 이를 해결하는데 소모되는 시간을 늘려 제품 출시에 안 좋은 영향을 줄 수 있습니다.
  3. 개발자 고용 가능성 필요한 경우 개발자를 쉽게 고용할 수 있는가, 해당 스택의 개발자 풀이 적당한가를 고려해야 합니다. 시장에 해당 언어를 사용할 수 있는 개발자가 많은 언어를 선택하는 것이 개발 인력 수급과 리소스 관리에 중요한 영향을 줄 수 있습니다.
  4. 코칭 가능성 개발하는데 방향을 잡아줄 수 있고, 막혔을 때 도움을 줄 수 있는 사람이 있는가, 리드할 사람이 있는가를 고려해야 합니다. 지속 가능한 개발을 위해 사내의 테크 리드가 코치 역할을 할 수 있는가, 커뮤니티의 도움을 받을 수 있는가 등을 살펴봐야 합니다.

 

개발팀의 제품 개발 과정 이해

실제 개발팀이 제품을 개발하는 절차는 생각보다 훨씬 복잡하게 구성되어 있다.

 

요구사항 정의 – 설계 – 로컬 개발, 디버깅 -> 코드 업로드 -> 코드 리뷰 -> 테스트 배포 -> 테스트 -> 프로덕션 배포

 

 

API란?

API란 Application Programming Interface의 줄임말로 ‘어플리케이션'을 ‘프로그래밍’ 하는데 필요한 ‘인터페이스’입니다.

인터페이스란, 상호 정보 소통을 돕기 위해 경계에 존재하는 시스템을 의미합니다. 예를 들어 은행 창구의 직원은 고객의 돈을 은행에 넣고 빼는 과정을 돕기 위해 고객과 은행의 경계에서 해당 업무를 처리하는 역할을 하는 것과 유사합니다.

IT 서비스 내에서 정보의 소통이 일어나는 곳은 서버와 클라이언트간이 될 것입니다. 서버와 클라이언트가 서로 정보를 어떻게 주고받을지에 대해 API의 형태로 미리 정의하고 이를 바탕으로 프론트엔드와 백엔드 개발을 진행하는 것이 일반적이다. 웹 기반 서비스의 경우 웹 주소 형식을 통해 정보를 요청하고 전달받는 방식을 주로 사용합니다.

Open API란?

하나의 웹 사이트에서 자신이 가진 기능을 이용할 수 있도록 공개한 프로그래밍 인터페이스입니다.

잘 설계한 API를 오픈해 제공하는 이유는 무엇일까요?

자사의 서비스의 기능을 다양한 서비스에서 활용할 수 있도록 해 서비스의 저변을 넓히는 목적이 있습니다. 메타 서비스를 제공하는 대기업들의 시장 확대를 목적으로 오픈 API를 운영하거나 공공의 목적으로 비영리기관에서 무료로 API를 제공하는 경우도 있습니다.

RESTful API란?

API를 아무리 잘 설계한다고 하더라도 각자 필요한 방식에 맞게 다양하게 설계하면 유지보수하는데 어려움이 있을 수 있습니다. 이런 문제를 해결하기 위해 일정한 아키텍처의 제약 조건을 준수하는 애플리케이션 프로그래밍 인터페이스를 만들어 사용하기로 하였는데 그중 대표적인 방식이 RESTful API입니다

RESTful API의 요청의 종류

  • C : Create : 타임라인에 사진을 '올리는' 요청
  • R : Read : 사진을 '불러오는' 요청
  • U : Update : 사진을 '바꾸는' 요청
  • D : Delete : 사진을 '지우는' 요청

RESTful API의 명령의 종류

  • Create(생성) : POST
  • Read(읽어오기) : GET
  • Update(변경) : PUT(전체)/PATCH(일부)
  • Delete(삭제) : DELETE