728x90
[챌린지] 3주 차 회고회고설계 / 구현구현에서 동료분들은 함수 하나하나, 구조 하나하나를 다 깊이 알고, 동작 원리도 다 이해하고, 비슷한 함수와의 차이도 명확히 구분하며 자신들이 사용하는 함수나 구조에 근거가 있었다. 하지만 나는 그냥 인터넷 서칭하여 하나만 알고 있었기 때문에, 동료분들과 지식의 깊이도 달라서 문제에 대한 접근 방식이 제한적이라는 것을 깨달았다. 따라서 나도 하나의 검색 결과만 찾아서 사용하지 않고, 비슷한 종류도 같이 검색을 하고 차이점도 따로 정리를 하며 학습의 깊이를 깊게 가져가야 한다고 깨달았다. 그리고 설계는 다들 바로 다이어그램을 그릴 정도로 능숙하셨다. 나는 다이어그램을 그린 적이 많이 없어서 항상 피하기만 해서 더 다이어그램 그리는 능력이 늘지 않았던 것 같다. 그리고..
[책]「개발자의 원칙」박성철님 | 덕업일치를 넘어서프로그래머는 여러 사람에게 설명 / 협상을 잘해야 하며, 계획도 잘 세우고 목표를 달성하며 이를 위해 여러 결정도 스스로 내리는 것도 중요하다는 것을 알게 되었다.게임은 컴퓨터 성능을 최대로 활용하는 분야라는 점이 참신했다.팀워크는 1 + 1 이 2 이상이 되도록 만드는 것호황기 이후, 개발자라는 직업에 대한 사명의식을 가지고 책임지는 진짜 전문가를 필요로 하는 사회가 될 것이다.이동욱님 | 프로덕트 중심주의프로덕트가 목표라면, 지향해야 할 가치나 목표가 명확해지고, 이를 달성하기 위해 더 디테일한 다음 단계를 고민할 수 있다.혼자 작업하더라도, 깃/깃플로/풀 리퀘스트 등 활용하여 ‘협업 모드’로 개발을 권장한다.소프트웨어 제품 제작이나 출시 과정에 관심..
git 내부 구조기본 오브젝트⸰blob - 타입 : blob 타입 - 사이즈 : 컨텐츠의 용량을 bytes로 표시 - 컨텐츠 : 다양한 형식의 파일 저장(텍스트, 이미지, 음악, 이진 파일): 파일 이름, 파일 형식은 저장되지 않고, 파일의 메타정보를 제외한 파일의 내용 전체를 저장: 각 파일의 내용은 고유한 Blob 오브젝트로 저장: 각각의 고유한 SHA-1 해시를 가지고 있음 ⸰tree - 타입 : tree 타입 - 사이즈 : 트리 오브젝트의 용량을 bytes로 표시 - tree 객체 : 하위 디렉토리의 트리 객체를 재귀적으로 참조 - blob 객체 : 한 디렉토리에 있는 모든 blob을 담음: 객체에 대한 접근 권한, 파일 이름 관리: 디렉토리 내 파일들을 blob 오브젝트로, 그리고 ..
PromisePromise⸰ 여러 개의 비동기 작업을 순차적으로 수행할 때 콜백 함수가 중첩되어 코드의 깊이가 깊어지는 콜백 지옥을 개선⸰ 콜백 함수를 대체하고, 비동기 작업의 흐름 쉽게 제어 3가지 상태⸰Pending(대기): 비동기 처리 로직이 아직 완료되지 않은 상태new Promise(function(resolve, reject) { // ...});위 메서드를 호출한 상태 ⸰Fulfilled(이행): 비동기 처리가 완료되어 프로미스가 결과 값 반환해준 상태new Promise(function(resolve, reject) { resolve();});resolve( )가 호출된 상태로 then( )을 이용하여 처리 결과 값을 받을 수 있음 ⸰Rejected(실패): 비동기 처리가 실패하거나 오..
[챌린지] 2주 차 회고회고설계 / 구현 동료분들과 얘기를 나눠보니, 설계를 진행하지 않고 바로 구현을 시작하시는 분이 많았다. 그래서 그렇게 해보았는데, 뭔가 전체적인 흐름을 이해하고 시작하는 게 아니다 보니, 오류도 많이 발생하고 갈아엎기도 많이 갈아엎었다. 다음 주에는 설계 단계를 어떤 함수가 필요한지, 어떤 데이터 구조가 필요한지까지 설계를 하고 구현을 해보도록 해야겠다. 학습 정리 이번에도 학습 정리를 완벽하게 끝내지 못했다. 아무래도 학습 저장소에 더 치중되어서 괜히 촉박하게 학습 정리를 하면, 내용이 의미 없는 것들로 작성되는 것 같다. 그냥 양을 채우는 것에 목적을 두게 되는 것 같아서 몰랐던 개념들만 작성을 해두고, 주말에 정말로 궁금했던 내용을 찾아서 깊게 공부해서 적어야겠다. 학습 정..
[챌린지] 1주 차 회고회고설계 / 구현 설계와 구현의 밸런스를 잡는 것이 너무 어려웠다. 어디까지 설계를 진행한 후 구현을 진행해야 하는지, 설계를 마치고 구현을 하면서 바뀐 설계를 과정으로 다 표현해야 하는지 감이 잡히질 않았다. 미션을 설계하고 구현하는 시간을 줄이는 효과적인 방법을 매일매일 모색하였고, 매일 매일 다른 방식으로 진행했지만 아직 어떤 방식이 나와 맞는지 찾지 못했다. 학습 정리 구현을 하면서 생긴 호기심을 시작으로 해당 부분을 깊게 파고들어 정리하고 싶었지만, 마음먹은 대로 하지 않았던 게 아쉽다. 주말에 호기심으로 시작하여 더 깊게 공부한 내용을 업로드해야겠다. 피어세션 동료분의 코드를 보는 것이 너무 힘들었다. 이런 경험이 없었어서 자세하게 이해하기는커녕, 한 분 한 분 확인..
EventEmitter EventEmitter⸰ event 를 발생시키는 모든 객체는 EventEmitter 클래스의 객체⸰ 하나의 EventEmitter 객체가 발생시키는 이벤트는, 해당 객체 내에서만 유효 > 하나의 EventEmitter 객체에 설정된 콜백 함수가 다른 EventEmitter 객체의 이벤트에 반응하지 않음 ⸰on( ) - 이벤트가 발생했을 때, 실행할 콜백 함수를 등록하는 함수 - 이벤트 핸들러를 설정하는 함수 - addLinster 함수의 역할과 인자가 동일const EventEmitter = require('events');const myEmitter = new EventEmitter();myEmitter.on('test', () => { console.log('Succ..
불변성불변성⸰ 한 번 생성 후 변하지 않는 것⸰ 예상 가능하고, 신뢰할 수 있는 코드를 지향하기 위하여 사용해야 함 Immutable type⸰ 원시 타입(Boolean,String,Number,Null,Undefined,Symbol) ⸰ 메모리 영역 안에서 불변하며, 새로운 값이 재할당let name = 'foo';name = 'bar';name 은 새로운 값이 재할당 됨 Mutable type⸰ 객체 타입(Object,Array,Map등)⸰ 변할 수 있는 값이며, 직접적으로 변경 가능let x = ['foo'];x.push('bar');console.log(x); // ['foo', 'bar']x.push('bar') 라는 코드를 보지 못한다면, x = ['foo'] 라고 생각하여 잘못 코드를 작성할..