3월, 2020의 게시물 표시

스토리북에서 스토리를 작성하는 방법

스토리북에서 스토리를 작성하는 방법 스토리북은 스토리의 집합이다. 각각의 스토리는 컴포넌트의 하나의 시각적 상태를 나타낸다. 기술적으로 얘기하면 스토리는 스크린에 렌더링될 수 있는 어떤것을 리턴하는 함수이다. 기본 스토리 버튼 컴포넌트의 스토리에 대한 기본 예제이다. import React from 'react'; import { action } from '@storybook/addon-actions'; import Button from './Button'; export default { component: Button, title: 'Button', }; export const text = () => Hello Button; export const emoji = () => ( 😀 😎 👍 💯 ); named export(text, emoji)를 하게 되면 스토리북에서 스토리로 정의된다. default export는 스토리 그룹(Button)에 대한 메타데이터를 정의한다. export default { component: Button, title: 'Button', }; 위에서 이런 메타데이터를 정의했는데 이러한 포맷을 CSF(Component Story Format)이라고 한다. 링크 타이틀은 유니크해야한다. 스토리북 5.2 버전 이전에는 스토리를 정의하기 위해서 storiesOf API를 사용했어야 했다. 하지만 이제는 리액트 네이티브를 제외하고 모든 프레임워크에서 CSF 포맷을 사용할 수 있게 되었다. 스토리의 위치 • └── src └── components └── button ├── button.js └── button.stories.js 유지보수를 쉽게 하려면 스토리북 파일 (.stories.js)을 컴포넌트의 위치와 동일하게 하는게 좋다. 다른 방법도 두개 더 소개하고 있는데 그냥 이렇게 하는게 젤 깔끔한것

스토리북에서 Component Story Format (CSF) 란?

스토리북에서 Component Story Format (CSF) 란? CSF란 스토리북에서 사용하는 포맷이라고 생각하면 된다. 스토리북 5.2버전 이후로 추천하는 스토리 작성 포맷이다. 스토리들은 ES6 모듈 형태로 정의된다. 모든 스토리북 파일(보통 .stories.js) default export와 named export를 섞어서 사용한다. 리액트 네이티브 제외한 모든 프레임워크에서 CSF를 지원하며 리액트 네이티브에서는 기존 버전의 storiesOf API를 사용해야 한다. Default export *.stories.js에서 default export로 메타데이터가 담긴 객체를 내보내면 그 정보를 활용해서 스토리북을 구성한다. 이렇게 생겼다. import MyComponent from './MyComponent'; export default { title: 'Path/To/MyComponent', component: MyComponent, decorators: [ ... ], parameters: { ... } } title : 여기에 적어준 경로대로 스토리북 네비게이션에 표시된다. component: 이 스토리 그룹에서 이 컴포넌트를 사용한다. 라고 알려주기 위해서 넣는것같은데 굳이 지정 해주지 않아도 잘 동작하고 심지어 다른 컴포넌트를 넣어도 잘 동작하는걸 봐서 아직까진 왜 필요한지 정확히는 모르겠다. decorators: 여기에 스토리북 애드온을 정의할 수 있다. parameters: custom metadata이다. 스토리북은 기본적으로 default로 export된 객체에 적힌 metadata를 참고하는데 그 metadata와 함께 여기에 적어준것들을 추가로 참고하게 만들 수 있다. Named story exports CSF와 함께 모든 named export된 스토리들은 하나의 스토리를 나타낸다. import MyComponent from './MyComponent

Coupang CS Systems 채용 정보: Front-end 개발자를 찾습니다!

Coupang CS Systems 채용 정보: Front-end 개발자를 찾습니다! PC/Mobile Web Front-end 개발 1997년, 초창기 아마존에 입사한다고 상상해보세요. 그 당시 누구도 e-commerce 산업이, 아마존이라는 회사가 지금처럼 성장하리라고는 생각하지 못했을 것입니다. 하지만, 그 당시 아마존을 선택한 사람들은 e-commerce 산업을 개척했고, 아마존을 세계적인 회사로 성장시켰습니다. 2016년 '아시아의 아마존'으로 성장하고 있는 쿠팡, 당신에게 매력적인 선택이 아닐까요? 1997년, 초창기 아마존에 입사한다고 상상해보세요. 그 당시 누구도 e-commerce 산업이, 아마존이라는 회사가 지금처럼 성장하리라고는 생각하지 못했을 것입니다. 하지만, 그 당시 아마존을 선택한 사람들은 e-commerce 산업을 개척했고, 아마존을 세계적인 회사로 성장시켰습니다. 2016년 '아시아의 아마존'으로 성장하고 있는 쿠팡, 당신에게 매력적인 선택이 아닐까요? Global Operation Technology: eCommerce에서 주문을 한 뒤 벌어지는 상황에 대해서 호기심을 가져보신 적이 있나요? Global Operation Technology는 상품을 고객에게 지연 없이 전달 될 수 있도록 하는 조직입니다. 매일 최첨단 소프트웨어 기술을 이용해 고객의 주문을 받고 상품을 어느 창고에서 출고 시킬지, 포장을 하나의 박스 또는 여러 개로 나눌 것인지, 어떤 배송 루트를 선택하고 어떻게 고객에게 배송 상태를 보여줄지 결정하는 시스템과 서비스를 개발 합니다. What Global Operations Technology does: CS and C-Returns System 적극적 고객서비스를 바탕으로 고객의 목소리를 통해 끊임없이 고객 에게 서비스를 제공하고 Andon 메커니즘을 통해 고객의 목소리를 회사 전체와 공유합니다. 그리고 고객 문제 해결과 구매 이후 벌어질 수 있는 고객

단위 테스트 환경 구축

단위 테스트 환경 구축 개발 노트/vue.js 단위 테스트 환경 구축 create-nuxt-app로 프로젝트를 설정할 때 단위 테스트 프레임워크를 선택할 수 있다. AVA, Jest 중에 선택할 수 있는데 React.js로 개발했을 때 사용한 Jest를 사용한 경험이 있었기 때문에 Jest로 선택했다. 참고로 Jest는 facebook에서 만들었다. 선택하지 않은 경우에는 테스트 관련 모듈을 수동으로 설치 및 설정해줘야 한다. 아래 모듈을 --save-dev로 추가하자. @vue/test-utils : vue 코드를 단위 테스트할 때 필요한 유틸을 제공한다. jest : 단위 테스트 작성에 필요한 matcher, teardown 등을 제공한다. mock, spy 방식도 안내하고 있으니 공식 사이트 를 방문해서 꼭 보도록 하자. vue-jest , babel-jest : vue, ES6 문법으로 작성된 코드를 jest 수행 시 변환해주는 플러그인 모듈입니다. 그리고 package.json에 scripts를 추가하자. "scripts": { ... "test": "jest" }, jest.config.js 파일을 생성한 후 아래 설정을 추가 하자. module.exports = { moduleNameMapper: { '^@/(.*)$': '/$1', '^~/(.*)$': '/$1', '^vue$': 'vue/dist/vue.common.js' }, moduleFileExtensions: ['js', 'vue', 'json'], transform: { '^.+\\.js$': 'babel-jest', '.*\\.(vue)$': 'vue-jest' }, collectCoverage: true, col

Coupang CS Systems 채용 정보: 쿠팡 운용 관리 시스템을 구축 하고...

Coupang CS Systems 채용 정보: 쿠팡 운용 관리 시스템을 구축 하고... Global Operation Technology는 상품을 고객에게 지연 없이 전달 될 수 있도록 하는 조직입니다. 1997년, 초창기 아마존에 입사한다고 상상해보세요. 그 당시 누구도 e-commerce 산업이, 아마존이라는 회사가 지금처럼 성장하리라고는 생각하지 못했을 것입니다. 하지만, 그 당시 아마존을 선택한 사람들은 e-commerce 산업을 개척했고, 아마존을 세계적인 회사로 성장시켰습니다. 2016년 '아시아의 아마존'으로 성장하고 있는 쿠팡, 당신에게 매력적인 선택이 아닐까요? Global Operation Technology: eCommerce에서 주문을 한 뒤 벌어지는 상황에 대해서 호기심을 가져보신 적이 있나요? Global Operation Technology는 상품을 고객에게 지연 없이 전달 될 수 있도록 하는 조직입니다. 매일 최첨단 소프트웨어 기술을 이용해 고객의 주문을 받고 상품을 어느 창고에서 출고 시킬지, 포장을 하나의 박스 또는 여러 개로 나눌 것인지, 어떤 배송 루트를 선택하고 어떻게 고객에게 배송 상태를 보여줄지 결정하는 시스템과 서비스를 개발 합니다. What Global Operations Technology does: CS and C-Returns System 적극적 고객서비스를 바탕으로 고객의 목소리를 통해 끊임없이 고객 에게 서비스를 제공하고 Andon 메커니즘을 통해 고객의 목소리를 회사 전체와 공유합니다. 그리고 고객 문제 해결과 구매 이후 벌어질 수 있는 고객 문제를 사전에 예방하기 위한 시스템 개발을 통해 미래의 상황을 예측 합니다. Tranportation System TSP (Traveling Salesman Problem) 와 같은 CS 최적화 관리 문제를 다룹니다.배송 물품의 실시간 추적, 3P 하드웨어와 소프트웨어를 통합, 각 배송 루트에 할당되는 물량 예측하고 T

Redux + React

Redux + React Redux는 state 관리 툴이다. 오해하지 말아야할 것이, React에 의존하지 않는 툴이다. Vue, Angular 심지어 vinilla JS에서도 돌아간다. 그러나 React에서 사용하면서 유명세를 탄 것도 사실이므로 React와 Redux를 같이 배우는 것이 좋다. 우선 기본적인 Redux를 살펴보고 이후에 React에 적용해보도록 하자. 🚗 redux 설치 npm i redux 🚗 Reducer Context API와 마찬가지로 Store는 정보를 저장하는 곳입니다. 여기서 reducer라는 개념이 새로 등장합니다. reducer는 간단하게, 1️⃣저장소(Store)에 있는 데이터를 수정하는 함수입니다. 2️⃣reducer가 return하는 값은 Store에 저장됩니다. 정리하자면, Store에 있는 data를 컨트롤하고 저장하는 중요한 함수라고 보면 됩니다. reducer만이 데이터를 수정할 수 있기 때문에 추후에 데이터를 수정, 가공하기 위해서는 반드시 reducer를 거쳐야만 합니다. import { createStore } from "redux"; // createStore 함수에게 전달할 reducer를 만듭니다. // reducer는 data를 수정(modify)할 함수입니다. const countModifier = () => { return "Hello" }; // 정보를 저장하는 store를 생성합니다. const countStore = createStore(countModifier); 여기서 Store란 객체가가 가지고 있는 함수를 살펴봅시다. 전부 다 알아야 하지만 가장 중요한 3개를 먼저 알아보겠습니다. getState란 함수에는 reducer가 return한 값이 담겨 있으며 dispatch를 통해 reducer에게 action을 줄 수 있습니다. subscribe는 store 안의 변화를 감지합니다. Store를 구독

[React.js] Redux의 3가지 원칙

[React.js] Redux의 3가지 원칙 Redux란? Redux는 javascript application을 위한 예측 가능한 상태 컨테이너이다. 리덕스는 상태를 단일 저장소에 저장한다는 아이디어에서 출발한다. 단일 저장소에 저장한다면 큰 이점이 있을까? Single source of truth 각 컴포넌트가 상태를 업데이트하기 위해 setState 함수를 호출하여 state 업데이트한다. 컴포넌트가 많을수록 state가 업데이트된 이유를 알기 위해 컴포넌트 트리를 추적한다. 이러한 과정은 개발의 효율성을 매우 떨어트린다. Redux는 단일 저장소에 상태를 저장하여, 상태 관리를 단순화시켜준다. State 읽기 전용 state는 읽기 전용이다. 그렇다면 어떻게 상태를 갱신할 수 있을까? state를 변경하기 위해서는 명령이 필요하다. 이를 리덕스에서 action(액션)이라고 부른다. 액션을 통해서만 상태만을 갱신할 수 있다. 액션은 다양하게 정의할 수 있으며 액션에 따라 선별된 상태를 갱신할 수 있다. 아래는 다음 포스팅에서 구현할 TodoList의 예제이다. /** * 액션타입 */ export const ADDTODOLIST = "todoList/ADDTODOLIST"; export const DELETETODOLIST = "todoList/DELETETODOLIST"; 위 예제에서 액션을 총 2개이다. todoList/ADDTODOLIST" 와 todoList/DELETETODOLIST 이다. 필자는 액션에 prefix로 todoList 를 사용했다. 변수명만 봐도 무엇을 하는 액션인지 금방 알 수 있다. ADDTODOLIST 는 todo를 추가할 때 사용하는 액션이고, DELETETODOLIST 는 todo를 제거할 때 사용할 액션이다. 순수 함수로 변경 Reducer(리듀서)는 이전 상태와 액션을 인자로 받아 새로운 상태를 리턴하는 순수 함수이다.

React-Native Redux 설치

React-Native Redux 설치 > npm install redux > npm install react-redux 설치는 굉장히 간단하다. 하지만 Redux를 처음 접한다면 상당히 어렵다. Redux를 사용하는 가장 중요한 이유는 컴포넌트들의 상태를 공유하기 위함이다. 아래는 중요한 코드만 적어두겠다. //********************************************** ******************** App.js ******************** ************************************************// ... 생략 ... import { createStore } from 'redux'; import { Provider } from 'react-redux'; const initialState = { counter: 0 } const reducer = (state=initialState, action) => { switch(action.type){ case ' INCREASE_COUNTER ': { return{counter:state.counter+1} } case 'DECREASE_COUNTER': return{counter:state.counter-1} } return state } const store = createStore(reducer) class App extends React.Component { render() { return ( ); } } ... 생략 ... //******************************************************* ******************** HomeScreen.js ******************** ******

벨로퍼트 01~10. JavaScript란,

벨로퍼트 01~10. JavaScript란, 벨로퍼트와 함께하는 모던 자바스크립트 · GitBook 벨로퍼트와 함께하는 모던 자바스크립트 본 강의 자료는 패스트캠퍼스 온라인 강의에서 제공하는 JavaScript 강의에서 사용되는 강의 문서입니다. 강의 소개 이 강의에서 뜻하는 "모던 자바스크립트"는, 2019년에 사용하기에 걸맞는 그리고 또 뒤쳐지지 않는, 그런 자바스크립트를 칭합니다. 이 강의에서는 자바스크립트 기초부터 시작해서 실무에서 필요한 핵심 지식들까지 다뤄보게 됩니다. 강의 대상 이 강의는 프로그래밍을 한번도 해본적 없는 사람이 들어도 도움이 learnjs.vlpt.us from http://foamless.tistory.com/83 by ccl(A) rewrite - 2020-03-24 19:54:15

Coupang CS Systems 채용 정보: Business Analyst(Global Operations...

Coupang CS Systems 채용 정보: Business Analyst(Global Operations... Join us to shape the future of eCommerce in South Korea, and Asia! Coupang is one of the largest and most disruptive standalone e-commerce companies in Korea whose focus on continuous innovation is revolutionizing the way Korean consumers shop. We have attracted over 12 million purchasers who have collectively made over 200 million purchases on our site and generate billions of visits each year. We currently compete within Korea's $342 billion retail market, of which e-commerce comprises $~$60 billion and is expected to grow at a CAGR of 15-20% hitting $130bn by 2020. Coupang's Business Analysts provide insights across multiple business domains. Business analysts are deeply involved in the decision making process and drive business success by championing data analytics throughout the organization. Every project at Coupang starts with your strong ownership, concrete analysis and actionable business insights. Jo

Glen Hansard - Falling Slowly (글렌 핸사드 - 폴링 슬로울리) :: 쉬운...

Glen Hansard - Falling Slowly (글렌 핸사드 - 폴링 슬로울리) :: 쉬운... 이번 곡은 2007년도 영화 Once(원스)에 삽입된 주제가인 Falling Slowly 입니다. 사용되는 코드는 다음과 같습니다. Falling Slowly - Glen Hansard C F I don`t know you but I want you C F All the more for that C F Words fall through me and always fool me C F And I can`t react Am G And games that never Am G amount to more than Am G F they`re meant will play themselves out C F Take this sinking boat and point it C F home we`ve still got time C F Raise your hopeful voice you have a Am Am7 F choice you`ve made it now C F Falling slowly, eyes that know me C F And I can`t go back and C F Moods that take me and erase me C F And I`m painted black Am G You have suffered Am G enough and warred with Am G F yourself It`s time that you won C F Take this sinking boat and point it C F home we`ve still got time C F Raise your hopeful voice you have a Am Am7 F choice you`ve made it now C F Am

피플펀드(PEOPLEFUND) 채용 정보: 피플펀드의 평균연령을 낮춰주실...

피플펀드(PEOPLEFUND) 채용 정보: 피플펀드의 평균연령을 낮춰주실... 마케팅팀 인턴 디자이너로 오시게 되면 이런일을 하게 됩니다.1. 온라인 광고 및 홍보 컨텐츠를 함께 기획하고 마케팅팀 디자이너분의 제작 서포트2. 페이스북 컨텐츠를 함께 기획하고 제작 서포트3. 마케팅 회의 중 젊고 새로운 시각으로 아이디어 내기4. 브랜드의 아이덴티티가 담긴 브로셔 함께 제작하기5. 디자이너분들과 아이디어를 시각화 하기 자격요건 - 현재 4학기 이상 재학중이거나 졸업예정자 - 기졸업자 가능 - Adobe 디자인 툴 사용가능 자 (포토샵, 일러스트레이터 등) 우대사항 - 마케팅 관련 업무 관심 및 경험자 - 주변 사람들이 나를 볼 때 "너 진짜 아이디어 뱅크다"라고 한 얘기를 들어보신 분 - 디자인을 하실 때 "1픽셀의 미학"을 인지하고 계시는 분 - 다루는 디자인툴은 많으면 많을 수록 "다다익선" 복지 - 대한민국 금융혁신의 역사를 함께할 수 있는 기회 - 개발, 비즈니스, 금융, 투자, 전략 등의 전문가와 매일같이 부딪히며 성장할 수 있는 기회 - 강남 한복판에 실리콘벨리를 재현한 듯한 멋지고 아늑한 사무실에서 근무 (역삼역에서 지하로 바로 연결) - 점심식대와 저녁식대, 커피, 간식 무한정 제공 - 근무시간 중 아무때나 자유롭게 가벼운 음주 가능 (단 주사는 곤란함) - 훌륭한 스타플레이어들과 원할 때 스타를 할 수 있음 (브루드워만 가능) - 근래에는 오버워치 경쟁전 함께할 파티원 찾고 있음 (겐지충 사절) 채용절차 1) 공감프로필 (피플펀드 지원사유 포함) 2) 서류 합격시 실무자와 면접 진행 더 많은 내용은 더 많은 내용은 더팀스 에서 확인하세요! from http://theteams.tistory.com/757 by ccl(A) rewrite - 2020-03-24 09:20:18

React Hook + Context API

React Hook + Context API 기존에 사용하던 원리와 동일합니다. Provider 내부에 있는 children은 Context의 영향을 받아 props를 자유롭게 받을 수 있습니다. 🚗 생성 src 폴더에 context.js를 생성한 후 다음과 같이 입력합니다. context.js는 일종의 DB warehouse가 될 것입니다. 여기서는 UserContext 하나만 만들지만 원하는 Context를 마음대로 만들 수 있습니다. import React from "react"; // Context는 추후 사용할 컴포넌트에서 Context를 생성합니다 export const UserContext = React.createContext(); // Provider는 추후 최상위 컴포넌트를 감쌉니다. const UserContextProvider = ({ children }) => { return ( {children} ); }; export default UserContextProvider; 🚓 적용 및 사용 이제 최상위 컴포넌트를 Provider로 감싸줍니다. (여기서는 UserContextProvider 입니다) 이 방식을 이용하면 이제 이 컴포넌트의 아래에 존재하는 컴포넌트는 Context의 정보를 자유롭게 사용할 수 있게 됩니다. 물론 여기서는 기껏해봐야 value라는 props 하나 뿐입니다. const App = () => { return ( ); }; context를 사용할 곳에서 context를 불러오면 됩니다. React 객체 내부의 useContext 메소드를 활용하여 가져올 수 있습니다. React.userContext(정의한 Context). 여기서는 UserContext입니다. (위 context.js를 살펴보면 알 수 있습니다) import React from "react"; import { UserContext } from "./co

본편 스토리 보상 SR 카드

본편 스토리 보상 SR 카드 카드 시점 줄거리 비고 【뒤에서】 SR 시로타니 타다오미 시로타니 어쩐 일인지 쿠로세가 억지를 부려 늦은 시간에 만난 두 사람. 쿠로세는 시로타니에게 '만약'에 관한 이야기를 하는데… - count.099-18if 클리어시 획득 【침대에 딱 붙어서】 SR 시로타니 타다오미 쿠로세 react.45 이후의 스토리. 루프에서 돌아온 이후, 쿠로세는 언제 또다지 루프하지 않을까 전전긍긍한다. 불안해하는 쿠로세를 보고 시로타니는… - R-17 - react.45 클리어시 획득 【자는 척】 SR 쿠로세 리쿠 시로타니 쿠로세와 다툰 다음 날 아침. 잠에서 깬 시로타니는 쿠로세를 무시하기로 결심하고 자는 척을 해보지만… - count.108 클리어시 획득 【눈가리개】 SR 쿠로세 리쿠 시로타니 슈퍼에서 저녁 식사거리를 산 두 사람. 쿠로세는 그 음식들로 블라인드 테스트를 해 보지 않겠냐고 제안한다. - R-17 - count.048 클리어시 획득 from http://tsuya00.tistory.com/1792 by ccl(A) rewrite - 2020-03-24 00:54:12

[React Native] 코드푸시

[React Native] 코드푸시 [블록체인/Inflearn] 리액.. react-navigation [React/Inflearn] 리액트.. [React Native/Inflearn] R.. [Inflearn] 블록체인 이더.. [React Native] react-nati.. [React Native] 휴대폰/시.. [GraphQL] apollo-server와.. [React Native] react-nati.. [React Native] 코드푸시 전체 방문자 14,983 Today : 66 Yesterday : 47 from http://coding-dahee.tistory.com/152 by ccl(A) rewrite - 2020-03-23 23:54:16

Context API 상태 관리 라이브러리

Context API 상태 관리 라이브러리 React에서 state와 props가 뒤엉켜서 무엇이 무엇에게서 정보를 내려 받고 어떤 props 속성들이 있는지 파악하기 힘들때 상태 관리 라이브러리를 사용하면 마치 DB warehouse 처럼 상태를 따로 관리할 수 있게 되어 편리하다. React의 대표적인 상태 관리 라이브러리로는 Redux, Mobx, Context API가 존재한다. 간단한 웹을 만들어보면서 Context API를 구성해보자 🚗 Set up //react를 생성합니다 npx create-react-app contextapi // style을 위해 다음 패키지를 설치합니다. 필수는 아니고 제가 편하자고 설치한 겁니다 npm i styled-components styled-reset styled-flex-component typography 상태 관리 라이브러리는 크게 스토어(데이터가 저장되는 곳)와 프로바이더 (칠드런에게 데이터를 줌), 컨슈머(데이터를 사용함) 으로 구성됩니다. React package 내부에는 createContext가 존재합니다. 이를 이용해 Store를 생성해줍니다. import React from "react"; const Store = React.createContext(null); export default Store; 생성한 Store는 다음과 같은 방식으로 사용할 수 있습니다. Provider의 자식에 Consumer를 사용한 것에 주의합시다. * Consumer 태그 내(Consumer의 child)에서는 일반 html을 사용할 수 없습니다. 오로지 함수인 child만 작동합니다. import Store from "store"; class AppContainer extends Component { state = { message: "hello guys" }; render() { return ( {test =>

TIL - 20/03/23

TIL - 20/03/23 프로그래밍/TIL 및 그외 느낀점들 프로그래밍/TIL 및 그외 느낀점들 TIL - 20/03/23 오늘 한일 중첩 라우팅에 대해 찾아보았다. https://www.daleseo.com/react-router-nested/ 하지만 실제로는 막상 중첩 라우팅을 사용하지 않고 적용시켰다. 현재 내 url이 가령 http://localhost:3000/solve/영어단어/4 라고 한다면 여기서 버튼1과 같은 방식으로 Link를 붙이면 http://localhost:3000/solve/영어단어/solve/영어단어/5 이런 식으로 가게 된다는 것을 알았다. 버튼3과 비교할때 앞에 /를 붙인 버튼 2의 방식으로 하면 http://localhost:3000/3 이런 식으로 가버린다. 내가 원하는 대로 가장 마지막 부분만 바꾸고자 한다면 버튼3과 같은 방식을 해야 한다. //버튼1 다음 //버튼2 다음 //버튼3 다음 내일 할일 정답 가리는 부분 fake data 만들기 전반적 문제 풀기 화면 되게 만들기 얼른 대략적인 틀을 만들고 서버쪽 구현을 해봐야겠다. 스스로 코딩에 대한 자신감이 없어서인지 자꾸 공부를 회피하게 되는데 들이대자. 시간 말고는 잃을게 없다. from http://yongkshire.tistory.com/17 by ccl(A) rewrite - 2020-03-23 17:54:14

입트영(2020.03.23) - Iced Drinks / 아이스 음료

입트영(2020.03.23) - Iced Drinks / 아이스 음료 [Study Group Questions] 1. Do you prefer to drink your coffee hot or cold? Explain your preference. 2. Koreans are famous for eating and drinking hot foods. Why do we like our food so hot? 3. Describe how you would react if you ordered a cold drink, but were given a hot one. SPEECH PRACTICE Talk about how some people prefer only cold drinks. 차가운 음료만 즐겨 마시는 사람들에 대해 이야기해 주세요. [Response] There are some people who always drink cold drinks, even in the freezing cold. It's such a widespread trend that there's even a new term to call those people. If you crunch the numbers from sales data for a coffee chain, you can see that sales of iced drinks increased in the winter. The weather was mild for the winter of 2020, which contributed to the trend. I get cold easily. That's why I like piping hot drinks, regardless of this trend. Even during the dog days of summer, I drink warm beverages more often than cold ones. That's wh

[React Native] react-native-svg 사용법 (점과 점 사이를 선으로 긋는...

[React Native] react-native-svg 사용법 (점과 점 사이를 선으로 긋는... https://github.com/react-native-community/react-native-svg 오늘 사용할 라이브러리! - 내가 원하는 것: 화면 내에서 원하는 점과 점 사이를 선으로 긋고 싶다. import React, {useEffect, useState, useRef} from 'react'; import {Svg, Line} from 'react-native-svg'; const AnimatedSvg = Animated.createAnimatedComponent(Svg); const AnimatedLine = Animated.createAnimatedComponent(Line); export default () => { const initWidth = useRef(new Animated.Value(0)).current; const initHeight = useRef(new Animated.Value(0)).current; let animateWidth = initWidth.interpolate({ inputRange: [0, 100], outputRange: ['0', '100'], }); let animateHeight = initHeight.interpolate({ inputRange: [0, 100], outputRange: ['0', '100'], }); useEffect(() => { Animated.timing( // Animate over time initWidth, { toValue: 100, duration: 500, useNativeDriver: true, }, ).start(); Animated.timing( // Animate over time initHeight, { toValue: 100, duration: 50

font-awesome in React!

font-awesome in React! html으로 구조를 짤 때 자주 이용한 fontawesome이 React 컴포넌트로 나왔다고 한다. 이번 기회에 font awesome을 리액트에서 사용해야 했기 때문에 간략한 이용법을 알아보기로 했다. https://www.npmjs.com/package/@fortawesome/react-fontawesome 설치 npm i @fortawesome/fontawesome-svg-core npm i @fortawesome/free-solid-svg-icons npm i @fortawesome/react-fontawesome import 및 사용 import React from "react" import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { faCoffee } from '@fortawesome/free-solid-svg-icons' const Test = () => ( ); from http://darrengwon.tistory.com/179 by ccl(A) rewrite - 2020-03-23 02:54:16

ref (refence)

ref (refence) 3초 후에 input 태그에 focus가 되게 ref 속성을 주었다. import React, { useRef } from "react"; const App = () => { const test = useRef(); // test에는 ref를 설정해준 input 태그가 담깁니다. setTimeout(() => test.current.focus(), 3000); return ( <> Hello ); }; export default App; from http://darrengwon.tistory.com/178 by ccl(A) rewrite - 2020-03-22 19:20:16

[React] - 18) 프로젝트 빌드하기(+코드 스플리팅)

[React] - 18) 프로젝트 빌드하기(+코드 스플리팅) 안녕하세요, 오늘은 완성된 프로젝트를 빌드하는 것에 대해 포스팅하겠습니다. 사실 프로젝트를 빌드하는 것은 간단합니다, 예제 프로젝트를 하나 만들어서 다음과 같이 진행해 봅시다. $ yarn create react-app build-test $ cd build-test $ yarn build 그러면 이제 프로젝트 루트 폴더에 다음과 같은 파일이 생성될 것입니다. 프로젝트가 Index.html으로 빌드되었습니다. 이 yarn build 명령어 하나로, 프로젝트에서 사용되는 자바스크립트 파일 안에서 불필요한 주석, 경고 메시지 , To-do, 공백 등이 삭제되어 파일 크기를 최소화하고, 브라우저에서 JSX 문법이나 다른 자바스크립트 문법이 원활히 시행되도록, 브라우저에 맞게 변하기도 합니다. 그리고, 기본적으로 yarn create react-app으로 프로젝트를 만들면 로고 이미지 파일이 포함되었죠? 그런 이미지, 사운드 같은 정적 파일이 있다면 해당 파일을 위한 경로도 생성됩니다. 실제로 저 static 폴더를 열어 보면, js, css로 나뉘어 수많은 자바스크립트 파일이 하나로 합쳐지고, css 파일들도 하나로 합쳐지게 됩니다. 이러한 작업을 해주는 것이, 리액트를 처음 사용할 때 만났던 웹팩이라는 것인데요. 웹팩 설정에서 Chunks 기능이 작동하여 여러 파일들을 따로 분리시켜 효율적으로 캐싱해 줍니다. 실제로 static을 열어보면 자주 바뀌는 코드, main 코드 등등이 알아서 나뉘어 효율적으로 분리되어 있을 것입니다. 이렇게 파일을 분리하는 작업을 '코드 스플리팅'이라고 합니다. 지금은 CRA(create-react-app)으로 만들어진 아주아주 작고 기본적인 코드만 빌드되었기 때문에 파일의 크기가 아주 작습니다만, 프로젝트의 규모가커지면 A페이지에서 B,C,D 페이지에서 사용할 정보까지 모두 로드하면서 파일 크기가

React 를 활용하여 간단한 시계 만들기 (2)

React 를 활용하여 간단한 시계 만들기 (2) Author : 니용 지난 글에서 Component를 만드는 방법을 알아보았다면 이번 글에서는 본격적으로 JavaScript가 어떻게 적용되는지 살펴보려고 합니다. 가장 먼저 WatchBody부분에 div를 하나 추가하여 시계가 들어갈 위치를 설정합니다. 클래스명을 js-clock으로 추가한 후 위의 div를 선택할 수 있는 선택자를 생성합니다. 이제 선택자를 추가하였다면 스크립트에서 시간에 해당하는 함수를 넣어주어야 합니다. 이전에 JavaScript의 기본 문법에서 확인할 수 있듯이 document.querySelector는 아래와 같습니다. querySelector(".className") : 클래스명이 className으로 정의된 태그를 선택 ( == getElementByClassName와 같은 역할) querySelector("tag") : 태그명이 tag인것을 순차적으로 선택 근데 문제는 위와 같이 선택자를 하여 생성을 하여도 null이 출력됩니다. 원인은 바로 React의 특성때문인데요, 아직 화면에 렌더링이 되지 않은 상태에서 선택을 하기 때문입니다. 즉, index.js의 ReactDOM.render() 함수가 호출된 후에 선택자가 작동되기 때문입니다. 먼저 작동이 되게 하기 위해서는 index.js 파일로 다시 넘어와서 같은 소스를 작성해줍니다. 이후에 아래와 같이 소스를 작성해줍니다. 시간을 출력하는 함수 위에 작성된대로 화면에 출력을 하게 되면 현재 시간이 매 1초마다 리프레쉬되면서 출력되는 것을 확인할 수 있습니다. getTime 함수를 확인하면 함수가 호출될때마다 new Date()로 새로운 생성자를 호출하여 그 시간을 가져오는 변수들을 아래에 선언하고 innerText를 통하여 위에서 선택자로 생성한 태그 내에 set하는 것을 확인할 수 있습니다. setInterval이라는 함수는 특정

포인트 가드 Point Guard

포인트 가드 Point Guard Often called the "leader of the offense" and compared to the quarterback in American football, the point guard is one of the most demanding positions on the basketball court. Playing point guard requires great ball handling skills, good scoring ability, and a thorough understanding of your team's strategy. However, this versatile position also allows you to play a pivotal role on the court by leading the offensive scoring efforts. Being a point guard is hard work, but also one of the most rewarding positions for a basketball player. Part1 1 Bring in-bounds balls up court. At a very basic level, the point guard is responsible for moving the ball up the court, keeping it in his team's possession, and setting up offensive plays. This means passing the ball to his teammates to start the plays, and, when possible, scoring on his own. The point guard usually gets the ball when it's passed in-bounds at the beginning of an offensive possession. Gen

Fighting Style

Fighting Style How to Choose Your Fighting Style How do you develop the best fighting style for yourself? I've had somebody ask me, "How do you choose your fighting style?" and I find it to be an interesting question. Because honestly…you don't really get to choose your fighting style. You have to adapt to the game and do whatever it takes to win. So in a sense…if your goal is to win…your style will evolve to whatever it needs to be in order for you to win or survive in your combat environment. Your fighting style should come to you naturally, evolving over the years as you jump through the hoops. What's important is making sure that you go through these natural steps and growing pains to give yourself (and your style) the best chance to evolve into a fully malleable and adaptable fighting style. Here are the 7 stages of natural fighting style development: 7 Steps to Developing YOUR Fighting Style It is all too temping to want a shortcut to your fight

[React Hooks] Hooks

[React Hooks] Hooks 0. Introducing Hooks - Hooks 는 리액트 v16.8 에 새로 도입된 기능으로서, 함수형 컴포넌트에서도 상태 관리를 할 수 있는 useState, 그리고 렌더링 직후 작업을 설정하는 useEffect 등의 기능등을 제공하여 기존의 함수형 컴포넌트에서 할 수 없었던 다양한 작업을 할 수 있게 해준다. - 몇가지 Hooks를 알아보겠다. useTitle : react document 의 title을 몇개의 hooks와 함께 바꾸는 것이다. useInput : Input과 같다. usePageLeave : 유저가 page를 벗어나느 시점을 발견하고 함수를 실행한다. userClick : 누군가 element를 클릭하는 시점을 발견한다. useFadeIn : 어떤 element든 상관없이 애니메이션을 element 안으로 서서히 사라지게 만든다. useFullscreen : 어떤 element든 풀스크린으로 만들거나 일반 화면으로 돌아갈 수 있게 한다. useHover : 어떤것을 마우스에 올렸을때 감지한다. useNetwork : Online인지 Offline인지를 상태를 감지한다. useNotification : norification API를 사용할때 유저에게 알림을 보내준다. useScroll : 스크롤을 사용할 때를 감지해 알려준다. useTabs : 웹사이트에 메뉴 또는 무엇이든간에 tab을 사용하기 쉽게 만들어준다. usePreventLeave : 유저가 변경사항이나 무엇이든간에 저장하지 않고 페이지를 벗어나길 원할때 확인을 하는 것이다. useConfirm : usePreventLeave와 비슷하지만 어떤 기능이 존재한다. useAxios : HTTP requests client axios을 위한 wrapper 같은 것이다. 1. Requirements - from http://sw-ko.tistory.com/191 by ccl(

코드스테이츠 flex immersive 코스 1기 수강 후기

코드스테이츠 flex immersive 코스 1기 수강 후기 프로그래밍/TIL 및 그외 느낀점들 코드스테이츠 flex immersive 코스 1기 수강 후기 코드스테이츠는 코딩 교육을 하는 부트캠프이다. 부트캠프라고 하면 그게 뭐지? 하고 어리둥절하게 느낄 사람들이 있을 것이다. bootcamp의 사전적 정의는 신병훈련소인데 코드스테이츠도 딱 그런 느낌이다. 개발자가 되고자 하는 사람들을 여럿 모아놓고, 1주마다 과제를 내어주며 수강생들은 그 강의를 학생들끼리 협업해서 혹은 독자적으로 풀게 된다. 일반 학원에서는 학생들에게 학습자료를 내어주고, 학생은 그 학습자료를 익히는데 집중한다면, 코드스테이츠는 1주마다 아주 기본적인 마중물 역할의 자료나 강의만 내어주며, 이외에 과제를 해결해나가는 부분은 학생들끼리 알아서 한다는 점이 학원과 차이점이다. 상투적이지만 물고기를 잡아주는 게 아니라 그물망 하나만 주고, 알아서 잡아오라는 식이다. 그렇기 때문에 학생의 열정이나 능력에 따라 같은 수업을 들어도 배우게 되는 양, 심지어 알게 되는 내용 자체에도 차이가 생기게 된다. 말하자면 위로도 많이 열려있고, 아래로도 많이 열려있는 시스템이랄까? 여하튼 나의 경우는 코드스테이츠의 precourse에서도 이미 이 방식에 대해 만족을 했기 때문에 의심하지 않고 바로 immersive course 수강 신청을 하려 했는데 문제는 내가 이미 병원에 취직을 했다는 것이었다. 기존 immersive course는 3-4개월간 다른 직업이나 사회적 생활을 포기한 채 하루 종일 매달려야 하는 코스인데 내 입장에서는 3, 4달치의 월급을 못 받게 되는 기회비용이 크게 다가왔다. 어떻게 해야 하나 고민을 하고 있던 중 나의 상황과 잘 맞는 타이밍에 개강한 것이 flex immersive 코스 1기였다. 이는 기존 immersive course를 8, 9개월로 늘려서 기존 직업을 유지하면서 남는 시간에 코딩 공부를 하도록 하는 시스템이었는데 1기였기 때문에 이 시스템에 대한 불안감

React 프로젝트를 GitHub pages 사용자 페이지에 호스팅하기

React 프로젝트를 GitHub pages 사용자 페이지에 호스팅하기 create-react-app 으로 만든 React 프로젝트를 github project page에 호스팅하는 글은 많다. 하지만 User page에는 똑같은 방법으로 올려지지 않는다. 4시간이나 삽질한 후에 방법을 찾아서 공유한다! 아래는 Project page가 아닌 User page에 React 프로젝트를 호스팅하는 방법에 대한 내용이다. 우선 Project page와 User Page의 차이점은 대략 이렇다. Project page : username.github.io/repositoryname 과 같은 URL을 가지고, 빌드된 파일들이 gh-pages branch에 저장되어야 함 (username은 사용자 이름, repositoryname은 프로젝트 저장소 이름 ex) enan501.github.io/react-test) User page : username.github.io 와 같은 URL을 가지고, 빌드된 파일들이 master branch에 저장되어야 함 repository 이름이 무조건 username.github.io여야 함 React 프로젝트를 github project page에 호스팅하는 방법은 아래를 참고하면 된다. https://www.hohyeonmoon.com/react-js-github-pages-deploy/ 위의 글을 보고 잘 따라왔다면 package.json 파일에 deploy 명령어를 추가했을 것이다. 여기서 User page에 호스팅하기 위해서는 deploy 명령을 약간 수정해야 한다. package.json 파일에서 "scripts": { "start": "react-scripts start", "build": "react-scripts build", "deploy": "

코다임 기업 정보

코다임 기업 정보 "클라우드 기술을 기반으로 언제 어디서나 소스 코드를 관리 / 빌드, 컴파일 / 실행할 수 있는 환경"을 제공하는 것을 통해 설치형 SW개발 도구가 초래하는 비효율성 개선 솔루션 코다임은 소프트웨어와 관련된 에코시스템을 클라우드 컴퓨팅 환경에서 운영하는 것을 목표로 합니다. 그를 통해 SW개발이라는 개념 자체를 클라우드에서 단순히 소스 코드를 작성하면 모든 것이 끝나는 완전한 패러다임의 전환을 달성하고자 합니다. 또한 어떻게보면 게임 외에는 소프트웨어에 있어 변방이라고 말할 수 있는 아시아, 대한민국에서 전세계의 개발자나 개발자를 꿈꾸는 사람들이 활용하는 SaaS들을 만들고 운영하고 싶습니다. 초고속 인터넷 말고는 IT강국이라는 명함을 꺼내기 힘들어지고 있는 대한민국의 현실에서 글로벌 소프트웨어 서비스를 출시/운영하고 싶으며, 전세계가 마주하고 있는 4차 산업혁명을 위한 빛과 소금이 되고자 합니다. 더 많은 내용은 더 많은 내용은 더팀스 에서 확인하세요! from http://theteams.tistory.com/734 by ccl(A) rewrite - 2020-03-21 15:20:14

React Hooks : useEffect

React Hooks : useEffect 페이스북 공식 문서에 따르면 useEffect는 Similar to componentDidMount and componentDidUpdate라고 한다. 물론 둘 중 하나에만 작동하게하는 방법 도 존재한다. 컴포넌트 라이프 사이클에 따르면 어쨌거나 render() 이후에 실행되는 것이다. 🚗 Component Lifecycle Mounting : constructor(), render(), componentDidMount() Updating : render(), componentDidUpdate() Unmounting : componentWillUnmount() from http://darrengwon.tistory.com/176 by ccl(A) rewrite - 2020-03-21 05:54:12

React에서 웹팩 설치하기

React에서 웹팩 설치하기 create-react-app을 하면 자동으로 웹팩 설정을 해주기 때문에 웹팩을 그다지 신경쓰지 않았지만 그래도 웹팩을 설치하는 방법을 알아야 한다. 세부적인 컨트롤과 개인화, 오류 수정 등의 문제가 존재하기 때문이다. 우선, 웹팩을 다루기 위해서는 node를 어느 정도 알아야 한다. React할 때 node를 알아야 한다는 이유가 웹팩을 활용하기 위해서이다. from http://darrengwon.tistory.com/177 by ccl(A) rewrite - 2020-03-21 05:20:13

React Hooks : useState

React Hooks : useState hooks functional components인데 state를 쓸 수 있게 함. 따라서 class components를 사용하지 않아도 됨 => 함수형 프로그래밍 스타일로 코딩가능 다음을 일반적인 클래스 컴포넌트이다. import React from "react"; class App extends React.Component { state = { count: 0 }; plus = () => { this.setState({ count: this.state.count + 1 }); }; render() { const { count } = this.state; return ( {count} PLUS ); } } export default App; 위와 같은 클래스 컴포넌트를 Hook으로 고쳐보았다. import React, { useState } from "react"; function App() { const [count, setCount] = useState(0); return ( <> {count} setCount(count + 1)}>Plus ); } export default App; useState 위의 예시에서 const [count, setCount] = useState(0); 의 의미를 좀 알아보자. useState는 항상 2개의 요소가 있는 array이다. 첫번째는 value, 두번째는 value를 변경하는 방법을 의미한다. 또한, useState(0); 은 첫번째 value의 값이 0임을 의미한다. from http://darrengwon.tistory.com/174 by ccl(A) rewrite - 2020-03-20 22:20:15

Partial Hydration - 리액트에서 웹페이지 성능 최적화 하기

Partial Hydration - 리액트에서 웹페이지 성능 최적화 하기 서론 이 글은 SSR 프레임워크인 Next.js를 커스텀해서 성능을 향상시킨 라이브러리를 구현한 내용을 담은 글을 요약, 번역한것입니다. 이해를 돕기 위해 많은 의역이 들어갈 수 있으니 참고해주세요. 웹에서의 성능 고성능을 유지하려면 클라이언트에게 적은 양의 코드를 보내야 한다. 우리는 우리가 hydrate해야 하는(static 하지 않고 유저와 상호작용 해야 하는 리액트 컴포넌트) 컴포넌트만 클라이언트에게 보내는 방식으로 성능을 끌어올렸다. 나머지 부분은 서버에서 렌더링한 그대로 놔둔다. The Cost Of JavaScript In 2018 위 내용에서 가장 중요한것은 다음과 같다. 자바스크립트의 비용은 로드할때 뿐만아니라, 파싱하고 실행하는것까지 포함된다. 우리가 최적화 하려고 하는것은 클라이언트에게 보내는 코드 자체가 아니라, 코드의 양이다. 이걸 하기 위해선 SSR이 필수이다. 서버에서 할 수 있는 일들은 서버에서 해야한다. 클라이언트는 클라이언트에서 필요한것들만 서버에서 받아와야 한다. SSR과 hydration 고성능의 웹사이트를 만들기 위해서 우리는 Next.js의 수정버전을 사용할것이다. next는 기본적으로 SSR과 함께 성능 최적화 기능이 들어있다. next는 react를 다음과 같은 순서로 사용한다. 1. 서버에서 리액트 컴포넌트를 HTML string 형태로 렌더링한다. 2. 렌더링된 HTML을 클라이언트에게 보낸다. 3. javascript로 된 리액트 코드를 클라이언트에게 보낸다. 4. html을 리액트로 hydrate한다. next가 HTML 위에 돌돌 말려진 리액트 코드를 푸는것을 hydrate 라고 이해하면 된다. 그 후에 Next는 React에게 다음과 같이 말한다. Next 리액트야, 여기 HTML이 있는데 만약에 내가 비어있는 노드에 렌더링 하라고 시켜도 절대 렌더링 하지마. 그냥 내가 만들어

[Mac OS X] 데스크탑 응용프로그램 개발시작

[Mac OS X] 데스크탑 응용프로그램 개발시작 현재 회사에서 다음 프로젝트로 Mac OS X를 개발해야 하는 일정이 생겨 난생 처음 데스크탑 응용프로그램을 개발하기 공부를 시작했고 여러가지 플랫폼이 있다는것을 발견했다. 어떤 플랫폼을 사용해야할 지 먼저 고민해보자. 무엇으로 개발할것인가? Xcode & Swfit or Objective-C Mac OS X 는 objective-c를 기반으로 만들어졌다. apple에서 제공하는 Xcode와 objective-c 혹은 Swift로 응용 프로그램을 만들 수 있다. Electron Electron 프레임워크를 사용하면 javascript, HTML, CSS를 사용하여 크로스 플랫폼 데스크탑 응용 프로그램을 만들 수 있다. react-native-desktop Qt 프레임 워크를 기반으로하는 크로스 플랫폼이다. react-native 와 javascript로 응용 프로그램을 만들 수 있다. Qt는 컴퓨터 프로그래밍에서 GUI 프로그램 개발에 널리 쓰이는 크로스 플랫폼 프레임워크. 각 플랫폼의 장단점은 무엇인가? Xcode & Swfit or Objective-C - 장점 모든 OSX API에 직접 접근할 수 있다. Xcode를 통해 App Store에 쉽게 배포할 수 있다. - 단점 Windows 전용 응용 프로그램을 다시 개발해야한다. Swift언어를 모른다면 새로 공부해야 한다. Electron - 장점 웹스택을 가지고 빠르게 만들 수 있다. 다양한 플랫폼을 지원한다. - 단점 Native언어로 개발할때 보다 성능이 떨어질 이슈가있다. OS X API를 사용하는데 복잡하다. *API에 대한 JavaScript 래퍼가 없으면 자체 래퍼를 작성하지 않는 한 프로젝트에서 사용할 수 없습니다. React-native-desktop - 장점 현재 개발스택과 완전히 동일하므로 더 빠르게 개발 할 수 있다. 다양한 플랫폼을 지원한다. - 단점 N

firebase react setup 및 firestore 데이터 가져오기

firebase react setup 및 firestore 데이터 가져오기 개발 개발 firebase react setup 및 firestore 데이터 가져오기 설치 npm install --save firebase firebase 클래스 선언 파이어베이스 클래스를 선언한다. 파이어베이스에 받은 정보들을 config에 넣는다. import * as firebase from "firebase/app"; // Add the Firebase products that you want to use import "firebase/auth"; import "firebase/firestore"; var firebaseConfig = { apiKey: "api-key", authDomain: "project-id.firebaseapp.com", databaseURL: "https://project-id.firebaseio.com", projectId: "project-id", storageBucket: "project-id.appspot.com", messagingSenderId: "sender-id", appID: "app-id", }; firebase.initializeApp(firebaseConfig); export default firebase; 활용하기 db에서 데이터를 가져온다. import firebase from 'Firebase' const db = firebase.firestore(); var users = db.collection("users"); users.get() .then( query => { // var array = query.map(a => a.data()); // console.log(arr

Django 3.0 위에서 DRF, React 공부하기

Django 3.0 위에서 DRF, React 공부하기 남기면 좋잖아 Beautiful Hugo 2020. 3. 19. 19:09 최근 클라우드 플랫폼(AWS, Azure)이나 Docker, CI/CD 도구와 같이 데브옵스 관련 공부를 하다 보니 막상 백엔드 공부 자체에 소홀해지며 그리워지기 시작했다. Django 3.0이 나온지 얼마 안 되었고 비동기 프로그래밍도 추가되어 관심만 가지게 되었다가 에듀 캐스트의 이진석 강사님이 Django 강의를 만드셨다는 소식을 듣고 이번 기회에 DRF, React 공부도 하고 Django 전반적인 복습을 하기로 했다. 나는 예전에 Askcompany에서 구독을 한 경험이 있었기에 이번 강좌는 0원에 해주신다는 이벤트덕에 더더욱 욕구를 참을 수 없었다..ㅋㅋ (감사합니다. 이진석강사님..!) 공부하며 코드는 Github에 push 할 예정이며, 필기한 내용들은 블로그에 기록해 둘 예정이다. 고로 모든 출처는 https://educast.com/course/web/ZU53 from http://dbza.tistory.com/27 by ccl(A) rewrite - 2020-03-19 19:54:16

1. Django, React 소개와 기본 설정, 셋팅

1. Django, React 소개와 기본 설정, 셋팅 남기면 좋잖아 Beautiful Hugo 2020. 3. 19. 19:13 A A A A A A Django MVC 방식 Model, Template, View React SPA 원래 웹 문서의 기본 동작 방식 요청마다 모든 전체화면에 대하여 HTML/CSS/JavaScript 를 가져와 로딩함 웹 문서에 적합한 방식 SPA 방식의 화면 전환 JavaScript를 통해 화면 변경 > 화면 전환 느낌이 남 필요 시 백그라운드에서 JavaScript로 서버와 통신 웹 애플리케이션에 적합한 방식 자바스크립트 버전 ES6 (2015) class 와 같은 기능 지원 ES3, ES5 문법은 잊어라 Python, Django 설치 $ pyenv install 3.7.4 $ pyenv global 3.7.4 $ python -m venv drflib $ source drflib/bin/activate $ pip install "django~=3.0.0" $ django-admin --version pyenv 로 시스템 python 버전을 python 3.7.4 버전으로 바꾼다. workspace에 파이썬 가상환경을 설치하고 적용한다. django 3.0 버전의 최신버전 설치 Django 프로젝트 생성 django-admin startproject [프로젝트명] $ django-admin startproject drf_react # 프로젝트 생성 $ python manage.py migrate # 초기 DB 테이블 만들기 $ python manage.py createsuperuser # 수퍼유저 생성 $ python manage.py runserver 0.0.0.0:8000 # 서버 구동 manage.py 명령행을 통해 각종 장고 명령 수행 drf_react 프로젝트명으로 생성된 디렉터리. 함부로 수정하면 안

[모듈] Prototype을 이용한 모듈 패턴으로 Element 모듈 만들기

[모듈] Prototype을 이용한 모듈 패턴으로 Element 모듈 만들기 0.서론 기존의 웹은 페이지가 전환될 때마다 서버에서 화면을 렌더링한 후 브라우저에 바로 그려주는 서버 사이드 렌더링(SSR, Server-Side Rendering) 방식을 주로 사용하였다. 그러나, 페이지가 전환될 때마다 화면 전체를 다시 그리기 때문에 페이지가 로드되는 속도가 느리고 화면이 자주 깜빡거렸다. 그래서, 최근에는 브라우저에서 XHR을 통해 필요한 데이터만 서버에 요청한 후 데이터를 가지고 브라우저에서 화면을 그려주는 클라이언트 사이드 렌더링(CSR, Client-Side Redering) 방식을 많이 사용하고 있다. CSR은 요소를 생성할 때마다 동적으로 요소들을 생서한다. 그래서, 데이터만 입력받으면 요소를 생성할 수 있도록 필요한 모듈들을 미리 만들어 사용한다. 대표적인 예로 페이스북에서 만든 React 라이브러리가 있다. 이번 포스트에서는 Prototype을 이용한 모듈 패턴으로 Element를 동적으로 생성하는 모듈을 만들어 보도록 하겠다. 1. 프로젝트 준비 1-1. 프로젝트 구조 1) modules/MyListItem.js : 리스트 아이템을 커스터마이징한 모듈. 2) index.html : 기본 화면 2. HTML 작성 2-1.index.html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 < !DOCTYPE html > < html lang = "kr" > < head > < meta charset = "UTF-8" > < meta name = "viewport" content = "width=device-width, initial-scale=1.0" > <

리액트에서 이미지를 다루는 방법

리액트에서 이미지를 다루는 방법 CRA에선 어떻게 이미지를 처리하는가? 10KB미만의 이미지 파일은 data URI의 형태로 변환되어 html에 포함된다. url-loader가 이미지 파일을 만나면 data URI 형태로 변경해주기 때문에 가능한것이다. 이렇게 하면 http 요청수를 줄일 수 있고, bmp, gif, jpg, jpeg, png에만 적용되고 svg는 제외된다. 물론 10KB라는 수치도 변경이 가능하다고 한다. data URI란 간단히 말하면 작은 크기의 파일을 문서내에 인라인으로 포함하기 위해서 사용된다. 아이콘을 base64로 인코딩하여 data URI형태로 문서에 인라인 하는 방식을 많이 사용한다. SVG는 왜 제외 됬는가? 이슈 내용을 살펴보면 CRA가 버전 0.8로 업데이트 되면서 url-loader를 사용하여 10KB 미만의 이미지를 data uri형태로 처리하게 변경되었는데, 그것 때문에 원래 잘 쓰고 있던 본인의 svg sprite system이 망가졌다는 이슈이다. 이 사람이 원래 쓰고 있던 svg sprite system은 이렇게 동작한다. 한 폴더에 모여있는 SVG파일들이 빌드 후 10KB미만의 SVG 스프라이트 파일(sprite.svg)로 합쳐진다. 이 스프라이트에서 fragment identifiers를 통해 일부 아이콘만 가져와서 리액트 컴포넌트로 만들어서 사용중이었다고 한다. 이렇게 svg sprite를 이용할 경우 브라우저 캐시를 이용할 수 있어서 큰 장점이 있다. import React, { PropTypes } from 'react' import svgSprite from '../img/symbol/sprite.svg' function Icon({ name }) { return ( ) } 그런데, CRA가 10KB 미만의 svg의 fragment도 url-loader로 처리하여 base64로 인코딩되는 바람에, 아이콘을 제대로 불러오지 못하는 이슈가 발생한