Skip to content

Instantly share code, notes, and snippets.

View qkreltms's full-sized avatar
๐Ÿ’–
Happy coding

JungHoonPark qkreltms

๐Ÿ’–
Happy coding
View GitHub Profile
@qkreltms
qkreltms / readme.md
Last active July 21, 2021 01:37
Redux Persist

Redux Persist๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

Redux Persist๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

ํ”ํžˆ ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ์†์‰ฝ๊ฒŒ state๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ํ˜น์€ ๋ถ„๋ฆฌํ•ด์„œ ์ค‘์•™ํ™” ํ•˜๊ธฐ ์œ„ํ•ด Redux๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด state๋Š” ์ธํ„ฐ๋„ท์ฐฝ์˜ ์ƒˆ๋กœ๊ณ ์นจ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ฑฐ๋‚˜ ์ข…๋ฃŒํ•˜๋Š” ์ˆœ๊ฐ„ ์ดˆ๊ธฐํ™” ๋˜๊ณ  ๋ง™๋‹ˆ๋‹ค. ์ดˆ๊ธฐํ™”๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ”ํžˆ Web storage(์ดํ•˜ storage๋ผ ์ง€์นญ)์— ์ €์žฅํ•˜๋Š”๋ฐ์š”. ์ด ๊ฒƒ๊ณผ ์‚ญ์ œ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•ด์„œ Redux์•ˆ์—์„œ ๊ฐ„ํŽธํ•˜๊ฒŒ ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ฐ”๋กœ Redux Persist์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด Redux store์„ ํ•˜๋‚˜ ๋” ๋งŒ๋“ค์–ด์„œ ์—ฌ๊ธฐ์— ํŠน์ • state๋ฅผ ์ €์žฅํ•˜๊ณ  ํŠน์ • ์•ก์…˜์ด ๋ฐœ๋™๋˜๋ฉด ์ง๋ ฌํ™”(serialize)ํ•ด์„œ storage์— ์ €์žฅ, storage์—์„œ ์—ญ์ง๋ ฌํ™”(deserialize)ํ›„ ๋ถˆ๋Ÿฌ์™€ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ๋ฒ•:

1.๋จผ์ € ๊ธฐ์กด์˜ Reducer์— persistConfig๋ฅผ ๋งŒ๋“ค๊ณ  persistReducerํ•จ์ˆ˜๋กœ ๊ฐ์‹ผ๋‹ค.

@qkreltms
qkreltms / manNai.ts
Last active July 29, 2019 09:50
๋งŒ ๋‚˜์ด ๊ณ„์‚ฐ๊ธฐ
// ์ฃผ์–ด์ง„ ์ƒ์ผ๊ฐ’๊ณผ ํ˜„์žฌ ๋‚ ์งœ๊ฐ’์— ๋”ฐ๋ผ์„œ ๋งŒ ๋‚˜์ด๋ฅผ ๊ตฌํ•œ๋‹ค.
const manNai = (birthday: Date) => {
const birthYear = birthday.getFullYear();
const birthMonth = birthday.getMonth() + 1;
const birthDate = birthday.getDate();
const now = new Date();
const nowYear = now.getFullYear();
const nowMonth = now.getMonth() + 1;
const nowDate = now.getDate();
@qkreltms
qkreltms / readme.md
Created July 5, 2019 01:27
css: boder ๋Š” ๋ฐ”๊นฅ์ชฝ์— ์˜ํ–ฅ์„ ์ค€๋‹ค?

์™ธ๋ถ€ ํŒจํ‚ค์ง€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ง€์›ํ•˜๊ธฐ

ํ˜„์žฌ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ + ๋ฆฌ์—‘ํŠธ ํ™˜๊ฒฝ์—์„œ ์šฐ์•„ํ•œ ๋ ˆ์ด์•„์›ƒ ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€ simple-flexbox ์ด๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ๋‹ค. ๋ช‡ ์ค„์•ˆ๋˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋งˆ์Œ์— ๋“ค์—ˆ๊ณ  MIT ๋ผ์ด์„ผ์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ ๊ฐœ๋ฐœ์ค‘์ธ ์ƒ์—…์šฉ ํ”„๋กœ์ ํŠธ์— ์‚ฌ์šฉํ•ด๋„ ๋ฌธ์ œ์—†์–ด ๋ณด์˜€๋‹ค. ํ•˜์ง€๋งŒ ํ•œ ๊ฐ€์ง€ ๋‹จ์ ์ด ์žˆ์—ˆ์œผ๋‹ˆ... ๋ฐ”๋กœ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ง€์›์ด ์•ˆ๋˜์„œ @types/simple-flexbox๊ฐ€ ์•ˆ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค!

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ฐพ์•„๋ณด๋‹ค๊ฐ€ tsconfig์—์„œ noImplicitAny: false ๋ฅผ ํ•˜๋ฉด ์ผ๋‹จ์€ ์ž‘๋™์€ ๋˜์ง€๋งŒ ํƒ€์ž… ๋ฌธ์ œ ๋•Œ๋ฌธ์— ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, Any ํƒ€์ž…์ด ์•”์‹œ์ ์œผ๋กœ ํ—ˆ์šฉ ๋œ๋‹ค๋Š” ๊ฒƒ์ด ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์•˜๋‹ค.

๊ทธ ๋‹ค์Œ์œผ๋กœ ์ฐพ์€ ํ•ด๊ฒฐ์ฑ…์€ .d.ts ํŒŒ์ผ์„ ๋งŒ๋“ค๋ฉด ์ˆœ์ˆ˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ ํ˜€์ง„ ์ฝ”๋“œ๋„ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ง€์›์ด ๋œ๋‹ค๋Š” ๊ฒƒ์ด์—ˆ๋‹ค!

@qkreltms
qkreltms / README.md
Last active June 22, 2019 14:33
put vs patch

์ฐธ๊ณ : https://medium.com/backticks-tildes/restful-api-design-put-vs-patch-4a061aa3ed0b

์ƒ์„ฑ -โ€Š POST ์ฝ๊ธฐ / ๊ฒ€์ƒ‰ - ๊ฐ€์ ธโ€Š ์˜ค๊ธฐ ์—…๋ฐ์ดํŠธ -โ€Š PUT / PATCH ์‚ญ์ œ -โ€Š DELETE

PUT - ์—ฌ๋Ÿฌ๊ฐœ ์—…๋ฐ์ดํŠธ PATCH - ํ•œ ๊ฐœ ์—…๋ฐ์ดํŠธ but, ๊ทธ ํ•œ ๊ฐœ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๊ฐ’์€ ์ดˆ๊ธฐํ™”ํ•จ.

@qkreltms
qkreltms / README.md
Last active March 5, 2019 05:56
mysqljs ์—๋Ÿฌ ํ•ธ๋“ค๋งํ•˜๊ธฐ (๋ถ€์ œ: async function์—์„œ throw ์‚ฌ์šฉํ•˜๊ธฐ)

์ด์ „ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์—๋Ÿฌ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์ด๋Ÿฐ์‹์œผ๋กœ ๋‹ค๋ค˜์—ˆ๋‹ค.

if (err1) return res.status(500).json({ status: 'error1', messgae: err1))
if (err2) return res.status(500).json({ status: 'error2', messgae: err2))
//...

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์—๋Ÿฌ๋ฅผ throwํ•ด์„œ ์—๋Ÿฌ์ฒ˜๋ฆฌ๋ฅผ ํ•œ ๊ณณ์—์„œ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

function test() {
@qkreltms
qkreltms / gist:de01e98cf426d4ca56b764b39f3ff21d
Last active March 21, 2019 13:12
ํ•ด์‰ฌํƒœ๊ทธ๋ฅผ ์œ„ํ•œ DB ์„ค๊ณ„
http://howto.philippkeller.com/2005/04/24/Tags-Database-schemas/
1. varcharํ•˜๋‚˜๋กœ ๋ชจ๋“  ํƒœ๊ทธ ์ €์žฅ
์žฅ์ : ์‹ฌํ”Œ, ์†๋„๊ฐ€ ์ข€ ๋” ๋น ๋ฆ„
๋‹จ์ : ์ •๊ทœํ™” ์•ˆ๋จ, ํƒœ๊ทธ ์„œ์น˜๊ฐ€ ๋ถ€์ •ํ™•ํ•  ์ˆ˜ ์žˆ์Œ, ํƒœ๊ทธ ์ €์žฅ ์ œํ•œ์žˆ์Œ(varchar ๋ฒ”์œ„)
2. ํƒœ๊ทธ๋ฅผ ์œ„ํ•œ ํ…Œ์ด๋ธ” ํ•˜๋‚˜ ์ƒ์„ฑ ํ›„ ์ €์žฅ
์žฅ์ : ์ข€๋” ์ •๊ทœํ™”
3. ํƒœ๊ทธ ํ…Œ์ด๋ธ”๊ณผ N:M ํ…Œ์ด๋ธ” ์ƒ์„ฑ ํ›„ ์ €์žฅ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static int N;
static int[] arr;
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(bf.readLine());
@qkreltms
qkreltms / react-redux.md
Last active March 22, 2019 12:46
React-Redux ์ •๋ฆฌ

1. ๊ฐœ์š”

Redux๋ž€ ์•ฑ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๋ชจ๋“  ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ store์•ˆ์˜ object tree ํ•œ ๊ณณ์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. state๋ฅผ ๋ฐ”๊พธ๋Š” ๋ฐฉ๋ฒ•์€ action์œผ๋กœ ๊ฐ’์„ ๋ณด๋‚ด๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ reducer์— ์ž‘์„ฑํ•œ๋‹ค.

The whole state of your app is stored in an object tree inside a single store. The only way to change the state tree is to emit an action, an object describing what happened. To specify how the actions transform the state tree, you write pure reducers.

์ฐธ๊ณ : redux ๊ณต์‹ ๊นƒํ—ˆ๋ธŒ

@qkreltms
qkreltms / readme.md
Last active January 23, 2019 09:38
return ์‹œ ๊ด„ํ˜ธ๋ฅผ ์“ฐ๋Š” ์ด์œ 

์—ฌ๋Ÿฌ ์ค„์„ ๋ฆฌํ„ดํ•  ๋•Œ ์‚ฌ์šฉ.

์ถœ์ฒ˜

๋ฆฌ์—‘ํŠธ์—์„œ ์ œ๊ณตํ•˜๋Š” ์˜ˆ์ œ๋ฅผ ๋ณด๋ฉด ๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐ˜ํ™˜์„ ํ•œ๋‹ค.

render: function() {
	return (
		<div className="foo">

Headline