[Interview/Preparation]02. Preparation - Project


 - 진행한 프로젝트가 무엇인지 논하라.

누구나 쉽게 작곡할 수 있도록 만든 프로젝트다.

작곡에서 가장 어려운 부분인 템포와 박자를 제거하고, 사용자가 지정한 시간내에 음계들을

입력하게 됨으로서 하나의 멜로디 블록이 완성된다.

완성된 블록들을 레고처럼 조합하게되면 곡이 만들어지는데 블록이나 곡들을 커뮤니티에서

공유하여 필요한 것들을 주고 받을 수 있다.


- 소리는 어떻게 구현했는가?

HTML5에서 지원하는 web audio api를 이용하였다. 처음 소리를 구현할 때는

oscillator에서 표현하는 진동으로 구현하였지만 소리의 간섭으로 인한 진동이나

전자음 같은 소리를 냈기 때문에 mp3파일을 소리내는 것으로 변환했다.


- 본인이 맡은 역할은 무엇인가?

jQuery UI에 있는 sortable이라는 기술을 이용하여 블록들을 끌어당겨 조합하고 재생하는

UI를 담당하였다.


  - 반응형 웹인가?

모바일 환경에서만 구현하였기 때문에 반응형으로 개발하지 않았다.


  - UI에서 어떻게 구현했는지 세부적으로 구술하라.

단순히 jQuery UI만으로는 세부적 역할이 제한되어 있었기 때문에 따로 제작된 플러그인을

찾아서 적용시켰다. 관련 문서를 꼼꼼히 읽고 내부적으로 어떻게 작성되어있는지 분석해서

나만의 방식으로 다시 재정의했었다.


  - 다른 분야는 개발했는가?

완성된 블록이나 곡들은 JSON의 형태로 담아 브라우저 로컬 저장소나 서버에있는

DB에 저장하는 로직을 구성했다.


 - 왜 두 가지로 저장하는 방식으로 구현했는가?

디바이스의 오프라인 상태에서도 사용자가 만든 블록이나 곡은 저장할 것을 계획했다.

그렇기 때문에 기본적인 로직은 브라우저 저장소에서 제공되는 indexexDB를 이용했고

온라인 상태에 로그인이 되어있다면 서버에 저장하는 로직으로 구성되어 있다.


  - 왜 indexedDB를 이용하였는가?

쿠키나 세션의 경우 휘발성이나 서버에서 저장받은 데이터를 관리하기 위한 용도가

필요했기 때문에 제외했고 key, value와 테이블 구조의 형태가 필요했기 때문에

local storage보다 indexedDB를 선호했다.


  - JSON이 뭔가? 그리고 어떻게 구성했되어있는가?

Javascript Object Notaion의 줄인말로 상호간의 key, value로 구성되는 데이터를 교환하는데 있어 

인간이나 기계에게 친숙하고도 가벼운 객체를 표현하는 기술이다.

블록이나 곡들을 저장하는데 있어 사용한 JSON의 구성요소는

시간과 음이고 저장 정보인 제목, 감정, 해시태그 그리고 저장한 사용자로 되어있다.

음의 경우 각 계이름마다 번호로 매겨져있고 이에 따른 음들을 재생시키는

로직으로 구성되어있다.


- 문제해결한 부분은 있었는가?

모든 페이지에서 보여지는 상단에 있는 바(Bar)는 공통적으로 개발해야 되는 모듈이기 때문에

페이지마다 구성하는 로직을 어떻게 할지 팀원들의 회의를 통해 정했었다.

이로 인하여 각 페이지에서 겹쳐지는 라이브러리들에 의하여 선택자들이

의도치 않는 결과가 나온적이 있다.

라이브러리가 링크되는 순서를 파악하고 그에 맞춰 선택자에 대한 스타일 속성을

따로 제작하여 재정의 하였다


- 미해결된 부분은 있었는가?

모바일 웹앱이기 때문에 기종간에 문제가 가장 컸다. 그중 하나는 터치의 민감도였는데

블록에 관한 이벤트 중에서 길게 누르면 선택창 그러니까 부트스트랩에서 지원하는

modal이 뜨는 것이 있었다. 그런데 갤럭시 기종에서는 어떤 우선순위에 문제가 있었는지

길게 누르려던 찰나에 블록이 옮겨지는 이벤트가 먼저 발생하게 된다.

터치하는 순간의 시간격차를 둘 것인지 아니면 click이벤트를 없앨 것인지 각종

방법을 유도했지만 역효과가 발생되었고 일정에 치우쳐 포기하게 됐다.


- 프로젝트에서 관여한 부분이 대부분 프론트 쪽인데

java를 지원하는 이유나 본인이 생각하는 개발자의 매력이

무엇인지?

교육센터에서 이론상으로 배운것은 백엔드다. 개인적으로 진행한 홈페이지 제작으로

백엔드의 흐름을 파악했다면 팀프로젝트에서 이 이론들을 적용하였고 UI를 구성하거나

그에 관한 기술등을 몸으로 습득한 것이 프론트엔드이다.

자바를 지원한 이유는 그 동안 훈련해온 알고리즘이나 백엔드를 돌이켜 볼 때,

성취감이 높았던 것은 프론트보다 높았다. 알고리즘을 훈련할 때 객체지향적인 방향으로

구성했었고 그 만큼의 몰입도가 높았기 때문에 java에 지원하게 된 것이다.


내가 생각하는 개발자의 매력은 전반적으로 보면

동료들과 머리를 짜내면서 문제해결하는 과정이 소중하다고 생각하고 있다.

또한 로직을 예시를 들지 않고 일반적으로, 구두로 표현하는 것이 상당히 어려운데 

이것을 어떻게 하면 쉽게 표현할 수 있을지를 상당히 고민하는 것도 

개발 수준이 향상된다는 것이 개발자의 궁극적인 매력이라 생각한다.

[Interview/Preparation]01. Preparation - Java


 - OOP에 대하여 논하라.

현실세계 혹은 온라인상에 존재하는 사물이나 사람 등의 매개체들을 컴퓨터 시스템으로 표현하는

프로그래밍 언어로서 절차지향의 C와는 달리 상속성, 다형성, 은닉성, 추상화가 있다.

상속성은 부모의 객체로부터 자식의 행동을 물려받아 재정의 하는 것이고

다형성은 한 객체로부터 각자만의 다양한 활용을 하는 것이다.

은닉성이란 외부로부터 속성과 행위를 노출되지 않도록 하는 원리이고

추상화는 여러 객체들의 공통적, 일반적인 성질을 하나로 뽑아내는 원리다.


- 객체지향이라는 특징을 제외한 Java의 특징을 C과 비교하라

자바의 가상머신은 플랫폼의 독립적인 특징이 있기 때문에 자바는 플랫폼의 독립적인

개발을 할 수 있는 특징이 있다.

Gabage Collection을 통해 인스턴스 제거 작업을 따로 할 필요가 없기 때문에

메모리 관리가 용이하다.


- interface와 abstract class의 차이는?

각 객체마다 사용하려는 키워드가 다르다는 첫번째 차이와 다중상속의 가능여부의 두번째 차이

그리고 구현된 method를 작성유무의 차이가 있다.


- thread와 process의 차이는?

운영체제에서 실행되는 독립적인 프로그램이 process라면 그 곳에서 독립적으로 실행되는 단위가 thread다.


 - call by reference, call by value의 차이는?

call by reference는 생성된 인스턴스의 주소값을 전달한다면 call by value는 해당 값을

복사해서 전달하게 된다.

  1. k9e4h 2016.06.28 11:14 신고

    call by reference랑 call by value의 저장위치도 많이 물어봐요!

+ Recent posts