You try to understand things - how it works, and try really really hard to understand how to make things work. These are the key traits of a software engineer
Always ask the question. WHY? W.H.Y.
공부하면서 얻은 인사이트를 토대로 올해 어떤 일을 할 때 실행할 액션 플랜 목록
개발 시작 전에, 무엇을 어떻게 개발할 것인지 계획을 명확하고 자세하게 세우자
액션: 개발을 시작하기 전에 주어진 목표를 달성하기 위해서 필요한 데이터와 프로세스가 무엇인지 명확하게 파악하고 도식화 하는 작업을 먼저 수행한다.
기대효과
- 일정 시간을 계획에 투입함으로써 시간 내에 작업이 완성도 있게 마무리 될 기반을 구축한다.
- 더 조심해서 처리해야되는 로직과, 덜 조심해서 처리해도 되는 로직을 구분하고 더 중요한 로직을 구현하는데 자원을 더 배분할 수 있다.
- 개발을 하는 과정에서 지금 내가 어떤 작업을 하고 있고, 전체 계획 안에서 어느 정도 작업이 진척되었는지 알 수 있다.
노션에 업무 프로세스별로 수행해야되는 체크리스트를 만들어서 매 프로젝트마다 수행하자.
개발 시작 전에, 무엇을 어떻게 개발할 것인지 계획을 명확하고 자세하게 세우자
라는 액션플랜과 비슷한 맥락이다.
업무 프로세스 전반에 걸쳐서 내가 그동안 업무를 하면서 겪은 시행착오를 기준으로 매 프로세스 별로 무조건 충족되어야 하는 체크리스트를 만들어서 업무를 해보자.
이 체크리스트는 지속적으로 업데이트가 되어야 한다.
문제를 푸는 과정
일단 느낌대로 손 가는대로 풀지 말고 구조적으로 풀어보자.
- 문제를 명확하게 정의한다.
- 정의한 문제를 중요한 부분에 집중해서 풀어낸다.
- 혼자서 풀어내기 어려운 문제가 있다면 동료와 명확하게 소통한다.
- 코드를 다 작성했고 일견 기능이 잘 동작하는 것처럼 보인다고 해서 작업을 완료하는 것이 아니라, 컨텍스트를 고려해서 코드가 필요한 안정성과 성능 수준으로 동작하는지 테스트한다.
- 병목현상이 존재한다면 정확히 어디서, 왜 발생하는지 파악한다.
목표가 없이 공부하니까, 중구난방으로 공부를 하게 되는 경향이 있다. 목표를 정하고 쪼개서 개별 목표를 성취하는 형태로 변경해야 할 듯. 올해는 수동적인 공부(ex) 해야될거 같아서, 어디서 많이 들은 키워드라서 등등 이유도 정확하게 모르고 애매하게 하는 공부) 말고 능동적인 공부를 하자. 원하는 목표가 무엇인지 인지하고, 그 목표를 이루기 위해서 필요하다고 생각되는 공부를 하자. 원인을 찾아보고 이해하는 공부를 하자!
무엇보다 지금 회사에서 주어진 일을 잘 해결하고, 더 나아가서 프로젝트를 개선하기 위해서 기술적으로 기여할 수 있는 부분들을 추가로 해결해보고싶다.
이 프로젝트의 성공여부가 적어도 프로덕트의 기술적인 완성도 부족은 아니도록 최선을 다해서 기여하고싶다.
- 3월 7일의일의 생각
- 최근 또 이런 저런 생각들을 해보고, 다양한 사람들의 의견을 보면서 다양한 개발 분야를 경험하는 것도 함께 병행되어야 하는 일이라는 생각이 든다. 그리고 다양한 개발 분야를 경험하면서도 본질을 파악하고 학습하는 것이 중요하다고 느낀다. 그런 경험들을 통해서 새로운 기술, 새로운 분야에서 일을 하게 되더라도 본질을 이해하고 빠르게 결과를 내고 문제를 해결할 능력을 갖출 줄 아는 개발자가 되는 것이 장기적인 목표가 되어야 하지 않을까. 장기 목표에 대해서 윤곽이 잡힌 하나의 부분이다.
세부 목표
1.React & React Native framework가 동작하는 방식 및 제공되는 API 이해
- 왜? 프로덕트를 개발하는데 있어 적절한 API를 활용하여 크고 작은 문제를 해결하고 결과를 일정 내에 산출하기 위해서.
얻고자 하는 결과
: React 및 React Native의 구조 및 다양한 API의 동작원리를 이해하고, 적재적소에 활용해서 주어진 기능을 빠르고 안정적으로 개발할 줄 아는 능력.
- React Native에서의 Animation
- 왜? 올해는 프로덕트를 더 인터랙티브하게 만들어보고 싶음. 프로덕트가 제공하는 기능적인 측면에서 효용이 큰 것과 별개로, 프로덕트가 주는 느낌? 사용성이 나이스한 것도 사람들에게 가치를 제공한다고 생각 (대표적인 예시가 애플 아닐까?)
얻고자 하는 결과
: 모바일 앱 환경에서 다양한 인터랙션이 주는 효과에 대한 이해, React Native에서 애니메이션이 동작하는 방식 및 한계에 대한 이해, Android/iOS 플랫폼별 애니메이션의 느낌 특징 및 기기가 가지는 한계에 대한 이해
- JavaScript & TypeScript
- 왜? 자연스럽게 JavaScript의 여러 good practice를 코드 작성에 녹여내고 싶음. 그리고 async 관련 로직에 대해서 솔직히 말하면 아직도 잘 모르겠음. 그리고 ES6에 대해서도 조금 더 원론적인 이해가 필요하다고 느낌. ES6에 어떤 특징적인 기능들이 존재하는지, 왜 이런 기능들이 추가되었는지를 이해해야 더 적절히 사용할 수 있지 않을까? TypeScript는 정적 타이핑이 프로그래밍 시 제공해주는 장점을 이해하고, 개인적으로 만드는 프로젝트의 안정성을 키우기 위해서 공부.
얻고자 하는 결과
: JavaScript의 여러 기능의 동작 원리를 이해하면서 코드를 작성하고 TypeScript를 활용해서 Type Safety가 보장되고 로직에 대한 이해를 증가시키는 코드를 작성할 줄 아는 프로그래머가 되는 것.
- FP, OOP 등 좋은 코드와 구조
- 왜? 언어를 잘 이해하고, React를 잘 사용하는 것과는 별개로 코드를 잘 짜기위해서, 어떤 코드가
좋은 코드
인지 이해하고 내 코드에 자연스럽게 녹여내고, 현재 프로덕트의 코드를 더 확장하기 편리하고 읽기 쉬운 코드로 조금씩 개선하기 위해서 얻고자 하는 결과
: 가독성이 좋고, 코드 그 자체로 목적이 명확하게 드러나며 다양한 변경사항에 최소한으로 필요한만큼은 열려있는 코드를 설계하고 작성하는 능력. 휴먼에러를 최소화하고 구조적으로 안정적일 수 있는 코드를 작성하는 능력.
- 문제를 해결하는 방법
- 왜? 문제를 해결하는 다양한 방법 및 접근법들에 대한 이해가 필요하다고 느낌. 지금은 문제를 그냥 일단 해결하는 형태로 접근하는데, 보다 더 구조적이고 효율적으로 문제를 해결하는 습관이 필요
얻고자 하는 결과
: 문제를 마주했을 때, 문제를 명확하게 정의하고 문제의 성격에 맞다고 판단되는 접근법을 활용해서 문제를 구조적으로 해결하는 습관 장착.
- 일을 잘하는 방법에 대한 고민
- 왜? 개발을 잘하는 것과 별개로, 어떤 사람이 일을
잘
하는 사람인지에 대한 고민이 최근에 많이 됨. 혼자 고민하는 것도 좋지만 책도 읽어보고 다양한 사람들의 이야기를 읽고 들어보자. 얻고자 하는 결과
: 2024년 12월 31일에는 2023년 12월 31일과 비교해서 더 일을 잘하는 노하우를 가지고 더 넒게 볼 줄 아는 사람이 되는 것. 소통이라는 것을 더 이해하고 잘 해내는 Co-Worker가 되는 것.
- React Concurrent Features
- fiber
- React host components, React Composite Components
- 'tick' of the UI Thread
- Mount Phase가 UI Thread에서만 이루어지는 이유?? (Swift랑 비슷한가?.. SwiftUI는 모든 View를 변경시키는 작업을 메인스레드에서 처리하도록 되어있음)
React Element Tree
와React Shadow Tree
는 thread safety를 위해서 immutable함. -> thread safety랑 두 tree가 immutable한게 무슨 연관성이 있는가?- C++ 컴포넌트가 무엇인지? components in C++
- Prevent race라고 할때 race는 thread 관련된 것인지?
- no more jni for Yoga? (android 관련)
- C++ “const correctness” feature (thread safety관련해서..)
- Render 단계는 Interruptible하다..?
useNativeDriver
and thread- Dot notating react components and async boundaries and webpack, 참고 글 및 댓글
- PostgresSQL
- ORM
- neon
- prisma
- drizzle-orm
- RESTful or GraphQL endpoints
- REST 단점: underfetching and overfetching
- react native에서 모달을 매끄럽게 렌더링하고 닫는 방법, 모달의 작동 원리
- async await 및 try catch and error handling
- nested function 구조에서 try catch 동작방식
- 함수 정의 방식에 따른 기능의 차이
- typeof price === 'number' && !Number.isNaN(price);
- typeof 로 확인하는 것과 isNaN으로 확인하는것의 차이?
- iterator, .next() 메서드 (Map을 공부하면서 iterator를 통해서 iterate한다는 표현을 봤는데 이해하지 못했음)
- https://www.freecodecamp.org/news/execution-context-how-javascript-works-behind-the-scenes/
- 5 async-await error handling strategies + 동영상 마지막에 추천하는 내용 다시 보면서 공부할 내용 추가 정리
- 3월 8일에 작성했던 회사 코드의 문제점 파악 및 공부한 내용을 토대로 개선한 점 정리
- GIT 관련 공부
- 브랜치 나눠서 한참 작업하다가 다시 붙이려는데 뭐가 꼬였는데 아래 문제들이 발생해서 한참 고생했다. git에 대해서 알고 뭔가를 처리해야될 때가 되었다.
- 다른 사람 커밋이 뭔가 rebase하는 과정에서 내 커밋으로 처리됨
- 자꾸 수정한 내용을 또 수정하고 또 수정하고 하는 일이 필요했음.
- 다른 사람 수정 내용이 잘 유지되었는지 모르겠음.
- https://www.reactnativedevelopmentcompany.com/blog/
- https://www.youtube.com/watch?v=wIuVvCuiJhU
- 마이크로서비스란?
- MSA...마이크로서비스...등등 요즘 많이 언급되는데 뭔지 정확하게 모르고있음. 뭔지는 대략적으로라도 알고 가자.
- Git merge strategies
- ort??
- https://dev.to/kylejb/a-key-difference-between-then-and-async-await-in-javascript-53e9
- SwiftUI앱에서 UIKit을 wrapping해서 사용하거나, 아니면 Storyboard로 만든 컴포넌트 사용하는 방법
- Android에서 백그라운드 작업을 할 수 있는 방법들(local push notification)
- leetcode 41번 문제 constant space로 풀어내기
- https://www.freecodecamp.org/news/reactive-programming-beginner-guide/?ref=dailydev
- bun (vs nodejs)
- Flashlist
- React Native App performance is a myth?
- Compositions over inheritance or mixins
- 점검해볼만한 캘린더 라이브러리 flash-calendar
- Should You Still Learn To Code? | Prime Reacts
- 0414에 봤던 useReducer 관련 내용에 대한 블로그 글
- 가십프로젝트 이슈 - FlatList가 데이터 업데이트 시 두 번째 요소가 최상단에 보이는 이슈 원인 파악 필요
- Gasip프로젝트에서, FlatList 를 View로 감싼케이스와 그렇지 않은 케이스에 렌더링이 달라지는 원인 파악 필요
- SafeAreaProvider, Global Modal...
- 회사 프로젝트 관련 이슈 -> setTimeout과 setInterval에서 useState값을 참조하는 과정에서 생각처럼 동작하지 않는 원인 이해 필요
- JavaScript에서 this와 arrow function(왜 객체 메서드로 arrow function을 할당시키는 형태로 구현 시 this가 객체가 되지 않는지)
- 회사 업무 하면서 고민되었던 내용 -> 별도 모듈로 객체로 선언해서 export해서 사용하는 것과, 함수를 선언해서 다른 모듈에서 함수를 호출해서 특정 값과 메서드(함수)들을 사용하는 것의 차이? 장단점? 적절한 상황? 등에 대해서 고민이 필요할 듯.
- https://meganslo.medium.com/why-is-reacts-key-prop-important-b6bd51124270
- 왜 JSI를 C++로 작성했을까?
- Xcode schemes이 무엇인지
- 안드로이드에서 앱을 릴리즈 버전으로 빌드할 때 요구되는
private signing key
가 무엇인지 - RN앱을 debug 모드로 빌드했을 때 퍼포먼스가 느려지는 이유 참고할만한 글
- Flashlight for performance 측정 RN
- async 함수 실행 시 어디까지 async로 entitle 해야하는지?
- RN상에서 하단 SafeAreaInset을 어떻게 처리해야 하는지? iOS 및 Android
- RN에서 shadow를 처리하는 원리
- 의존성 주입 && React Context for dependency injection and not state management
- Always remember you can use component composition (https://albertgao.xyz/2022/02/19/react-state-management-libraries-2022/)
- https://react.dev/reference/react/useEffect#fetching-data-with-effects
- 0513 Pressable과 Zustand store값 그리고 synthetic event에러
- 0515 KeyboardAvoidingView
- https://blog.inkdrop.app/how-i-improved-my-react-native-app-50x-faster-13d566061e84
- offset을 이용한 pagination이 괜찮을지와, cursor 기반 pagination을 적용해야 되는 필요성에 대해서 고민.(성능 관점에서 테스트 필요)
- 검색 기능 구현 시, 검색결과가 있는 상태에서 새로운 검색어 입력해서 검색 시 기존 검색결과 화면에서 어떻게 새로운 검색결과 화면으로 전환되는지 다른 앱들 사용성 체험
- page.current를 초기화 하는 코드를 useEffect로 검색어 변경 시 처리되도록 구현하였는데, 최선의 구현 방법인지 잘 모르겠다는 생각이 들었음(최선이 아니라도, 괜찮은 방식인지에 대해서, 코드에 대해서 고민이 필요)
- 페이지네이션 구현하기 위해서 page를 관리하는 방법을 useState로 할 때 async한 업데이트 때문에 이슈가 있어서 useRef로 처리하였는데, 이러한 이유로 useRef를 사용하는게 맞을지? useRef는 값이 synchronous 하게 업데이트 되는지?
- FlatList, onEndReached, onEndReachedThreshold에 대한 이해
- https://dev.to/zacharylee/build-your-own-reactjs-in-400-lines-of-code-3l1e?ref=dailydev
- facebook/react#14110
- facebook/react#15156 (comment)
- 개발사 WhiteSpectre -> React Native관련 블로그 글 제공됨 확인 필요
reanimated-color-picker
를react-native-reanimated
버전 2.x 와 함께 사용하는 경우 onChange에 전달된 함수가 실행되지 않는 이슈와, 전달된 함수를 'worklet' 함수로 처리시 실행되는 것에 대해서 알아보기.- About creating relationships and personalized experiences. Become excellent. Be unreasonable. | Will Guidara for Big Think+
- Software Mansion의 React Native용 VSCode IDE Extension(beta)
- remeda
- 개발자도 회사의 조직원이다
React Native
- 0125: 공식문서 Architecture Overview - 1
- 0126: 공식문서 Architecture Overview - 2
- 0202:
react-native-reanimated
basics - 0206: 공식문서 Performance Overview
- 0208: 원티드 React Native강의 - 퍼포먼스 최적화를 위해 사용할 수 있는 도구들
- 0212: flipper - React DevTools
- 0322: reanimated 공부
- 0402: React Native 앱에서 글로벌하게 모달 구현하는 방법(ing)
- 0409: React Native New Architecture - 개념, 구 아키텍처의 문제점, Codegen
- 0502: JSI
- 0501: RN앱에서 왜 boot splash screen 관련 라이브러리를 사용하는지.
- 0517: RN앱에서 FlatList를 활용한 pagination구현 시 발생한 문제점 해결 및 추가 의문들
React
- 0127: useMemo
- 0128: useCallback
- 0129: useRef
- 0414: useReducer의 사용에 대한 공부
- 0507: useContext 공부(문서 더 읽어야 함)
JavaScript & TypeScript
- 0207: type alias vs interface 공식문서
- 0221, 0222: Promise
- 0223: isNaN..typeof x === number... 공부하려다가 먼저 NaN 공부
- 0225: async function
- 0228: Error handling in JavaScript(ing)
- 0229: Async Await에 대한 추가 궁금증.
- 0308: async await resolve reject를 처리하는 방법에 대해서 공부(회사에서 에러핸들링 하다가 내 답답하고 가독성떨어지고 흐름 파악하기도 어려운 코드에 화가 났음..아오 답답해!!!!!)
- 0313: async(병렬 실행 vs 순차 실행)
- 0325: JavaScript getDay()
- 0406
- 재귀함수 안에서 return statement를 써야하는 이유(릿코드 데일리 1544)
- JavaScript Scope Chain and variable shadowing
Functional Programming
- 0208: 쏙쏙 들어오는 함수형 코딩
- 0209: 쏙쏙 들어오는 함수형 코딩
Test Code
- 0217: Jest 테스트 코드 작성 튜토리얼 영상
커리어
- 0201: 정말 중요한 하루. 자꾸 회고해보면서 기억을 되새겨야 한다.
- 0313: 일에 대한 고민
- 0326, 0327: 패스트캠퍼스 캠프콘 듣고 느낀 점들과 action plans
- 0329: Produce don't Consume
- 0330: 시장에서 살아남는 사람 되기
알고리즘
- 0302:
Stack
을 활용한 문제풀이 - 0331: 다양한 연속 부분배열 구하기 -> ing, 713번 문제의 부분배열의 특정 시점의 개수를 몇 개 더하는지 구하는 방법에 대해서 이해가 부족함
프로그래밍 전반에 걸쳐서 적용되는 지식들
- 0311: LSP in frontend
- 0312: Git 기본에 대해 공부(Rebase and Merge차이 특히)
- 0517: Pagination의 의미 및 방법들.