본문 바로가기

분류 전체보기

(37)
[React] useRef는 unmount 되어도 유지될까? 최근에 캐시된 이미지를 사용하기 위해 useRef에 캐시되어야 할 id를 저장하고 캐시여부를 판단해야 하는 상황이 있었습니다..! 관련해서 오늘은 useRef와 관련된 사실을 알아보겠습니다! 먼저 내가 원했던 동작은 useRef를 선언한 컴포넌트가 unmount 되어도 그 값이 유지되어서 다음에 컴포넌트가 mount되어도 동일한 useRef 값을 사용하고 싶었습니다! 다음 코드를 살펴보자 //App.js function App() { const [isOpen, setIsOpen] = useState(false); return ( { setIsOpen(!isOpen); }} > click {isOpen && } ); } 먼저 App.js에 state를 바꾸는 버튼을 하나 만들어주고, 버튼이 클릭될때마다 U..
[React] useState? useRef? (feat.단축키 추가) 최근에 업무를 진행할 때 리액트로 만들어진 웹사이트에 전역 단축키 이벤트를 추가해야하는 경우가 있었습니다. 이때 겪었던 문제 상황과 해결 방법에 대해 간단하게 소개하고 관련 내용을 추가 학습하여 정리해보았습니다. 상황을 자세히 설명하자면 리액트로 만들어진 프로젝트에 전역 단축키 기능을 추가해야하고, 로직을 추가할 때 컴포넌트 안의 업데이트 된 state 값을 사용해야하는 상황이었습니다. 상황을 간단한 코드로 재현해보면 다음과 같습니다.(코드는 App.js에 중요한 부분만 간단하게 요약하였습니다.) //App.js function App() { const [count, setCount] = useState(0); useEffect(() => { //컴포넌트가 렌더링 될 때 전역 단축키 이벤트를 설정한다. ..
[SQL] 쿼리 튜닝이란?(+기본 개념) 최근 쿼리 튜닝을 통해 성능을 향상시키는 것에 흥미가 생겨 오랜만에 기록을 남깁니다..! *MsSQL관련 내용을 기반으로 정리하였으나 최대한 MySQL과 중복되는 부분만을 공유합니다! *따라서 MsSQL의 내용이 섞일 수 있습니다..! 그보다 쿼리튜닝이 뭐지? 관계형 데이터베이스에서의 쿼리튜닝이란 SQL문을 최적화해 원하는 결과를 좀 더 빠르게 하는것을 뜻한다. 그럼 쿼리 튜닝을 왜 해야 할까? 빠른 데이터 조회를 통해 사용자가 더 빠르게 원하는 결과를 받을 수 있게 된다! 그러면 사용자 경험 즉, UX가 향상되어 웹사이트에 더 오래 머무르게 되고 이는 수익으로 직결 될수도 있다! 그렇다면 쿼리 튜닝을 어떻게 해야할까? 쿼리튜닝을 하기 전에 알아두어야 할것들이 몇가지 있다. 오늘은 짧게 용어와 쿼리 튜닝..
husky를 이용한 git-hooks 자동화 오늘은 프로젝트에서 다들 사용하는 git에 관련된 내용입니다! 그중에서 git-hooks에 대해 알아볼건데요! git-hooks란? git과 관련된 이벤트가 발생했을떄 특정 스크립트를 실행할 수 있도록 하는 기능 git init을 하면 자동적으로 생기는 기능이라고 합니다..!(git 넘나 좋은것..) 종류 이렇게 있다고 하는데 그 중에서 오늘 소개할 부분은 빨간네모 부분인 prepare-commit-msg, commit-msg, pre-push 입니다! git init을 하면 안에 .git/hooks폴더가 생성되게 됩니다. 폴더 내부를 살펴보면 이렇게 구성되어있는데 뒤에 .sample확장자를 없애주면 hooks가 실행됩니다! 하지만 프로젝트를 진행할때 .git폴더는 올라가지 않는거 알고 있죠?! 아무리 ..
[Git] Git-Flow에 대하여 오늘은 회사에서 새로운 프로젝트를 진행할때 git-flow 브랜치 전략을 적용하기 위해 사전 학습한 내용을 정리하고자 한다. 먼저 브랜치 전략이란? 소프트웨어의 상태에 따라 브랜치를 분리하는 전략, git-flow. github-flow, gitlab-flow등이 있다. 그렇다면 git-flow를 쓰면 뭐가 좋은데? 기능별로 브랜치를 새로 생성해 작업하므로 각각 병렬적으로 개발할 수 있다! feature 브랜치가 존재해 추적이 쉽다! 규모가 커질수록 소스코드 관리가 용이하다! git-flow의 흐름을 살펴보자 git-flow를 설명할때 가장 많이 언급되는 흐름도이다. 하지만 나는 영어로 되어있어 그런지 잘 이해가 안간다.. 이는 밑에 예시를 들면서 설명하겠다. git-flow에서 각각의 브랜치 역할 ma..
[운영체제] CPU 스케쥴링(Scheduling) 오늘은 CPU스케쥴링에 대해 알아보자 하나의 프로세스만 CPU를 독점하고 있으면 어떻게 될까? 지금 우리가 여러개의 프로그램을 동시에 사용하는 것은 불가할 것이다.(사실 어느 시점의 CPU는 하나의 프로세스가 사용하고 있지만 매우 빨리 바뀌기 때문에 우리는 동시에 사용한다고 느끼는 것이다.) 그렇다면 여러 프로세스들이 CPU를 번갈아가면서 사용해야 하는데 어떤 기준을 가지고 CPU를 할당 받게 될까? 지금부터 그 기준을 알아보자 먼저 CPU 스케쥴링에는 선점(Preemptive)와 비선점(Non-Preemptive)가 있다. 단어만 들어서는 무슨 뜻인지 모르겠다. 선점이란? 선점 방식이란 예를 들어 A프로세스가 실행되고 있는데 특정한 기준에 의해 우선순위가 더 높은 B프로세스가 CPU를 요청하게 되면 A..
[운영체제] 인터럽트(Interrupt)와 컨텍스트 스위칭(Context Switching) 지난번에 정리한 멀티 프로세스 혹은 멀티 스레드 환경을 생각해보자 A라는 프로그램이 CPU를 할당받아 명령을 수행하고 있다. 하지만 어떠한 이유에서 어떠한 루틴의 실행을 목적으로 CPU를 할당받아야 한다고 해보자 그렇다면 어떻게 CPU에 대한 사용권을 얻어와야 할까? 이때 사용되는 것이 인터럽트(Interrupt)라는 것이다. 인터럽트가 발생하게 되면 A는 현재 수행중인 명령을 멈춘다. 그리고 어떠한 루틴을 수행한 다음 다시 A로 돌아와 명령을 수행하게 된다. 여기서 의문이 생긴다. 명령을 멈췄으면 다시 돌아왔을때 처음부터 실행해야 되나? 이를 위해 멈추기 전에 현재 실행상태(명령의 위치)를 저장해 놓는다. 이렇게 저장되는 자료의 구조를 PCB(Process Control Block)이라고 한다. 그렇다..
[운영체제] 프로세스(Process)와 스레드(Thread) 오늘은 프로세스와 스레드에 대해 알아보자 Process란? 간단히 말해서 실행되는 프로그램이다. 일반적으로 CPU에 할당되는 단위라고 하는데 이는 매우 위험하다. 그 이유는 최근 리눅스에서는 스레드 단위로 CPU에 할당하는 방식으로 사용하기 있기 때문이다. 따라서 조심하자!! Thread란? 이것도 간단히 말해 프로세스 내부에서의 작업단위 혹은 실행단위라고 말할 수 있다. 정의에 대해서는 간단하게 살펴보고 차이점을 알아보자 Process vs Thread 가장 큰 차이점은 메모리 공유에 있다. 프로세스들은 각각이 독립적인 존재로 서로 메모리를 공유하지 않는다. 하지만 스레드는 서로 메모리영역을 공유한다. 여기서 알아두어야 할게 있다. 스레드는 모든 메모리 영역을 공유하는 것이 아니고 Heap/Data/C..

반응형