지난번에 웹팩에 대한 기본적인 내용을 포스팅했고, 이번에서는 웹팩을 좀 더 개발 및 배포하는 과정에서 효율적으로 쓰기 위한 기능들을 정리해 보려고 한다. 참고로 이 내용은 인프런에서 라는 김정환님의 강의를 듣고 정리한 것들을 기반으로 작성한다. 웹팩 개발 서버 (webpack dev server) 우리가 기존에 클라이언트 작업을 하고 나면 그 파일을 브라우저에 직접 로딩해서 결과물을 확인했다. 만약에 인터넷에 웹사이트로 배포를 하기 위해서는 해당 파일을 서버에서 읽고 요청한 클라이언트에 제공해야 한다. 이러한 운영 환경(production)과 개발 환경(development)을 유사하게 가져가게 되면 배포 시에 잠재적으로 생길 수 있는 문제들을 미리 찾을 수 있다는 장점이 있다. 또한 ajax 방식의 a..
OWEN
이번 포스팅에서는 React Hook에 대해서 개념을 정리해 보려고 한다. 리액트 훅은 v16.8에 새로 도입되었으며 함수형 컴포넌트에서 기존에 라이프사이클 메서드가 없어서 사용할 수 없었던 기능들을 사용할 수 있게 만들어 주었다. 리액트 훅을 도입하게 된 목적은 여러가지가 있다. 먼저 컴포넌트에서 상태관련 로직을 사용할 때 레이어 변화 없이 재사용할 수 있게하기 위함이 첫번째 목적이다. 기존에는 여러가지 레이어로 둘러 쌓여있어서 구조가 복잡했기 때문이다. 두 번째 목적은 기존의 라이프사이클 메서드 기반이 아닌 로직 기반으로 나눌 수 있어서 컴포넌트를 함수 단위로 잘게 쪼갤 수 있다는 이점 때문이다. 그 외에도 클래스 기반 컴포넌트를 지양하고자 하는 목적 등도 있다. 그러면 지금부터 자주 사용하는 리액트..
오늘은 C++의 파일 입출력에 대해서 알아보고자 한다. 파일 입출력에서는 fstream이라는 입출력 파일 클래스를 사용한다. 파일 입출력에는 , 조정자(manipulator) 등도 사용이 가능하다. // 읽기 전용으로 파일을 오픈 ifstream fin; fin.open("helloworld.txt"); // 쓰기 전용으로 파일을 오픈 ofstream fout; fout.open("helloworld.txt"); // 읽기와 쓰기 전용으로 파일을 오픈 fstream fs; fs.open("helloworld.txt"); 여기서 나온 open() 이라는 메서드는 각 스트림마다 존재한다. // void open(const char* filename, openmode mode) fin.open("HelloWo..
오늘 살펴볼 문제는 백준 1701 문제이다. https://www.acmicpc.net/problem/1701 1701번: Cubeditor 문제 Cubelover는 프로그래밍 언어 Whitespace의 코딩을 도와주는 언어인 Cubelang을 만들었다. Cubelang을 이용해 코딩을 하다보니, 점점 이 언어에 맞는 새로운 에디터가 필요하게 되었다. 오랜 시간 고�� www.acmicpc.net 이 문제는 문자열 처리 관련된 유형으로 KMP 알고리즘을 사용하여 문제를 풀어야 시간 내에 맞힐 수 있다. ACM-ICPC 서울 리지널 기출문제이며, 난이도는 골드 2이다. 쉬운 문제는 아니지만 KMP 알고리즘에 대한 이해가 있다면 아이디어를 떠올리는데 도움을 받을 수 있을 것이다. 먼저 문제를 풀기 앞서서 K..
MPA (Multiple Page Application) 사용자가 페이지를 요청할 때마다, 웹 서버가 요청한 UI와 필요한 데이터를 HTML로 파싱해서 보여주는 방식의 웹 어플리케이션이다. 사용자가 아주 사소한 요청을 해주어도(버튼 클릭 등) 매번 전체 페이지를 렌더링 해주어야 한다. 장점 SEO(Search Engine Optimization, 검색엔진 최적화) 관점에서 유리하다. MPA는 완성된 형태의 HTML 파일을 서버에서 전달받기에 검색엔진이 페이지를 크롤링하기에 적합하다. 단점 매번 페이지 전체를 새로 불러와서 렌더링 해야 하기 때문에 화면이 깜빡이는 등 성능상의 이슈가 있다. 프론트와 백이 밀접하게 연관되어 있어서 개발 복잡도가 증가한다. SPA (Single Page Application)..
오늘은 C++에서 참조와 문자열에 대해서 공부한 내용을 정리해 보고자 한다. 참조는 값을 매개변수에 전달하는 방식이다. 이를 할 때 C에서는 포인터를 이용한 연산이 많이 있었다. 성능적인 면에서는 우수했을지 모르지만 연산이 복잡해지고 안전하지 않은 경우가 생긴다는 단점이 있었고, 그래서 자바에서는 포인터를 없애면서 쉽게 참조를 하게 되었다. 하지만 그러다보니 성능적으로 아쉬움이 많이 생겼다. 그래서 C++에서는 포인터도 사용하되 포인터가 필요 없을 때는 훨씬 더 안전하게 참조를 하는 방법도 생겼다. 어떤 데이터를 불러오는 것을 호출이라고 하는데, 참조할 때도 이 개념이 쓰인다. 호출은 크게 두 가지로 나누어서 생각할 수 있는데 값에 의한 호출(Call By Value)과 참조에 의한 호출(Call By ..
모든 리액트 컴포넌트에는 라이프사이클이 존재한다. 컴포넌트의 라이프 사이클은 페이지 렌더링 전 준비과정에서 시작하여 페이지가 사라질 때 끝이 나게 된다. 리액트 프로젝트에서 컴포넌트를 처음 렌더링할 때 어떤 작업을 처리해야 하는지, 또는 컴포넌트를 업데이트 하기 전후로 어떤 작업을 처리해야 하는지를 알아야 불필요한 업데이트를 방지할 수가 있다. 리액트의 클래스 컴포넌트는 컴포넌트 라이프사이클 메서드가 있어서 이를 사용하고, 함수형 컴포넌트는 Hook을 사용한다. 이번 포스팅에서는 컴포넌트 라이프사이클에 대해서 다뤄보도록 한다. 라이프사이클 메서드의 종류는 총 9가지이다. Will 접두사가 붙은 메서드는 어떤 작업을 하기 전에 실행이 되며, Did 접두사가 붙은 메서드는 어떤 작업을 작동한 후에 실행이 된..
이번 포스팅에서는 자바스크립트의 네이티브 객체들에 대해 알아보고자 한다. 네이티브 객체는 특정 환경(브라우저 등의 클라이언트 프로그램, 또는 Node.js 등의 런타임)에 종속되지 않은, ECMAScript 명세의 내장 객체를 말한다. 우리가 많이 사용하는 네이티브들은 다음과 같다. 짐작이 가는 사람들도 있겠지만, 네이티브 객체는 사실상 내장 함수이다. String() Number() Boolean() Array() Object() Function() RegExp() Date() Error() Symbol() 네이티브는 생성자처럼 사용할 수 있지만 실제로 생성되는 결과물은 예상과 다른 경우가 많다. // 자바처럼 String() 생성자와 비슷하게 보일 수도 있겠다. var a = new String("H..