오늘은 업무 도중 개발자와 퍼블리셔는 정말 한끗차이같지만 사고방식이 다르다는 걸 느낀 계기 및 부족한 부분을 학습하기 위해 (그 순간 머릿속에 스친 insight⚡️
) 블로그 소재 & 공부로 활용!!
회사에서 자바스크립트 파일을 수정하던 도중 잘 나왔는데, 개발단에 붙으니 에러가 나서 지난 주부터 금주 동안 계속 수정중에 있었다. 영향도 있는 페이지까지 계속 체크하고 테스트 하던 중에 마지막에 PC에선 되는데 Mobile에서는 안되는거다. 공통으로 쓰는 파일인데.. 그래서 개발자 분과 같이 모니터를 보면서 찾는데 디버깅하는데 있어서 내가 노하우나 생각이 부족했음을 느낄 수 있었다. 그리고 개발자 분이 하는 방법을 계속 관찰했다. (구 디자이너였던 습성인지 뭔가 자꾸 자세히 관찰하는 버릇..😅)
특히 인상적이었던 게 오류를 찾을 때 데이터 타입(빈문자열이나 객체 등을 보고 undefined인지 null인지 생각)을 통해 생각하시거나 이클립스에서 걸리는 모든 개발단 화면을 찾아 디버깅하거나 콘솔이나 네트워크 탭을 활용해 찾는 도움(!)을 받았고(다행히 오류는 수정했지만..😢) 거기서 내가 그동안 소스 분석이나 동작만 신경쓰느라 JavaScript 디버깅할 때 개발자도구 활용을 잘 못하고 있다는 걸 느꼈다. (친구 역시 너가 프론트엔드 개발자가 되는데 가장 장벽이 JavaScript일 거라며, JavaScript에 자신감이 붙는 순간 더 늦지 않게 빨리 전직하는 것이 좋다고 해줬으나.. 단순히 템플릿처럼 jQuery 복붙 & 계산기 조작(feat. 경아 님 표현력)하는 듯이 말고) 그리고 무엇보다 아직은 저렇게 개발자식으로 사고하는 건 익숙하지 않다.. 아까도 속성 값 넣을 때 매개변수가 하나여도 두개다 받을 수 있다는 것도 알려주셨고 일단은 도움 받긴 했는데 스스로 판단하려면 아직도 먼 길 같다.. 그래도 조금씩 학습해서 이제 JavaScript에는 기본적으로 뭐가 있고 활용하는지 알겠는데 개발자스럽게 판단이 아직 안 선다는 게..
많은 분들이 웹페이지를 만들기 위해서 프론트엔드 개발을 학습을 시작하시는데요. 그러면서 순서대로 HTML 배우고, CSS 배우고, 일단 이 HTML과 CSS 같은 경우에는 기본적인 구조를 가지고서 예쁘게 꾸미는 일반적으로 이미지를 가지고 사고하는 방식을 사용하게 됩니다. 그래서 이러한 방식들이 기본적으로 크기는 얼마고, 색상은 무엇이고, 위치가 어디다 이러한 보편적으로 익숙한 개념들을 다루기 때문에 비교적 어렵지 않은 선에서 CSS 학습까지는 잘 마치세요.
그런데 문제가 한가지 있습니다. 바로
JavaScript 학습을 시작하시면, 많은 분들이 프론트엔드 개발을 포기하신다는 거에요.
그 부분에서 제가 생각하는문제점
을 말씀드리고 싶어요.일단
디자인
에 익숙하신 분들은 크기, 색상, 위치, 모양 같은 이렇게 화면을 구성하는레이아웃
과 관련된 방식으로 사고해서 개발하게 됩니다. (디자인 = 레이아웃 중심
)그런데
JavaScript
로 들어가는 순간 사고하는 방식이 달라져야해요. 그래서 Script로 된 내용을 이해해야 하고 그렇게 된 내용을 이해하는 사고방식은 더 이상 크기, 색상, 위치가 아니라데이터
가 기준이 됩니다. (JavaScript = 데이터 중심
)그러다 보니까 실제로 JavaScript가 어려워서 거부감을 갖는 것 보다는 사고하는 방식이 달라짐에 의해서 기존에 배운 내용과 괴리감을 느끼게 되고, 그만큼 내용이 어렵게 느껴진다는 것입니다. 제가 여러분에게 말씀드리고 싶은 프론트엔드 개발이라는 것은 결과적으로 HTML, CSS뿐만 아니라 JavaScript까지 전부다 다룰 줄 알아야 제대로 진행할 수 있는 진정한 프론트엔드 개발이 되는 것이구요.
학습을 진행하는 데 있어서
생각의 방식에 차이
가 있다는 것을 미리 아셔야 한다는 것. 그래야지만 학습에 거부감을 낮추고 조금 더 효율적으로 각각의 언어들을 학습할 수 있다는 것을 말씀드리고 싶었어요.대표적인 사례를 소개해드리면
디자이너를 베이스로 시작하시는 분들은 JavaScript로 넘어가면서 굉장히 어려워 하시고, 다른 개발을 베이스로 시작하셨던 분들은 오히려 CSS를 학습하시는 것을 굉장히 어려워 하세요.
그래서 어려움을 느끼는 실질적인 이유는사고하는 방식이 다른 개념의 언어를 학습
하기 때문이다라고 이해하시면 되겠습니다. 그래서 실제로 프론트엔드를 공부하시면서 거부감을 느끼는 것은 이러한 사고가 변경되는 것에서 오는 괴리감때문에 오는 것이지 충분히 극복 가능한 문제이므로 포기하지 마시고 끝까지 완강하실 수 있으면 좋겠습니다.
출처 - 패스트캠퍼스 한 번에 끝내는 프론트엔드 개발 초격차 패키지
강사 님 Blog & YouTube
내가 전직을 결심 후 처음 사본 강의인데, 강사님도 나처럼 디자이너로 시작하여 현 프론트엔드개발자&강사로 활동중이시다. 그래서인지 디자이너에서 개발자가 될 때 느끼는 어려운 점을 누구보다 잘 이해하고 있어 랜선으로나마 강의에서 온기(!)가 느껴졌다.
나는 아직 과도기니까.. (디자이너&퍼블리셔 >> 개발자를 향하여~!)
그래서 내 친구 역시 아마 올해는 내내 정체성의 혼란이 올 것이라고 예상해줬지만..
그렇다면 오늘 알아볼 내용은...
디버깅 프로그래밍의 절반
기본적으로 프로그래머에게 굉장히 중요한 것은 디버깅 능력이라고 저는 봐요. 자기가 코드를 짜요. 사람이 실수 안하는 사람이 없어. 다 버그 있어요. 그 버그를 어떻게 잡냐의 문제거든요. 코딩의 절반은 제가 볼 때 디버깅 실력이라고 봐요. 절반 이상일 수도 있어요. 회사를 어디가도 보통 디버깅하는데 낭비하는 시간, 소비하는 시간이 왠만한 코딩짜는 시간보다 거의 맞먹는다고 봐도 되거든요? 그러면 어떤 사람은 꼭 남의 코드를 줬을 때도 디버깅을 못해서 헤매는 사람이 있는 반면에 디버깅을 남들보다 100배는 잘하는 사람들이 있어요. 그 디버깅을 잘한다는 게 뭐냐면 남의 코드를 잘 읽고요. 그 코드 속에 있는 로직을 따질 줄 알고요. 그 로직을 단계별로 나눌 수 있는 거예요. 그걸 단계별로 나눠서 아 이게 이렇게, 이렇게, 이렇게 ... 이 단계로 실행이 되니까 이 단계에서 버그있나 아니고 저 단계에서 버그있나 아니고 그런 식으로 하나씩 분석을 해가면서 문제가 있는 부분을 찾은 다음에 그 다음에 여기가 왜 문제가 있을까 아 이게 문제구나 그래서 고치는 사람들이에요. 그래서 문제는 그걸 머리 속으로도 할 수 있냐. 없어요 왠만해서는. 이젠 프로그램이 예전보다 단순하지도 않고요. 그래서 툴들이 되게 중요한거고. 제가 VScode를 극찬하는 이유가 그거에요. 디버깅 툴이 워낙 좋아요. (중략) 실제 debugger 탁 attach 해갖고, break 걸고 변수 값들 봐가면서 바꿔가면서 jump 해가면서 보는 사람들하고는 효율 자체가 다르거든요. 그리고 이렇게 빨리빨리 디버깅할 수 있는 사람들은 그만큼 굉장히 많은 걸 보고 굉장히 많은 걸 고치고, 더 힘든 것도 디버깅해보고 남의 코드를 읽는 능력까지 굉장히 많아지는 거죠. 그 순간이 되면 남의 코드를 보는 게 두렵지 않고 남의 코드를 보면서 배우는 것도 되게 많아요 사실. 저는 디버깅 잘하는 프로그래머를 보는 경우면 이 사람은 엄청나게 성장할 거라는 걸 그냥 알아요. 대부분이 그렇고. 그 속도를 못 따라가요 사람들이. 그거에 비해 결과적으로 프로그래밍 짜고 코딩 짜고 디버깅 하고 그런거 되게 힘들어 하는데 그렇기 때문에 자기는 좀 더 이론적 공부하고 설계 쪽을 공부한다? 이런 사람들치고 코딩을 잘하는 사람 제가 못 봤어요.
출처 - 포프TV
기능 단위로 구현하는 경우가 많으므로 하나의 기능이 끝날 때마다 여러가지 테스트, 디버깅이 필요할 수 있다. 여기서 중단점은 스크립트의 동작을 잠시 멈추도록하여 디버깅이 가능하게 해줌.
debugger
를 넣을 경우 스크립트가 실행되면서 debugger를 만나게 된 라인에서 코드 실행이 중단된다. 이 때 반드시 개발자 도구가 열려 있어야 함.function examPle(n) {
for (var i = 1; i < n + 1; i++) {
debugger;
if(i * 2 === 0) {
console.log('hi')
} else if (i * -2 === 0) {
console.log('goodmoring')
} else if (i * 2 === 0 && i * -2 === 0)
console.log('bye')
}
}
WATCH
: 표현식을 평가하고 결과를 보여줌. Add Expression 버튼 +를 클릭해 원하는 표현식을 입력한 후 Enter를 누르면 중단시점의 값을 보여줌. 입력한 표현식은 실행 과정 중에 계속해서 재평가CALL STACK
: 코드를 해당 중단점으로 안내한 실행 경로를 역순으로 표시. 함수 hello 내에 중단점 설정했으모로 CALL STACK 최상단에 hello 위치. index.html에서 함수 hello를 정의하지 않았기 때문에 CALL STACK 하단에 anonymous 출력. (CALL STACK 내에서 항목 클릭 시 debugger가 해당 코드로 휙 움직이고 변수 역시 재평가됨)SCOPE
: 현재 정의된 모든 변수를 출력. Local(지역변수) / Global(전역변수) Resume
: 스크립트 실행 다시 시작 (단축키 F8)Step
: 다음 명령어를 실행함 (단축키 F9) 비동기 동작은 무시함(setTimeout)Step Over
: 다음 명령어를 실행하되, 함수 안으로 들어가진 않음 (단축키 F10) step과 유사하나 다음 문이 함수 호출일 때 step과 다르게 동작 (보이지 않는 곳에서 중첩 함수를 실행하긴 하지만 함수 내로 진입하지 않음. 실행은 함수 실행이 끝난 후에 즉시 멈춤. 함수 호출 시 내부에서 어떤 일이 일어나는지 궁금하지 않을 때 유용)Step Into
: 비동기 동작을 담당하는 코드로 진입하고 필요하다면 비동기 동작이 완료될때까지 대기Step Out
: 실행 중인 함수의 실행이 끝날 때까지 실행을 계속함 (단축키 Shift+F11) 현재 실행중인 함수의 실행을 계속 이어가다가 함수 본문 마지막 줄에서 실행을 멈춤. 중첩 함수로 진입했거나 가능한 한 빨리 함수 실행을 끝내고 싶은 경우 유용Deactivate breakpoints
: 모든 중단점 활성화/비활성화 (실행 영향 X)Pause on exeptions
: 예외 발생 시 코드를 자동 중지시켜주는 기능을 활성화/비활성화 (실행 중단되었기 때문에 변수 등을 조사해 어디서 에러가 발생했는지 찾을 수 있게 됨) 개발하다가 에러와 함께 스크립트가 죽었다면 디버거를 열고 이 옵션을 활성화한 후, 페이지를 새로 고침하면 에러가 발생한 곳과 에러 발생 시점의 컨텍스트를 확인할 수 있음.타입 형식 중 XHR = API이며,
API 란 프로그램들이 서로 상호작용하는 것을
도와주는 매개체이자 접근성을 허용할지 말지 확인하는 것이다.
참고자료
[네트워크 탭으로 마켓컬리 카테고리 정보 가져오는 API 찾아보기]
- 마켓컬리 접속 > 상품 상세페이지로 접속 > 개발자도구(F12) > Network 패널 > Fetch/XHR 탭 클릭 > Name 탭에서 categories?ver=1 클릭 (https://api.kurly.com/v2/categories?ver=1)
- 우측 상단의 Preview를 클릭해서
json
형식의 파일을 펼쳐보면 API 호출을 통해 가져온 데이터를 확인할 수 있다.
코딩의 시작과 끝, 디버깅 (VScode debugging)
Debugging : defining the problem
문제를 정확하게 정의해야 적절한 솔루션을 찾을 수 있다!
문제를 정의조차 하지 않고 무작위로 코드를 수정하면 좋은 결과를 얻기 힘들고,
더 심각한 버그를 도출할 수도 있다.출처 - 드림코딩by엘리
VARIABLES
WATCH
CALL STACK
LOADED SCRIPTS
BREAKPOINTS
그래도 오류를 다 찾긴 했는데, 뭔가 찜찜하면 언니나 친구에게 물어보곤 한다.
(걱정이 넘나 많은 나... 확인받고 싶으니께)
나 曰 같은 파일인데 PC에선 정상적인데 Mobile에선 오류가 떴어.
일단 필요한 부분은 수정은 했고 개발자분하고 찾긴 했는데 왜인지 궁금.
친구(=Java 개발자) 曰 혹시 Mobile이나 Tablet으로 들어갔을때 다른 화면에 조건이 걸려있어서
해당 스크립트가 막힌 걸수도 있어(추측) 한번 낼 가서 다시 봐바.
(그리고 또 오늘 친구는 개발단에 붙든 환경이 어떻든 오류는 니가 봐야 해라고.. 네^^? )
나 曰 일단 계속 테스트 길어지고 자꾸 수정하고 오류 나타나면 기획자 입장에선 좀 싫지?
언니(=앱 기획자) 曰 결과랑 일정만 문제 없으면 상관 없는데? 과정보다는 일정에만 영향이 없으면 좋지
(근데 우리언니도 금융권이라 납기를 중요하게 여기고 원래 쿨한 성격(mbti 가운데 st)이라 그럴수도...)