-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsearch.xml
1397 lines (673 loc) ยท 433 KB
/
search.xml
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title>[Vue.js] Vue3 SEO ์ต์ ํํ๊ธฐ (sitemap.map, robots.txt)</title>
<link href="/2025/01/01/Frontend/Vuejs/SEO/"/>
<url>/2025/01/01/Frontend/Vuejs/SEO/</url>
<content type="html"><![CDATA[<p>๊ฐ๋ฐ ํฌํธํด๋ฆฌ์ค ์ฌ์ดํธ๋ฅผ ๋ง๋ค์๋๋ฐ, ๋ฐฐํฌ๋ ์ฑ๊ณตํ๋ค๋ง ์๊ฐํด๋ณด๋ ๊ฒ์ ์ ์
์ ์ํ SEO(Search Engine Optimization) ์ต์ ํ๋ฅผ ํ์ง ์์์์ ๊นจ๋ฌ์๋ค (โฆ)<br>๋ฐ๋ผ์ Vue3๋ก ํ๋ ๋ฐฉ๋ฒ์ ๊ฐ๋ตํ ์ ๋ฆฌํด๋ณด๊ณ ์ ํ๋ค.</p><p>์ฐธ๊ณ ๋ก ์ฌ๊ธฐ์๋ ๊ฐ ํฌํธ๋ณ ์ธํ
์ ๋ค๋ฃจ์ง ์๊ณ <code>sitemap.xml</code>, <code>robots.txt</code> ์์ฑ๋ฒ๋ง ์์ฑํ๋ค.<br>ํฌํธ๋ณ ์ธํ
์ ์ธํฐ๋ท์ ๊ฒ์ํ๋ฉด ๋ง์ด ๋์ค๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ ๊ฐ๋ฐ ์์๋ฑ ๋ถ๋ค์ ์ ํ์ค๊ฑฐ๋ผ ๋ฏฟ๋๋ค ใ
ใ
</p><h2 id="sitemap-xml๋ง๋ค๊ธฐ"><a href="#sitemap-xml๋ง๋ค๊ธฐ" class="headerlink" title="sitemap.xml๋ง๋ค๊ธฐ"></a>sitemap.xml๋ง๋ค๊ธฐ</h2><p>์ผ๋จ ์์ ์ ํ๋ก์ ํธ์์ ์ด๋ค vue ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋์ง ์ ์์์ผ ํ๋ค.<br>VuePress๊ฐ์ ๊ฒฝ์ฐ์๋ <code>vuepress-plugin-sitemap</code> ํจํค์ง๋ฅผ ์ค์นํด์ module.exports๋ฅผ ํ๋ฉด ๋ฐ๋ก๋์ง๋ง,<br>ํ์๋ vue3๋ฅผ ์ฉ์ผ๋ก ๊ฐ๋ค ๋ฐ์๊ธฐ ๋๋ฌธ์ ์ง์ ์์ฑ์ ํด์ผํ๋ค. ใ
ใ
โฆ <del>๋ค๋ฆ๊ฒ ๋ชฐ๋ ค๋๋ ํํ</del><br>์๋๋ฉด ํ๋ฌ๊ทธ์ธ ํจํค์ง๋ฅผ ๋๋ฆฌ๋ฉด ์๋์ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.</p><pre class="line-numbers language-bash"><code class="language-bash">node:internal/modules/esm/get_format:183 throw new ERR_UNKNOWN_FILE_EXTENSION<span class="token punctuation">(</span>ext, filepath<span class="token punctuation">)</span><span class="token punctuation">;</span> ^TypeError <span class="token punctuation">[</span>ERR_UNKNOWN_FILE_EXTENSION<span class="token punctuation">]</span>: Unknown <span class="token function">file</span> extension <span class="token string">".vue"</span> <span class="token keyword">for</span> /Users/rubykim/portfolio/frontend/src/views/Home.vue at Object.getFileProtocolModuleFormat <span class="token punctuation">[</span>as file:<span class="token punctuation">]</span> <span class="token punctuation">(</span>node:internal/modules/esm/get_format:183:9<span class="token punctuation">)</span> at defaultGetFormat <span class="token punctuation">(</span>node:internal/modules/esm/get_format:209:36<span class="token punctuation">)</span> at defaultLoadSync <span class="token punctuation">(</span>node:internal/modules/esm/load:173:14<span class="token punctuation">)</span> at <span class="token comment" spellcheck="true">#loadAndMaybeBlockOnLoaderThread (node:internal/modules/esm/loader:723:12)</span> at <span class="token comment" spellcheck="true">#loadSync (node:internal/modules/esm/loader:745:49)</span> at ModuleLoader.getModuleJobForRequire <span class="token punctuation">(</span>node:internal/modules/esm/loader:384:38<span class="token punctuation">)</span> at new ModuleJobSync <span class="token punctuation">(</span>node:internal/modules/esm/module_job:342:34<span class="token punctuation">)</span> at ModuleLoader.importSyncForRequire <span class="token punctuation">(</span>node:internal/modules/esm/loader:332:11<span class="token punctuation">)</span> at loadESMFromCJS <span class="token punctuation">(</span>node:internal/modules/cjs/loader:1570:24<span class="token punctuation">)</span> at Module._compile <span class="token punctuation">(</span>node:internal/modules/cjs/loader:1722:5<span class="token punctuation">)</span> <span class="token punctuation">{</span> code: <span class="token string">'ERR_UNKNOWN_FILE_EXTENSION'</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><br><p>ํ์ค ์์ฝํ์๋ฉด <strong>vueํ์ผ ์ธ์์ด ์๋๋ค์</strong>๋ผ๋ ๋ง์ด๋ฏ๋ก, ๊ฒฐ๊ตญ ๋
ธ๊ฐ๋ค๋ฅผ ํด์ผํ๋ค๋ ๋ป์ด๋ค.<br>๋คํํ๋ ๋
ธ๊ฐ๋ค ์ฝ๋๋ ๋งค์ฐ ๊ฐ๋จํ ํธ์ด๋ค.</p><p>๋จผ์ ํจํค์ง๋ฅผ ์ค์นํด์ค ํ,</p><pre class="line-numbers language-bash"><code class="language-bash"><span class="token function">npm</span> <span class="token function">install</span> sitemap<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><br><p>์ฝ๋๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ธํ
ํด์ฃผ๋ฉด ๋๋ค.</p><pre class="line-numbers language-js"><code class="language-js"><span class="token comment" spellcheck="true">// generate-sitemap.js</span><span class="token keyword">const</span> <span class="token punctuation">{</span> SitemapStream<span class="token punctuation">,</span> streamToPromise <span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">"sitemap"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token punctuation">{</span> createWriteStream <span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">"fs"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token punctuation">{</span> resolve <span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">"path"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">const</span> routes <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token comment" spellcheck="true">// ์ฌ๊ธฐ์์ ๋ชจ๋ page์ url์
๋ ฅ</span> <span class="token punctuation">{</span> path<span class="token punctuation">:</span> <span class="token string">"/"</span><span class="token punctuation">,</span> priority<span class="token punctuation">:</span> <span class="token number">1.0</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> path<span class="token punctuation">:</span> <span class="token string">"/about"</span><span class="token punctuation">,</span> priority<span class="token punctuation">:</span> <span class="token number">0.9</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> path<span class="token punctuation">:</span> <span class="token string">"/contact"</span><span class="token punctuation">,</span> priority<span class="token punctuation">:</span> <span class="token number">0.9</span> <span class="token punctuation">}</span><span class="token punctuation">,</span><span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">const</span> sitemap <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">SitemapStream</span><span class="token punctuation">(</span><span class="token punctuation">{</span> hostname<span class="token punctuation">:</span> <span class="token operator"><</span>์ค์ _๋ฐฐํฌ_์ฌ์ดํธ_url<span class="token operator">></span><span class="token punctuation">,</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">streamToPromise</span><span class="token punctuation">(</span> routes <span class="token punctuation">.</span><span class="token function">reduce</span><span class="token punctuation">(</span><span class="token punctuation">(</span>stream<span class="token punctuation">,</span> route<span class="token punctuation">)</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token punctuation">{</span> stream<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span><span class="token punctuation">{</span> url<span class="token punctuation">:</span> route<span class="token punctuation">.</span>path<span class="token punctuation">,</span> changefreq<span class="token punctuation">:</span> <span class="token string">"monthly"</span><span class="token punctuation">,</span> priority<span class="token punctuation">:</span> route<span class="token punctuation">.</span>priority<span class="token punctuation">,</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> stream<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> sitemap<span class="token punctuation">)</span> <span class="token punctuation">.</span><span class="token function">end</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token punctuation">{</span> <span class="token keyword">const</span> outputPath <span class="token operator">=</span> <span class="token function">resolve</span><span class="token punctuation">(</span>__dirname<span class="token punctuation">,</span> <span class="token string">"dist/sitemap.xml"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">const</span> writeStream <span class="token operator">=</span> <span class="token function">createWriteStream</span><span class="token punctuation">(</span>outputPath<span class="token punctuation">)</span><span class="token punctuation">;</span> writeStream<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span>data<span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> writeStream<span class="token punctuation">.</span><span class="token function">end</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><br><p>์ด ํ์ผ์ ์ค์ ํด์คฌ๋ค๋ฉด <code>package.json</code>์ build script์ sitemap ์์ฑ ๋ช
๋ น์ด๋ฅผ ๊ฐ์ด ์
๋ ฅํด์ฃผ์.</p><pre class="line-numbers language-json"><code class="language-json">...<span class="token property">"scripts"</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token property">"build"</span><span class="token operator">:</span> <span class="token string">"vue-cli-service build && node generate-sitemap.js"</span><span class="token punctuation">,</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>...<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><br><br><br></p><h2 id="robots-txt-๋ง๋ค๊ธฐ"><a href="#robots-txt-๋ง๋ค๊ธฐ" class="headerlink" title="robots.txt ๋ง๋ค๊ธฐ"></a>robots.txt ๋ง๋ค๊ธฐ</h2><p>robots.txt๋ ๋ง๋ค๊ธฐ ๋งค์ฐ ์ฝ๋ค. ๊ทธ๋ฅ txt ํ์ผ์ ๊ฐ๋ค ๋ฃ์ผ๋ฉด ๋๊ธฐ ๋๋ฌธ์ด๋ค.<br>๋ค๋ง ์ฌ๊ธฐ์ ์ค์ํ ๊ฒ์ด ์๋๋ฐ, <strong>์น์ฌ์ดํธ ๋ฃจํธ ๋๋ ํ ๋ฆฌ</strong>์ ์์นํด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.</p><p>ํน๋ณํ ํ๋ก์ ํธ ๊ตฌ์กฐ๊ฐ ์๋ ์ด์, ๋๋ถ๋ถ <code>public</code>ํด๋์ robots.txt๋ฅผ ๋ง๋ค์ด๋์ผ๋ฉด build์ ์๋์ผ๋ก ๋ฃจํธ ๋๋ ํ ๋ฆฌ์ ํด๋น ํ์ผ์ด ์์นํ๊ฒ ๋ ๊ฒ์ด๋ค.<br>์๋๋ robots.txt ์์์ด๋ค.</p><pre class="line-numbers language-txt"><code class="language-txt">User-agent: *Disallow:Sitemap: <์ค์ _๋ฐฐํฌ_์ฌ์ดํธ_url>/sitemap.xml<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span></code></pre><p>ํ์๋ ํฌํธํด๋ฆฌ์ค ์ฌ์ดํธ์ ๋ํด์ SEO๋ฅผ ์ค์ ํ๊ณ ์๊ธฐ ๋๋ฌธ์, Disallow๋ฅผ ๋ฐ๋ก ์ธํ
ํ์ง๋ ์์๋ค.<br>๋ง์ฝ ๊ฐ๋ฐ ์ค์ธ ํ์ด์ง๋ ๊ฒ์ ๊ฒฐ๊ณผ์ ๋ํ๋๊ธฐ ์ํ์ง ์๋ ์ฝํ
์ธ ๊ฐ ์๋ค๋ฉด, Disallow์ ๋ฃ์ด์ฃผ๋๋ก ํ์.</p><p><br><br><br></p><h2 id="๊ฒฐ๊ณผ๋ฌผ"><a href="#๊ฒฐ๊ณผ๋ฌผ" class="headerlink" title="๊ฒฐ๊ณผ๋ฌผ"></a>๊ฒฐ๊ณผ๋ฌผ</h2><img src="./1.png" width="800"><img src="./2.png" width="800">]]></content>
<categories>
<category> โจ Frontend </category>
</categories>
<tags>
<tag> Javascript </tag>
<tag> Frontend </tag>
<tag> Vue </tag>
<tag> SEO </tag>
</tags>
</entry>
<entry>
<title>[Next.js] ๋ฐฐํฌํ๊ธฐ: AWS Amplify vs Github pages vs fly.io vs Vercel vs Netlify</title>
<link href="/2024/12/29/Frontend/Nextjs/Deployment/"/>
<url>/2024/12/29/Frontend/Nextjs/Deployment/</url>
<content type="html"><![CDATA[<p>ํ๋ก์ ํธ๋ฅผ ํ๋ค๋ณด๋ฉด ์ธ์ ๊ฐ ๋ฐฐํฌ๋ฅผ ํด์ผ ํ๋ ์๊ฐ์ด ์จ๋ค.</p><p>ํ์ ๋ํ ์ต๊ทผ nextJS๋ก ๊ฐ๋จํ ํํ์ด์ง๋ฅผ ๋ง๋ค์๋๋ฐ, ๋ง์ ๋ฐฐํฌ๋ฅผ ํ๋ ค๋ nextJS๋ผ ๊ณ ๋ คํด์ผํ ์ ์ด ๋ง์์ ํ ๋ฒ ์ ๋ฆฌํด๋ณด๊ณ ์ ํ๋ค.</p><p>๊ฒฐ๋ก ๋ง ๋ณผ ์ฌ๋๋ค์ 5๋ฒ์ผ๋ก ๋ฐ๋ก ๋์ด๊ฐ๋ฉด ๋๋ค.</p><h2 id="NextJS๋ฅผ-์ ํํ-์ด์ ๋"><a href="#NextJS๋ฅผ-์ ํํ-์ด์ ๋" class="headerlink" title="(NextJS๋ฅผ ์ ํํ ์ด์ ๋?)"></a>(NextJS๋ฅผ ์ ํํ ์ด์ ๋?)</h2><p>์ผ๋จ ํ๋ซํผ์ ๋น๊ตํ๊ธฐ ์์์ ๊ตณ์ด nextJS๋ฅผ ์ ํํ ์ด์ ๋ฅผ ๊ฐ๋จํ ์ ์ด๋ณด์ ํ๋ค.<br>๊ทธ๋์ผ ๋น๊ตํ๋ ์๋ฏธ๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค.</p><p>NextJS๋ <code>SSR(์๋ฒ ์ฌ์ด๋ ๋๋๋ง)</code>์ ๋ชฉ์ ์ผ๋ก ์ฃผ๋ก ์ ํ๋๋ ์น ํ๋ ์์ํฌ์ด๋ค.<br>์ฆ ๊ฐ ํ์ด์ง๋ฅผ ์๋ฒ ์ธก์์ ๋จผ์ ๋ ๋๋ง์ ํ ์ ์๊ธฐ ๋๋ฌธ์, ์ด๊ธฐ ํ์ด์ง ๋ก๋ฉ ์๋๊ฐ ๋น ๋ฅด๊ณ <code>SEO(๊ฒ์ ์์ง ์ต์ ํ)</code>์ ๋งค์ฐ ์ ๋ฆฌํ๋ค.<br>ํ์ ๋ํ ๋ง๋ ํ๋ก๊ทธ๋จ์ด ์ธํฐ๋ท ๊ฒ์์ด ์ ๋๋๋ก ํ๊ณ ์ถ์ด์, ๊ณ ๋ฏผ์์ด ๋ฐ๋ก nextJS๋ฅผ ์ ํํ๋ค.</p><h2 id="1-โ-AWS-Amplify"><a href="#1-โ-AWS-Amplify" class="headerlink" title="1. โ AWS Amplify"></a>1. โ AWS Amplify</h2><img src="./1.png" width="800"><p>ํ์๋ ํ์ฌ ์
๋ฌด๋ก ์ธํด AWS๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๋๋ฐ, ์๊ฐํด๋ณด๋ AWS CloudFront๋ฅผ ์ง์ ์ค์ ํด์ ํ๋ก ํธ์๋๋ฅผ ๋ฐฐํฌํ์ง, Amplify๋ ์จ๋ณธ ์ ์ด ์์ด์ ์ฐ์ต ๊ฒธ ์ฌ๊ธฐ๋ก ํธ์คํ
์ ์๋๋ฅผ ํ๋ค.</p><p>๋ฌผ๋ก ์ด์ฐ์ ์ฐ ํ๋ ๋ฐฐํฌ๋ ์ ๋๋๋ฐ, ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.<br>ํฌ๊ฒ 2๊ฐ์ง ๋ฌธ์ ๊ฐ ์์๋๋ฐ, ๋ฐ๋ก <code>๋ฐฐํฌ/๋ฐ์ ์๊ฐ์ด ๋๋ฌด ๊ฑธ๋ฆฐ๋ค</code>๋ ๊ฒ์ด๋ค.</p><p>Amplify๋ CDN์ ์ํด CloudFront๋ฅผ ์ฌ์ฉํ๋๋ฐ, CloudFront๋ CDN๊ณผ Compute@Edge ๋ฐฐํฌ์์ invalidations(๋ฌดํจํ)์ propagations(์ ํ)๋ฅผ ์ง์ํ์ง ์์ ์ผ์ข
์ <strong>๋ณ๋ชฉํ์</strong>์ด ๋ํ๋ ๊ฒ์ด์๋ค.</p><p>ํ์๊ฐ ๊ตฌํํ ํ๋ก์ ํธ๊ฐ ๊ฐ๋จํ ํธ์ ์ํ๋๋ฐ, ์ค์ ๋ก ๋ฐฐํฌ ํ ๋ฐ์๊น์ง ์ฝ 20๋ถ์ด๋ผ๋ ์๊ฐ์ด ๊ฑธ๋ ธ๋ค. ์ค๋ก ๋๋ผ์ธ ๋ฐ๋ฆโฆ</p><br><p>๋ ํ๋์ ๋ฌธ์ ๋ <code>์ด๋ฏธ์ง ๋ก๋๊ฐ ๋๋ฆฌ๋ค๋ ๊ฒ</code>์ด์๋ค.<br>ํ์ฌ ๊ธฐ์ค์ผ๋ก region์ <strong>us-east-1</strong>(๋ฒ์ง๋์ ๋ถ๋ถ)๋ก๋ง ์ค์ ํ ์ ์๋๋ฐ, ํ์ผ ๋ด๋ถ static ์ด๋ฏธ์ง๋ค์ด ์บ์ฑ๋๊ธฐ ์ ๊น์ง๋ ์ด๋ฏธ์ง ๋ก๋๊ฐ ๋งค์ฐ ๋๋ฆฌ๋ค๋ ๊ฒ์ด์๋ค.</p><p>๋งจ ์ฒ์์ ์ด๋ฏธ์ง ๋ก๋ฉ ์๊ฐ์ด ๋๋ฌด ๊ธธ์ด๋ณด์ฌ์ ์ฐฉ๊ฐํ๊ฑด๊ฐ ์ถ์ด ๋ช ๋ฒ ์ฌํ
์คํธ๋ฅผ ํ๋๋ฐ,<br>๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ํ์คํ๊ฒ ์ ์ ์ด๋ฏธ์ง๋ค์ด ์บ์ฑ๋๊ธฐ ์ ๊น์ง๋ ๋๋ฆฌ๊ฒ ๋ถ๋ฌ์์ง๋ ๋ชจ์ต์ ํํ์ ๊ธ์น ๋ชปํ๋ค.</p><p>๋๋ฌผ ๋จธ๊ธ๊ณ ๋์ ์๊ณ ๊ท์ฌ์ด ๋์ ๋ฐ์น๊ฒ ๋ค๋๋ฐ ์ด๋ ๊ฒ๊น์ง ๋๋ฆด ์ผ์ด ์๋? ์ถ์ด์ ๊ฒฐ๊ตญ ๋์ง๊ฒ ๋์๋ค ใ
ใ
</p><p><br><br></p><h2 id="2-โ-Github-Pages"><a href="#2-โ-Github-Pages" class="headerlink" title="2. โ Github Pages"></a>2. โ Github Pages</h2><img src="./2.jpg" width="800"><p>์ฌ์ค ์ด๊ฑฐ๋ ์๋์กฐ์ฐจ ์ํ๋ค. ์๋๋ฉด ์ด ๋ธ๋ก๊ทธ ์์ฒด๊ฐ Github Pages๋ก ์ด์๋๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ตณ์ด ๋์ผํ ๊ธฐ์ ์คํ์ ์ฌ์ฉํด์ผ ํ๋ ์ถ์๊ธฐ ๋๋ฌธ์ด๋ค.</p><p>๋ฌด์๋ณด๋ค Github Pages๋ฅผ ํฌ๊ธฐํ ์ด์ ๊ฐ ๋ฐ๋ก <code>API ๋ผ์ฐํธ</code> ์๋ค. ์ํ๊น๊ฒ๋ <strong>Github Pages๋ ์๋ฒ ์ด์ฉ์ด ๋ถ๊ฐ๋ฅ</strong>ํ๋ฐ, ๋๋ API ๋ผ์ฐํธ๋ฅผ ๊ตฌํํ๊ธฐ ๋๋ฌธ์ด๋ค. ์๋ฒ ์์ด ์ด๋ป๊ฒ ์๋์ํค๊ฒ ์ดโฆใ
ใ
</p><p>๋ฐ๋ผ์ API ๋ผ์ฐํธ ์๋ build ๊ฒฐ๊ณผ๋ฌผ๋ก๋ github pages ๋ฐฐํฌ๋ ๊ฐ๋ฅํ์ง๋ง, API ๋ผ์ฐํธ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด 100% github pages์์ ์๋น์ค๊ฐ ์๋์๊ฐ๊ธฐ ๋๋ฌธ์ด ๋ค๋ฅธ ๋์์ ์ ์ฐพ์์ผ ํ๋ค.</p><p><br><br></p><h2 id="3-โ
-fly-io"><a href="#3-โ
-fly-io" class="headerlink" title="3. โ
fly.io"></a>3. โ
fly.io</h2><img src="./3.png" width="800"><p><a href="https://fly.io/">fly.io</a>๋ ์ปจํ
์ด๋ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์ผ๋ก, ์ ์ธ๊ณ ์ฌ๋ฌ ๋ฐ์ดํฐ ์ผํฐ์์ ์ ํ๋ฆฌ์ผ์ด์
์ ์๋์ผ๋ก ๋ฐฐํฌํ์ฌ ์ง์ฐ ์๊ฐ์ ์ต์ํ ๋ฐ ์ฑ๋ฅ ์ต์ ํ๊ฐ ๊ฐ๋ฅํ ํ๋ซํผ์ด๋ค.</p><p>ํด๋ผ์ฐ๋์์ Container Registry์ ์ด๋ฏธ์ง๋ฅผ ์
๋ก๋ํ์ฌ Kubernetes๋ก ๋๋ฆฌ๋๊ฑด ํํ ๊ฒฝ์ฐ๋ผ, ์ด๊ฒ๋ ์ฒดํ์ ํด๋ณด๊ณ ์ถ์ด์ ๊ฐ๋ณ๊ฒ ์
๋ก๋๋ฅผ ํด๋ดค๋ค.</p><p>๋ช
๋ น์ด๋ฅผ ์จ์ผํ๋์ ์ด๋ ต๋ ์ถ์๋๋ฐ, ์๊ฐ๋ณด๋ค ๋์์ง ์์๋ค. ์๋ ๋ช
๋ น์ด๊ฐ ์ ๋ถ์ด๊ธฐ ๋๋ฌธ์ด๋ค.<br>ํ์ง๋ง ์ด ํ๋ก๊ทธ๋จ์ ์์ฝ๊ฒ๋ ์ต์ข
ํ๋ณด์์ ํ๋ฝํ๊ณ ๋ง์๋ค. ์๋๋ฉด ๋ฌด๋ฃ๊ธฐ๊ฐ ์ดํ๋ก ๋งค๋ฌ 25๋ฌ๋ฌ๋ฅผ ๋ด์ผํ๊ธฐ ๋๋ฌธ์ด๋ค <del>๋์๋ผ๊ธฐ</del></p><pre class="line-numbers language-bash"><code class="language-bash"><span class="token comment" spellcheck="true"># 1. flyctl ์ค์น</span><span class="token comment" spellcheck="true">## brew ์ค์น</span>brew <span class="token function">install</span> flyctl<span class="token comment" spellcheck="true">## brew์ฌ์ฉ์ด ์ด๋ ค์ธ ์</span>curl -L https://fly.io/install.sh <span class="token operator">|</span> sh<span class="token comment" spellcheck="true"># 2. flyctl ๋ก๊ทธ์ธ</span>flyctl auth login<span class="token comment" spellcheck="true"># 3. ์ด๊ธฐ ์ค์ ๋ฐ ๋ฐฐํฌํ๊ธฐ</span><span class="token comment" spellcheck="true">## ์ด๋ fly.toml ๋ฐ Dockerfile์ด ์์ฑ๋๋ฉฐ, ์๋์ผ๋ก ๋ฐฐํฌ๊ฐ ์งํ๋จ</span>fly launch<span class="token comment" spellcheck="true"># 4. ์ดํ ์ฝ๋ ์์ ํ ๋ฐฐํฌ ์
๋ฐ์ดํธ</span>fly deploy<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p><br><br></p><h2 id="4-โ
-Vercel-vs-Netlify"><a href="#4-โ
-Vercel-vs-Netlify" class="headerlink" title="4. โ
Vercel vs Netlify"></a>4. โ
Vercel vs Netlify</h2><img src="./4.avif" width="800"><p>์ด ๋ ์น๊ตฌ๋ค์ ํ๋ก ํธ์๋ ๋ฐฐํฌ๋ฅผ ํ๋๋ฐ ๋ง์ด ์ฌ์ฉ๋๋ ํ๋ซํผ์ด๋ค.<br>์๋๋ฉด ๋ฐฐํฌ๋ ๋งค์ฐ ์ฝ๊ณ ๋ฌด์๋ณด๋ค <strong>๋ฌด๋ฃ</strong> ๋ฒ์ ๋ด์์ ์ถฉ๋ถํ ์ปค๋ฒํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.</p><p>๋ฐ๋ผ์ ์ด ๋์ ๋๊ณ ์ด๋๋ก ๋ฐฐํฌ๋ฅผ ํ๋ ์๊ฒฌ์ด ๋ถ๋ถํ ๋ฐ์ํ๋๋ฐ, ๊ฐ๋จํ๊ฒ ์ ๋ฆฌ๋ฅผ ํด๋ณด๊ณ ์ ํ๋ค.<br>(์ฐธ๊ณ : <a href="https://ikius.com/blog/vercel-vs-netlify">https://ikius.com/blog/vercel-vs-netlify</a>)</p><h4 id="Vercel"><a href="#Vercel" class="headerlink" title="Vercel"></a>Vercel</h4><ul><li>nextJS์ ํ์ ํด์ ์ต์ ์ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅ: vercel์์ nextjs๋ฅผ ๋ง๋ค์๊ธฐ ๋๋ฌธ</li><li>๋น ๋ฅธ ๋ก๋ฉ ์๋</li></ul><h4 id="Netlify"><a href="#Netlify" class="headerlink" title="Netlify"></a>Netlify</h4><ul><li>๋ค์ํ ์ ์ ์ฌ์ดํธ ์์ฑ๊ธฐ & ๋ณต์กํ ๋ฐฐํฌ ์๊ตฌ์ฌํญ์ด ์์ ๊ฒฝ์ฐ์ ์ฌ์ฉ์ด ์ข์: vercel๋ณด๋ค ํ๋ฌ๊ทธ์ธ์ด ๋ง์ด ์ ๊ณต๋๊ธฐ ๋๋ฌธ</li><li>๋ฌด๋ฃ ํ๋์์ ์์
์ฉ๋๋ก ์ฌ์ฉ ๊ฐ๋ฅ (vercel์ ์์
์ฉ์ผ๋ก ํ์ด์ง ๋ง๋ค ์ ํ๋ ๊ตฌ๋งค ํ์)</li></ul><p><br><br></p><h2 id="5-๊ฒฐ๋ก "><a href="#5-๊ฒฐ๋ก " class="headerlink" title="5. ๊ฒฐ๋ก "></a>5. ๊ฒฐ๋ก </h2><p>ํฉ๋ฆฌ์ ์ธ ๊ฐ๊ฒฉ(๋ฌด๋ฃ ๋๋ ์์ก)์ผ๋ก ๋ฐฐํฌ๋ฅผ ํ๋ค๋ ๊ฐ์ ํ์,<br><code>Vercel</code>, <code>Netlify</code>, <code>fly.io</code>๋ฅผ ์ถ์ฒํ๋ค!</p><p>Github Pages๋ NextJS์์ API ๋ผ์ฐํธ๋ฅผ ๊ตฌํํ์ง ์์์ ๋๋ง ์ถ์ฒํ๋ค.</p>]]></content>
<categories>
<category> โจ Frontend </category>
</categories>
<tags>
<tag> Javascript </tag>
<tag> NextJS </tag>
<tag> Frontend </tag>
</tags>
</entry>
<entry>
<title>[GCP] GCP์์ ์ฌ์ฉ์ ์ธ์ฆ์ ๋ณด(OAuth)๋ฅผ ์ฌ์ฉํด Access Token ๋ฐ์์ค๊ธฐ</title>
<link href="/2024/12/20/Cloud/GCP/Console/Oauth2/"/>
<url>/2024/12/20/Cloud/GCP/Console/Oauth2/</url>
<content type="html"><![CDATA[<p>Google Calendar์ ์ปคํผ์ฑ ์ผ์ ์ ์ก์์ฃผ๋ ํ๋ก๊ทธ๋จ์ ๋ง๋๋ ์ค์ธ๋ฐ, ์ด ๊ณผ์ ์์ Google Calendar API๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ GCP๋ก๋ถํฐ Access Token ๋ฐ๊ธ์ ๋ฐ์์ผ ํ๋ฏ๋ก ๊ทธ ๋ฐฉ๋ฒ์ ํ ๋ฒ ์ ๋ฆฌํด๋ณด์๊ณ ํ๋ค.<br><code>scope</code>๋ถ๋ถ๋ง ์ํ๋ ์๋น์ค๋ก ์ ํํ๋ฉด ํด๋น ์๋น์ค์ Access Token์ ๋ฐ์ ์ ์์ผ๋ฉฐ ์ฌ๊ธฐ์๋ ๋ด๊ฐ ์์
์ค์ธ Google Calendar๋ฅผ ์์๋ก ๊ธ์ ์์ฑํด๋ณธ๋ค.</p><h2 id="1-GCP-gt-API-๋ฐ-์๋น์ค-gt-์ฌ์ฉ์-์ธ์ฆ-์ ๋ณด์์-OAuth-client-์์ฑ"><a href="#1-GCP-gt-API-๋ฐ-์๋น์ค-gt-์ฌ์ฉ์-์ธ์ฆ-์ ๋ณด์์-OAuth-client-์์ฑ" class="headerlink" title="1. GCP > API ๋ฐ ์๋น์ค > ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด์์ OAuth client ์์ฑ"></a>1. GCP > API ๋ฐ ์๋น์ค > ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด์์ OAuth client ์์ฑ</h2><img src="./1.png" width="800"><p>์ด๋ฒ ํฌ์คํธ์์๋ ํด๋ผ์ด์ธํธ ์์ฑ ๋ฐฉ๋ฒ๋ณด๋ค๋ Access Token๋ฐ๊ธ์ ์ค์ ์ผ๋ก ๋ค๋ฃจ๊ณ ์๊ธฐ ๋๋ฌธ์ client ์ธํ
๋ฐฉ๋ฒ์ ๋ฐ๋ก ์๋ดํ์ง ์๊ฒ ๋ค.</p><p>์ฌ๊ธฐ์์ ์ฐ๋ฆฌ๊ฐ ํ์ธํด์ผ ํ ์ ๋ณด๋ ๋ค์๊ณผ ๊ฐ๋ค.</p><pre class="line-numbers language-bash"><code class="language-bash">GOOGLE_CLIENT_ID<span class="token operator">=</span><span class="token operator"><</span>ํด๋ผ์ด์ธํธ ID<span class="token operator">></span>GOOGLE_CLIENT_SECRET<span class="token operator">=</span><span class="token operator"><</span>ํด๋ผ์ด์ธํธ ๋ณด์ ๋น๋ฐ๋ฒํธ<span class="token operator">></span>GOOGLE_REDIRECT_URI<span class="token operator">=</span><span class="token operator"><</span>์น์ธ๋ ๋ฆฌ๋๋ ์
URI์ฃผ์<span class="token operator">></span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span></code></pre><p><br><br></p><h2 id="2-Google-Calender์-Access-Token์์ฒญ์-์ํ-URL-์
๋ ฅ"><a href="#2-Google-Calender์-Access-Token์์ฒญ์-์ํ-URL-์
๋ ฅ" class="headerlink" title="2. Google Calender์ Access Token์์ฒญ์ ์ํ URL ์
๋ ฅ"></a>2. Google Calender์ Access Token์์ฒญ์ ์ํ URL ์
๋ ฅ</h2><p>์๋ฌด ์ธํฐ๋ท ์ฐฝ์๋ค๊ฐ ๋ค์์ url์ ์
๋ ฅํ๋ค.</p><pre class="line-numbers language-bash"><code class="language-bash">https://accounts.google.com/o/oauth2/v2/auth?scope<span class="token operator">=</span>https://www.googleapis.com/auth/calendar<span class="token operator">&</span>access_type<span class="token operator">=</span>offline<span class="token operator">&</span>include_granted_scopes<span class="token operator">=</span>true<span class="token operator">&</span>response_type<span class="token operator">=</span>code<span class="token operator">&</span>redirect_uri<span class="token operator">=</span><span class="token operator"><</span>GOOGLE_REDIRECT_URI<span class="token operator">></span><span class="token operator">&</span>client_id<span class="token operator">=</span><span class="token operator"><</span>GOOGLE_CLIENT_ID<span class="token operator">></span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><img src="./2.png" width="800"><img src="./3.png" width="800"><p>๊ฐ์ด ์ ์
๋ ฅ๋๋ค๋ฉด google ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ์ด ๋์ค๋ฉฐ, ์ก์ธ์ค ํ์ฉ ์ฌ๋ถ๋ฅผ ๋ฌผ์ด๋ณด๋ ํ์ด์ง๋ฅผ ๋ณผ ์ ์๋ค.</p><p><br><br></p><h2 id="3-Redirect-uri๋ก-๋ฐ์์จ-๊ฐ-ํ์ธ"><a href="#3-Redirect-uri๋ก-๋ฐ์์จ-๊ฐ-ํ์ธ" class="headerlink" title="3. Redirect uri๋ก ๋ฐ์์จ ๊ฐ ํ์ธ"></a>3. Redirect uri๋ก ๋ฐ์์จ ๊ฐ ํ์ธ</h2><p>์ ์ด๋ฏธ์ง์์ โํ์ฉโ ๋ฒํผ์ ๋๋ฅด๋ฉด redirect uri๋ก ๋ฐ๋ก ์ด๋ํ๋ค.<br>์ด ๋ ์ฃผ์์ฐฝ์ ํ์ธํ๋ฉด response๋ฅผ ํ์ธํ ์ ์์ผ๋ฉฐ, <code>CODE</code>๋ถ๋ถ์ ์ ๋ฐฑ์
ํด๋์.<br>์ฝ๋์ ์ ํจ์๊ฐ์ 10๋ถ์ธ ๊ฒ ๋ํ ์ฐธ๊ณ ํ ๊ฒ</p><pre class="line-numbers language-bash"><code class="language-bash">GOOGLE_REDIRECT_URI/?code<span class="token operator">=</span><span class="token operator"><</span>CODE<span class="token operator">></span><span class="token operator">&</span>scope<span class="token operator">=</span>https://www.googleapis.com/auth/calendar<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h2 id="4-Access-Token-๋ฐ๊ธ๋ฐ๊ธฐ"><a href="#4-Access-Token-๋ฐ๊ธ๋ฐ๊ธฐ" class="headerlink" title="4. Access Token ๋ฐ๊ธ๋ฐ๊ธฐ"></a>4. Access Token ๋ฐ๊ธ๋ฐ๊ธฐ</h2><p>์ด์ Access Token์ ๋ฐ๊ธ๋ฐ์ ์ค๋น๊ฐ ๋์๋ค.<br>๋ค์์ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํด๋ณด์. curl์ด๋ ํฐ๋ฏธ๋์ ์
๋ ฅํ๋ฉด ๋๋ค.</p><pre class="line-numbers language-bash"><code class="language-bash">curl --request POST \ --url https://oauth2.googleapis.com/token \ --header <span class="token string">'Content-Type: application/x-www-form-urlencoded'</span> \ --data <span class="token string">"code=<CODE>"</span> \ --data <span class="token string">"client_id=<GOOGLE_CLIENT_ID>"</span> \ --data <span class="token string">"client_secret=<GOOGLE_CLIENT_SECRET>"</span> \ --data <span class="token string">"redirect_uri=<GOOGLE_REDIRECT_URI>"</span> \ --data <span class="token string">"grant_type=authorization_code"</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><br><p>์ ๋๋ก ๊ฐ์ด ์ ๋ฌ๋๋ฉด ๋ค์๊ณผ ๊ฐ์ response๋ฅผ ์ป์ ์ ์๋ค.</p><pre class="line-numbers language-bash"><code class="language-bash"><span class="token punctuation">{</span> <span class="token string">"access_token"</span><span class="token keyword">:</span> <span class="token operator"><</span>ACCESS_TOKEN<span class="token operator">></span>, <span class="token string">"expires_in"</span><span class="token keyword">:</span> 3599, <span class="token string">"refresh_token"</span><span class="token keyword">:</span> <span class="token operator"><</span>REFRESH_TOKEN<span class="token operator">></span>, <span class="token string">"scope"</span><span class="token keyword">:</span> <span class="token string">"https://www.googleapis.com/auth/calendar"</span>, <span class="token string">"token_type"</span><span class="token keyword">:</span> <span class="token string">"Bearer"</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><br><h3 id="4-1-Refresh-Token์-์ฌ์ฉํด์-Access-Token์-์ฌ๋ฐ๊ธ-๋ฐ๊ธฐ"><a href="#4-1-Refresh-Token์-์ฌ์ฉํด์-Access-Token์-์ฌ๋ฐ๊ธ-๋ฐ๊ธฐ" class="headerlink" title="4-1. Refresh Token์ ์ฌ์ฉํด์ Access Token์ ์ฌ๋ฐ๊ธ ๋ฐ๊ธฐ"></a>4-1. Refresh Token์ ์ฌ์ฉํด์ Access Token์ ์ฌ๋ฐ๊ธ ๋ฐ๊ธฐ</h3><p>๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด <code>expires_in</code>์ด ์๋๋ฐ, 3599์ด ์ฆ <code>1์๊ฐ</code>๋ง Access Token์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ์ดํ๋ก๋ ํ ํฐ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค.</p><p>๋์ฒ๋ผ ์บ๋ฆฐ๋ ์ผ์ ์ ๊ณ์ ์๋ํํด์ ์ก์์ผ ํ๋ ๊ฒฝ์ฐ์๋ <code>refresh_token</code>์ ์ด์ฉํด์ <code>access_token</code>์ ๊ฐฑ์ ํด์ผ ํ๋ค.<br>๋คํ์ด๋ Google OAuth2์์ ์ ๊ณตํ๋ <strong>refresh_token</strong>์ ๋ง๋ฃ๋์ง ์๋๋ค.</p><br><p>๋ง์ฝ <strong>refresh_token</strong> ์ ์ฌ์ฉํด์ <strong>access_token</strong>์ ์ฌ๋ฐ๊ธ ๋ฐ๊ณ ์ถ์ผ๋ฉด ๋ค์์ curl์ ๋ณด๋ด์ฃผ์.</p><pre class="line-numbers language-bash"><code class="language-bash">curl --request POST \ --url https://oauth2.googleapis.com/token \ --header <span class="token string">'Content-Type: application/x-www-form-urlencoded'</span> \ --data <span class="token string">"client_id=<GOOGLE_CLIENT_ID>"</span> \ --data <span class="token string">"client_secret=<GOOGLE_CLIENT_SECRET>"</span> \ --data <span class="token string">"refresh_token=<REFRESH_TOKEN>"</span> \ --data <span class="token string">"grant_type=refresh_token"</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><br><p>๊ฐฑ์ ์์ฒญ์ด ์ฑ๊ณตํ๋ฉด ์๋ก์ด <code>access_token</code>์ด ๋ฐํ๋๋ค.</p><pre class="line-numbers language-bash"><code class="language-bash"><span class="token punctuation">{</span> <span class="token string">"access_token"</span><span class="token keyword">:</span> <span class="token operator"><</span>ACCESS_TOKEN<span class="token operator">></span>, <span class="token string">"expires_in"</span><span class="token keyword">:</span> 3599, <span class="token string">"scope"</span><span class="token keyword">:</span> <span class="token string">"https://www.googleapis.com/auth/calendar"</span>, <span class="token string">"token_type"</span><span class="token keyword">:</span> <span class="token string">"Bearer"</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h2 id="5-JS์ฝ๋๋ก-Access-Token-Refresh-Token์ผ๋ก-์ฌ๋ฐ๊ธ๊น์ง-์-๋ฐ์๋ณด์"><a href="#5-JS์ฝ๋๋ก-Access-Token-Refresh-Token์ผ๋ก-์ฌ๋ฐ๊ธ๊น์ง-์-๋ฐ์๋ณด์" class="headerlink" title="5. JS์ฝ๋๋ก Access Token (+Refresh Token์ผ๋ก ์ฌ๋ฐ๊ธ๊น์ง)์ ๋ฐ์๋ณด์"></a>5. JS์ฝ๋๋ก Access Token (+Refresh Token์ผ๋ก ์ฌ๋ฐ๊ธ๊น์ง)์ ๋ฐ์๋ณด์</h2><p>์ด๋ฌํ ์์
๋ค์ ์ผ์ผ์ด ํ๊ธฐ์๋ ์ฌ๋ฌ๋ชจ๋ก ํผ๊ณคํ๋, ์ฝ๋๋ก ํ ๋ฒ ๊ตฌํ์ ํด๋ดค๋ค.</p><p>๋ง์ฝ ์ด ์ฝ๋๋ฅผ ๋๋ ธ๋๋ฐ 403 Forbidden์ด ๋์จ๋ค๋ฉด GCP์์ ํ์ฌ ์ฌ์ฉํ๋ ์๋น์ค์ API ์ฌ์ฉ์ ํ๊ฐํ๋์ง ํ์ธํด๋ณด์.<br>์๋น์ค ๋ฆฌ์คํธ๋ <a href="https://console.cloud.google.com/apis/api">https://console.cloud.google.com/apis/api</a> ์์ ํ์ธํ ์ ์๋ค.</p><pre class="line-numbers language-bash"><code class="language-bash"><span class="token comment" spellcheck="true"># .env.local</span>GOOGLE_CLIENT_ID<span class="token operator">=</span><span class="token operator"><</span>ํด๋ผ์ด์ธํธ ID<span class="token operator">></span>GOOGLE_CLIENT_SECRET<span class="token operator">=</span><span class="token operator"><</span>ํด๋ผ์ด์ธํธ ๋ณด์ ๋น๋ฐ๋ฒํธ<span class="token operator">></span>GOOGLE_REDIRECT_URI<span class="token operator">=</span><span class="token operator"><</span>์น์ธ๋ ๋ฆฌ๋๋ ์
URI์ฃผ์<span class="token operator">></span>GOOGLE_REFRESH_TOKEN<span class="token operator">==</span><span class="token operator"><</span>refresh token๊ฐ<span class="token operator">></span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span></span></code></pre><pre class="line-numbers language-js"><code class="language-js"><span class="token comment" spellcheck="true">// oauth.js</span><span class="token keyword">import</span> <span class="token punctuation">{</span> google <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'googleapis'</span><span class="token punctuation">;</span><span class="token keyword">async</span> <span class="token keyword">function</span> <span class="token function">getOAuth2Client</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">const</span> oAuth2Client <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">google<span class="token punctuation">.</span>auth<span class="token punctuation">.</span>OAuth2</span><span class="token punctuation">(</span> process<span class="token punctuation">.</span>env<span class="token punctuation">.</span>GOOGLE_CLIENT_ID<span class="token punctuation">,</span> process<span class="token punctuation">.</span>env<span class="token punctuation">.</span>GOOGLE_CLIENT_SECRET<span class="token punctuation">,</span> process<span class="token punctuation">.</span>env<span class="token punctuation">.</span>GOOGLE_REDIRECT_URI <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment" spellcheck="true">// Refresh token ์ค์ </span> oAuth2Client<span class="token punctuation">.</span><span class="token function">setCredentials</span><span class="token punctuation">(</span><span class="token punctuation">{</span> refresh_token<span class="token punctuation">:</span> process<span class="token punctuation">.</span>env<span class="token punctuation">.</span>GOOGLE_REFRESH_TOKEN<span class="token punctuation">,</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">try</span> <span class="token punctuation">{</span> <span class="token comment" spellcheck="true">// Access token ๊ฐฑ์ </span> <span class="token keyword">const</span> <span class="token punctuation">{</span> token <span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token keyword">await</span> oAuth2Client<span class="token punctuation">.</span><span class="token function">getAccessToken</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> oAuth2Client<span class="token punctuation">.</span><span class="token function">setCredentials</span><span class="token punctuation">(</span><span class="token punctuation">{</span> access_token<span class="token punctuation">:</span> token <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> oAuth2Client<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">e</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token string">'Failed to refresh access token:'</span><span class="token punctuation">,</span> e<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">Error</span><span class="token punctuation">(</span><span class="token string">'Failed to get access token.'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre>]]></content>
<categories>
<category> โ๏ธ Cloud </category>
</categories>
<tags>
<tag> OAuth2 </tag>
<tag> Cloud </tag>
<tag> GCP </tag>
</tags>
</entry>
<entry>
<title>[NCP] ์ฝ์์์ NKS(Ncloud Kubernetes Service) ๋ฐ NCR(Ncloud Container Registry) ์ธํ
์ผ๋ก ๋ฐฐํฌํ๊ธฐ</title>
<link href="/2024/11/25/Cloud/NCP/Console/NKS&NCR/"/>
<url>/2024/11/25/Cloud/NCP/Console/NKS&NCR/</url>
<content type="html"><![CDATA[<p>์ต๊ทผ ๋ฉํ ๋ง์์ ncloud๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ๋ฐฐํฌ๋ฅผ ํ๊ณ ์ถ๋ค๋ ์์ฒญ์ ๋ฐ์๋๋ฐ, ๋ ๋ํ ๋ค์ด๋ฒ ํด๋ผ์ฐ๋๋ ๊ฒฝํ์ด ์๋์ง๋ผ ใ
ใ
;; ๊ณต๋ถ์ผ์ ํ ๋ฒ ์ธํ
์ ํด๋ดค๋ค.</p><p>์ผ๋จ ํด๋ผ์ฐ๋์์ Kubernetes๋ก container๋ฅผ ๋ฐฐํฌ๋ฅผ ํ๊ธฐ ์ํด์๋ ๋ก์ง์ด ๋๋ต์ ์ผ๋ก ์ด๋ ๊ฒ ๋๋ค.<br><img src="./2.png" width="800"></p><ul><li>์ค๋ช
์ด ์ด๋ ต๋ค ํ ๋ถ๋ค์ ์ํด์, ์ ์ฒด์ ์ธ ๋ก์ง์ Services ์ชฝ์ ๋ณด๋ฉด ์ดํดํ๊ธฐ ์ฌ์ธ ๊ฒ์ด๋ค.<br><code>Container Registry</code>์ ์ปจํ
์ด๋ ์ด๋ฏธ์ง ์
๋ก๋ -> <code>Ncloud Kubernetes Service</code>์ Kubernetes์ ์ปจํ
์ด๋ ์ด๋ฏธ์ง ๋ฐฐ์น -> Kubernetes๊ฐ ์๋ฒ๋ฅผ ๋ฐฐํฌํ๋๋ก ์ค์ <br>์ด๋ ๊ฒ๋ง ํ๋ฉด ํด๋ผ์ฐ๋์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์ด๋ฏธ์ง๋ฅผ ๋์ธ ์ ์๋ค.</li><li>ํ์ง๋ง ํด๋ผ์ฐ๋๋ <code>๋ณด์</code>์ด ์๋ช
์ธ ์๋น์ค์ธ ๋งํผ, ๋ชจ๋ ๊ฒ๋ค์ด ๊ธฐ๋ณธ์ ์ผ๋ก private์ผ๋ก ์ค์ ๋๋ฉฐ ์ฐ๋ฆฌ๋ ์ด๋ฐ ๋ฆฌ์์ค์ ์ ๊ทผํ๊ธฐ ์ํด์๋ ์ฌ๋ฌ ์ธ์ฆ์ n๋ฒ ๊ฑฐ์ณ์ผํ๋ค. ๋๋ฌธ์ VPC๋ฅผ ์ค์ ์ ์์๊ฒ ํด์ผํ๋ค.<br>subnet ์ด๋ฆ์ ์ฌ๋๋ง๋ค ์ทจํฅ๊ป ๋ง์ถฐ ์ง์ผ๋ฉด ๋๋ฉฐ, ์ฌ๊ธฐ์๋ ํธ์์ ๋ด ๋ง์๋๋ก ์ด๋ฆ์ ๋ถ์ฌ๋ดค๋ค.<ul><li><code>k8s-server-k2</code><ul><li>ํด๋ฌ์คํฐ๋ก ๋ค์ด์ค๋ ๋ด๋ถ ํธ๋ํฝ๊ณผ ์ธ๋ถ ํธ๋ํฝ์ ๊ด๋ฆฌ</li><li>์ปจํ
์ด๋ ์ด๋ฏธ์ง๋ฅผ ๋ ์ง์คํธ๋ฆฌ์์ ๊ฐ์ ธ์ ํด๋ฌ์คํฐ์ ๋ฐฐํฌ</li><li>ํด๋ฌ์คํฐ๊ฐ ์ธํฐ๋ท(์ธ๋ถ ์๋น์ค)๊ณผ ์ฐ๊ฒฐ๋ ์ ์๋๋ก ํ๋ Nat ๊ด๋ฆฌ</li></ul></li><li><code>k8s-lb-private</code>: ํด๋ฌ์คํฐ ๋ด๋ถ์์๋ง ์ ๊ทผํ ์ ์๋ ์๋น์ค๋ค์ ํธ๋ํฝ์ ์ ๋ฌ<ul><li>ํนํ ๋ด๋ถ Pod๊ฐ ํต์ ์ฒ๋ฆฌ</li></ul></li><li><code>k8s-lb-public</code>: ์ธํฐ๋ท์ ํตํด ์ธ๋ถ ์ฌ์ฉ์๋ค์ด ์ ๊ทผํ ์ ์๋ ์๋น์ค๋ค์ ํธ๋ํฝ ์ ๋ฌ<ul><li>ํนํ ์ธ๋ถ์์ ํธ๋ํฝ์ ๋ฐ์ผ๋ฉด pod๋ก ๋ผ์ฐํ
ํจ</li></ul></li><li><code>Nat</code>: NAT Gateway์ ์ฝ์๋ก, ์ธ๋ถ์์ Kubernetes ํด๋ฌ์คํฐ ๋ด๋ถ๋ก์ ์ง์ ์ ์ธ ์ ๊ทผ์ ์ฐจ๋จํ๊ธฐ ์ํด ์์ฑ</li><li><code>k8s-k2</code>: Kubernetes ํด๋ฌ์คํฐ๋ฅผ ๊ด๋ฆฌํจ. ์ฝ๊ฒ Kubernetes ํด๋ฌ์คํฐ์ worker nodes ๊ด๋ฆฌํ๋ ๊ณณ์ผ๋ก ์๊ฐํ๋ฉด ๋จ</li></ul></li></ul><p>์ด๋ ๊ฒ ๊ฐ๋ตํ๊ฒ ์ค๋ช
์ ํด๋ดค์ผ๋ฉฐ, ์ดํด๊ฐ ๋๋ค๋ฉด ๋ฐ๋ก ์ธํ
์ผ๋ก ๋ค์ด๊ฐ๋ณด์.</p><h2 id="0-NCP-์ฝ์-๋ก๊ทธ์ธ"><a href="#0-NCP-์ฝ์-๋ก๊ทธ์ธ" class="headerlink" title="0. NCP ์ฝ์ ๋ก๊ทธ์ธ"></a>0. NCP ์ฝ์ ๋ก๊ทธ์ธ</h2><img src="./0.png" width="800"><p>ํ๋ฉด ๋งจ ์ ์ค๋ฅธ์ชฝ์ <a href="https://console.ncloud.com/dashboard">์ฝ์</a> ๋ฒํผ์ ๋๋ฅด๋ฉด ์ ์ํ ์ ์๋ค.</p><h2 id="1-VPC-์์ฑํ๊ธฐ"><a href="#1-VPC-์์ฑํ๊ธฐ" class="headerlink" title="1. VPC ์์ฑํ๊ธฐ"></a>1. VPC ์์ฑํ๊ธฐ</h2><ul><li>VPC > <a href="https://console.ncloud.com/vpc-network/vpc">VPC Management</a>์์ ์์ฑ<img src="./1.png" width="800"></li></ul><h2 id="2-Subnet-์์ฑํ๊ธฐ"><a href="#2-Subnet-์์ฑํ๊ธฐ" class="headerlink" title="2. Subnet ์์ฑํ๊ธฐ"></a>2. Subnet ์์ฑํ๊ธฐ</h2><ul><li>VPC > <a href="https://console.ncloud.com/vpc-network/subnet">Subnet Management</a>์์ ์์ฑ</li><li>1๋ฒ์์ ์์ฑํ VPC ์ด๋ฆ์ผ๋ก ์ค์ <img src="./3.png" width="800"></li></ul><h2 id="3-NAT-Gateway-์์ฑํ๊ธฐ"><a href="#3-NAT-Gateway-์์ฑํ๊ธฐ" class="headerlink" title="3. NAT Gateway ์์ฑํ๊ธฐ"></a>3. NAT Gateway ์์ฑํ๊ธฐ</h2><ul><li>VPC > <a href="https://console.ncloud.com/vpc-network/nat-gateway">NAT Gateway</a>์์ ์์ฑ</li><li>1, 2๋ฒ์์ ์์ฑํ VPC ๋ฐ nat subnet ์ค์ <img src="./4.png" width="800"></li></ul><h2 id="4-Routes-์ค์ ํ๊ธฐ"><a href="#4-Routes-์ค์ ํ๊ธฐ" class="headerlink" title="4. Routes ์ค์ ํ๊ธฐ"></a>4. Routes ์ค์ ํ๊ธฐ</h2><ul><li>VPC > Route Table > <a href="https://console.ncloud.com/vpc-network/routeTable">Route Table</a>์์ <code>private-table</code> ์ ํ</li><li><code>Route ์ค์ </code>์์ public access๋ฅผ ์ํด <code>0.0.0.0/0</code>, <code>NATGW</code>, <code>nat์ค์ ์ subnet ์ด๋ฆ</code> ์ถ๊ฐ<img src="./5.png" width="800"></li></ul><h2 id="5-Object-Storage-์์ฑํ๊ธฐ"><a href="#5-Object-Storage-์์ฑํ๊ธฐ" class="headerlink" title="5. Object Storage ์์ฑํ๊ธฐ"></a>5. Object Storage ์์ฑํ๊ธฐ</h2><ul><li>Object Storage > <a href="https://console.ncloud.com/objectStorage/objectStorageList">Bucket Management</a>์์ ๋ฒํท ์์ฑ<img src="./6.png" width="300"></li></ul><h2 id="6-Container-Registry-์์ฑํ๊ธฐ"><a href="#6-Container-Registry-์์ฑํ๊ธฐ" class="headerlink" title="6. Container Registry ์์ฑํ๊ธฐ"></a>6. Container Registry ์์ฑํ๊ธฐ</h2><ul><li><a href="https://console.ncloud.com/ncr/registries">Container Registry</a>์์ ์์ฑ</li><li>5๋ฒ์์ ์์ฑํ ๋ฒํท์ผ๋ก ์ค์ <img src="./7.png" width="800"></li></ul><h2 id="7-Ncloud-Kubernetes-Service-์์ฑํ๊ธฐ"><a href="#7-Ncloud-Kubernetes-Service-์์ฑํ๊ธฐ" class="headerlink" title="7. Ncloud Kubernetes Service ์์ฑํ๊ธฐ"></a>7. Ncloud Kubernetes Service ์์ฑํ๊ธฐ</h2><h3 id="1-VPC-Ncloud-Kubernetes-Service-Clusters์์-์์ฑ"><a href="#1-VPC-Ncloud-Kubernetes-Service-Clusters์์-์์ฑ" class="headerlink" title="1) VPC Ncloud Kubernetes Service Clusters์์ ์์ฑ"></a>1) <a href="https://console.ncloud.com/vnks/clusters">VPC Ncloud Kubernetes Service Clusters</a>์์ ์์ฑ</h3><ul><li><p>1๋ฒ์์ ์์ฑํ VPC๋ฅผ ์ ํํ๋ฉด ์๋์ผ๋ก LB Private subnet, LB Public subnet์ด ์ธํ
๋จ</p></li><li><p>์ด๋ฒ ์ค์ต์์๋ ํด๋ฌ์คํฐ ์ธ์ฆ ๋ชจ๋๋ฅผ API๋ก ์ค์ ํจ<br><img src="./9.png" width="800"></p></li><li><p>์ค์ ์๋ฃ ํ ๋ค์์ผ๋ก ๋์ด๊ฐ๋ฉด Nat ์ค์ ์ ๊ดํ ์๋ด์ฐฝ์ด ๋์ค๋๋ฐ, ๋ฌด์ํด๋ ๋จ(์ด ์ธํ
์ 3๋ฒ, 5๋ฒ์์ ํ๊ธฐ ๋๋ฌธ)</p><img src="./8.png" width="400"></li></ul><h3 id="2-๋
ธ๋ํ-์ค์ ํ๊ธฐ"><a href="#2-๋
ธ๋ํ-์ค์ ํ๊ธฐ" class="headerlink" title="2) ๋
ธ๋ํ ์ค์ ํ๊ธฐ"></a>2) ๋
ธ๋ํ ์ค์ ํ๊ธฐ</h3> <img src="./10.png" width="800"><h3 id="3-์ธ์ฆํค-์ค์ "><a href="#3-์ธ์ฆํค-์ค์ " class="headerlink" title="3) ์ธ์ฆํค ์ค์ "></a>3) ์ธ์ฆํค ์ค์ </h3> <img src="./11.png" width="800"><p><br><br></p><p>๋ชจ๋ ์ค์ ์ด ์๋ฃ๋๋ฉด ์๋ ์ด๋ฏธ์ง์ฒ๋ผ ์์ฑ๋จ.์ฝ 10-30๋ถ ๊ธฐ๋ค๋ ค์ผํจ<br><img src="./12.png" width="800"></p><h2 id="8-์ฌ์ฉ์-์ธ์ฆ-API-์ธ์ฆํค-์์ฑํ๊ธฐ"><a href="#8-์ฌ์ฉ์-์ธ์ฆ-API-์ธ์ฆํค-์์ฑํ๊ธฐ" class="headerlink" title="8. ์ฌ์ฉ์ ์ธ์ฆ: API ์ธ์ฆํค ์์ฑํ๊ธฐ"></a>8. ์ฌ์ฉ์ ์ธ์ฆ: API ์ธ์ฆํค ์์ฑํ๊ธฐ</h2><ul><li>๊ณ์ ๊ด๋ฆฌ > <a href="https://www.ncloud.com/mypage/manage/authkey">์ธ์ฆํค ๊ด๋ฆฌ</a>์์ <code>์ ๊ท API ์ธ์ฆํค ์์ฑ</code>์ ํด๋ฆญํ์ฌ API ์ธ์ฆํค ์์ฑํ๊ธฐ</li><li><code>Access Key ID</code> ๋ฐ <code>Secret Key</code> ๊ฐ์ ์ค๋นํด๋์. ์์ผ๋ก ์๋น์ค ์ด์ฉ์ ํ ๋ ์ธ ์์ <br><img src="./13.png"><img src="./14.png" width="800"></li></ul><h2 id="9-Container-Registry์-Docker-image-์
๋ก๋ํ๊ธฐ"><a href="#9-Container-Registry์-Docker-image-์
๋ก๋ํ๊ธฐ" class="headerlink" title="9. Container Registry์ Docker image ์
๋ก๋ํ๊ธฐ"></a>9. Container Registry์ Docker image ์
๋ก๋ํ๊ธฐ</h2><pre class="line-numbers language-bash"><code class="language-bash"><span class="token comment" spellcheck="true"># ncloud docker login ํ๊ธฐ</span><span class="token comment" spellcheck="true"># registry-url = container registry์ public endpoint</span>$ docker login <span class="token operator"><</span>registry-url<span class="token operator">></span><span class="token comment" spellcheck="true"># docker build & tag & push ํ๊ธฐ</span><span class="token comment" spellcheck="true"># docker build: ncloud์ Kubernetes ์ธํ
์ด amd64์ผ๋ก ๋์ด์์ด platform ์ต์
์ถ๊ฐ</span>$ docker build --platform linux/amd64 -t <span class="token operator"><</span>registry-url<span class="token operator">></span>/<span class="token operator"><</span>repository-name<span class="token operator">></span>:<span class="token operator"><</span>tag<span class="token operator">></span> <span class="token keyword">.</span>$ docker tag $ docker push <span class="token operator"><</span>registry-url<span class="token operator">></span>/<span class="token operator"><</span>repository-name<span class="token operator">></span>:<span class="token operator"><</span>tag<span class="token operator">></span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><img src="./15.png" width="800">Push๊ฐ ์๋๋ค๋ฉด ์ด๋ฏธ์ง์ฒ๋ผ Tagsํญ์ ๋ค์ด๊ฐ์ ๋ pushํ ์ด๋ฏธ์ง๋ฅผ ํ์ธํ ์ ์๋ค.<h2 id="10-Kubernetes-์ค์ ํด์-Docker-image-๋ฐฐํฌํ๊ธฐ"><a href="#10-Kubernetes-์ค์ ํด์-Docker-image-๋ฐฐํฌํ๊ธฐ" class="headerlink" title="10. Kubernetes ์ค์ ํด์ Docker image ๋ฐฐํฌํ๊ธฐ"></a>10. Kubernetes ์ค์ ํด์ Docker image ๋ฐฐํฌํ๊ธฐ</h2><h3 id="NKS-์ธ์ฆํค-์ค์ "><a href="#NKS-์ธ์ฆํค-์ค์ " class="headerlink" title="NKS ์ธ์ฆํค ์ค์ "></a>NKS ์ธ์ฆํค ์ค์ </h3><p><a href="https://guide.ncloud-docs.com/docs/k8s-iam-auth-ncp-iam-authenticator">์ฌ๊ธฐ</a>๋ฅผ ์ฐธ๊ณ ํ์ฌ ncp-iam-authenticator๋ฅผ ์ค์นํ ํ ์งํ</p><pre class="line-numbers language-bash"><code class="language-bash"><span class="token comment" spellcheck="true"># ncloud setup</span>$ <span class="token function">export</span> NCLOUD_ACCESS_KEY<span class="token operator">=</span><span class="token operator"><</span>8๋ฒ์์-์์ฑํ-Access-Key-ID<span class="token operator">></span>$ <span class="token function">export</span> NCLOUD_SECRET_KEY<span class="token operator">=</span><span class="token operator"><</span>8๋ฒ์์-์์ฑํ-Secret-Key<span class="token operator">></span>$ <span class="token function">export</span> NCLOUD_API_GW<span class="token operator">=</span>https://ncloud.apigw.ntruss.com<span class="token comment" spellcheck="true"># nks ์ธ์ฆํค ์์ฑ</span><span class="token comment" spellcheck="true"># region์ด ํ๊ตญ์ด๋ฉด region-code๋ KR</span><span class="token comment" spellcheck="true"># ํ์ผ์ด ์์ฑ๋์ง ์๊ฑฐ๋, ๋น ํ์ผ์ด ์์ฑ๋๋ค๋ฉด ๋ฌธ์ ๊ฐ ์๋ ๊ฒ</span>$ ncp-iam-authenticator create-kubeconfig --region <span class="token operator"><</span>region-code<span class="token operator">></span> --clusterUuid <span class="token operator"><</span>NKS์์ ์์ฑํ cluster์ uuid<span class="token operator">></span> --output kubeconfig.yaml$ <span class="token function">export</span> KUBECONFIG<span class="token operator">=</span><span class="token string">"<kubeconfig.yaml์ ํ์ผ ์ ๋๊ฒฝ๋ก>"</span><span class="token comment" spellcheck="true"># Kubernetes๊ฐ ์ ๋๋ก ์ค์ ๋๋์ง ํ์ธ</span>$ kubectl get ns <span class="token comment" spellcheck="true"># namespace ์กฐํ. ์๋๊ฐ์ด ๋์ค๋ฉด ์ฑ๊ณต</span>NAME STATUS AGEdefault Active 40hkube-node-lease Active 40hkube-public Active 40hkube-system Active 40h<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h3 id="Kubernetes๋ฅผ-์ํ-yamlํ์ผ-์์ฑ"><a href="#Kubernetes๋ฅผ-์ํ-yamlํ์ผ-์์ฑ" class="headerlink" title="Kubernetes๋ฅผ ์ํ yamlํ์ผ ์์ฑ"></a>Kubernetes๋ฅผ ์ํ yamlํ์ผ ์์ฑ</h3><pre class="line-numbers language-yaml"><code class="language-yaml"><span class="token comment" spellcheck="true"># deployment.yaml</span><span class="token key atrule">apiVersion</span><span class="token punctuation">:</span> apps/v1<span class="token key atrule">kind</span><span class="token punctuation">:</span> Deployment<span class="token key atrule">metadata</span><span class="token punctuation">:</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> my<span class="token punctuation">-</span>app<span class="token punctuation">-</span>deployment <span class="token key atrule">namespace</span><span class="token punctuation">:</span> default<span class="token key atrule">spec</span><span class="token punctuation">:</span> <span class="token key atrule">replicas</span><span class="token punctuation">:</span> <span class="token number">1</span> <span class="token key atrule">selector</span><span class="token punctuation">:</span> <span class="token key atrule">matchLabels</span><span class="token punctuation">:</span> <span class="token key atrule">app</span><span class="token punctuation">:</span> my<span class="token punctuation">-</span>app <span class="token key atrule">template</span><span class="token punctuation">:</span> <span class="token key atrule">metadata</span><span class="token punctuation">:</span> <span class="token key atrule">labels</span><span class="token punctuation">:</span> <span class="token key atrule">app</span><span class="token punctuation">:</span> my<span class="token punctuation">-</span>app <span class="token key atrule">spec</span><span class="token punctuation">:</span> <span class="token key atrule">containers</span><span class="token punctuation">:</span> <span class="token punctuation">-</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> my<span class="token punctuation">-</span>app <span class="token key atrule">image</span><span class="token punctuation">:</span> <registry<span class="token punctuation">-</span>url<span class="token punctuation">></span>/<repository<span class="token punctuation">-</span>name<span class="token punctuation">></span><span class="token punctuation">:</span><tag<span class="token punctuation">></span> <span class="token key atrule">imagePullPolicy</span><span class="token punctuation">:</span> Always <span class="token key atrule">ports</span><span class="token punctuation">:</span> <span class="token punctuation">-</span> <span class="token key atrule">containerPort</span><span class="token punctuation">:</span> <span class="token number">8000</span> <span class="token key atrule">imagePullSecrets</span><span class="token punctuation">:</span> <span class="token punctuation">-</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> regcred<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><pre class="line-numbers language-yaml"><code class="language-yaml"><span class="token comment" spellcheck="true"># service.yaml</span><span class="token key atrule">apiVersion</span><span class="token punctuation">:</span> v1<span class="token key atrule">kind</span><span class="token punctuation">:</span> Service<span class="token key atrule">metadata</span><span class="token punctuation">:</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> my<span class="token punctuation">-</span>app<span class="token punctuation">-</span>service <span class="token key atrule">annotations</span><span class="token punctuation">:</span> <span class="token key atrule">service.beta.Kubernetes.io/ncloud-load-balancer-layer-type</span><span class="token punctuation">:</span> <span class="token string">"nplb"</span> <span class="token key atrule">service.beta.Kubernetes.io/ncloud-load-balancer-size</span><span class="token punctuation">:</span> <span class="token string">"SMALL"</span><span class="token key atrule">spec</span><span class="token punctuation">:</span> <span class="token key atrule">selector</span><span class="token punctuation">:</span> <span class="token key atrule">app</span><span class="token punctuation">:</span> my<span class="token punctuation">-</span>app <span class="token key atrule">type</span><span class="token punctuation">:</span> LoadBalancer <span class="token key atrule">ports</span><span class="token punctuation">:</span> <span class="token punctuation">-</span> <span class="token key atrule">port</span><span class="token punctuation">:</span> <span class="token number">80</span> <span class="token key atrule">targetPort</span><span class="token punctuation">:</span> <span class="token number">8000</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h3 id="Kubernetes์-ํ
ํ๋ฆฟ-๋ฐฐํฌ-๋ฐ-์๋น์ค-ํ์ธ"><a href="#Kubernetes์-ํ
ํ๋ฆฟ-๋ฐฐํฌ-๋ฐ-์๋น์ค-ํ์ธ" class="headerlink" title="Kubernetes์ ํ
ํ๋ฆฟ ๋ฐฐํฌ ๋ฐ ์๋น์ค ํ์ธ"></a>Kubernetes์ ํ
ํ๋ฆฟ ๋ฐฐํฌ ๋ฐ ์๋น์ค ํ์ธ</h3><pre class="line-numbers language-bash"><code class="language-bash"><span class="token comment" spellcheck="true"># kubenetes secret object ์์ฑ</span>$ kubectl create secret docker-registry regcred \ --docker-server<span class="token operator">=</span><span class="token operator"><</span>registry-url<span class="token operator">></span> \ --docker-username<span class="token operator">=</span><span class="token operator"><</span>8๋ฒ์์-์์ฑํ-Access-Key-ID<span class="token operator">></span> \ --docker-password<span class="token operator">=</span><span class="token operator"><</span>8๋ฒ์์-์์ฑํ-Secret-Key<span class="token operator">></span> \ --docker-email<span class="token operator">=</span><span class="token operator"><</span>ncloud-email-์ฃผ์<span class="token operator">></span>$ kubectl get secrets <span class="token comment" spellcheck="true"># ์์ฑ์ด ์ ๋๋์ง ํ์ธํ๋ ๋ช
๋ น์ด</span><span class="token comment" spellcheck="true"># yaml ํ
ํ๋ฆฟ ์
๋ก๋</span>$ kubectl apply -f deployment.yaml$ kubectl apply -f service.yaml$ kubectl get pods <span class="token comment" spellcheck="true"># status running์ธ์ง ํ์ธํ๋ ๋ช
๋ น์ด</span><span class="token comment" spellcheck="true"># ํด๋ผ์ฐ๋์ ๋ฐฐํฌ๋ IP์ฃผ์ ํ์ธํ๊ธฐ</span><span class="token comment" spellcheck="true"># LoadBalancer์ External IP ์ฃผ์ = ๊ณง ํด๋ผ์ฐ๋์ ๋ฐฐํฌ๋ ์๋น์ค IP ์ฃผ์</span>$ kubectl get servicesNAME TYPE CLUSTER-IP EXTERNAL-IP PORT<span class="token punctuation">(</span>S<span class="token punctuation">)</span> AGEKubernetes ClusterIP 198.19.128.1 <span class="token operator"><</span>none<span class="token operator">></span> 443/TCP 40hmy-app-service LoadBalancer 198.19.255.184 default-my-app-service-cfe50-100590090-dcc6483894d3.kr.lb.naverncp.com 80:30167/TCP 39h<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h2 id="11-๋ฐฐํฌ-ํ์ด์ง-์ ๊ทผํด๋ณด๊ธฐ"><a href="#11-๋ฐฐํฌ-ํ์ด์ง-์ ๊ทผํด๋ณด๊ธฐ" class="headerlink" title="11. ๋ฐฐํฌ ํ์ด์ง ์ ๊ทผํด๋ณด๊ธฐ"></a>11. ๋ฐฐํฌ ํ์ด์ง ์ ๊ทผํด๋ณด๊ธฐ</h2><p>๊ธ ์
๋ก๋ ์์ ๊ธฐ์ค์ผ๋ก ์๋น์ค ์ค๋จํด์ ์ ์ ์๋ฉ๋๋ค. ์ฐธ๊ณ ํ์ธ์ฉ<br><img src="./16.png" width="800"></p><h2 id="12-๋ง์ฝ-Docker-์ด๋ฏธ์ง๋ฅผ-์
๋ฐ์ดํธ๋ฅผ-ํด์-์๋ฒ์-๋ฐ์ํ๊ณ -์ถ๋ค๋ฉด"><a href="#12-๋ง์ฝ-Docker-์ด๋ฏธ์ง๋ฅผ-์
๋ฐ์ดํธ๋ฅผ-ํด์-์๋ฒ์-๋ฐ์ํ๊ณ -์ถ๋ค๋ฉด" class="headerlink" title="12. ๋ง์ฝ Docker ์ด๋ฏธ์ง๋ฅผ ์
๋ฐ์ดํธ๋ฅผ ํด์ ์๋ฒ์ ๋ฐ์ํ๊ณ ์ถ๋ค๋ฉด?"></a>12. ๋ง์ฝ Docker ์ด๋ฏธ์ง๋ฅผ ์
๋ฐ์ดํธ๋ฅผ ํด์ ์๋ฒ์ ๋ฐ์ํ๊ณ ์ถ๋ค๋ฉด?</h2><p>Kubernetes์ deployment.yaml์ ์ด๋ฏธ <code>imagePullPolicy</code> ์ธํ
์ด <code>Always</code>๋ก ๋์ด์์ด์ ๊ฐ์ ํ๊ทธ๋ฅผ pushํ์ ๋๋ ์๋์ผ๋ก Kubernetes๊ฐ ์ด๋ฏธ์ง๋ฅผ ์ถ์ ํ์ฌ ์
๋ฐ์ดํธ๋ฅผ ํ ๊ฒ์ด๋ค.<br>๋ค๋ง ์ฌ๋๋ง๋ค ํ๊ทธ ๊ท์น์ด ๋ค๋ฅด๋ฉฐ, ์ด ๋๋ฌธ์ tag ๋ฒ์ ์ด ์
๋ฐ์ดํธ ๋ ์ด๋ฏธ์ง๋ฅผ ์
๋ก๋๋ฅผ ํ๋ค๋ฉด Kubernetes๊ฐ ์์์ฐจ๋ฆฌ์ง ๋ชปํ๋ ์ฐ๋ฆฌ๊ฐ ์๋ ค์ค์ผ ํ๋ค.</p><p>๋ค์์ kubernets์๊ฒ ์๋ก์ด container image๊ฐ ์๊ฒผ๋ค๋ ๊ฒ์ ์๋ ค์ฃผ๋ ์์
์ด๋ค.</p><ol><li><p><code>deployment.yaml</code> ์์ </p><pre class="line-numbers language-yaml"><code class="language-yaml"><span class="token comment" spellcheck="true"># deployment.yaml</span><span class="token key atrule">apiVersion</span><span class="token punctuation">:</span> apps/v1<span class="token key atrule">kind</span><span class="token punctuation">:</span> Deployment<span class="token key atrule">metadata</span><span class="token punctuation">:</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> my<span class="token punctuation">-</span>app<span class="token punctuation">-</span>deployment <span class="token key atrule">namespace</span><span class="token punctuation">:</span> default<span class="token key atrule">spec</span><span class="token punctuation">:</span> <span class="token punctuation">...</span> <span class="token key atrule">spec</span><span class="token punctuation">:</span> <span class="token key atrule">containers</span><span class="token punctuation">:</span> <span class="token punctuation">-</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> my<span class="token punctuation">-</span>app <span class="token key atrule">image</span><span class="token punctuation">:</span> <registry<span class="token punctuation">-</span>url<span class="token punctuation">></span>/<repository<span class="token punctuation">-</span>name<span class="token punctuation">></span><span class="token punctuation">:</span><tag<span class="token punctuation">></span> <span class="token comment" spellcheck="true"># tag์ ๋ง์ถฐ ์์ </span><span class="token punctuation">...</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li><li><p>deployment ์๋น์ค ์ฌ์์</p><pre class="line-numbers language-bash"><code class="language-bash">kubectl rollout restart deployment <span class="token operator"><</span>deployment.yaml์ metadata.name<span class="token operator">></span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li></ol>]]></content>
<categories>
<category> โ๏ธ Cloud </category>
</categories>
<tags>
<tag> Container </tag>
<tag> Network </tag>
<tag> Docker </tag>
<tag> Cloud </tag>
<tag> NCP </tag>
<tag> VPC </tag>
<tag> Kubernetes </tag>
</tags>
</entry>
<entry>
<title>[์คํ์์ค] 2024๋
11์ ์คํ์์ค ์์์ง (2): FindMy Flipper, shadPS4, Isaiah, Javascript ๋ ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ , Ruby ๊ณต์ ๋ฌธ์ ์
๋ฐ์ดํธ, ChartDB</title>
<link href="/2024/11/25/OpenSource/2411(2)/"/>
<url>/2024/11/25/OpenSource/2411(2)/</url>
<content type="html"><![CDATA[<p><img src="0.png"></p><p>(์ฐธ๊ณ /์ถ์ฒ)<br>2024๋
์ ๋ณดํต์ ์ฐ์
์งํฅ์: <a href="https://www.oss.kr/open_up_intro">OpenUP ํ๋ก๊ทธ๋จ</a>์ 2024๋
๊ธฐ์ฌํ ํ๋ก ํฐ์ด๋ก์, ์คํ์์คSW๋ฅผ ํจ๊ป ๊ฐ๋ฐ ๋ฐ ๊ณต์ ํ๊ธฐ ์ํด ์์ฑ๋์์ต๋๋ค.<br>ํด๋น ๋ด์ฉ์ ์ github ํํ์ด์ง์ Explore repositories ๋ฐ feed ๋ด์ฉ์ ํ ๋๋ก ๋ง๋ค์ด์ก์ผ๋ฉฐ, ๊ฒ์๊ธ์ ๋ฌธ์ ์ฌํญ์ด ์์ผ์ ๋ถ๋ค์ ๋๊ธ ๋๋ <a href="mailto:[email protected]">[email protected]</a>์ผ๋ก ์ฐ๋ฝ ๋ถํ๋๋ฆฝ๋๋ค.</p><p><br><br><br></p><h2 id="FindMy-Flipper-AirTag-๋ฐ-SmartTag-์๋ฎฌ๋ ์ดํฐ"><a href="#FindMy-Flipper-AirTag-๋ฐ-SmartTag-์๋ฎฌ๋ ์ดํฐ" class="headerlink" title="FindMy Flipper: AirTag ๋ฐ SmartTag ์๋ฎฌ๋ ์ดํฐ"></a>FindMy Flipper: AirTag ๋ฐ SmartTag ์๋ฎฌ๋ ์ดํฐ</h2><ul><li>Repository: <a href="https://github.com/MatthewKuKanich/FindMyFlipper">https://github.com/MatthewKuKanich/FindMyFlipper</a></li><li>FlipperZero์ ๋ธ๋ฃจํฌ์ค ๊ธฐ๋ฅ์ ํฅ์์์ผ Apple AirTage, Samsung SmartTag, Tile Tracker๋ฅผ ์ ๋ฎฌ๋ ์ดํธํ ์ ์๋ ์คํ ์์ค</li><li>๊ณ์ ์ฐจ๋จ์ ์ด๋ํ ์ ์๋ ๋ณด์์ด ์ทจ์ฝํ iCloud ์ธ์ฆ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ด๋ จํด์ ์ฐ๋ ค๊ฐ ์ ๊ธฐ๋จ</li><li>๋ณด์ ๋ฐ ํ๋ผ์ด๋ฒ์ ์ค์์๋ค ์ฌ์ด์์ ๊ด์ฌ์ ๋ฐ๊ณ ์์</li></ul><br><h2 id="shadPS4-Windows-Linux-MacOS์ฉ-PlayStation-4-์๋ฎฌ๋ ์ดํฐ"><a href="#shadPS4-Windows-Linux-MacOS์ฉ-PlayStation-4-์๋ฎฌ๋ ์ดํฐ" class="headerlink" title="shadPS4: Windows, Linux, MacOS์ฉ PlayStation 4 ์๋ฎฌ๋ ์ดํฐ"></a>shadPS4: Windows, Linux, MacOS์ฉ PlayStation 4 ์๋ฎฌ๋ ์ดํฐ</h2><img src="./1.png" width="300"><ul><li>Homepage: <a href="https://shadps4.net/">https://shadps4.net/</a></li><li>Repository: <a href="https://github.com/shadps4-emu/shadPS4">https://github.com/shadps4-emu/shadPS4</a></li><li>C++๋ก ์์ฑ๋ Windows, Linux, macOS์ฉ ์ด๊ธฐ ๋จ๊ณ์ PlayStation 4 ์๋ฎฌ๋ ์ดํฐ</li><li>ํ์ฌ ์ธ๋ํ
์ผ, ๋์ค๋งจํ ๊ฐ์ ๊ฒ์์ ์ง์ํ๊ณ ์์ผ๋ฉฐ, PS4 ๊ฒ์์ Steam Deck ๊ฐ์ ๊ธฐ๊ธฐ์์ ํ๋ ์ดํ ๊ฐ๋ฅ์ฑ์ ์ฃผ๋ชฉ์ ๋ฐ๊ณ ์์</li><li>์
ฐ์ด๋ ์ฌ์ปดํ์ผ ๋ฐ Direct3D์ ๊ฐ์ ๊ธฐ์ ์ ๋์ ์ด ํ์ํ ์ํฉ์</li></ul><br><h2 id="Isaiah-Docker-๋ฆฌ์์ค-๊ด๋ฆฌ๋ฅผ-์ํ-์์ฒด-ํธ์คํ
-์ฑ-์คํ์์ค"><a href="#Isaiah-Docker-๋ฆฌ์์ค-๊ด๋ฆฌ๋ฅผ-์ํ-์์ฒด-ํธ์คํ
-์ฑ-์คํ์์ค" class="headerlink" title="Isaiah: Docker ๋ฆฌ์์ค ๊ด๋ฆฌ๋ฅผ ์ํ ์์ฒด ํธ์คํ
์ฑ ์คํ์์ค"></a>Isaiah: Docker ๋ฆฌ์์ค ๊ด๋ฆฌ๋ฅผ ์ํ ์์ฒด ํธ์คํ
์ฑ ์คํ์์ค</h2><img src="./2.png" width="300"><ul><li>Repository: <a href="https://github.com/will-moss/isaiah">https://github.com/will-moss/isaiah</a></li><li>๋๋ ์
๋ฐ์ดํธ, ์ค์๊ฐ ๋ก๊ทธ, ์
ธ ์์ธ์ค ๋ฐ Docker Hub ํตํฉ ๊ธฐ๋ฅ ์ ๊ณต</li><li>๋ฐฐํฌ ์ต์
์๋ Docker, Docker Compose, ๋
๋ฆฝ ์คํํ ์ ํ๋ฆฌ์ผ์ด์
์ผ๋ก ์ฌ์ฉํ ์ ์์</li></ul><br><h2 id="Javascript-๋๋์ด-๋ ์ง๊ฐ-์์ ๋ฉ๋๋ค"><a href="#Javascript-๋๋์ด-๋ ์ง๊ฐ-์์ ๋ฉ๋๋ค" class="headerlink" title="Javascript: ๋๋์ด ๋ ์ง๊ฐ ์์ ๋ฉ๋๋ค!!"></a>Javascript: ๋๋์ด ๋ ์ง๊ฐ ์์ ๋ฉ๋๋ค!!</h2><img src="./3.png" width="300"><ul><li>DST ๋ณํ๋ฅผ ๊ณ ๋ คํ์ฌ ์ ํํ ๋ ์ง ํํ์ ๋ณด์ฅํ๋ฉฐ, ๋ค์ํ ๋ฌ๋ ฅ ์์คํ
์ ์ง์ํ ๊ณํ</li><li>์ด ๋ ์ฌ์ฉ๋๋ ์๋ก์ด API๋ <code>Temporal.ZonedDateTime</code></li><li>๊ธฐ์กด ์์คํ
๊ณผ์ ํธํ์ฑ์ ํด๊ฒฐํ๋ ๊ฒ์ ์ ์ผ ์ฐ์ ์ ํ๊ณ ์์</li></ul><br><h2 id="Ruby-๊ณต์-๋ฌธ์๊ฐ-์๋ก-์
๋ฐ์ดํธ-๋์์ง๋ง"><a href="#Ruby-๊ณต์-๋ฌธ์๊ฐ-์๋ก-์
๋ฐ์ดํธ-๋์์ง๋ง" class="headerlink" title="Ruby: ๊ณต์ ๋ฌธ์๊ฐ ์๋ก ์
๋ฐ์ดํธ ๋์์ง๋ง.."></a>Ruby: ๊ณต์ ๋ฌธ์๊ฐ ์๋ก ์
๋ฐ์ดํธ ๋์์ง๋ง..</h2><img src="./4.svg" width="300"><ul><li>์๋ก์ด ๋์์ธ์ผ๋ก ์
๋ฐ์ดํธ ๋์์ผ๋ ๋ฐ์์ด ์๊ฐ๋ฆฌ๊ณ ์์</li><li>์ ๋ฐ์ ์ผ๋ก ๋ชจ๋ฐ์ผ ๊ฐ๋
์ฑ์ด ๋จ์ด์ง๋ฉฐ ์ฌ๋ฐฑ์ด ๋๋ฌด ๋ง๊ณ , ๊ธ๊ผญ ๊ฐ๋
์ฑ์ด ๋จ์ด์ง๋ค๋ ํผ๋๋ฐฑ์ด ์๋์ ์</li><li>๋ํ ๋นจ๊ฐ์ ์ธ์ ๋
น์ ์์์ ๋ฐฐ์นํจ์ผ๋ก์จ ๋นํ์ ๋ฐ๊ณ ์์</li></ul><br><h2 id="ChartDB-๋ฌด๋ฃ-์คํ์์ค-๋ฐ์ดํฐ๋ฒ ์ด์ค-์ค๊ณ-ํธ์ง๊ธฐ"><a href="#ChartDB-๋ฌด๋ฃ-์คํ์์ค-๋ฐ์ดํฐ๋ฒ ์ด์ค-์ค๊ณ-ํธ์ง๊ธฐ" class="headerlink" title="ChartDB: ๋ฌด๋ฃ ์คํ์์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ ํธ์ง๊ธฐ"></a>ChartDB: ๋ฌด๋ฃ ์คํ์์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ ํธ์ง๊ธฐ</h2><img src="./5.png" width="500"><ul><li>Homepage: <a href="https://chartdb.io/">https://chartdb.io/</a></li><li>Repository: <a href="https://github.com/chartdb/chartdb">https://github.com/chartdb/chartdb</a></li><li>๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ค์ด์ด๊ทธ๋จ์ ๋ง๋๋๋ฐ ์ ์ฉํ ๋ฌด๋ฃ ์คํ์์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ ํธ์ง๊ธฐ</li><li>PostgreSQL, MySQL, SQL Server, SQLite, MariaDB ๋ฑ์ DBMS๋ฅผ ์ง์</li><li>๋ํ ์ฆ๊ฐ์ ์ธ ์คํค๋ง ๊ฐ์ ธ์ค๊ธฐ ๋ฐ AI ์์ฑ DDL(๋ฐ์ดํฐ ์ ์ ์ธ์ด) ๊ธฐ๋ฅ ์ ๊ณต</li><li>์๋ ๋ค์ด์ด๊ทธ๋จ ์์ฑ ๋ฐ ํ์
๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๊ฒ์ ๋ชฉํํ๊ณ ์์</li></ul>]]></content>
<categories>
<category> ๐ OpenSource </category>
</categories>
<tags>
<tag> Opensource </tag>
</tags>
</entry>
<entry>
<title>[TIPS] Mermaid ๋ช
๋ น์ด๋ก Diagram ๊ทธ๋ฆฌ๊ธฐ</title>
<link href="/2024/11/23/Tips/Tool/"/>
<url>/2024/11/23/Tips/Tool/</url>
<content type="html"><![CDATA[<p>ํ๋ก์ ํธ๋ฅผ ํ๋ค๋ณด๋ฉด flow chart๋ diagram์ ๊ทธ๋ ค์ผ ํ๋๋ฐ, ์ด๊ฒ ์ฌ๊ฐ ๊ท์ฐฎ์ ์ผ์ด ์๋ ์ ์๋ค.<br>๋น ๋ฅด๊ณ ๊ฐ๋จํ๊ฒ ๊ทธ๋ฆฌ๊ณ ์ถ์ ๋ถ๋ค์ Mermaid ๋ช
๋ น์ด๋ก ๊ทธ๋ ค๋ณด๋๊ฑธ ์ถ์ฒํ๋ค.</p><h2 id="Mermaid"><a href="#Mermaid" class="headerlink" title="Mermaid"></a><a href="https://mermaid.js.org/">Mermaid</a></h2><img src="./3.png" width="150"><p>Markdown(๋งํฌ๋ค์ด) ๋ช
๋ น์ด๋ก diagram์ ๊ทธ๋ฆด ์ ์๋ ํด์ด๋ค.<br>์๋์ ์ธ ์ ์ ์จ์ ์๋ํ๋ ์ฐ๋ฆฌ์ Github์์๋ ์ด ๋ฌธ๋ฒ์ ์ง์ํ๊ธฐ ๋๋ฌธ์, README.mdํ์ผ ๊ฐ์ ๊ณณ์์ ์์ฑํด๋๋ฉด ๋ด์ฉ์ ์๊ฐํํ์ฌ ๋ณผ ์ ์๋ ์ฅ์ ์ด ์๋ค.</p><h2 id="Mermaid-ChatGPT๋ก-๊ฐ๋จํ๊ฒ-๋ง๋ค๊ธฐ"><a href="#Mermaid-ChatGPT๋ก-๊ฐ๋จํ๊ฒ-๋ง๋ค๊ธฐ" class="headerlink" title="Mermaid + ChatGPT๋ก ๊ฐ๋จํ๊ฒ ๋ง๋ค๊ธฐ"></a>Mermaid + ChatGPT๋ก ๊ฐ๋จํ๊ฒ ๋ง๋ค๊ธฐ</h2><p>์ฌ์ฉ๋ฒ์ ๊ณต๋ถํด์ ์ ์ฉํ๋ฉด ๋์ง๋ง ์๋ฌด๋๋ ์ด๋ค ๊ด๊ณ์ธ์ง ์ ๋ฆฌ๋ฅผ ํด์ผํ๋ ๋จธ๋ฆฌ๊ฐ ์ฌ๊ฐ ๋ณต์กํ ์ ๋ฐ์ ์๋คโฆ<br>๋ฐ๋ผ์ 21์ธ๊ธฐ ์ต๊ณ ์ ๋๊ตฌ์ธ AI๋ฅผ ์ด์ฉํด๋ณด๋๋ก ํ์.</p><ol><li><p><a href="https://chatgpt.com/">ChatGPT</a>์ ์ด๋ค ๊ทธ๋ฆผ์ ๊ทธ๋ฆด์ง ์ค๋ช
ํ๋ค. ์ด ๋ mermaid ๋ฌธ๋ฒ์ผ๋ก ์จ๋ฌ๋ผ๊ณ ์์ฒญํ๋ฉด ์์๊ฒ ๋ฝ์์ค๋ค. ctrl+c๋ฅผ ํด์ค๋ค.</p><img src="./1.png" width="600"></li><li><p><a href="https://mermaid.live/edit">Mermaid Live Editor</a>์ ์ ์ํด์ ctrl+v๋ฅผ ํด์ค๋ค.</p><img src="./2.png" width="600"></li></ol>]]></content>
<categories>
<category> ๐พ Etc </category>
</categories>
<tags>
<tag> Diagram </tag>
</tags>
</entry>
<entry>
<title>Docker ์ ๋ฆฌ</title>
<link href="/2024/11/11/DevOps/Docker/"/>
<url>/2024/11/11/DevOps/Docker/</url>
<content type="html"><![CDATA[<p>์ด ๊ธ์ ์ฝ๋ ์ฌ๋์ ๋จผ์ <a href="https://ruby-kim.github.io/2024/07/12/DevOps/Container/">Container ๊ฐ๋
</a>๋ถํฐ ์ ๋ฆฌํ๊ณ ์ฝ๋ ๊ฒ์ ์ถ์ฒํ๋ค.</p><p>Docker๋ ์ปจํ
์ด๋ ๊ธฐ๋ฐ์ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ, ๋ฐฐํฌ, ์คํ์ ์๋ํํ๋ ์คํ์์ค๋ก ๋๋ถ๋ถ์ ๊ธฐ์
๋ค์์ ์ปจํ
์ด๋ ๊ด๋ จ ๊ธฐ์ ๋ก ์ฑํํ๋ ๊ธฐ์ ์ด๋ค.</p><h2 id="1-Docker-๊ฐ๋
"><a href="#1-Docker-๊ฐ๋
" class="headerlink" title="1. Docker ๊ฐ๋
"></a>1. Docker ๊ฐ๋
</h2><h3 id="Docker-Image"><a href="#Docker-Image" class="headerlink" title="Docker Image"></a>Docker Image</h3><ul><li>์ปจํ
์ด๋๋ฅผ ์คํํ๊ธฐ ์ํ ์ฝ๊ธฐ ์ ์ฉ ํ
ํ๋ฆฟ</li><li>์ ํ๋ฆฌ์ผ์ด์
๊ณผ ์คํ ํ๊ฒฝ (๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์์กด์ฑ) ํฌํจ</li><li>์ด๋ฏธ์ง ๋น๋๋ฅผ ์ํด์๋ <code>Dockerfile</code> ์คํฌ๋ฆฝํธ ํ์ผ์ด ํ์: ๋จ๊ณ๋ณ๋ก ์ ํ๋ฆฌ์ผ์ด์
์ค์น ๋ฐ ํ๊ฒฝ ์ค์ ์ ์</li></ul><h3 id="Docker-Container"><a href="#Docker-Container" class="headerlink" title="Docker Container"></a>Docker Container</h3><ul><li>์ด๋ฏธ์ง์์ ์์ฑ๋ ์คํ ๊ฐ๋ฅํ ์ธ์คํด์ค</li><li>์ ํ๋ฆฌ์ผ์ด์
๊ณผ ํ๊ฒฝ์ด ์คํ๋๋ ๋
๋ฆฝ์ ์ธ ๋จ์</li></ul><h3 id="Docker-Registry"><a href="#Docker-Registry" class="headerlink" title="Docker Registry"></a>Docker Registry</h3><ul><li>์ด๋ฏธ์ง ์ ์ฅ์ (ex. Docker Hub, AWS ECR, GCP Container Registry ๋ฑ ํฌํจ)</li></ul><h2 id="2-Docker-๋ช
๋ น์ด-์ ๋ฆฌ"><a href="#2-Docker-๋ช
๋ น์ด-์ ๋ฆฌ" class="headerlink" title="2. Docker ๋ช
๋ น์ด ์ ๋ฆฌ"></a>2. Docker ๋ช
๋ น์ด ์ ๋ฆฌ</h2><h3 id="1-Docker-์ค์น-ํ์ธ"><a href="#1-Docker-์ค์น-ํ์ธ" class="headerlink" title="1) Docker ์ค์น ํ์ธ"></a>1) Docker ์ค์น ํ์ธ</h3><ul><li><p>version ํ์ธ: <code>docker --version</code></p><pre class="line-numbers language-bash"><code class="language-bash">$ docker --versionDocker version 20.10.23, build 7155243<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><br></li><li><p>info ํ์ธ: <code>docker info</code></p><pre class="line-numbers language-bash"><code class="language-bash">$ docker infoClient: Context: default Debug Mode: <span class="token boolean">false</span> Plugins: buildx: Docker Buildx <span class="token punctuation">(</span>Docker Inc., v0.10.3<span class="token punctuation">)</span> compose: Docker Compose <span class="token punctuation">(</span>Docker Inc., v2.15.1<span class="token punctuation">)</span> dev: Docker Dev Environments <span class="token punctuation">(</span>Docker Inc., v0.1.0<span class="token punctuation">)</span> extension: Manages Docker extensions <span class="token punctuation">(</span>Docker Inc., v0.2.18<span class="token punctuation">)</span> sbom: View the packaged-based Software Bill Of Materials <span class="token punctuation">(</span>SBOM<span class="token punctuation">)</span> <span class="token keyword">for</span> an image <span class="token punctuation">(</span>Anchore Inc., 0.6.0<span class="token punctuation">)</span> scan: Docker Scan <span class="token punctuation">(</span>Docker Inc., v0.25.0<span class="token punctuation">)</span> scout: Command line tool <span class="token keyword">for</span> Docker Scout <span class="token punctuation">(</span>Docker Inc., v0.6.0<span class="token punctuation">)</span>Server: Containers: 4 Running: 0 Paused: 0 Stopped: 4 Images: 14 Server Version: 20.10.23 Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type: <span class="token boolean">true</span> Native Overlay Diff: <span class="token boolean">true</span> userxattr: <span class="token boolean">false</span> Logging Driver: json-file Cgroup Driver: cgroupfs Cgroup Version: 2 Plugins: Volume: local Network: bridge host ipvlan macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog Swarm: inactive Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc Default Runtime: runc Init Binary: docker-init containerd version: 2456e983eb9e37e47538f59ea18f2043c9a73640 runc version: v1.1.4-0-g5fd4c4d init version: de40ad0 Security Options: seccomp Profile: default cgroupns Kernel Version: 5.15.49-linuxkit Operating System: Docker Desktop OSType: linux Architecture: aarch64 CPUs: 4 Total Memory: 7.668GiB Name: docker-desktop ID: 276G:OJLG:WHVN:JV37:CX4G:VAC2:K2AY:TJPC:M2RA:D5NR:DWTP:HU2G Docker Root Dir: /var/lib/docker Debug Mode: <span class="token boolean">false</span> HTTP Proxy: http.docker.internal:3128 HTTPS Proxy: http.docker.internal:3128 No Proxy: hubproxy.docker.internal Registry: https://index.docker.io/v1/ Labels: Experimental: <span class="token boolean">false</span> Insecure Registries: hubproxy.docker.internal:5000 127.0.0.0/8 Live Restore Enabled: <span class="token boolean">false</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li></ul><h3 id="2-Docker-์ด๋ฏธ์ง-๊ด๋ฆฌ"><a href="#2-Docker-์ด๋ฏธ์ง-๊ด๋ฆฌ" class="headerlink" title="2) Docker ์ด๋ฏธ์ง ๊ด๋ฆฌ"></a>2) Docker ์ด๋ฏธ์ง ๊ด๋ฆฌ</h3><ul><li><p>Docker Hub์์ ์ด๋ฏธ์ง ๊ฒ์: <code>docker search <์ด๋ฏธ์ง๋ช
></code></p><pre class="line-numbers language-bash"><code class="language-bash">$ docker search <span class="token function">test</span>NAME DESCRIPTION STARS OFFICIAL AUTOMATEDimmcantation/test Immcantation unit <span class="token function">test</span> image 1 pachyderm/test 0 islandora/test This image is exclusively used <span class="token keyword">for</span> manually โฆ 0 okteto/test 0 amir20/test 0 kubeovn/test 0 voxpupuli/test Container repo to <span class="token function">test</span> container build and Vโฆ 0 corpusops/test 0 ratelimitpreview/test 0 test/testimage20130921141042 0 test/testimage20130919235830 0 test/testimage20130921221004 0 test/testimage20130919223925 0 test/testimage20130921190956 0 test/testimage20130922032014 0 doct15/test 0 flypenguin/test A <span class="token function">test</span> container <span class="token keyword">for</span> <span class="token punctuation">..</span>. k8s :<span class="token punctuation">)</span> 0 <span class="token punctuation">[</span>OK<span class="token punctuation">]</span>brimworks/test 0 flvranckx/test <span class="token function">test</span> 0 chiphwang/test 0 divyag2411/test 0 realmaccess/test 0 devopsatburst/test 0 hopar/test <span class="token function">test</span> descr 0 femycatherine/test <span class="token function">test</span> 0<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><br></li><li><p>ํน์ ์ด๋ฏธ์ง๋ฅผ ๋ก์ปฌ๋ก ๋ค์ด๋ก๋: <code>docker pull <์ด๋ฏธ์ง๋ช
>:<ํ๊ทธ></code></p></li></ul><pre class="line-numbers language-bash"><code class="language-bash">$ docker pull nginx:latest latest: Pulling from library/nginxDigest: sha256:bc5eac5eafc581aeda3008b4b1f07ebba230de2f27d47767129a6a905c84f470Status: Image is up to <span class="token function">date</span> <span class="token keyword">for</span> nginx:latestdocker.io/library/nginx:latest<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span></span></code></pre><br><ul><li>๋ก์ปฌ์ ์ ์ฅ๋ ์ด๋ฏธ์ง ๋์ด: <code>docker images</code></li></ul><pre class="line-numbers language-bash"><code class="language-bash">$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEdjango-app latest cbb6dff7c55a 2 days ago 2.12GBpostgres 15-alpine c558f49f952d 3 days ago 256MBpython 3.12-slim e359a8be29f6 5 weeks ago 150MBredis alpine 4a6fa001a1b0 7 weeks ago 48.3MBnginx latest 7a3f95c07812 7 weeks ago 197MB<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><br><ul><li>๋ก์ปฌ์ ์ ์ฅ๋ ์ด๋ฏธ์ง ์ญ์ : `docker rmi <์ด๋ฏธ์งID></li></ul><pre class="line-numbers language-bash"><code class="language-bash">$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEpython latest 62639b6c3f3e 5 weeks ago 1.02GB$ docker rmi 626 <span class="token comment" spellcheck="true"># ์ ๋ถ ๋ค ์์จ๋ ํน์ ์ด๋ฏธ์ง์ธ์ง ์ธ์งํ ์ ์์ผ๋ฉด ๋จ</span>Untagged: python:latestUntagged: python@sha256:bc78d3c007f86dbb87d711b8b082d9d564b8025487e780d24ccb8581d83ef8b0Deleted: sha256:62639b6c3f3e77ebbbf3f18802d08351636f8dd6e0a94d1b225e9f5dc1c88044Deleted: sha256:476e07a0f38bafed4e474712d0e3d37dbcb7ff90d06e17bb8d1fc4b2f14e7d35Deleted: sha256:2c190c9407be9104a7d2b741a4d91364bf2be04b81784dddaf13c9f188562e4dDeleted: sha256:e00fefe3633c24a34f09149c5f3dbc2330630a365ffedff052f988c3585a1ee2Deleted: sha256:c6d7f5d3800ca99cabcb02e8b21872f3a09cebe3973f5c98ebb3840435e0fd0fDeleted: sha256:d4a8223e1c6c5461929b8b25b9bdb78d194803d9ca62f94f43df43d8e4b17e47Deleted: sha256:a354dc33fe33b2600cf4fb75dd3ad14d4e0eecb77da53b75d7aefa7487e3bd17Deleted: sha256:ec8ae7dad7aba50e0f8bff1dc969d34d3584fb7ada6ce9948dad83e95939b5cc<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h3 id="3-Docker-์ปจํ
์ด๋-๊ด๋ฆฌ"><a href="#3-Docker-์ปจํ
์ด๋-๊ด๋ฆฌ" class="headerlink" title="3) Docker ์ปจํ
์ด๋ ๊ด๋ฆฌ"></a>3) Docker ์ปจํ
์ด๋ ๊ด๋ฆฌ</h3><ul><li>์ปจํ
์ด๋ ์คํ: <code>docker run <์ปจํ
์ด๋๋ช
> -p <ํธ์คํธํฌํธ>:<์ปจํ
์ด๋ํฌํธ> <์ด๋ฏธ์ง๋ช
> <option: ์ปจํ
์ด๋ ๋ด๋ถ ๋ช
๋ น์ด></code><ul><li><code>-d</code>: ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ</li><li><code>--name <์ปจํ
์ด๋๋ช
></code>: ์ปจํ
์ด๋ ์ด๋ฆ ์ค์ </li><li><code>-p <ํธ์คํธํฌํธ>:<์ปจํ
์ด๋ํฌํธ></code>: ํฌํธ ๋งคํ</li><li><code>-e <๋ณ์=๊ฐ></code>: ํ๊ฒฝ๋ณ์</li></ul></li></ul><pre class="line-numbers language-bash"><code class="language-bash">$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEpython latest 62639b6c3f3e 5 weeks ago 1.02GBpython 3.12-slim e359a8be29f6 5 weeks ago 150MB<span class="token comment" spellcheck="true"># my-python์ด๋ผ๋ ์ปจํ
์ด๋๋ช
์ผ๋ก</span><span class="token comment" spellcheck="true"># ์ปจํ
์ด๋ ํฌํธ๊ฐ 56์ธ๊ฑธ ํธ์คํธํฌํธ 1234๋ก ์ฐ๊ฒฐ</span><span class="token comment" spellcheck="true"># ์ด๋ฏธ์ง๋ช
์ python์ด๋ฉฐ, ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ</span>$ docker run -d --name my-python -p 1234:56 pythonb7711eb537add805b8628277d4c677dd3d91e009d3b64bbac81e60fa84f53928<span class="token comment" spellcheck="true"># ํ๊ฒฝ๋ณ์๊ฐ Foo๋ฅผ ์ค์ ํ๊ณ ๊ฐ์ bar๋ก ์ค์ </span><span class="token comment" spellcheck="true"># ์ปจํ
์ด๋ ์คํ ์ด๋ฏธ์ง๋ python:3.12-slim</span><span class="token comment" spellcheck="true"># ์ปจํ
์ด๋ ๋ด๋ถ ์คํ ๋ช
๋ น์ด๋ env (์ปจํ
์ด๋ ๋ด๋ถ์ ๋ชจ๋ ํ๊ฒฝ๋ณ์ ์ถ๋ ฅํ๋ unix ๋ช
๋ น์ด)</span>$ docker run -e FOO<span class="token operator">=</span>bar python:3.12-slim <span class="token function">env</span> PATH<span class="token operator">=</span>/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binHOSTNAME<span class="token operator">=</span>b20562c470beFOO<span class="token operator">=</span>barLANG<span class="token operator">=</span>C.UTF-8GPG_KEY<span class="token operator">=</span>7169605F62C751356D054A26A821E680E5FA6305PYTHON_VERSION<span class="token operator">=</span>3.12.7PYTHON_SHA256<span class="token operator">=</span>24887b92e2afd4a2ac602419ad4b596372f67ac9b077190f459aba390faf5550HOME<span class="token operator">=</span>/root<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><br><ul><li>์คํ ์ค์ธ ์ปจํ
์ด๋ ํ์ธ: <code>docker ps</code></li></ul><pre class="line-numbers language-bash"><code class="language-bash">$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEdjango-app latest cbb6dff7c55a 2 days ago 2.12GB$ docker run -d django-app:latest275bdef89cc40711dad78833d7b5aeb27f75b4e423bea1279564a99dece45178$ docker <span class="token function">ps</span>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES275bdef89cc4 django-app:latest <span class="token string">"/bin/bash -c 'sourcโฆ"</span> 3 seconds ago Up 2 seconds 8000/tcp relaxed_euclid<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><br><ul><li>๋ชจ๋ ์ปจํ
์ด๋ ํ์ธ (์ค๋จ๋ ์ปจํ
์ด๋ ํฌํจ): <code>docker ps -a</code></li></ul><pre class="line-numbers language-bash"><code class="language-bash">$ docker <span class="token function">ps</span> -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES275bdef89cc4 django-app:latest <span class="token string">"/bin/bash -c 'sourcโฆ"</span> About a minute ago Up About a minute 8000/tcp relaxed_euclidf6d665ae418b python:3.12-slim <span class="token string">"python3"</span> 2 minutes ago Exited <span class="token punctuation">(</span>0<span class="token punctuation">)</span> 2 minutes ago intelligent_easley7c72d2379677 python:3.12-slim <span class="token string">"-d"</span> 2 minutes ago <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span></span></code></pre><ul><li>์ปจํ
์ด๋ ๋ด๋ถ ์ ์: `docker exec -it <์ปจํ
์ด๋ID> /bin/bash</li></ul><pre class="line-numbers language-bash"><code class="language-bash">$ docker <span class="token function">ps</span>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES275bdef89cc4 django-app:latest <span class="token string">"/bin/bash -c 'sourcโฆ"</span> 7 minutes ago Up 7 minutes 8000/tcp relaxed_euclid$ docker <span class="token function">exec</span> -it 275bdef89cc4 /bin/bash$ root@275bdef89cc4:/app<span class="token comment" spellcheck="true"># </span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><br><ul><li>์คํ ์ค์ธ ์ปจํ
์ด๋ ์ค์ง: <code>docker stop <์ปจํ
์ด๋ID></code></li></ul><pre class="line-numbers language-bash"><code class="language-bash">$ docker <span class="token function">ps</span>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES275bdef89cc4 django-app:latest <span class="token string">"/bin/bash -c 'sourcโฆ"</span> 8 minutes ago Up 8 minutes 8000/tcp relaxed_euclid$ docker stop 275bdef89cc4 275bdef89cc4$ docker <span class="token function">ps</span>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES$ <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><br><ul><li>์ค๋จ๋ ์ปจํ
์ด๋ ์์: <code>docker start <์ปจํ
์ด๋ID></code></li></ul><pre class="line-numbers language-bash"><code class="language-bash">$ docker <span class="token function">ps</span> <span class="token comment" spellcheck="true"># ์คํ ์ค์ธ ์ปจํ
์ด๋ ์์</span>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES$ docker <span class="token function">ps</span> -a <span class="token comment" spellcheck="true"># ์ค๋จ๋ ์ปจํ
์ด๋๋ฅผ ํ์ธํด๋ด</span>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES275bdef89cc4 django-app:latest <span class="token string">"/bin/bash -c 'sourcโฆ"</span> 10 minutes ago Exited <span class="token punctuation">(</span>0<span class="token punctuation">)</span> 2 minutes ago relaxed_euclid$ docker start 275bdef89cc4 <span class="token comment" spellcheck="true"># ์ต๊ทผ์ ์ค๋จ๋๊ฑฐ ์ฌ์์</span>275bdef89cc4$ <span class="token variable">$docker</span> <span class="token function">ps</span> CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES275bdef89cc4 django-app:latest <span class="token string">"/bin/bash -c 'sourcโฆ"</span> 11 minutes ago Up 3 seconds 8000/tcp relaxed_euclid<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><br><ul><li>์ค๋จ๋ ์ปจํ
์ด๋ ์ญ์ : <code>docker rm <์ปจํ
์ด๋ID></code></li></ul><pre class="line-numbers language-bash"><code class="language-bash">$ docker <span class="token function">ps</span> -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES275bdef89cc4 django-app:latest <span class="token string">"/bin/bash -c 'sourcโฆ"</span> 15 minutes ago Exited <span class="token punctuation">(</span>0<span class="token punctuation">)</span> 4 minutes ago relaxed_euclidf6d665ae418b python:3.12-slim <span class="token string">"python3"</span> 17 minutes ago Exited <span class="token punctuation">(</span>0<span class="token punctuation">)</span> 17 minutes ago intelligent_easley7c72d2379677 python:3.12-slim <span class="token string">"-d"</span> 17 minutes ago Created adoring_jang$ docker <span class="token function">rm</span> 27 <span class="token comment" spellcheck="true"># ID๋ฅผ ์ ๋ถ ๋ค ์ฐ์ง ์์๋, ํด๋น ์ด๋ฏธ์ง๋ฅผ ์ฐพ์ ์ ์์ ๋งํผ๋ง ์์ฑํด๋ ์์์ ์ฐพ์์ ์ข
๋ฃํจ. ์ฌ๋ฌ๊ฐ ์ฐ์์ผ๋ก ์ฐ๋ฉด ๋ชจ๋ ํ๊ฒ ์ก์์ ์ข
๋ฃ</span>27$ docker <span class="token function">ps</span> -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESf6d665ae418b python:3.12-slim <span class="token string">"python3"</span> 17 minutes ago Exited <span class="token punctuation">(</span>0<span class="token punctuation">)</span> 17 minutes ago intelligent_easley7c72d2379677 python:3.12-slim <span class="token string">"-d"</span> 17 minutes ago Created adoring_jang<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h3 id="4-Docker-์ปจํ
์ด๋-๋ก๊ทธ-ํ์ธ"><a href="#4-Docker-์ปจํ
์ด๋-๋ก๊ทธ-ํ์ธ" class="headerlink" title="4) Docker ์ปจํ
์ด๋ ๋ก๊ทธ ํ์ธ"></a>4) Docker ์ปจํ
์ด๋ ๋ก๊ทธ ํ์ธ</h3><ul><li>์ปจํ
์ด๋ ์คํ ๋ก๊ทธ ์ถ๋ ฅ: <code>docker logs <์ปจํ
์ด๋ID></code></li></ul><pre class="line-numbers language-bash"><code class="language-bash">$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEdjango-app latest cbb6dff7c55a 2 days ago 2.12GB$ docker run -d django-appbdb4eb9c03161d8427278f3cfa5e96505d52d0aa76064ad0145ee88506cdbd5b$ docker <span class="token function">ps</span>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESbdb4eb9c0316 django-app <span class="token string">"/bin/bash -c 'sourcโฆ"</span> 5 seconds ago Up 4 seconds 8000/tcp awesome_mccarthy$ docker logs bdb4Applying database migrations<span class="token punctuation">..</span>.Collecting static files<span class="token punctuation">..</span>.168 static files copied to <span class="token string">'/app/src/static'</span><span class="token keyword">.</span>Starting Gunicorn<span class="token punctuation">..</span>.<span class="token punctuation">[</span>2024-11-11 17:32:11 +0000<span class="token punctuation">]</span> <span class="token punctuation">[</span>1<span class="token punctuation">]</span> <span class="token punctuation">[</span>INFO<span class="token punctuation">]</span> Starting gunicorn 23.0.0<span class="token punctuation">[</span>2024-11-11 17:32:11 +0000<span class="token punctuation">]</span> <span class="token punctuation">[</span>1<span class="token punctuation">]</span> <span class="token punctuation">[</span>INFO<span class="token punctuation">]</span> Listening at: http://0.0.0.0:8000 <span class="token punctuation">(</span>1<span class="token punctuation">)</span><span class="token punctuation">[</span>2024-11-11 17:32:11 +0000<span class="token punctuation">]</span> <span class="token punctuation">[</span>1<span class="token punctuation">]</span> <span class="token punctuation">[</span>INFO<span class="token punctuation">]</span> Using worker: <span class="token function">sync</span><span class="token punctuation">[</span>2024-11-11 17:32:11 +0000<span class="token punctuation">]</span> <span class="token punctuation">[</span>609<span class="token punctuation">]</span> <span class="token punctuation">[</span>INFO<span class="token punctuation">]</span> Booting worker with pid: 609<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h3 id="5-Docker-๋คํธ์ํฌ-๊ด๋ฆฌ"><a href="#5-Docker-๋คํธ์ํฌ-๊ด๋ฆฌ" class="headerlink" title="5) Docker ๋คํธ์ํฌ ๊ด๋ฆฌ"></a>5) Docker ๋คํธ์ํฌ ๊ด๋ฆฌ</h3><ul><li>๋คํธ์ํฌ ์์ฑ: <code>docker network create <๋คํธ์ํฌ๋ช
></code></li></ul><pre class="line-numbers language-bash"><code class="language-bash">$ docker network create mynw beb1bf647de5e6a2ea2debcd45a095b2c94b217a0c645e05ff33fd122ffdfe8a<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><br><ul><li>์ปจํ
์ด๋๋ฅผ ํน์ ๋คํธ์ํฌ์ ์ฐ๊ฒฐ: <code>docker run --name <์ปจํ
์ด๋๋ช
> --network <๋คํธ์ํฌ๋ช
> <์ด๋ฏธ์ง๋ช
></code></li></ul><pre class="line-numbers language-bash"><code class="language-bash">$ docker run -d django-appb4aa6fefecb97198ea2f7824f43e7eeb62ec3f065722b84a2d34ff9e1f834708$ docker run --name b4aa --network mynwApplying database migrations<span class="token punctuation">..</span>.Collecting static files<span class="token punctuation">..</span>.168 static files copied to <span class="token string">'/app/src/static'</span><span class="token keyword">.</span>Starting Gunicorn<span class="token punctuation">..</span>.<span class="token punctuation">[</span>2024-11-11 17:32:11 +0000<span class="token punctuation">]</span> <span class="token punctuation">[</span>1<span class="token punctuation">]</span> <span class="token punctuation">[</span>INFO<span class="token punctuation">]</span> Starting gunicorn 23.0.0<span class="token punctuation">[</span>2024-11-11 17:32:11 +0000<span class="token punctuation">]</span> <span class="token punctuation">[</span>1<span class="token punctuation">]</span> <span class="token punctuation">[</span>INFO<span class="token punctuation">]</span> Listening at: http://0.0.0.0:8000 <span class="token punctuation">(</span>1<span class="token punctuation">)</span><span class="token punctuation">[</span>2024-11-11 17:32:11 +0000<span class="token punctuation">]</span> <span class="token punctuation">[</span>1<span class="token punctuation">]</span> <span class="token punctuation">[</span>INFO<span class="token punctuation">]</span> Using worker: <span class="token function">sync</span><span class="token punctuation">[</span>2024-11-11 17:32:11 +0000<span class="token punctuation">]</span> <span class="token punctuation">[</span>609<span class="token punctuation">]</span> <span class="token punctuation">[</span>INFO<span class="token punctuation">]</span> Booting worker with pid: 609<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><br><ul><li>Docker ๋คํธ์ํฌ ๋ฆฌ์คํธ ํ์ธ: <code>docker network ls</code></li></ul><pre class="line-numbers language-bash"><code class="language-bash">$ docker network <span class="token function">ls</span>NETWORK ID NAME DRIVER SCOPE63d6218decce bridge bridge local8207a8266c78 host host localbeb1bf647de5 mynw bridge local5db98f6636e1 none null local<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><br><ul><li>์ฌ์ฉ์ ์ ์ ๋คํธ์ํฌ ์ญ์ : <code>docker network rm <๋คํธ์ํฌ๋ช
></code></li></ul><pre class="line-numbers language-bash"><code class="language-bash">$ docker network <span class="token function">ls</span>NETWORK ID NAME DRIVER SCOPE63d6218decce bridge bridge local8207a8266c78 host host localbeb1bf647de5 mynw bridge local5db98f6636e1 none null local$ docker network <span class="token function">rm</span> mynwmynw$ docker network <span class="token function">ls</span>NETWORK ID NAME DRIVER SCOPE63d6218decce bridge bridge local8207a8266c78 host host local5db98f6636e1 none null local$ docker network <span class="token function">rm</span> bridge <span class="token comment" spellcheck="true"># ์ฌ์ ์ ์๋ ๊ฒ์ ๋ํด์๋ ์ค๋ฅ ๋ฐ์</span>Error response from daemon: bridge is a pre-defined network and cannot be removed<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h3 id="6-Docker-Volume-๊ด๋ฆฌ"><a href="#6-Docker-Volume-๊ด๋ฆฌ" class="headerlink" title="6) Docker Volume ๊ด๋ฆฌ"></a>6) Docker Volume ๊ด๋ฆฌ</h3><ul><li>๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ณผ๋ฅจ ์์ฑ: <code>docker volume create <๋ณผ๋ฅจ๋ช
></code></li></ul><pre class="line-numbers language-bash"><code class="language-bash">$ docker volume create myvomyvo<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><br><ul><li>๋ณผ๋ฅจ์ ์ปจํ
์ด๋์ ๋ง์ดํธ: <code>docker run -d --name <์ปจํ
์ด๋๋ช
> -v <๋ณผ๋ฅจ๋ช
>:<์ปจํ
์ด๋๊ฒฝ๋ก> <์ด๋ฏธ์ง๋ช
></code></li></ul><pre class="line-numbers language-bash"><code class="language-bash">$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx latest 7a3f95c07812 7 weeks ago 197MB$ docker run -d --name my-nginx -v myvo:/app/data nginx007310e795a8096434dac9a75b83e238c0a698e36f660fe0e4552cf4b2d34df5<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><br><ul><li>์์ฑ๋ ๋ณผ๋ฅจ ๋ฆฌ์คํธ ํ์ธ: <code>docker volume ls</code></li></ul><pre class="line-numbers language-bash"><code class="language-bash">$ docker volume <span class="token function">ls</span>docker volume <span class="token function">ls</span>DRIVER VOLUME NAMElocal back_media_volumelocal back_postgres_datalocal back_static_volumelocal myvo<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><br><ul><li>ํน์ ๋ณผ๋ฅจ ์ญ์ : <code>docker volume rm <๋ณผ๋ฅจ๋ช
></code></li></ul><pre class="line-numbers language-bash"><code class="language-bash">$ docker volume <span class="token function">ls</span>DRIVER VOLUME NAMElocal back_media_volumelocal back_postgres_datalocal back_static_volumelocal myvo$ docker volume <span class="token function">rm</span> back_postgres_databack_postgres_data<span class="token comment" spellcheck="true"># ์ด๋ฏธ ๋ณผ๋ฅจ์ด ์ปจํ
์ด๋์ ๋ง์ดํธ ๋์ด์์ผ๋ฉด ์ญ์ ๋ถ๊ฐ๋ฅ</span>$ docker <span class="token function">ps</span> -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES007310e795a8 nginx <span class="token string">"/docker-entrypoint.โฆ"</span> 4 minutes ago Up 4 minutes 80/tcp my-nginx <span class="token comment" spellcheck="true"># ์ฌ๊ธฐ์ myvo๊ฐ ๋ง์ดํธ ๋์ด์์</span>$ docker volume <span class="token function">rm</span> myvoError response from daemon: remove myvo: volume is <span class="token keyword">in</span> use - <span class="token punctuation">[</span>007310e795a8096434dac9a75b83e238c0a698e36f660fe0e4552cf4b2d34df5<span class="token punctuation">]</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h3 id="7-Dockerfile๋ก-์ด๋ฏธ์ง-๋น๋"><a href="#7-Dockerfile๋ก-์ด๋ฏธ์ง-๋น๋" class="headerlink" title="7) Dockerfile๋ก ์ด๋ฏธ์ง ๋น๋"></a>7) Dockerfile๋ก ์ด๋ฏธ์ง ๋น๋</h3><ul><li><code>docker build -t <์ด๋ฏธ์ง๋ช
>:<ํ๊ทธ> <Dockerfile ๊ฒฝ๋ก></code></li></ul><pre class="line-numbers language-bash"><code class="language-bash">$ docker build -t my-app:1.0 <span class="token keyword">.</span><span class="token punctuation">[</span>+<span class="token punctuation">]</span> Building 0.0s <span class="token punctuation">(</span>2/2<span class="token punctuation">)</span> FINISHED <span class="token operator">=</span><span class="token operator">></span> <span class="token punctuation">[</span>internal<span class="token punctuation">]</span> load build definition from Dockerfile 0.0s <span class="token operator">=</span><span class="token operator">></span> <span class="token operator">=</span><span class="token operator">></span> transferring dockerfile: 2B 0.0s <span class="token operator">=</span><span class="token operator">></span> <span class="token punctuation">[</span>internal<span class="token punctuation">]</span> load <span class="token keyword">.</span> dockerignore 0.0s <span class="token operator">=</span><span class="token operator">></span> <span class="token operator">=</span><span class="token operator">></span> transferring context: 2B 0.0s <span class="token operator">=</span><span class="token operator">></span> exporting to image 0.0s <span class="token operator">=</span><span class="token operator">></span> <span class="token operator">=</span><span class="token operator">></span> exporting layers 0.0s <span class="token operator">=</span><span class="token operator">></span> <span class="token operator">=</span><span class="token operator">></span> writing image sha56:84b400a8fb9307f2ddc1dc29eef33c2bb664e2bdac75449d1f14e4cabaeb429 0.0s <span class="token operator">=</span><span class="token operator">></span> <span class="token operator">=</span><span class="token operator">></span> naming to docker.io/library/my-app 0.0s <span class="token comment" spellcheck="true"># ํ๋ซํผ์ด ๋ค๋ฅผ ๊ฒฝ์ฐ์๋ --platform ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ ๊ฒ</span> $ docker build --platform linux/amd64,linux/arm64 -t my-app:1.0 <span class="token keyword">.</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h3 id="8-Docker-๋ ์ง์คํธ๋ฆฌ"><a href="#8-Docker-๋ ์ง์คํธ๋ฆฌ" class="headerlink" title="8) Docker ๋ ์ง์คํธ๋ฆฌ"></a>8) Docker ๋ ์ง์คํธ๋ฆฌ</h3><ul><li>์ด๋ฏธ์ง ํ๊ทธ ์ง์ : <code>docker tag <์ด๋ฏธ์ง๋ช
>:<ํ๊ทธ> <๋ ์ง์คํธ๋ฆฌURL>/<์ด๋ฏธ์ง๋ช
>:<ํ๊ทธ></code></li></ul><pre class="line-numbers language-bash"><code class="language-bash">docker tag my-app:1.0 my-registry-url/my-app:1.0<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><br><ul><li>์ด๋ฏธ์ง ํธ์: <code>docker push <๋ ์ง์คํธ๋ฆฌURL>/<์ด๋ฏธ์ง๋ช
>:<ํ๊ทธ></code></li></ul><pre class="line-numbers language-bash"><code class="language-bash">docker push my-registry-url/my-app:1.0<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><br><ul><li>์ด๋ฏธ์ง ํ: <code>docker pull <๋ ์ง์คํธ๋ฆฌURL>/<์ด๋ฏธ์ง๋ช
>:<ํ๊ทธ></code></li></ul><pre class="line-numbers language-bash"><code class="language-bash">docker pull my-registry-ur/my-app:1.0<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h3 id="9-Docker-Compose"><a href="#9-Docker-Compose" class="headerlink" title="9) Docker Compose"></a>9) Docker Compose</h3><ul><li><strong>docker-compose.yaml</strong> ํ์ผ ๊ธฐ๋ฐ์ผ๋ก ์ปจํ
์ด๋ ์คํ: <code>docker-compose up</code></li></ul><pre class="line-numbers language-bash"><code class="language-bash">docker-compose up<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><br><ul><li>์คํ ์ค์ธ docker-compose ์๋น์ค๋ฅผ ์ข
๋ฃํ๊ณ ๋คํธ์ค, ๋ณผ๋ฅจ ์ ๊ฑฐ: <code>docker-compose down</code></li></ul><pre class="line-numbers language-bash"><code class="language-bash">docker-compose down<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h3 id="10-๊ธฐํ-์ ์ฉํ-๋ช
๋ น์ด"><a href="#10-๊ธฐํ-์ ์ฉํ-๋ช
๋ น์ด" class="headerlink" title="10) ๊ธฐํ ์ ์ฉํ ๋ช
๋ น์ด"></a>10) ๊ธฐํ ์ ์ฉํ ๋ช
๋ น์ด</h3><pre class="line-numbers language-bash"><code class="language-bash"><span class="token comment" spellcheck="true"># ์ปจํ
์ด๋ ์์ธ์ ๋ณด ์ถ๋ ฅ</span>docker inspect <span class="token operator"><</span>์ปจํ
์ด๋ID<span class="token operator">></span><span class="token comment" spellcheck="true"># ๋ก์ปฌ ์ด๋ฏธ์ง ํฌ๊ธฐ ํ์ธ</span>docker image <span class="token function">ls</span> --format <span class="token string">"{{.Repository}}: {{.Size}}"</span><span class="token comment" spellcheck="true"># docker๊ฐ ์ฌ์ฉํ๋ ๋์คํฌ ์ฉ๋ ํ์ธ</span>docker system <span class="token function">df</span><span class="token comment" spellcheck="true"># ์บ์ ์ ๋ฆฌ</span>docker system prune<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre>]]></content>
<categories>
<category> โผ DevOps </category>
</categories>
<tags>
<tag> DevOps </tag>
<tag> Container </tag>
<tag> Docker </tag>
</tags>
</entry>
<entry>
<title>[์คํ์์ค] 2024๋
11์ ์คํ์์ค ์์์ง (1): Npm, OTranscribe, Verso, Blitz, PGlite, AudioFlux</title>
<link href="/2024/11/09/OpenSource/2411(1)/"/>
<url>/2024/11/09/OpenSource/2411(1)/</url>
<content type="html"><![CDATA[<p><img src="0.png"></p><p>(์ฐธ๊ณ /์ถ์ฒ)<br>2024๋
์ ๋ณดํต์ ์ฐ์
์งํฅ์: <a href="https://www.oss.kr/open_up_intro">OpenUP ํ๋ก๊ทธ๋จ</a>์ 2024๋
๊ธฐ์ฌํ ํ๋ก ํฐ์ด๋ก์, ์คํ์์คSW๋ฅผ ํจ๊ป ๊ฐ๋ฐ ๋ฐ ๊ณต์ ํ๊ธฐ ์ํด ์์ฑ๋์์ต๋๋ค.<br>ํด๋น ๋ด์ฉ์ ์ github ํํ์ด์ง์ Explore repositories ๋ฐ feed ๋ด์ฉ์ ํ ๋๋ก ๋ง๋ค์ด์ก์ผ๋ฉฐ, ๊ฒ์๊ธ์ ๋ฌธ์ ์ฌํญ์ด ์์ผ์ ๋ถ๋ค์ ๋๊ธ ๋๋ <a href="mailto:[email protected]">[email protected]</a>์ผ๋ก ์ฐ๋ฝ ๋ถํ๋๋ฆฝ๋๋ค.</p><p><br><br><br></p><h2 id="Npm-2024๋
-2-8์์-์๋ก-๊ฒ์๋-npm-ํจํค์ง์-์ฝ-70-๊ฐ-์คํธ์"><a href="#Npm-2024๋
-2-8์์-์๋ก-๊ฒ์๋-npm-ํจํค์ง์-์ฝ-70-๊ฐ-์คํธ์" class="headerlink" title="Npm: 2024๋
2-8์์ ์๋ก ๊ฒ์๋ npm ํจํค์ง์ ์ฝ 70%๊ฐ ์คํธ์"></a>Npm: 2024๋
2-8์์ ์๋ก ๊ฒ์๋ npm ํจํค์ง์ ์ฝ 70%๊ฐ ์คํธ์</h2><ul><li>2024๋
4์, Phylum ์ฐ๊ตฌํ์ด ์คํ ์์ค ๊ธฐ์ฌ์ ๋ํด ์ํธํํ๋ก ๋ณด์ํ๋ Tea ํ๋กํ ์ฝ๊ณผ ๊ด๋ จ๋ Npm์์ ์คํธ ํจํค์ง์ ๊ธ์ฆ์ ํ์ธํจ</li><li>Npm ๊ฒ์ฌ๋ฅผ ๊ฐํํ๊ณ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ ํ๋ฉฐ, ์คํธ ํจํค์ง ์ ๊ฑฐ ๋ฐ ๊ณ์ ์ฐจ๋จ์ด ํ์ํจ</li></ul><br><h2 id="OTranscribe-์ค๋์ค-์ธํฐ๋ทฐ-ํ์ฌ-๋ฌด๋ฃ-์คํ-์์ค-ํด"><a href="#OTranscribe-์ค๋์ค-์ธํฐ๋ทฐ-ํ์ฌ-๋ฌด๋ฃ-์คํ-์์ค-ํด" class="headerlink" title="OTranscribe: ์ค๋์ค ์ธํฐ๋ทฐ ํ์ฌ ๋ฌด๋ฃ ์คํ ์์ค ํด"></a>OTranscribe: ์ค๋์ค ์ธํฐ๋ทฐ ํ์ฌ ๋ฌด๋ฃ ์คํ ์์ค ํด</h2><img src="./1.png" width="300"><ul><li>Homepage: <a href="https://otranscribe.com/">https://otranscribe.com/</a></li><li>Repository: <a href="https://github.com/otranscribe">https://github.com/otranscribe</a></li><li>AI๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ค๋์ค ์ธํฐ๋ทฐ๋ฅผ ์๋์ผ๋ก ์ ์ฌํ๊ธฐ ์ํด ์ค๊ณ๋ ๋ฌด๋ฃ ์คํ ์์ค ๋๊ตฌ</li><li>์๋ ์ ์ฅ, ๋ํํ ํ์์คํฌํ, ํ์ผ์ ์ปดํจํฐ์ ์ ์ฅํ๋ฉฐ ์ ์ฌ๋ณธ์ Markdown, ์ผ๋ฐ ํ
์คํธ, Google Docs๋ก ๋ด๋ณด๋ผ ์ ์๋ ๊ธฐ๋ฅ์ด ์์</li><li>์๋ ์ ์ฌ ๋ฐ ํ์ ์๋ณ, ๋ ๋น ๋ฅธ STT ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ก์ปฌ ์๋ฃจ์
์ ์ฐพ๋ ์ค</li></ul><br><h2 id="Verso-Servo-์น-์์ง์-๊ธฐ๋ฐ์ผ๋ก-๊ตฌ์ถ๋-์น-๋ธ๋ผ์ฐ์ "><a href="#Verso-Servo-์น-์์ง์-๊ธฐ๋ฐ์ผ๋ก-๊ตฌ์ถ๋-์น-๋ธ๋ผ์ฐ์ " class="headerlink" title="Verso: Servo ์น ์์ง์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋ ์น ๋ธ๋ผ์ฐ์ "></a>Verso: Servo ์น ์์ง์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋ ์น ๋ธ๋ผ์ฐ์ </h2><img src="./2.gif" width="500"><ul><li>Repository: <a href="https://github.com/versotile-org/verso">https://github.com/versotile-org/verso</a></li><li>Windows, macOS, Linux (Flatpak), ๋ฐ Nix์์ ์ค์น๊ฐ ๊ฐ๋ฅํจ</li><li>๋ค์ค ์ฐฝ ์ง์, ๋ค์ค ํ๋ก์ธ์ค ๋ชจ๋, ๋ชจ๋ ํ๋ซํผ์์์ ์๋๋ฐ์ฑ, ๊ทธ๋ฆฌ๊ณ Gstreamer ๊ธฐ๋ฅ ํ์ฑํ ๊ฐ๋ฐ์ ๊ณํ ์ค</li></ul><br><h2 id="Blitz-๊ฐ๋ฒผ์ด-๋ชจ๋์-ํ์ฅ-๊ฐ๋ฅํ-์น-๋ ๋๋ฌ"><a href="#Blitz-๊ฐ๋ฒผ์ด-๋ชจ๋์-ํ์ฅ-๊ฐ๋ฅํ-์น-๋ ๋๋ฌ" class="headerlink" title="Blitz: ๊ฐ๋ฒผ์ด ๋ชจ๋์ ํ์ฅ ๊ฐ๋ฅํ ์น ๋ ๋๋ฌ"></a>Blitz: ๊ฐ๋ฒผ์ด ๋ชจ๋์ ํ์ฅ ๊ฐ๋ฅํ ์น ๋ ๋๋ฌ</h2><img src="./3.png" width="500"><ul><li>Repository: <a href="https://github.com/DioxusLabs/blitz">https://github.com/DioxusLabs/blitz</a></li><li>์ด๊ธฐ ๋จ๊ณ์ ์์ด ํ๋ก๋์
ํ๊ฒฝ์์๋ ๊ถ์ฅ๋์ง ์์</li><li>Webkit ๋ฐ Servo๊ฐ์ ๋ํ ๋ธ๋ผ์ฐ์ ์์ง์ ๋ํ ๊ฐ๋จํ ๋์์ ์ ๊ณตํ๋ ๊ฒ์ ๋ชฉํํจ</li><li>HTML/CSS๋ฅผ ๋ ์ด์์์ ์ฌ์ฉํ๋ ๋ค์ดํฐ๋ธ ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ๊ฐ์ด ์ ์ฒด ๋ธ๋ผ์ฐ์ ์์ง์ด ํ์ํ์ง ์์ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ํด ์ค๊ณ๋จ: ํฅํ PDF ๋ ๋๋ง ๋ฐ ๋ ๋์ CSS ์ง์์ด ํ์ํจ</li></ul><br><h2 id="PGlite-์ถ๊ฐ-์ข
์์ฑ-์์ด-๋ธ๋ผ์ฐ์ -Node-js-Bun์์-Postgres-๋น๋ํ -์-์๋-๋ผ์ด๋ธ๋ฌ๋ฆฌ"><a href="#PGlite-์ถ๊ฐ-์ข
์์ฑ-์์ด-๋ธ๋ผ์ฐ์ -Node-js-Bun์์-Postgres-๋น๋ํ -์-์๋-๋ผ์ด๋ธ๋ฌ๋ฆฌ" class="headerlink" title="PGlite: ์ถ๊ฐ ์ข
์์ฑ ์์ด ๋ธ๋ผ์ฐ์ , Node.js, Bun์์ Postgres ๋น๋ํ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ"></a>PGlite: ์ถ๊ฐ ์ข
์์ฑ ์์ด ๋ธ๋ผ์ฐ์ , Node.js, Bun์์ Postgres ๋น๋ํ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ</h2><img src="./4.svg" width="300"><ul><li>Homepage: <a href="https://pglite.dev/">https://pglite.dev/</a></li><li>Repository: <a href="https://github.com/electric-sql/pglite">https://github.com/electric-sql/pglite</a></li><li>3MB๋ก Gzipped๋๋ฉฐ, pgvector๋ฅผ ํฌํจํ ๋ค์ํ Postgres ํ์ฅ์ ์ง์ํ๊ณ , ๋งค์ฐ ๋น ๋ฅธ ์ฟผ๋ฆฌ ์คํ ์๊ฐ์ ์๋ํ๋ ๋ฐ์ํ ๋ผ์ด๋ธ ์ฟผ๋ฆฌ API๊ฐ ํน์ง์</li><li>PGlite v0.2์ ์ถ์๊ฐ ํฐ ์ฃผ๋ชฉ์ ๋ฐ๊ณ ์์</li><li>๋ธ๋ผ์ฐ์ ์ธก ์ง์์ฑ์ ์ํด IndexedDB์ OPFS๋ฅผ ์ง์ํ๋ฉฐ, ํฅํ ๋ค๋ฅธ ์ธ์ด์ ๋ค์ดํฐ๋ธ C ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ง์ํ ๊ณํ</li></ul><br><h2 id="AudioFlux-์ค๋์ค-๋ฐ-์์
-๋ถ์์-์ํ-C-x2F-C-๋ผ์ด๋ธ๋ฌ๋ฆฌ"><a href="#AudioFlux-์ค๋์ค-๋ฐ-์์
-๋ถ์์-์ํ-C-x2F-C-๋ผ์ด๋ธ๋ฌ๋ฆฌ" class="headerlink" title="AudioFlux: ์ค๋์ค ๋ฐ ์์
๋ถ์์ ์ํ C/C++ ๋ผ์ด๋ธ๋ฌ๋ฆฌ"></a>AudioFlux: ์ค๋์ค ๋ฐ ์์
๋ถ์์ ์ํ C/C++ ๋ผ์ด๋ธ๋ฌ๋ฆฌ</h2><img src="./5.png" width="300"><ul><li>Repository: <a href="https://github.com/libAudioFlux/audioFlux">https://github.com/libAudioFlux/audioFlux</a></li><li>์ค๋์ค ๋ฐ ์์
๋ถ์์ ์ํ ๋ฅ๋ฌ๋ ๋๊ตฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ</li><li>์์
์ ๋ณด ๊ฒ์(MIR), ์๋ ์์ฑ ์ธ์(ASR), ์์
๋ถ๋ฅ ๋ฑ์ ์ง์ํจ</li><li>์ฑ๋ฅ์ด ๊ฒฌ๊ณ ํ ๊ฒ์ผ๋ก ์ ๋ช
ํ์ง๋ง ์ ์ฐ์ฑ๊ณผ GPU ์ง์ ๋ถ์กฑ์ผ๋ก ๋ฅ๋ฌ๋ ์ ํ๋ฆฌ์ผ์ด์
์๋ ๋ ์ด์์ </li></ul>]]></content>
<categories>
<category> ๐ OpenSource </category>
</categories>
<tags>
<tag> Opensource </tag>
</tags>
</entry>
<entry>
<title>[์คํ์์ค] 2024๋
10์ ์คํ์์ค ์์์ง (2): GitOpper, Cardie, Age, rqlite 9.0, Yark, Viking</title>
<link href="/2024/10/27/OpenSource/2410(2)/"/>
<url>/2024/10/27/OpenSource/2410(2)/</url>
<content type="html"><![CDATA[<p><img src="0.png"></p><p>(์ฐธ๊ณ /์ถ์ฒ)<br>2024๋
์ ๋ณดํต์ ์ฐ์
์งํฅ์: <a href="https://www.oss.kr/open_up_intro">OpenUP ํ๋ก๊ทธ๋จ</a>์ 2024๋
๊ธฐ์ฌํ ํ๋ก ํฐ์ด๋ก์, ์คํ์์คSW๋ฅผ ํจ๊ป ๊ฐ๋ฐ ๋ฐ ๊ณต์ ํ๊ธฐ ์ํด ์์ฑ๋์์ต๋๋ค.<br>ํด๋น ๋ด์ฉ์ ์ github ํํ์ด์ง์ Explore repositories ๋ฐ feed ๋ด์ฉ์ ํ ๋๋ก ๋ง๋ค์ด์ก์ผ๋ฉฐ, ๊ฒ์๊ธ์ ๋ฌธ์ ์ฌํญ์ด ์์ผ์ ๋ถ๋ค์ ๋๊ธ ๋๋ <a href="mailto:[email protected]">[email protected]</a>์ผ๋ก ์ฐ๋ฝ ๋ถํ๋๋ฆฝ๋๋ค.</p><p><br><br><br></p><h2 id="GitOpper-Kubernates-ํ๊ฒฝ์ด-์๋-๊ณณ์์-GitOps-๋๊ตฌ"><a href="#GitOpper-Kubernates-ํ๊ฒฝ์ด-์๋-๊ณณ์์-GitOps-๋๊ตฌ" class="headerlink" title="GitOpper: Kubernates ํ๊ฒฝ์ด ์๋ ๊ณณ์์ GitOps ๋๊ตฌ"></a>GitOpper: Kubernates ํ๊ฒฝ์ด ์๋ ๊ณณ์์ GitOps ๋๊ตฌ</h2><ul><li>Repository: <a href="https://github.com/miekg/gitopper">https://github.com/miekg/gitopper</a></li><li>๋ฐฐํฌ ์ํฌํ๋ก์์ Kubernetes๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ฌ์ฉ์์๊ฒ GitOps ์ํฌํ๋ก์ฐ๋ฅผ ์ง์</li><li>๋กค์์ ์ถ์ ์ ์ํ ๋ฉํธ๋ฆญ, ์ฐจ์ด ๊ฐ์ง, ๋ฐด๋, ๋กค๋ฐฑ, ์นด๋๋ฆฌ ๊ธฐ๋ฅ ํฌํจ</li></ul><br><h2 id="Cardie-์คํ-์์ค-๋ช
ํจ-๋์์ธ-๋ฐ-๊ณต์ -ํ๋ซํผ"><a href="#Cardie-์คํ-์์ค-๋ช
ํจ-๋์์ธ-๋ฐ-๊ณต์ -ํ๋ซํผ" class="headerlink" title="Cardie: ์คํ ์์ค ๋ช
ํจ ๋์์ธ ๋ฐ ๊ณต์ ํ๋ซํผ"></a>Cardie: ์คํ ์์ค ๋ช
ํจ ๋์์ธ ๋ฐ ๊ณต์ ํ๋ซํผ</h2><img src="./1.png" width="300"><ul><li>Homepage: <a href="https://cardie-uwtwy.ondigitalocean.app/">https://cardie-uwtwy.ondigitalocean.app/</a></li><li>Repository: <a href="https://github.com/nfoert/cardie">https://github.com/nfoert/cardie</a></li><li>๋์งํธ ๋ช
ํจ์ ๋์์ธํ๊ณ ๊ณต์ ํ ์ ์๋ ์คํ ์์ค ํ๋ซํผ</li><li>ํฅํ ์ธ์ ์ต์
๋ ๊ณํ ์ค์ด๋ฉฐ, ๊ณ์ ์์ฑ ์์ด ํ
์คํธํ ์ ์๋ ๊ธฐ๋ฅ๊ณผ ํฅ์๋ ๋ณด์ ์กฐ์น, ๋ง์ถคํ ์ต์
๋ฑ์ ๊ณํ ์ค</li><li>ํ์ฌ ์คํ ์ํ ๋จ๊ณ์ธ ์ํ</li></ul><br><h2 id="Age-ํค-์ค์ -์ต์
์ด-์๋-ํ์ผ-์ํธํ-Go-๋ผ์ด๋ธ๋ฌ๋ฆฌ"><a href="#Age-ํค-์ค์ -์ต์
์ด-์๋-ํ์ผ-์ํธํ-Go-๋ผ์ด๋ธ๋ฌ๋ฆฌ" class="headerlink" title="Age: ํค, ์ค์ ์ต์
์ด ์๋ ํ์ผ ์ํธํ Go ๋ผ์ด๋ธ๋ฌ๋ฆฌ"></a>Age: ํค, ์ค์ ์ต์
์ด ์๋ ํ์ผ ์ํธํ Go ๋ผ์ด๋ธ๋ฌ๋ฆฌ</h2><img src="./2.svg" width="300"><ul><li>Repository: <a href="https://github.com/FiloSottile/age">https://github.com/FiloSottile/age</a></li><li>ํ๋์จ์ด PIV ํ ํฐ, ์ํธ๋ฌธ์ผ๋ก ๋ณดํธ๋ ํ์ผ, SSH ํค, GitHub ์ฌ์ฉ์์๊ฒ ์ํธํํ๋ ๊ธฐ๋ฅ ๋ฑ์ ์ง์</li><li>Homebrew, MacPorts, ๊ทธ๋ฆฌ๊ณ Linux ๋ฐฐํฌํ๊ณผ Windows์ฉ ํจํค์ง ๊ด๋ฆฌ์ ๋ฑ ๋ค์ํ ์ค์น ๋ฐฉ๋ฒ์ ์ง์</li><li>GPG/PGP ๋ฐ jq์ ๊ฐ์ ๊ธฐ์กด ๋๊ตฌ๋ค๊ณผ ๋น๊ตํ๋ฉฐ, Unix ํ์ค์ผ๋ก์์ ์ ์ฌ๋ ฅ์ ๋
ผ์ํ๊ณ ์์</li><li>Signiture๊ฐ์ ๊ธฐ๋ฅ์ด ๋ถ์กฑํ๋ค๊ณ ํ๊ฐ๋๊ณ ์์ผ๋ฉฐ, ์ถ๊ฐ์ ์ธ ๋ณด์ ๊ธฐ๋ฅ์ ์ํด Kryptor ๋ฑ์ ๋์์ ์ธ๊ธ ์ค</li></ul><br><h2 id="rqlite-9-0-์ถ์"><a href="#rqlite-9-0-์ถ์" class="headerlink" title="rqlite 9.0 ์ถ์"></a>rqlite 9.0 ์ถ์</h2><img src="./3.png" width="300"><ul><li>Homepage: <a href="https://philipotoole.com/building-rqlite-9-0-cutting-disk-usage-by-half/">https://philipotoole.com/building-rqlite-9-0-cutting-disk-usage-by-half/</a></li><li>Repository: <a href="https://github.com/rqlite/rqlite">https://github.com/rqlite/rqlite</a></li><li>SQLite์ Raft ํฉ์ ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋ ์คํ์์ค ๋ถ์ฐ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ
(RDBMS)</li><li>๋ค๋ฅธ ๋ถ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ธ CockroachDB์ TiDB์ ๋นํด ์ฐ๊ธฐ ์ฒ๋ฆฌ๋์ด ๋ฎ์์๋ ๋ถ๊ตฌํ๊ณ , rqlite์ ์๋ก์ด ๋ฒ์ ์ Queued Writes์ ๊ฐ์ ์ฑ๋ฅ ํฅ์์ ๋์
ํ์</li><li>์ด๋ฒ ๋ฒ์ ์ ๋์คํฌ ์ฌ์ฉ๋์ 50% ์ค์์ผ๋ก์จ ํจ์จ์ฑ์ ๊ทน๋ํํจ</li></ul><br><h2 id="Yark-์คํ๋ผ์ธ-UI-Youtube-์์นด์ด๋ฒ"><a href="#Yark-์คํ๋ผ์ธ-UI-Youtube-์์นด์ด๋ฒ" class="headerlink" title="Yark: ์คํ๋ผ์ธ UI Youtube ์์นด์ด๋ฒ"></a>Yark: ์คํ๋ผ์ธ UI Youtube ์์นด์ด๋ฒ</h2><ul><li>Repository: <a href="https://github.com/Owez/yark">https://github.com/Owez/yark</a></li><li>์ฌ์ฉ์๊ฐ Youtube ์ฝํ
์ธ ๋ฅผ ๋ก์ปฌ์ ์ ์ฅํ ์ ์๋๋ก ๋์์ค</li><li>๋์ฉ๋ MP4 ํ์ผ ์คํธ๋ฆฌ๋ฐ ๋ฐ ํน์ ๋ฌธ์๊ฐ ํฌํจ๋ ํ์ผ์ ๋ํ HTTP ์๋ฒ ์์ฒญ ์ฒ๋ฆฌ์ ๋ฌธ์ ๊ฐ ์์</li><li>์ค์ฉ์ ์ธ ์ฌ์ฉ์ ์์ด์๋ VLC ๋๋ Nginx๋ฅผ ์ฌ์ฉํ ๊ฒ์ ๊ถ์ฅ</li></ul><br><h2 id="Viking-Server-๋ฐ-SSH-๊ด๋ฆฌ๋ฅผ-์ํ-์คํ-์์ค-๋๊ตฌ"><a href="#Viking-Server-๋ฐ-SSH-๊ด๋ฆฌ๋ฅผ-์ํ-์คํ-์์ค-๋๊ตฌ" class="headerlink" title="Viking: Server ๋ฐ SSH ๊ด๋ฆฌ๋ฅผ ์ํ ์คํ ์์ค ๋๊ตฌ"></a>Viking: Server ๋ฐ SSH ๊ด๋ฆฌ๋ฅผ ์ํ ์คํ ์์ค ๋๊ตฌ</h2><ul><li>Repository: <a href="https://github.com/d3witt/viking">https://github.com/d3witt/viking</a></li><li>์๋ฒ IP๋ฅผ ๊ธฐ์ตํ ํ์ ์์ด ๊ฐ๋จํ ๋ช
๋ น์ด๋ก ์๋ฒ ๊ด๋ฆฌ๋ฅผ ๋จ์ํ์ํด</li><li><code>~/.ssh/config</code>๊ฐ์ ์ ํต์ ์ธ ๋ฐฉ๋ฒ๋ณด๋ค ๋ ํจ์จ์ ์ด๊ณ ์ฌ์ฉ์ ์นํ์ ์ธ ์๋ฅ์
</li><li>์ผ๋ถ ๋ถ์ ์ ์ธ ํผ๋๋ฐฑ์ด ์์ผ๋, ์คํ์์ค๋ก์ ์๊ฐ์ด ์ง๋ ์๋ก ๋์ฑ ๊ฐ์น๊ฐ ์์ ๊ฒ์ผ๋ก ์ฌ๊ฒจ์ง</li></ul>]]></content>
<categories>
<category> ๐ OpenSource </category>
</categories>
<tags>
<tag> Opensource </tag>
</tags>
</entry>
<entry>
<title>Kubernetes ์ ๋ฆฌ</title>
<link href="/2024/10/12/DevOps/Kubernetes/"/>
<url>/2024/10/12/DevOps/Kubernetes/</url>
<content type="html"><![CDATA[<p>์ด๋์ ๋ ๊ฐ๋ฐ๊ณต๋ถ๋ฅผ ํ ์ฌ๋์ด๋ผ๋ฉด Kubernetes(์ฟ ๋ฒ๋คํฐ์ค)๋ฅผ ์ต์ ํ ๋ฒ ์ด์์ ์ ํด๋ดค์ ๊ฒ์ด๋ค.<br>์ ๋ช
ํ๋ค๋ฉด ๋ชจ๋๊ฐ ์จ๋ดค๋ค๋ ์๊ธฐ๊ณ , ๊ทธ๋ง์ ์ฆ์จ ๋ฌด์กฐ๊ฑด ๊ณต๋ถ๋ฅผ ํด์ผํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์(โฆ) ์ค๋ ๋ ์ ์ก์์ ๊ฐ๋
๋ฐ ๋ช
๋ น์ด๋ฅผ ํ ๋ฒ ์ ๋ฆฌํด๋ดค๋ค.</p><h2 id="1-Kubernetes๋"><a href="#1-Kubernetes๋" class="headerlink" title="1. Kubernetes๋?"></a>1. Kubernetes๋?</h2><p>์ฟ ๋ฒ๋คํฐ์ค๋ <u>์ปจํ
์ด๋ํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ <strong>๋ฐฐํฌ, ์ค์ผ์ผ๋ง, ์ด์</strong>์ ์๋ํํ๊ธฐ ์ํ ์คํ์์ค</u>์ด๋ค. ์ฆ ๋ฌด๋ฃ๋ก ์ด์ฉํ ์ ์๋ ํ๋ก๊ทธ๋จ์ด๋ค.</p><p>์ด๋ฆ์ด ๊ธดํ์ ์ค์ฌ์ k8s๋ผ๊ณ ํ๋ฉฐ, Google์์ ๊ฐ๋ฐํ์ผ๋ ํ์ฌ CNCF(Cloud Native Computing Foundation)์์ <a href="https://github.com/kubernetes/kubernetes">repo</a>๋ฅผ ๊ด๋ฆฌํ๊ณ ์๋ค.</p><p>๋ณต์กํ ์ปจํ
์ด๋ ํ๊ฒฝ์์ ์ ํ๋ฆฌ์ผ์ด์
์ด ์์ ์ ์ผ๋ก ๋์ํ๋๋ก ๋๋ <strong>์ปจํ
์ด๋ ์ค์ผ์คํธ๋ ์ด์
๋๊ตฌ</strong>์ด๋ค.</p><h2 id="2-Kubernetes์-์ฃผ์-์ญํ "><a href="#2-Kubernetes์-์ฃผ์-์ญํ " class="headerlink" title="2. Kubernetes์ ์ฃผ์ ์ญํ "></a>2. Kubernetes์ ์ฃผ์ ์ญํ </h2><ul><li>์ฌ๋ฌ ์ปจํ
์ด๋๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๋ฐฐํฌ ๋ฐ ๊ด๋ฆฌ</li><li>Auto Scaling: ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ์ฉ๋์ ๋ฐ๋ผ ์ปจํ
์ด๋ ์๋ฅผ ์๋์ผ๋ก ๋๋ฆฌ๊ฑฐ๋ ์ค์</li><li>Self-Healing: ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ปจํ
์ด๋๋ฅผ ์๋์ผ๋ก ์ฌ์์ ๋ฐ ๋ณต๊ตฌ</li><li>Load Balancing ๋ฐ ํธ๋ํฝ ๋ถ๋ฐฐ -> ์์คํ
๊ณผ๋ถํ ๋ฐฉ์ง</li><li>๋ฐฐํฌ ์๋ํ: rolling update๊ฐ์ ๋ฐฉ์์ผ๋ก ์ค๋จ ์์ด ๋ฐฐํฌ ์งํ</li></ul><h2 id="3-Kubernetes์-์ฃผ์-๊ตฌ์ฑ-์์"><a href="#3-Kubernetes์-์ฃผ์-๊ตฌ์ฑ-์์" class="headerlink" title="3. Kubernetes์ ์ฃผ์ ๊ตฌ์ฑ ์์"></a>3. Kubernetes์ ์ฃผ์ ๊ตฌ์ฑ ์์</h2><img src="./1.png" width="800"><h3 id="Master-Node"><a href="#Master-Node" class="headerlink" title="Master Node"></a>Master Node</h3><p>ํด๋ฌ์คํฐ ์ ์ด ๋ฐ ๊ด๋ฆฌ๋ฅผ ๋ด๋นํ๋ ์ค์ ์๋ฒ</p><ul><li>API Server: ํด๋ฌ์คํฐ ์ง์
์ ์ผ๋ก <code>kubectl</code> ๋ช
๋ น์ด๋ฅผ ์ฒ๋ฆฌ</li><li>Scheduler: ์ปจํ
์ด๋๋ฅผ ์ด๋ค ๋
ธ๋์์ ์คํํ ์ง ๊ฒฐ์ </li><li>Controller Manager: ๋ฆฌ์์ค ์ํ๋ฅผ ๊ด๋ฆฌํ๊ณ ์ด์ ์ํ๋ฅผ ๋ณต๊ตฌ</li><li>etcd: ํด๋ฌ์คํฐ ์ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๋ถ์ฐ ํค-๊ฐ ์ ์ฅ์</li></ul><h3 id="Worker-Node"><a href="#Worker-Node" class="headerlink" title="Worker Node"></a>Worker Node</h3><p>์ค์ ๋ก ์ปจํ
์ด๋๊ฐ ์คํ๋๋ ๋
ธ๋</p><ul><li>Kubelet: Master Node์ ๋ช
๋ น์ ๋ฐ์ ์ปจํ
์ด๋๋ฅผ ์คํํ๊ณ ์ํ ๋ณด๊ณ </li><li>Kube Proxy: ๋คํธ์ํน์ ๊ด๋ฆฌํ๊ณ ์๋น์ค ๊ฐ์ ํต์ ์ง์</li><li>Container Runtime: ์ปจํ
์ด๋ ์คํ ํ๊ฒฝ (Docker, containerd ๋ฑ)</li></ul><h2 id="4-Kubernetes์-resource-object"><a href="#4-Kubernetes์-resource-object" class="headerlink" title="4. Kubernetes์ resource object"></a>4. Kubernetes์ resource object</h2><h3 id="1-Pod"><a href="#1-Pod" class="headerlink" title="1) Pod"></a>1) Pod</h3><ul><li>์ปจํ
์ด๋์ ์ต์ ๋จ์๋ก, ํ๋ ์ด์์ ์ปจํ
์ด๋๋ฅผ ํฌํจ</li><li>๊ฐ์ Pod ๋ด๋ถ์ ์ปจํ
์ด๋๋ ๋คํธ์ํฌ์ ์คํ ๋ฆฌ์ง ๊ณต์ </li></ul><h3 id="2-Deployment"><a href="#2-Deployment" class="headerlink" title="2) Deployment"></a>2) Deployment</h3><ul><li>Pod๋ฅผ ์ ์ํ๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐฐํฌ ๋ฐ ์
๋ฐ์ดํธ ๊ด๋ฆฌ</li><li>๋กค๋ง ์
๋ฐ์ดํธ, ๋กค๋ฐฑ ๊ธฐ๋ฅ ์ง์</li></ul><h3 id="3-Service"><a href="#3-Service" class="headerlink" title="3) Service"></a>3) Service</h3><ul><li>Pod์ ๋คํธ์ํฌ ์ ๊ทผ์ ์ ์ดํ๋ฉฐ, ์ธ๋ถ ํธ๋ํฝ์ ๋ด๋ถ Pod๋ก ์ ๋ฌ</li><li>ClusterIP, NodePort, LoadBalancer ๋ฑ</li></ul><h3 id="4-ConfigMap-amp-Secret"><a href="#4-ConfigMap-amp-Secret" class="headerlink" title="4) ConfigMap & Secret"></a>4) ConfigMap & Secret</h3><ul><li>ConfigMap: ํ๊ฒฝ ์ค์ ๋ฐ์ดํฐ ๊ด๋ฆฌ</li><li>Secret: ๋น๋ฐ๋ฒํธ, ์ธ์ฆ ํ ํฐ ๊ฐ์ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ์์ ํ๊ฒ ์ ์ฅ</li></ul><h3 id="5-Volume"><a href="#5-Volume" class="headerlink" title="5) Volume"></a>5) Volume</h3><p>Pod์ ์๊ตฌ์ ์ธ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํ ์คํ ๋ฆฌ์ง</p><h3 id="6-Namespace"><a href="#6-Namespace" class="headerlink" title="6) Namespace"></a>6) Namespace</h3><ul><li>๋ฆฌ์์ค๋ฅผ ๊ทธ๋ฃนํํ์ฌ ๋
ผ๋ฆฌ์ ์ธ ๊ตฌํ์ ์ ๊ณต</li><li>default, kube-system ๋ฑ</li></ul><h2 id="5-Kubernetes์-์ถ๊ฐ-๊ธฐ๋ฅ"><a href="#5-Kubernetes์-์ถ๊ฐ-๊ธฐ๋ฅ" class="headerlink" title="5. Kubernetes์ ์ถ๊ฐ ๊ธฐ๋ฅ"></a>5. Kubernetes์ ์ถ๊ฐ ๊ธฐ๋ฅ</h2><h3 id="1-Horizontal-Pod-Autoscaler-HPA"><a href="#1-Horizontal-Pod-Autoscaler-HPA" class="headerlink" title="1) Horizontal Pod Autoscaler (HPA)"></a>1) Horizontal Pod Autoscaler (HPA)</h3><p>์ ํ๋ฆฌ์ผ์ด์
์ ๋ถํ์ ๋ฐ๋ผ Pod์ ์๋ฅผ ์๋์ผ๋ก ๋๋ฆฌ๊ฑฐ๋ ์ค์ด๋ ๊ธฐ๋ฅ</p><h3 id="2-Helm"><a href="#2-Helm" class="headerlink" title="2) Helm"></a>2) Helm</h3><p>์ฟ ๋ฒ๋คํฐ์ค ์ ํ๋ฆฌ์ผ์ด์
์ ํจํค์ง ๊ด๋ฆฌ์. ๋ฐ๋ณต์ ์ธ ๋ฐฐํฌ ๊ด๋ฆฌ</p><h3 id="3-Network-Policy"><a href="#3-Network-Policy" class="headerlink" title="3) Network Policy"></a>3) Network Policy</h3><p>๋คํธ์ํฌ ํธ๋ํฝ์ ์ ์ดํ์ฌ Pod ๊ฐ์ ํต์ ์ ๊ด๋ฆฌ</p><h2 id="6-Kubernetes์-๋์-์๋ฆฌ"><a href="#6-Kubernetes์-๋์-์๋ฆฌ" class="headerlink" title="6. Kubernetes์ ๋์ ์๋ฆฌ"></a>6. Kubernetes์ ๋์ ์๋ฆฌ</h2><p>์ฌ์ฉ์๊ฐ kubectl์ ํตํด ๋งค๋ํ์คํธ(YAML ํ์ผ)๋ก ๋ฆฌ์์ค๋ฅผ ์ ์ํ๊ณ API Server์ ์ ๋ฌ<br>-> API Server๊ฐ ์ค์ผ์ค๋ฌ๋ฅผ ํตํด ์ ์ ํ Worker Node๋ฅผ ์ ํ<br>-> ์ ํ๋ Node์์ Kubelet์ด ์ปจํ
์ด๋ ๋ฐํ์(Docker ๋ฑ)์ ์ฌ์ฉํด Pod๋ฅผ ์์ฑ<br>-> ๋คํธ์ํน, ๋ก๋ ๋ฐธ๋ฐ์ฑ, ์ค์ผ์ผ๋ง ๋ฑ์ ์๋น์ค ๋ฐ ์ค์ ์ ๋ฐ๋ผ ์๋์ผ๋ก ์ฒ๋ฆฌ</p>]]></content>
<categories>
<category> โผ DevOps </category>
</categories>
<tags>
<tag> DevOps </tag>
<tag> Kubernates </tag>
</tags>
</entry>
<entry>
<title>[์คํ์์ค] 2024๋
10์ ์คํ์์ค ์์์ง (1): Cloudflare NoIP Alternative, StreamPot, MeTube, FastHTML, Docker-OSX, FakeTraveler</title>
<link href="/2024/10/12/OpenSource/2410(1)/"/>
<url>/2024/10/12/OpenSource/2410(1)/</url>
<content type="html"><![CDATA[<p><img src="0.png"></p><p>(์ฐธ๊ณ /์ถ์ฒ)<br>2024๋
์ ๋ณดํต์ ์ฐ์
์งํฅ์: <a href="https://www.oss.kr/open_up_intro">OpenUP ํ๋ก๊ทธ๋จ</a>์ 2024๋
๊ธฐ์ฌํ ํ๋ก ํฐ์ด๋ก์, ์คํ์์คSW๋ฅผ ํจ๊ป ๊ฐ๋ฐ ๋ฐ ๊ณต์ ํ๊ธฐ ์ํด ์์ฑ๋์์ต๋๋ค.<br>ํด๋น ๋ด์ฉ์ ์ github ํํ์ด์ง์ Explore repositories ๋ฐ feed ๋ด์ฉ์ ํ ๋๋ก ๋ง๋ค์ด์ก์ผ๋ฉฐ, ๊ฒ์๊ธ์ ๋ฌธ์ ์ฌํญ์ด ์์ผ์ ๋ถ๋ค์ ๋๊ธ ๋๋ <a href="mailto:[email protected]">[email protected]</a>์ผ๋ก ์ฐ๋ฝ ๋ถํ๋๋ฆฝ๋๋ค.</p><p><br><br><br></p><h2 id="Cloudflare-NoIP-Alternative-Cloudflare์-Cronjob์-์ด์ฉํ-๋ฌด๋ฃ-DDNS"><a href="#Cloudflare-NoIP-Alternative-Cloudflare์-Cronjob์-์ด์ฉํ-๋ฌด๋ฃ-DDNS" class="headerlink" title="Cloudflare NoIP Alternative: Cloudflare์ Cronjob์ ์ด์ฉํ ๋ฌด๋ฃ DDNS"></a>Cloudflare NoIP Alternative: Cloudflare์ Cronjob์ ์ด์ฉํ ๋ฌด๋ฃ DDNS</h2><ul><li>Repository: <a href="https://github.com/devrim/cloudflare-noip">https://github.com/devrim/cloudflare-noip</a></li><li>repository๋ฅผ clone ํ <code>key.json</code>, <code>records.json</code>, cronjob ๋๋ ์ค์ผ์ค๋ฌ๋ฅผ ์ค์ ํด์ผ ์ฌ์ฉ ๊ฐ๋ฅ</li><li>TLS ์
๋ก๋ ์ ํ์ด๋ผ๋ ํ๊ณ์ ๋ํด์ ์ปค๋ฎค๋ํฐ์์ ์๋
ผ ์ค</li><li>์ ์ฌ ํ๋ก์ ํธ๋ก๋ Cloudflare Turnel, Tailscale์ด ์์ผ๋ฉฐ, ๋์ IP ์ฃผ์ ๊ด๋ฆฌ์ ๋ํ ๋ค์ํ ์๋ฃจ์
์ ์ฌ๋๋ค์ด ํฐ ๊ด์ฌ์ ๊ฐ๊ณ ์์</li></ul><br><h2 id="StreamPot-๋ฏธ๋์ด-๋ณํ-์์
-๋๊ตฌ"><a href="#StreamPot-๋ฏธ๋์ด-๋ณํ-์์
-๋๊ตฌ" class="headerlink" title="StreamPot: ๋ฏธ๋์ด ๋ณํ ์์
๋๊ตฌ"></a>StreamPot: ๋ฏธ๋์ด ๋ณํ ์์
๋๊ตฌ</h2><img src="./1.png" width="300"><ul><li>Homepage: <a href="https://streampot.io/">https://streampot.io/</a></li><li>Repository: <a href="https://github.com/StreamPot/StreamPot">https://github.com/StreamPot/StreamPot</a></li><li>๋น๋์ค ์๋ฅด๊ธฐ, ์ค๋์ค ์ ๊ฑฐ, ํธ๋์ค์ฝ๋ฉ ๊ฐ์ ๋ฏธ๋์ด ๋ณํ ์์
์ ์ํ ๋๊ตฌ</li><li>fluent-FFmpeg ํธํ์ฑ, SQS ๋ฐ S3 ํตํฉ ๊ธฐ๋ฅ์ ๊ฐ์ถ API๋ก FFmpeg๋ฅผ ์คํํ ์ ์์</li><li>์ด๊ธฐ ์คํ์์ค ํ๋ก์ ํธ๋ก์ ๋น๋๊ธฐ ์์
์ ์ํ ๋ฉ์๋ ์ถ๊ฐ, event source ๋๋ SSE๋ฅผ ํตํ ์ ํธ ์ ๋ฌ, ๋ฌธ์ํ ๋ฑ์ ๊ฐ์ ์ฌํญ์ด ์์</li></ul><br><h2 id="MeTube-์
ํ-ํธ์คํ
-Youtube-๋ค์ด๋ก๋"><a href="#MeTube-์
ํ-ํธ์คํ
-Youtube-๋ค์ด๋ก๋" class="headerlink" title="MeTube: ์
ํ ํธ์คํ
Youtube ๋ค์ด๋ก๋"></a>MeTube: ์
ํ ํธ์คํ
Youtube ๋ค์ด๋ก๋</h2><ul><li>Repository: <a href="https://github.com/alexta69/metube">https://github.com/alexta69/metube</a></li><li>Youtube์์ ๋์์์ ๋ค์ด๋ก๋ํ ์ ์๋ ๋ช
๋ น์ด์ธ โyt-dlpโ๋ฅผ ์ฌ์ฉํ๋ ์์ฒด ํธ์คํ
Youtube ๋ค์ด๋ก๋</li><li>์ฆ, yt-dlp๋ฅผ ์ํ UI๋ฅผ ์ ๊ณตํจ</li><li>์๋ก์ด Node ๋ฒ์ ์์๋ ๋ ์ด์ 32bit ARM ๋น๋๋ฅผ ์ง์ํ์ง ์์ผ๋ฉฐ, 64bit ์ด์์ฒด์ ๋ก ๋ง์ด๊ทธ๋ ์ด์
์ด ํ์ํจ</li></ul><br><h2 id="FastHTML-ํ์ด์ฌ์ผ๋ก-๊ตฌํํ๋-์น-์ ํ๋ฆฌ์ผ์ด์
-ํ๋ ์์ํฌ"><a href="#FastHTML-ํ์ด์ฌ์ผ๋ก-๊ตฌํํ๋-์น-์ ํ๋ฆฌ์ผ์ด์
-ํ๋ ์์ํฌ" class="headerlink" title="FastHTML: ํ์ด์ฌ์ผ๋ก ๊ตฌํํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
ํ๋ ์์ํฌ"></a>FastHTML: ํ์ด์ฌ์ผ๋ก ๊ตฌํํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
ํ๋ ์์ํฌ</h2><img src="./2.svg" width="300"><ul><li>Homepage: <a href="https://fastht.ml/">https://fastht.ml/</a></li><li>Repository: <a href="https://github.com/AnswerDotAI/fasthtml">https://github.com/AnswerDotAI/fasthtml</a></li><li>ํ์ดํผ๋ฏธ๋์ด ๊ธฐ๋ฐ ์ฑ์ ์ํด Python๊ณผ HTMX๋ฅผ ํตํฉ ๋ฐ ๋น๋๊ธฐ ์ง์์ ์ํด ASGI/Uvicorn/Starlette ์ผ์ค์ฒด๋ฅผ ์ฌ์ฉํจ. ๋ํ FastTag๋ฅผ ํฌํจํ๊ณ ์์</li><li>์ ์ฌ์ ์ธ ๋ณต์ก์ฑ, ์ฌ์ด ๋ง์ถคํ๋ฅผ ํด๊ฒฐํ๊ณ ๊ฐ๋ฐ์๊ฐ JavaScript๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์์ฒญ์ ์ง์ ์์ ํ ์ ์๋ ํฌ๋ช
ํ ์์คํ
์ ์ ๊ณตํ์ฌ ์น ์ฑ ๊ฐ๋ฐ์ ๊ฐ์ํํ๋ ๊ฒ์ ๋ชฉํํ๊ณ ์์</li></ul><br><h2 id="Docker-OSX-Docker-์ปจํ
์ด๋์์-MacOS๋ฅผ-๋ค์ดํฐ๋ธ-์ฑ๋ฅ์ผ๋ก-์คํํ -์-์๋-์ด๋ฏธ์ง"><a href="#Docker-OSX-Docker-์ปจํ
์ด๋์์-MacOS๋ฅผ-๋ค์ดํฐ๋ธ-์ฑ๋ฅ์ผ๋ก-์คํํ -์-์๋-์ด๋ฏธ์ง" class="headerlink" title="Docker-OSX: Docker ์ปจํ
์ด๋์์ MacOS๋ฅผ ๋ค์ดํฐ๋ธ ์ฑ๋ฅ์ผ๋ก ์คํํ ์ ์๋ ์ด๋ฏธ์ง"></a>Docker-OSX: Docker ์ปจํ
์ด๋์์ MacOS๋ฅผ ๋ค์ดํฐ๋ธ ์ฑ๋ฅ์ผ๋ก ์คํํ ์ ์๋ ์ด๋ฏธ์ง</h2><img src="./3.png" width="500"><ul><li>Repository: <a href="https://github.com/sickcodes/Docker-OSX">https://github.com/sickcodes/Docker-OSX</a></li><li>High Sierra๋ถํฐ Sonoma๊น์ง์ ๋ฒ์ ์ ์ง์ (์ต์ Intel ๋ฐ NVIDIA GPU๋ ์ง์ x)</li><li>QEMU ๋ด์์ Docker๋ก macOS๋ฅผ ์คํํ๋ ๊ฒ์ ๊ฐ๋ฅํ์ง๋ง, GPU ๊ฐ์๊ณผ ๊ด๋ จํ์ฌ ํ๊ณ๊ฐ ์์</li><li>MacOS ์ด๋ฏธ์ง๋ฅผ ์ฌ๋ฐฐํฌํ๋ ๊ฒ์ Apple ์ต์ข
์ฌ์ฉ์ ๋ผ์ด์ ์ค ๊ณ์ฝ(EULA)์ ์๋ฐํ ์ ์์ง๋ง, ์ด ํ๋ก์ ํธ๋ ๊ฐ๋ฐ ๋ฐ ํ
์คํธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋จ</li><li>๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ์์ ํฐ ์ธ๊ธฐ๋ฅผ ๋๊ณ ์์</li></ul><br><h2 id="FakeTraveler-์๋๋ก์ด๋์ฉ-ํด๋ํฐ-๊ฐ์ง-์์น-์ฑ"><a href="#FakeTraveler-์๋๋ก์ด๋์ฉ-ํด๋ํฐ-๊ฐ์ง-์์น-์ฑ" class="headerlink" title="FakeTraveler: ์๋๋ก์ด๋์ฉ ํด๋ํฐ ๊ฐ์ง ์์น ์ฑ"></a>FakeTraveler: ์๋๋ก์ด๋์ฉ ํด๋ํฐ ๊ฐ์ง ์์น ์ฑ</h2><img src="./4.png" width="300"><ul><li>Repository: <a href="https://github.com/mcastillof/FakeTraveler">https://github.com/mcastillof/FakeTraveler</a></li><li>์ฌ์ฉ์๊ฐ ์์ ์ ํด๋ํฐ ์์น๋ฅผ ์์ผ ์ ์๋๋ก ํด์ฃผ๋ ์๋๋ก์ด๋์ฉ ๋ชจ์ ์์น ์ฑ</li><li>F-Droid (๋ฌด๋ฃ ๋ฐ ์คํ ์์ค ์๋๋ก์ด์ฆ ์ฑ ์ ์ฅ์) ์์ ์ด์ฉ ๊ฐ๋ฅ</li><li>๊ธฐ๋ฅ์ฑ์๋ ๋ถ๊ตฌํ๊ณ , ์ผ๋ถ ์ฌ์ฉ์๋ ์ํ ์ฑ์ด๋ ํฌ์ผ๋ชฌ ๊ณ ์ ๊ฐ์ ํน์ ์ฑ ์ ํ์ ์ถ๊ฐ ์กฐ์น ์์ด ์ฐํํ ์ ์๋ค๊ณ ์ง์ ์ค<ul><li>์ด์ ๋ํด์ ๊ธฐ๊ธฐ๋ฅผ ๋ฃจํ
ํ๋ ๋ฑ์ ์ถ๊ฐ ์กฐ์น๊ฐ ํ์ํ๋ค๋ ์๊ฒฌ์ด ์์</li></ul></li></ul>]]></content>
<categories>
<category> ๐ OpenSource </category>
</categories>
<tags>
<tag> Opensource </tag>
</tags>
</entry>
<entry>
<title>[AWS] Cloud Practitioner ์ํ ์ค๋น ๋ฐ ํ๊ธฐ</title>
<link href="/2024/09/30/Certificate/AWS/CloudPractitioner/"/>
<url>/2024/09/30/Certificate/AWS/CloudPractitioner/</url>
<content type="html"><![CDATA[<h2 id="AWS-์ฌ์ -์ง์"><a href="#AWS-์ฌ์ -์ง์" class="headerlink" title="AWS ์ฌ์ ์ง์"></a>AWS ์ฌ์ ์ง์</h2><ul><li>์์. CloudWatch, SQS, CloudFront, S3, EC2, Transfer Family, Route53, DynamoDB, RDS(Mysql), CloudFornation ๋ฑ</li><li>๋ฐ๋ผ์ ๊ฐ๋
์ ๋ฆฌ๋ ํ๋ฃจ๋ง ํ๊ณ ๋ฐ๋ก ์ํ ๋ฌธ์ ๋ก ๋ค์ด๊ฐ, ์ผ์ข
์ bottom-up ๋ฐฉ์์ผ๋ก ๊ณต๋ถ๋ฅผ ์งํํ์.<br>๋ง์ฝ ๊ธฐ์ด๊ฐ ์ ํ ์๋ค๋ฉด ๊ฐ๋
์ ๋ฆฌ๋ ๋๋ํ๊ฒ ์ผ์ฃผ์ผ ์ ๋ ์ก๊ณ ๋ฌธ์ ๋ฅผ ํธ๋ ๊ฒ์ ์ถ์ฒํจ</li></ul><h2 id="์ํ-์ค๋น-๊ธฐ๊ฐ-1๋ฌ-์ธ๋ฐ-๋นก์ง์คํ๊ฑฐ๋-1์ฃผ-์ ๋"><a href="#์ํ-์ค๋น-๊ธฐ๊ฐ-1๋ฌ-์ธ๋ฐ-๋นก์ง์คํ๊ฑฐ๋-1์ฃผ-์ ๋" class="headerlink" title="์ํ ์ค๋น ๊ธฐ๊ฐ: 1๋ฌ (์ธ๋ฐ ๋นก์ง์คํ๊ฑฐ๋ 1์ฃผ ์ ๋)"></a>์ํ ์ค๋น ๊ธฐ๊ฐ: 1๋ฌ (์ธ๋ฐ ๋นก์ง์คํ๊ฑฐ๋ 1์ฃผ ์ ๋)</h2><h3 id="1-์ ๋ฐ์ ์ธ-๊ฐ๋
-์ ๋ฆฌ-ํ๋ฃจ"><a href="#1-์ ๋ฐ์ ์ธ-๊ฐ๋
-์ ๋ฆฌ-ํ๋ฃจ" class="headerlink" title="(1) ์ ๋ฐ์ ์ธ ๊ฐ๋
์ ๋ฆฌ: ํ๋ฃจ"></a>(1) ์ ๋ฐ์ ์ธ ๊ฐ๋
์ ๋ฆฌ: ํ๋ฃจ</h3><ul><li>์ธํฐ๋ท์ ์์ฝ๋ณธ ์ ๋ฆฌํ๋ฉด ๋์์์: ๋๋ฌด ๋ง์์ ๋จธ๋ฆฌ๊ฐ ์ด์ง๋ฌ์ด ๋๋จธ์ง ํ๋ฃจํ๊ณ ๋๋ ค์นจ. ๋์ถฉ ๋ฐ์ ๋๋ ์์์ด์ ๊ฐ๋ฅํ์<ul><li><a href="https://velog.io/@chan9708/AWS-Cloud-Practitioner-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-%EC%9A%94%EC%95%BD">๋ธ๋ก๊ทธ 1</a> </li><li><a href="https://tbvjrornfl.tistory.com/188">๋ธ๋ก๊ทธ 2</a></li></ul></li></ul><h3 id="2-์ํ-๋ฌธ์ -๊ณต๋ถ-๋คํ-๋ฌด๋ฃ"><a href="#2-์ํ-๋ฌธ์ -๊ณต๋ถ-๋คํ-๋ฌด๋ฃ" class="headerlink" title="(2) ์ํ ๋ฌธ์ ๊ณต๋ถ: ๋คํ (๋ฌด๋ฃ)"></a>(2) ์ํ ๋ฌธ์ ๊ณต๋ถ: ๋คํ (๋ฌด๋ฃ)</h3><ul><li>๋คํ: ์ผ๋ถ ๋ฌธ์ ์ ๋ต์ ๋ํด์ ๊ฐ๋ก ์๋ฐ์ด ์์ผ๋ฉฐ, ์ด๋ chatGPT๋ฅผ ํ์ฉํด์ ๋ง์ถฐ๋ณด๋ ๊ฒ์ ์ถ์ฒํจ<ul><li><a href="https://www.examtopics.com/exams/amazon/aws-certified-cloud-practitioner">aws-certified-cloud-practitioner</a></li><li><a href="https://www.examtopics.com/exams/amazon/aws-certified-cloud-practitioner-clf-c02">aws-certified-cloud-practitioner-clf-c02</a></li><li>๋ณธ์ธ์ CLF-02๋ก ์ํ์ ๋ดค์ผ๋ ๋ ๋ค ๋ฌด๋ฃ๋ถ๊น์ง 1ํ๋
์งํํจ</li></ul></li><li>ํท๊ฐ๋ฆฌ๋ ๊ฐ๋
๋ค์ ๋
ธํธ์ ์ง์ ์ ์ผ๋ฉฐ ๊น์ง ์งํ. ๋ฌธ์ ๋ ์ด 1ํ๋
์งํ, ํ๋ฃจ์ 1์๊ฐ ์ฉ ๊ณต๋ถํจ</li></ul><p><img src="./5.png"><br>์ด๋ ๊ฒ ๊ณต๋ถํ๋ ๋์ถฉ a4 5์ฅ ์ ๋ ๋์๋ค.</p><h2 id="์ํ-์ค๋น๋ฌผ"><a href="#์ํ-์ค๋น๋ฌผ" class="headerlink" title="์ํ ์ค๋น๋ฌผ"></a>์ํ ์ค๋น๋ฌผ</h2><ul><li>์ ๋ถ์ฆ 2๊ฐ(์ฌ๊ถ, ์ฃผ๋ฏผ๋ฑ๋ก์ฆ) ๋๋ ์ ๋ถ์ฆ 1๊ฐ + ์ ์ฉ์นด๋๋ฅผ ์ค๋นํด์ผ ํ๋ค. ํ๊ธ/์์ด ์ด๋ฆ ํ์ธ์ ์ํด์ ์ด ๋์ ํ์!</li><li>๋น์ฐํ์ง๋ง ์ํ์ฅ ๋ด๋ถ์๋ ๊ฐ์ธ ํ๊ธฐ๊ตฌ๋ ๊ฐ์ ธ๊ฐ ์ ์๋ค. ์ค์ง ๋ฌผํ๋ณด๊ดํจ ์ด์ + ์ ๋ถ์ฆ + ์๊ฒฝ(์ ํ)๋ง ํ๋ฝํ๋ค</li></ul><h2 id="์ํ-ํ"><a href="#์ํ-ํ" class="headerlink" title="์ํ ํ"></a>์ํ ํ</h2><ul><li>๊ธฐ๋ณธ์ ์ผ๋ก ์์ด ์ ๊ณต. ์์ด ์ธ ์ธ์ด ์ ํํ๋ฉด ํด๋น ์ธ์ด ๋ฒ์ญ๋ณธ + 20๋ถ ์ถ๊ฐ์๊ฐ ์ฃผ์ด์ง (์ธํฐ๋ท์์๋ ํ๊ตญ์ด๋ก ์ํ๋ณด๋ฉด 30๋ถ ์ถ๊ฐ๋ก ์ค๋ค๊ณ ํ๋๋ฐ, ์ธ์ ๋ถํฐ์ธ์ง ๋ชจ๋ฅด๊ฒ ์ผ๋ ์ผ๋จ ๋๋ 20๋ถ ์ถ๊ฐ ์๊ฐ ๋ฐ์)</li><li>AWS Cloud Practitioner Certificate๋ ์๊ธฐ๊ณผ๋ชฉ์. ์ด์ค๊ณ ๋ฑํ์ ๋ ๊ณต๋ถํ ๊ฒ์ฒ๋ผ ์ธ์ฐ๊ธฐ๋ง ํ๋ฉด ๋จ</li><li>์ข
์ข
AWS์์ ์จ๋ผ์ธ ์คํฐ๋ ์ฌ๋๋ฐ, ์ฐธ์ฌ ์ 50% ์ํ์์ ํ ์ธ ์ฟ ํฐ์ ๋ฐ์ ์ ์์</li></ul><h2 id="์ํ-ํ๊ธฐ"><a href="#์ํ-ํ๊ธฐ" class="headerlink" title="์ํ ํ๊ธฐ"></a>์ํ ํ๊ธฐ</h2><ul><li>์ด 65๋ฌธ์ ๋์๊ณ ๊ฒํ ๋ 1๋ฒํด์ 50๋ถ๋ง์ ๋์๋ค. ๋ด๊ฐ ์ํ๋ค๋ ์๋ฏธ๋ ์๋๊ณ , ์ฐ๊ฑฐ๋ ํท๊ฐ๋ฆฌ๋ ๋ฌธ์ ๋ ์ ๋ถ ํ๋ฆฌ๋ ์ฌ๋์ธ์ง๋ผ ๊ตณ์ด ์๊ฐ๋ญ๋น๋ฅผ ํ๊ธฐ ์ซ์๋ค ใ
ใ
;;</li><li>์ข์๋ ๊ฒ์ ์ํ ์๊ฐ์ ๊ผญ ๋ง์ถ ํ์๋ ์๋ค๋ ๊ฒ์ด์๋๋ฐ, ์ค์ 11์ ์ํ์ผ๋ก ์์ฝํ์ผ๋ 10์ 20๋ถ์ ๋์ฐฉํด์ ๋ฐ๋ก ์ํ์ ๋ค์ด๊ฐ ์ ์์๋ค.</li><li>์ํ์ <a href="https://naver.me/FqSi5ht7">SRTC</a>์์ ๋ดค์ผ๋ฉฐ, ์ํ์ฅ์ ์
์ฅํ๊ธฐ ์ ์ ๋์ ์ผ ์ ์๋ A4 ํ์ฅ์ ์ฃผ์
จ๋ค. ์ฝํ
๋์ด ์์ด์ ์ ๊ณตํด์ฃผ์๋ ๋งค์งํ์ผ๋ก ๋ง๊ป ์ธ ์ ์์์ผ๋ฉฐ, ์ง์ฐ๊ณ ์ถ์ผ๋ฉด ์๋ค๋ฉด ๋๋ค๊ณ ํ์
จ๋ค. ๊ทผ๋ฐ ๊ทธ๋ ๊ฒ ๋์ ์ผ๊ฒ ์์ด์.. ์ผ๋จ ์ฑ๊ฒจ์ฃผ์๋ ๊ฐ์ ธ๊ฐ์ ์ ํ์ฉํ๋ค.</li><li>๋ณด์ ๊ฐ๋นก์ธ๋ค. ๊ณตํญ ๋ชธ์์ ๋บจ์น๋ ์์ค์ผ๋ก ๋ณธ๋ค. ๋ฐ์ง ๊ฑท์ด์ ์๋ง์ ๋ณด์ด๊ฑฐ๋, ์๋ด์๋ ๋ฐ๋ผ์ ๋ชธ์ ํญํญ ๋๋ค๊ฒจ์ผ ํ๋ฉฐ, ์ด๋ฆ ๋ฐ ์ ์ ๊ธฐ์ค ํธ๋ํฐ ๋ท์๋ฆฌ ๋ฒํธ ๋ฑ์ ๋ฌผ์ด๋ณด์
จ๋ค. ๋ฌผ๋ก ์ปจ๋์ ํ ๊ณํ์ด ์์ผ๋ ๋น๋นํ๊ฒ ํ๋ฉด ๋๋ค.</li><li>ํฉ๋ถ์ฌ๋ถ๋ ์ํ ๋๋ด๋ฉด ๋ฐ๋ก ๋ณผ ์ ์๋ค. ๋ช ๊ฐ ์ฐ์๋๋ฐ ํฉ๊ฒฉ ๋์์ ๊ธฐ๋ถ์ด ์ข์~ ์ฐธ๊ณ ๋ก ์ํ์ ์๋ 840์ ์ด์๋ค.</li><li>์ํ ๋์ด๋๋.. ๋ชจ๋ฅด๋๊ฑฐ๋ ํท๊ฐ๋ฆฌ๋๊ฑฐ ๋ช ๊ฐ ์์์ง๋ง ๋คํ์ ๋์๋๊ฑฐ ๊ทธ๋๋ก ๋์จ๊ฒ ๋ง์์ ๊ด์ฐฎ์๋ค.</li><li>์ํ์ ํต๊ณผํ๋ฉด ๋ค์ AWS ์๊ฒฉ์ฆ ์ํ 50%๋ฅผ ํ ์ธ ๋ฐ์ฐ์ฒ ๋ฐ SME ์ฐธ์ฌ ๊ธฐํ๋ฅผ ์ป์ ์ ์๋ค.</li></ul><p><img src="./1.png"></p>]]></content>
<categories>
<category> ๐ฉโ๐ป AWS </category>
</categories>
<tags>
<tag> AWS </tag>
<tag> Cloud </tag>
</tags>
</entry>
<entry>
<title>[์คํ์์ค] 2024๋
9์ ์คํ์์ค ์์์ง (2): Typst, Jiff, Eza, Timeshift for Linux, Llama 3.1, ์ค์์ค ์ ๋ถ๊ธฐ๊ด์ OSS ์ฌ์ฉ ์๋ฌดํ</title>
<link href="/2024/09/29/OpenSource/2409(2)/"/>
<url>/2024/09/29/OpenSource/2409(2)/</url>
<content type="html"><![CDATA[<p><img src="0.png"></p><p>(์ฐธ๊ณ /์ถ์ฒ)<br>2024๋
์ ๋ณดํต์ ์ฐ์
์งํฅ์: <a href="https://www.oss.kr/open_up_intro">OpenUP ํ๋ก๊ทธ๋จ</a>์ 2024๋
๊ธฐ์ฌํ ํ๋ก ํฐ์ด๋ก์, ์คํ์์คSW๋ฅผ ํจ๊ป ๊ฐ๋ฐ ๋ฐ ๊ณต์ ํ๊ธฐ ์ํด ์์ฑ๋์์ต๋๋ค.<br>ํด๋น ๋ด์ฉ์ ์ github ํํ์ด์ง์ Explore repositories ๋ฐ feed ๋ด์ฉ์ ํ ๋๋ก ๋ง๋ค์ด์ก์ผ๋ฉฐ, ๊ฒ์๊ธ์ ๋ฌธ์ ์ฌํญ์ด ์์ผ์ ๋ถ๋ค์ ๋๊ธ ๋๋ <a href="mailto:[email protected]">[email protected]</a>์ผ๋ก ์ฐ๋ฝ ๋ถํ๋๋ฆฝ๋๋ค.</p><p><br><br><br></p><h2 id="Typst-LaTex-๋์-์คํ์์ค"><a href="#Typst-LaTex-๋์-์คํ์์ค" class="headerlink" title="Typst: LaTex ๋์ ์คํ์์ค"></a>Typst: LaTex ๋์ ์คํ์์ค</h2><img src="./1.png" width="700"><ul><li>Homepage: <a href="https://typst.app/">https://typst.app/</a></li><li>Repository: <a href="https://github.com/typst/typst">https://github.com/typst/typst</a></li><li>PDF ์์ฑ์ ์ํ LaTeX์ ๋ ์ฝ๊ณ ์์ ํจ์จ์ ์ธ ๋์์ผ๋ก ์ ์๋ ์คํ์์ค</li><li>์ง๊ด์ ์ธ ํ
ํ๋ฆฟ ์์คํ
๊ณผ ๋๋์ ๋ฌธ์๋ฅผ ์ ์ํ๊ฒ ์์ฑํ๋ ์ฑ๋ฅ์ ๋ํด ๊ธ์ ์ ํ๊ฐ๋ฅผ ๋ฐ๊ณ ์์</li><li>ํ์ ๋
ผ๋ฌธ ์์ฑ ๋ฐ ๊ท์ ๋ฌธ์ ์์ฑ์ ํจ์จ์ฑ์ ๋์ผ ๊ฐ๋ฅ์ฑ์ผ๋ก ์ฃผ๋ชฉ๋ฐ๊ณ ์์ง๋ง, ํ์ฌ HTML ์ถ๋ ฅ ๋ฐ ์์ ํ TeX ์ง์๊ณผ ๊ฐ์ ์ผ๋ถ ๊ธฐ๋ฅ์ด ๋ถ์กฑํ ํธ</li></ul><br><h2 id="Jiff-Rust์ฉ-๋ ์ง-๋ฐ-์๊ฐ-๋ผ์ด๋ธ๋ฌ๋ฆฌ"><a href="#Jiff-Rust์ฉ-๋ ์ง-๋ฐ-์๊ฐ-๋ผ์ด๋ธ๋ฌ๋ฆฌ" class="headerlink" title="Jiff: Rust์ฉ ๋ ์ง ๋ฐ ์๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ"></a>Jiff: Rust์ฉ ๋ ์ง ๋ฐ ์๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ</h2><ul><li>Repository: <a href="https://github.com/BurntSushi/jiff">https://github.com/BurntSushi/jiff</a></li><li>๋์ ์์ค์ ๋ ์ง ๋ฐ ์๊ฐ ์์ ๋ฐ์ดํฐ, ์ํํ ์๊ฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํตํฉ, DST ์ฐ์ , ํ์ํ, ๊ตฌ๋ฌธ ๋ถ์ ๋ฐ ์ ํ์ Serde ์ง์๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณต</li><li>๊ธฐ์กด ํ์ค์ธ Chrono์ ๋นํด ๋ ์ฌ์ฉ์ ์นํ์ ์ด๊ณ ์ ์ฐํ API๋ฅผ ์ ๊ณตํ๋ฉด์ ๋ ์ง ๋ฐ ์๊ฐ ์์
์ ์ ํ์ฑ๊ณผ ๊ธฐ๋ฅ์ ์ ์ง ์ค</li></ul><br><h2 id="Eza-ls-๋์ฒด-๋ช
๋ น์ด"><a href="#Eza-ls-๋์ฒด-๋ช
๋ น์ด" class="headerlink" title="Eza: ls ๋์ฒด ๋ช
๋ น์ด"></a>Eza: ls ๋์ฒด ๋ช
๋ น์ด</h2><img src="./2.gif" width="700"><ul><li>Homepage: <a href="https://eza.rocks/">https://eza.rocks/</a></li><li>Repository: <a href="https://github.com/eza-community/eza">https://github.com/eza-community/eza</a></li><li>Unix์ Linux์์ ls ๋ช
๋ น์ด๋ฅผ ๋์ฒดํ๋ ์๋ก์ด ๋ช
๋ น์ด</li><li>์์ ์ฝ๋๊ฐ ์ง์ ๋ ํ์ผ ์ ํ, ์ฌ๋ณผ๋ฆญ ๋งํฌ ์ง์, ํ์ฅ ์์ฑ, Git ํตํฉ, ๊ทธ๋ฆฌ๊ณ ์ฌ๋์ด ์ฝ๊ธฐ ์ฌ์ด ๋ ์ง๋ฅผ ์ง์ํจ</li><li>ํ์ดํผ๋งํฌ, ๋ง์ดํธ ํฌ์ธํธ ์ธ๋ถ ์ ๋ณด, SELinux ์ปจํ
์คํธ ๋ฐ ๋ฐ์ ํฐ๋ฏธ๋ ์์์ ๋ํ ์ถ๊ฐ ์ง์์ ๋ชฉํํ๊ณ ์์</li></ul><br><h2 id="Timeshift-for-Linux-์์คํ
-๋ณต์-๋๊ตฌ"><a href="#Timeshift-for-Linux-์์คํ
-๋ณต์-๋๊ตฌ" class="headerlink" title="Timeshift for Linux: ์์คํ
๋ณต์ ๋๊ตฌ"></a>Timeshift for Linux: ์์คํ
๋ณต์ ๋๊ตฌ</h2><ul><li>Repository: <a href="https://github.com/linuxmint/timeshift">https://github.com/linuxmint/timeshift</a></li><li>macOS์ Time Machine ๋ฐ Windows์ ์์คํ
๋ณต์๊ณผ ์ ์ฌํ๋ฉฐ, ์ฌ์ฉ์๊ฐ rsync์ ํ๋๋งํฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ผ ์์คํ
์ค๋
์ท์ ์์ฑํ ์ ์๊ฒ ํด์ค</li><li>restic, rclone, ZFS, BTRFS, LVM ์ค๋
์ท์ ํฌํจํ ๋ค์ํ ๋ฐฑ์
์๋ฃจ์
๊ณผ ๊ตฌ์ฑ์ ๋ํด ๋
ผ์ํ๊ณ ์์ผ๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ผ๊ด์ฑ๊ณผ ์ ๋ขฐํ ์ ์๋ ๋ฐฑ์
์ ์ํด ์์์ ์ค๋
์ท์ ์ค์์ฑ์ ๊ฐ์กฐํ๋ ์ค</li><li>๋ค์ํ ํ์ผ ์์คํ
๊ณผ ์ค๋
์ท ๋ฐฉ๋ฒ์ ์ฅ๋จ์ ์ ๋
ผ์ํ๋ฉด์ ๊ฐ๋ ฅํ ๋ฐฑ์
์ ๋ต์ ํ์์ฑ์ด ๊ฐ์กฐ๋จ</li></ul><br><h2 id="Llama-3-1-์ถ์"><a href="#Llama-3-1-์ถ์" class="headerlink" title="Llama 3.1 ์ถ์"></a>Llama 3.1 ์ถ์</h2><img src="./3.png" width="300"><ul><li>8B, 70B, 405B ๋ฒ์ ์ผ๋ก ์ ๊ณต๋๋ Meta์ ์คํ ์์ค AI ๋ชจ๋ธ</li><li>GPT-4์ ๊ฐ์ ํ์ํ ๋ชจ๋ธ๊ณผ ๊ฒฝ์๋ ฅ ์๋ ์ฑ๋ฅ์ ๋ณด์ด๊ณ ์์</li><li>405B ๋ชจ๋ธ์ ์๋นํ ๋ฒค์น๋งํฌ ๊ฐ์ ์ ๋ณด์ฌ์ฃผ์ง๋ง, ํด๋ผ์ฐ๋ ์ง์ ์์ด๋ ๊ฐ์ ์์ ์ฌ์ฉํ๊ธฐ์ ๋น์ค์ฉ์ ์ด๋ฉฐ, ๋ํ ๋ชจ๋ธ์ ๋ก์ปฌ์์ ์คํํ๋ ๋ฐ ์์ด ์ด๋ ต๋ค๊ณ ํจ</li><li>Meta์ ๊ฐ๋ ฅํ ์คํ ๋ชจ๋ธ ์ถ์๊ฐ ๊ฒฝ์ ๊ตฌ๋๋ฅผ ๋คํ๋ค๋ฉฐ ํ๋์จ์ด ์๊ตฌ ์ฌํญ, ์์ํ ์๋ฃจ์
, ๊ทธ๋ฆฌ๊ณ AI ๊ฐ๋ฐ ๋ฐ ์ ๊ทผ์ฑ์ ๊ด๋ฒ์ํ ์ํฅ์ ๋ฏธ์น ๊ฒ์ด๋ผ ๋ณด๊ณ ๋จ<br></li></ul><h2 id="์ค์์ค-์ ๋ถ๊ธฐ๊ด์ด-OSS-์ฌ์ฉ์-์๋ฌดํํจ"><a href="#์ค์์ค-์ ๋ถ๊ธฐ๊ด์ด-OSS-์ฌ์ฉ์-์๋ฌดํํจ" class="headerlink" title="์ค์์ค ์ ๋ถ๊ธฐ๊ด์ด OSS ์ฌ์ฉ์ ์๋ฌดํํจ"></a>์ค์์ค ์ ๋ถ๊ธฐ๊ด์ด OSS ์ฌ์ฉ์ ์๋ฌดํํจ</h2><img src="./4.svg" width="200"><ul><li>์คํ ์์ค ์ํํธ์จ์ด(OSS)๋ฅผ ์ฌ์ฉํ๊ณ ์๋ก์ด ์ ๋ถ ์ฝ๋๋ฅผ ์คํ ์์ค ๋ผ์ด์ ์ค ํ์ ๊ณต๊ฐํ๋๋ก ์๊ตฌํ๋ ๋ฒ๋ฅ , ์ฆ โ์ ๋ถ ์
๋ฌด ์ํ์ ์ํ ์ ์ ์๋จ ์ฌ์ฉ์ ๊ดํ ์ฐ๋ฐฉ๋ฒโ(EMBAG)์ ํต๊ณผ์ํด</li><li>๋ณด์์ ๋ฏผ๊ฐํ์ง ์์ ์ ๋ถ ๋ฐ์ดํฐ๋ฅผ ๊ณต๊ฐ์ ์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅํ๊ฒ ํจ์ผ๋ก์จ ํฌ๋ช
์ฑ, ๋ณด์, ํจ์จ์ฑ์ ํฅ์์ํค๋ ๊ฒ์ ๋ชฉํํจ</li><li>์ถํ ์ ๋ฝ๊ณผ ๋ฏธ๊ตญ์์ OSS์ ์ถ๊ฐ ์ฑํ์ ์ด์งํ ๊ฐ๋ฅ์ฑ์ด ์์</li></ul>]]></content>
<categories>
<category> ๐ OpenSource </category>
</categories>
<tags>
<tag> Opensource </tag>
</tags>
</entry>
<entry>
<title>๊ฐ๋ฐ์ ํฌํธํด๋ฆฌ์ค, ์ด๋ ๊ฒ ์ค๋นํด๋ณด์</title>
<link href="/2024/09/12/Retrospect/Portfolio/"/>
<url>/2024/09/12/Retrospect/Portfolio/</url>
<content type="html"><![CDATA[<p>๋ด๋ถ ์ฌ์ ์ผ๋ก ์์์ผ๋ก ์ฌ๋ฆฌ๋ ค๋ ๊ฒ์ ๋ธ๋ก๊ทธ ๊ธ๋ก ์
๋ก๋ ํ์ต๋๋ค.<br>PPT๋ ๋ฐ๋ก ๋ฐฐํฌํ์ง ์๋ ์ ์ฐธ๊ณ ๋ฐ๋๋๋ค.<br>์ฌ๋ฌ๋ถ์ ์ทจ์ค & ์ด์ง์ ๋์๋๊ธธ ๋ฐ๋๋๋ค :)</p><p><br><br></p><h2 id="1-๐-ํฌํธํด๋ฆฌ์ค-vs-์ด๋ ฅ์"><a href="#1-๐-ํฌํธํด๋ฆฌ์ค-vs-์ด๋ ฅ์" class="headerlink" title="1. ๐ ํฌํธํด๋ฆฌ์ค vs ์ด๋ ฅ์"></a>1. ๐ ํฌํธํด๋ฆฌ์ค vs ์ด๋ ฅ์</h2><p><img src="1.png"></p><p>์ด๋ ฅ์์ ํฌํธํด๋ฆฌ์ค๋ฅผ ์ฐจ์ด์ ์ ์๊ทผ ํท๊ฐ๋ คํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ๊ฐ๋จํ ์ ์ด๋ณด์๊ณ ํ๋ค.</p><p>์ด๋ ฅ์๋ ์ง๊ธ๊น์ง์ ๊ฒฝ๋ ฅ, ํ๋ ฅ, ์คํฌ ๋ฑ์ โํ
์คํธโ๋ก ํํํ๋ ๊ฒ์ด๊ณ ,<br>ํฌํธํด๋ฆฌ์ค๋ โ์ด๋ฏธ์งโ ์ค์ฌ์ผ๋ก ํด์จ ํ๋ก์ ํธ๋ฅผ ์์ธํ๊ฒ ํํํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.</p><p><br><br></p><h2 id="2-๐ก-ํฌํธํด๋ฆฌ์ค์-ํ์์ฑ-๋ฐ-์ค์์ฑ"><a href="#2-๐ก-ํฌํธํด๋ฆฌ์ค์-ํ์์ฑ-๋ฐ-์ค์์ฑ" class="headerlink" title="2. ๐ก ํฌํธํด๋ฆฌ์ค์ ํ์์ฑ ๋ฐ ์ค์์ฑ"></a>2. ๐ก ํฌํธํด๋ฆฌ์ค์ ํ์์ฑ ๋ฐ ์ค์์ฑ</h2><p>๋๋ถ๋ถ ๊ธฐ์
์์๋ ํฌํธํด๋ฆฌ์ค๋ ํ์๋ ์๋๋ฉฐ ์ ํ ์ฌํญ์ผ๋ก ์ธ๊ธ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.<br>๊ทธ๋์ ์ค๋น๊ฐ ๊ท์ฐฎ๊ฑฐ๋ ์๊ฐ์ด ๋ถ์กฑํ ์ฌ๋๋ค์ ํฌํธํด๋ฆฌ์ค๋ฅผ ๋ฐ๋ก ์ค๋นํ์ง ์์๋ ๋๋ค.<br>ํ์ง๋ง ํฌํธํด๋ฆฌ์ค๋ฅผ ์ค๋นํ๋ ๊ฒ์ด ์
์ฌ ๊ฒฝ์์ ์์ด ๋งค์ฐ ์ ๋ฆฌํ ์ ์๋ค.</p><p>๋๋ ์ด ๊ฐ์๋ก ์ฒญ๋
์ทจ์
๋ฅ ์ ๋จ์ด์ง๊ณ ์์ผ๋ฉฐ, ์๋ง์ ์ง์์๋ค ์์์ ์กฐ๊ธ์ด๋ผ๋ ๋์ ๋๊ธฐ ์ํด์๋ ๋จ์ํ ์ด๋ ฅ์์ ๋์ด๋ ๊ฒฝ๋ ฅ์ด๋ ์๊ฒฉ์ฆ๋ง์ผ๋ก ๋ถ์กฑํ ๋์ด๋ค.<br><strong>ํฌํธํด๋ฆฌ์ค๋ ์์ ์ ๊ฒฝํ๊ณผ ์ญ๋์ ์ค์ ์ฌ๋ก๋ฅผ ํตํด ์๊ฐ์ ์ผ๋ก ๋ณด์ฌ์ค ์ ์๋ ๋๊ตฌ</strong>๋ก, ์ง์์๊ฐ ์ด๋ค ๋ฐฉ์์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ฐฝ์์ ์ธ ์ ๊ทผ์ ํ๋์ง ๊ตฌ์ฒด์ ์ผ๋ก ๋๋ฌ๋ผ ์ ์๋ค.<br>ํนํ, <strong>์ง๋ฌด ๊ด๋ จ ํ๋ก์ ํธ๋ ์์
๋ฌผ</strong>์ ํฌํธํด๋ฆฌ์ค์ ํฌํจ์ํค๋ฉด, ๊ณ ์ฉ์ฃผ(=ํ์ฌ)๋ ์ง์์๊ฐ ํด๋น ๋ถ์ผ์์ ์ค์ ๋ก ์ด๋ค ์ฑ๊ณผ๋ฅผ ๋ผ ์ ์๋์ง ๋ณด๋ค ์ฝ๊ฒ ์ดํดํ ์ ์์ผ๋ฉฐ,<br>์ด๋ ๋จ์ํ ๊ธ๋ก ํํ๋ ๋ฅ๋ ฅ๋ณด๋ค ํจ์ฌ ๊ฐ๋ ฅํ ์ธ์์ ์ค ์ ์๊ณ ์ง์์์ ์ค๋ฌด ๋ฅ๋ ฅ์ ํ๋์ ํ์ธํ ์ ์๊ฒ ํด์ค๋ค.</p><p>๊ฒฐ๋ก ์ ์ผ๋ก, ํฌํธํด๋ฆฌ์ค๋ ์์ ์ ๋๋ณด์ด๊ฒ ๋ง๋ค๊ณ , ๊ฒฝ์์๋ค ์์์ ๋๋๋ฌ์ง๋ ๊ธฐํ๋ฅผ ์ ๊ณตํ๋ ์ค์ํ ์๋จ์ด๊ธฐ์<br>๊ท์ฐฎ๋๋ผ๋ ํฌํธํด๋ฆฌ์ค๋ฅผ ์ค๋นํ๋ ๊ฒ์ด ๋ ๋์ ์ทจ์
/์ด์ง ๊ธฐํ๋ฅผ ๋ง๋ค ์ ์๋ ์ข์ ์ ๋ต์ด ๋ ์ ์๋ค.</p><p><br><br></p><h2 id="3-๐-๋์๊ฒ-๋ง๋-ํฌํธํด๋ฆฌ์ค-์ข
๋ฅ-์ฐพ๊ธฐ"><a href="#3-๐-๋์๊ฒ-๋ง๋-ํฌํธํด๋ฆฌ์ค-์ข
๋ฅ-์ฐพ๊ธฐ" class="headerlink" title="3. ๐ ๋์๊ฒ ๋ง๋ ํฌํธํด๋ฆฌ์ค ์ข
๋ฅ ์ฐพ๊ธฐ"></a>3. ๐ ๋์๊ฒ ๋ง๋ ํฌํธํด๋ฆฌ์ค ์ข
๋ฅ ์ฐพ๊ธฐ</h2><p><img src="3.png"></p><p>๊ธฐ์
๋ง๋ค ์ ์ถ ํํ๋ ๋ค๋ฅด์ง๋ง, ๋ด ๊ฒฝํ์ ์ํ๋ฉด ๋ณดํธ์ ์ผ๋ก ์ด๋ ๊ฒ ๋ค์ฏ ์ข
๋ฅ๋ก ๋๋๋ ๊ฒ ๊ฐ๋ค.<br>ํนํ ๋๊ธฐ์
๊ณต์ฑ์ผ์๋ก ์ ํด์ง ํฌ๋งท(ex. ppt, docs ๋ฑ)์ ๋ง์ถฐ์ ๋ด๋ผ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ, ์ด๋ ๊ผญ ๊ธฐ์
์ ๋ง๋ ํ์ผ์ ์ด์ฉํด์ ์ ์ถํ๋๋ก ํ์.<br>(์ผ๋ถ ๊ธฐ์
๋ค์ ๊ธฐ์
๋ด๋ถ์์ ์๊ณ ๋ฆฌ์ฆ ๋๋ ค์ ์๋ฅ ํํฐ๋ง์ ํ๋ค๋๋ฐ, ๋๊ธฐ์
์ผ์๋ก ์ด๋ฐ ํฌ๋งท์ด ์ ํด์ ธ ์๋ค๋ณด๋ ์๋ง์ถ๋ฉด ์๊ณ ๋ฆฌ์ฆ์ ๊ฑธ๋ ค ํํฐ๋ง์ ๊ฑธ๋ฆด ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.)</p><p><br><br></p><h2 id="4-๐-ํฌํธํด๋ฆฌ์ค-์์ฑ-๊ฟํ"><a href="#4-๐-ํฌํธํด๋ฆฌ์ค-์์ฑ-๊ฟํ" class="headerlink" title="4. ๐ ํฌํธํด๋ฆฌ์ค ์์ฑ ๊ฟํ"></a>4. ๐ ํฌํธํด๋ฆฌ์ค ์์ฑ ๊ฟํ</h2><h3 id="1-ํ๋ก์ ํธ-์ค๋ช
-๊ณตํต-๊ตฌ์กฐ"><a href="#1-ํ๋ก์ ํธ-์ค๋ช
-๊ณตํต-๊ตฌ์กฐ" class="headerlink" title="1) ํ๋ก์ ํธ ์ค๋ช
๊ณตํต ๊ตฌ์กฐ"></a>1) ํ๋ก์ ํธ ์ค๋ช
๊ณตํต ๊ตฌ์กฐ</h3><p><img src="4.png"></p><ul><li>์ด๋ค ํฌํธํด๋ฆฌ์ค ํ
ํ๋ฆฟ์ ์ ํ์ ํ๋ , ํ๋ก์ ํธ๋ฅผ ์ ํํํ๊ธฐ ์ํด์๋ ์ด ๋ด์ฉ๋ค์ด ๊ผญ ๋ค์ด๊ฐ์ผ ํ๋ค.</li><li>๊ทธ ์ค์์ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ <code>์ฐธ์ฌ๋ / ๊ตฌํ ๋ชฉ๋ก</code>์ด๋ค.<ul><li>์ฃผ๋์ด ๊ฐ๋ฐ์์ผ ๊ฒฝ์ฐ, ์ด๋ฏธ์ง๋ฅผ ์ฐธ๊ณ ํด ์์ฑํด๋ณด์</li><li>๊ฒฝ๋ ฅ์ง์ผ ๊ฒฝ์ฐ, ์ด์ง์ ์ํ ํฌํธํด๋ฆฌ์ค ์์ฑ ์ <code>๊ธฐ๋ฅ ํฅ์</code> ๋ฐฉํฅ์ผ๋ก ์์ฑํ๋ ๊ฒ์ ์ถ์ฒํ๋ค. (๋ฌผ๋ก ์ฃผ๋์ด์ผ์๋ก ์ด๋ ๊ฒ ์์ฑํ ์ ์๋ค๋ฉด ๋ ์ข๋ค)<ul><li>๊ตฌ์ฒด์ ์ธ <strong>์์น</strong>๋ก ์์ฑํ๊ธฐ, ๋ ์ ์์ผ๋ฉด <code>%</code> ์ด์ฉํ๊ธฐ<ul><li>API latency๊ฐ 100ms์๋ ๊ฒ์ 50ms๋ก ํฅ์์ํด -> ์ฝ๋ ๋ฆฌํํ ๋ง์ ํตํด API latency๋ฅผ 50% ๊ฐ์</li><li>ํด๋ผ์ฐ๋ ์ํคํ
์ฒ ์ฌ์ค๊ณ๋ก ๋น์ฉ์ด ์ 1000๋ง์์ธ ๊ฒ์ 100๋ง์์ผ๋ก ๊ฐ์ -> ํด๋ผ์ฐ๋ ์ํคํ
์ฒ ์ฌ์ค๊ณ๋ก ๋น์ฉ์ 90% ๊ฐ์</li></ul></li><li>์ฌ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ๋ฌธ์ ํด๊ฒฐ ๊ณผ์ ์ ์</li><li>์ฝ๋ ์ํ ์์ฑ ๋ฐ ์ฝ์
</li><li>์ํคํ
์ฒ ๋ค์ด์ด๊ทธ๋จ ์ฝ์
</li></ul></li></ul></li></ul><h3 id="2-์ง์ธ-ํ๊ฐ-Soft-Skill-๊ฐ์กฐํ๊ธฐ"><a href="#2-์ง์ธ-ํ๊ฐ-Soft-Skill-๊ฐ์กฐํ๊ธฐ" class="headerlink" title="2) ์ง์ธ ํ๊ฐ: Soft Skill ๊ฐ์กฐํ๊ธฐ"></a>2) ์ง์ธ ํ๊ฐ: Soft Skill ๊ฐ์กฐํ๊ธฐ</h3><h3 id="3-์คํ์์ค-๊ธฐ์ฌํ๊ธฐ"><a href="#3-์คํ์์ค-๊ธฐ์ฌํ๊ธฐ" class="headerlink" title="3) ์คํ์์ค ๊ธฐ์ฌํ๊ธฐ"></a>3) ์คํ์์ค ๊ธฐ์ฌํ๊ธฐ</h3><p>์๋ฌด๋๋ ๋ค๋ฅธ ๋๋ผ์ ๋นํด ํ๊ตญ์์ ์คํ์์ค๋ฅผ ๊ธฐ์ฌํ๋ ์ฌ๋์ ์ฐพ๊ธฐ ํ๋ค๋ค.<br>์ด ๋ง์ ๋ญ๋ค? ์คํ์์ค์ ๊ธฐ์ฌํ๋ฉด ๋ค๋ฅธ ์ฌ๋๋ค๊ณผ ๋น๊ตํด์ ์ฐจ๋ณ์ฑ ์๋ ์คํ์ ๋ง๋ค๊ธฐ ๋ฑ ์ข๋ค๋ ์๊ธฐ๋ค. (๊ฐ์ธ์ ์ผ๋ก ์คํ์๊ธฐ ํ๋ ์ค์ ๊ฐ์ฅ ์์ฐจ๋ค๊ณ ์๊ฐํ๋ค)</p><p>์ด์ฐจํผ ๋๊ธฐ์
์์ ์คํํธ์
๊น์ง ๋ชจ๋ ๊ธฐ์
์์๋ ์คํ์์ค๋ฅผ ์ ๊ทน ํ์ฉํ๋ ํธ์ธ๋ฐ, ๊ทธ ์คํ์์ค๋ฅผ ๊ธฐ์ฌํ๊ณ ์ ์ง๋ณด์ํ ์ ์์์ ์ฆ๋ช
ํ๋ค๋ฉด ๊ธฐ์
์์ ์ฌ๋ฌ ๋ฌ๋ธ์ฝ์ ๋ฐ์ ์ ์์ ๊ฒ์ด๋ค.</p><p>๊ทธ ์ธ์ ์คํ์์ค๋ฅผ ๊ธฐ์ฌ ์ ๋ค์์ ์ฅ์ ์ ๋๋ฆด ์ ์๋ค:</p><ul><li>ํ์
๋ฅ๋ ฅ ์ฆ๋ช
<ul><li>์คํ์์ค๋ ์ ์ธ๊ณ์ ๋ค์ํ ๊ฐ๋ฐ์๋ค๊ณผ ํ์
ํ๋ ํํ๋ก ์งํ๋๋ฉฐ, ํ์
๋๊ตฌ(ex. Git, Github ๋ฑ)์ ์์
ํ๋ฆ์ ๋ํ ์ดํด๋๋ฅผ ๋ณด์ฌ์ค๋ค.</li><li>์ฆ ๋ค๋ฅธ ์ฌ๋๋ค๊ณผ์ ์ํํ ์ปค๋ฎค๋์ผ์ด์
๋ฅ๋ ฅ์ ์ฆ๋ช
ํ ์ ์๊ฒ ๋๋ค. (= soft skill๋ก ์ฐ๊ฒฐ๋จ)</li></ul></li><li>์ฝ๋ฉ ์ค๋ ฅ๊ณผ ์ฝ๋ ํ์ง ๋ณด์ฆ ๊ฐ๋ฅ: ์์ฑํ ์ฝ๋์ ๋ํด ๊ฒํ ๋ฐ ํผ๋๋ฐฑ์ ๋ฐ์ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ์ฝ๋ ํ์ง์ ๊ฐ์ ํ๊ณ ๋ ๋์ ๊ฐ๋ฐ์๋ก ์ฑ์ฅํ ์ ์๋ค.</li><li>๋ฌธ์ ํด๊ฒฐ ๋ฅ๋ ฅ: ๋ฒ๊ทธ ์์ ๋ฐ ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ ๊ณผ์ ์์ ๋ฌธ์ ๋ถ์ ๋ฐ ํด๊ฒฐ ๋ฅ๋ ฅ์ ๋ณด์ฌ์ค ์ ์๋ค.</li><li>์ ๋ฌธ์ฑ ๊ฐํ: ๊ธฐ์ฌํ๋ ์คํ์์ค ์ฃผ์ ๊ฐ ์ง์ํ๊ณ ์ ํ๋ ๋ถ์ผ์ ๊ด๋ จ์์ผ๋ฉด, ๊ทธ ๋ถ์ผ์์์ ์ ๋ฌธ์ฑ์ ์ฆ๋ช
ํ ์ ์๋ค.</li></ul><p>์คํ์์ค ๊ธฐ์ฌ ๋ฐฉ๋ฒ์ [์ฌ๊ธฐ](์ถํ ๋งํฌ ์ถ๊ฐ ์์ )๋ฅผ ์ฐธ๊ณ ํ๋ฉด ๋๋ฉฐ, ์ฌ๊ธฐ์๋ ์คํ์์ค ํ๋ก์ ํธ๋ฅผ ์ง์ํ๋ ํ๋ก๊ทธ๋จ์ ์ ์ด๋ณด๊ณ ์ ํ๋ค.<br>์ด์ฐจํผ ์คํ์์ค์ ๊ธฐ์ฌํ ๊ฑฐ๋ฉด โจ๊ฐ์ง๋๊ฒโจ ํ๋๊ฒ ์ข์ง ์์๊ฐ ใ
ใ
</p><p>์ฌ๋ฌ ๊ฐ์ง ํ๋ก๊ทธ๋จ์ด ์๋๋ฐ, ๊ทธ ์ค ๊ฐ์ฅ ์ถ์ฒํ๋ ํ๋ก๊ทธ๋จ์ ๋ฐ๋ก NIPA์์ ์ด์ ์ค์ธ ์คํ์์ค ์ํ๊ณ ์ง์ ์ฌ์
์ด๋ค.</p><p><br><br></p><h2 id="5-๐-FAQ"><a href="#5-๐-FAQ" class="headerlink" title="5. ๐ FAQ"></a>5. ๐ FAQ</h2><p>ํ์ฌ๋ ๋ค์ํ SW ํ๋ก๊ทธ๋จ์์ ๋ฉํ ๋ก ํ๋ํ๊ณ ์๋๋ฐ, ์ทจ์
๊ด๋ จํด์ ๋ง์ด ๋ค์ด์ค๋ ์ง๋ฌธ๋ค์ ํ ๋ฒ ์ ๋ฆฌํด๋ณด์๋ค.</p><blockquote><h4 id="Q1-ํฌํธํด๋ฆฌ์ค์์-๊ฐ์ฅ-๋์-๋๋-ํ๋์"><a href="#Q1-ํฌํธํด๋ฆฌ์ค์์-๊ฐ์ฅ-๋์-๋๋-ํ๋์" class="headerlink" title="Q1. ํฌํธํด๋ฆฌ์ค์์ ๊ฐ์ฅ ๋์ ๋๋ ํ๋์?"></a>Q1. ํฌํธํด๋ฆฌ์ค์์ ๊ฐ์ฅ ๋์ ๋๋ ํ๋์?</h4><br>์๋ฌด๋๋ `๋ํ ์์ ๋ด์ญ` ๋ฐ `ํ๋ก์ ํธ`๊ฐ ๊ฐ์ฅ ๋์์ด ๋๋ ๊ฒ ๊ฐ๋ค.<p>๋ค๋ง ์ด ๋ ๊ฐ์ง ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ฉด ๋งค์ฐ ์ข๊ฒ ์ง๋ง, ๋ชจ๋ ์๋ค์ํผ ํ์ค์ด ๊ทธ๋ ๊ฒ ๋
น๋ก์น ์๋ค.<br>๋ฐ๋ผ์ ๋๋ <strong><code>ํ๋ก์ ํธ</code>๋ ํ์</strong>๋ก ๋ค๊ณ ๊ฐ๊ณ , <strong><code>๋ํ ์์ ๋ด์ญ</code>์ ์ ํ์ </strong>์ผ๋ก ๊ฐ์ ธ๊ฐ๋ ๊ฒ์ ์ถ์ฒํ๋ค.<br>(๊ฐ์ธ์ ์ผ๋ก ์ ๊ณต ๋น์ ๊ณต์ ๋ ๋, ๋ํ ์์ ์์ฒด๋ 95%์ ์ด๊ณผ 5%์ค๋ ฅ์ด ์์ด์ผ ํ๋ค๊ณ ์๊ฐํ๋ค)</p></blockquote><blockquote><h4 id="Q2-์ง๋ฌด์-๊ด๋ จ-์๋-ํ๋ก์ ํธ๋ฅผ-ํฌํจํด๋-๋ ๊น-ex-๋ฐฑ์๋-์ง๋ฌด-ํ๋ก ํธ-c์ธ์ด-๊ด๋ จ-ํ๋ก์ ํธ"><a href="#Q2-์ง๋ฌด์-๊ด๋ จ-์๋-ํ๋ก์ ํธ๋ฅผ-ํฌํจํด๋-๋ ๊น-ex-๋ฐฑ์๋-์ง๋ฌด-ํ๋ก ํธ-c์ธ์ด-๊ด๋ จ-ํ๋ก์ ํธ" class="headerlink" title="Q2. ์ง๋ฌด์ ๊ด๋ จ ์๋ ํ๋ก์ ํธ๋ฅผ ํฌํจํด๋ ๋ ๊น? (ex. ๋ฐฑ์๋ ์ง๋ฌด - ํ๋ก ํธ, c์ธ์ด ๊ด๋ จ ํ๋ก์ ํธ)"></a>Q2. ์ง๋ฌด์ ๊ด๋ จ ์๋ ํ๋ก์ ํธ๋ฅผ ํฌํจํด๋ ๋ ๊น? <br>(ex. ๋ฐฑ์๋ ์ง๋ฌด - ํ๋ก ํธ, c์ธ์ด ๊ด๋ จ ํ๋ก์ ํธ)</h4><br><p>๋ฌด์กฐ๊ฑด ๋นผ์ผํ๋ค. ๋ฃ์ด๋ ์ด์ฐจํผ ์๋ณธ๋ค.<br>ํฌํธํด๋ฆฌ์ค๋ <strong>์์ ์ ์ญ๋์ ๋ณด์ฌ์ฃผ๋ ๋๊ตฌ</strong>์ด๊ธฐ ๋๋ฌธ์, ์ด ๋ ์๊ธฐ ์ดํ์ ์ ๋๋ก ํ์ง ๋ชปํ ๊ฒฝ์ฐ ์์ฆ ๊ธฐ๊ณ ๋๋ ๊ฐ๋ฐ์ ์ง๋ง์๋ค์๊ฒ ๋ฌปํ๊ธฐ ์ญ์์ด๋ค.</p></blockquote><blockquote><h4 id="Q3-ํฌํธํด๋ฆฌ์ค-๋ง๋ค๋ฉด์-์ ๊ณต๊ณผ๋ชฉ-์๊ณ ๋ฆฌ์ฆ-๋ฐ์ดํฐ๋ฒ ์ด์ค-๋ฑ-ํ์ต๋ฒ"><a href="#Q3-ํฌํธํด๋ฆฌ์ค-๋ง๋ค๋ฉด์-์ ๊ณต๊ณผ๋ชฉ-์๊ณ ๋ฆฌ์ฆ-๋ฐ์ดํฐ๋ฒ ์ด์ค-๋ฑ-ํ์ต๋ฒ" class="headerlink" title="Q3. ํฌํธํด๋ฆฌ์ค ๋ง๋ค๋ฉด์ ์ ๊ณต๊ณผ๋ชฉ(์๊ณ ๋ฆฌ์ฆ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ) ํ์ต๋ฒ"></a>Q3. ํฌํธํด๋ฆฌ์ค ๋ง๋ค๋ฉด์ ์ ๊ณต๊ณผ๋ชฉ(์๊ณ ๋ฆฌ์ฆ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ) ํ์ต๋ฒ</h4><br><p>์ด๋ฐ ๋ง์ด ์๋ค. ์นผ์ ์ฐ๋ฉด ๋ฌด๋ผ๋ ์ฐ์. ๊ทธ๋ฅ <code>ํ๋ก์ ํธ๋ฅผ ํ๋ฉด ๋๋ค</code>.<br>๋ฌผ๋ก ๋งจ ๋
์ ํค๋ฉ์ด๋ผ๊ณ , ํ๋ก์ ํธ๋ฅผ ๋ค์ด๊ฐ๋ฉด โ๊ทธ๋์ ๋ ๋๋์ฒด ๋ญ ํด์ผํ์งโ๋ผ๋ฉฐ ๊ฐํก์งํกํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.<br>๋ง์ฝ ๋ด๊ฐ ํ๋ก์ ํธ๋ฅผ ์ ํ ํด๋ณธ ์ ์ด ์๊ฑฐ๋ ์์์ ์ ๋ชป์ฐพ๊ฒ ๋ค ์ถ์ผ๋ฉด <strong>์ ํ๋ธ๋ ๋ธ๋ก๊ทธ, ๊ฐ์ข
ํ์ต ์ฌ์ดํธ์ ์
๋ก๋๋ ํ๋ก์ ํธ๋ฅผ ํด๋ก ์ฝ๋ฉ ํด๋ณด์.</strong><br>๊ทธ๊ฒ ์ด๋ ์ ๋ ์ต์ํด์ก๋ค๋ฉด ๊ทธ ๋๋ถํฐ ์ํ๋ ์ฃผ์ ๋ก ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด ๋๋ค. ๊ทธ๋ฌ๋ฉด ์์ฐ์ค๋ฝ๊ฒ ์ปดํจํฐ ๊ณต๋ถ๋ฅผ ํ ์ ์๋ค.</p><p>๋ค๋ง <strong>์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋ก ๊ณต๋ถ๊ฐ ํ์ํ๋ค.</strong> ๊ธฐ์
์ฐ๊ณ๊ฐ ์๋ ์ด์ ํ์ ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์
์ ํด์ผํ๊ธฐ ๋๋ฌธ์, ์ฐ๋ฆฌ๊ฐ ์๊ฐํ๋ ์๊ณ ๋ฆฌ์ฆ๋ค์ ๊ตฌํํ ๊ธฐํ๊ฐ ๊ฑฐ์ ์์ ์ ๋ฐ์ ์๋ค.</p></blockquote><blockquote><h4 id="Q4-ํ๋ก์ ํธ-์์ค์-์ด๋๊น์ง"><a href="#Q4-ํ๋ก์ ํธ-์์ค์-์ด๋๊น์ง" class="headerlink" title="Q4. ํ๋ก์ ํธ ์์ค์ ์ด๋๊น์ง?"></a>Q4. ํ๋ก์ ํธ ์์ค์ ์ด๋๊น์ง?</h4><br><p>๋ ์ ์์ผ๋ฉด <code>์ค์๋น์ค(๋ฐฐํฌ)</code>๊น์ง ํ๋ ๊ฒ์ ์ถ์ฒํ๋ค.</p><p>์์ฆ์ ํฌํธํด๋ฆฌ์ค ์ค๋น๋ฅผ ๊ตญ๋น์ง์(KDT)์์ ๋ง์ด ํ๋๋ฐ, ์ฌ๊ธฐ์ ์๋ฒ๋น์ฉ๊น์ง ์ง์ํด์ฃผ๊ณ ์๊ธฐ ๋๋ฌธ์ ์๋น์ค ๋ฐฐํฌ๊น์ง ํ๋ ๊ฒฝ์ฐ๊ฐ ๊ต์ฅํ ๋ง๋ค. ์ด๋ ๊ณง ์๊ฐ์ด ๊ฐ ์๋ก ์คํ์ด ์ํฅ์กฐ์ค ๋๋ค๋ ์๋ฏธ๋ฉฐ, ํ๋ฒํ๊ฒ ํ๋ค๊ฐ๋ ๋จ๋ค์๊ฒ ์น์ฌ ๋ฝํ์ง ๋ชปํ ๊ฐ๋ฅ์ฑ์ด ํฌ๋ค(โฆ)</p><p>๊ฐ์ธ์ ์ผ๋ก ์ฃผ๋์ด ๊ฐ๋ฐ์๋ผ๋ฉด ๋ฐฐํฌ๊น์ง๋ ๋๋ฌด ์ค๋ฒ์คํ์ด๋ผ ์๊ฐํ์ง๋งโฆ ์ด์จ๋ ๊ฐ์ ๋ค๋ฅธ ๊ฒฝ์์๋ค ์ฌ์ด์์ ๋จ๋ค๋ฅธ ๋ชจ์ต์ ๋ณด์ด๊ธฐ ์ํด์๋ ๋ชปํด๋ ์ค๊ฐ์ ํด์ผํ๊ธฐ ๋๋ฌธ์, ๋ ์ ์์ผ๋ฉด ๋ฐฐํฌ๊น์ง ํ๋ ๊ฒ์ ์ถ์ฒํ๋ค.</p></blockquote><blockquote><h4 id="Q5-๊ฐ๋ฐ์๋-ํ๋ ฅ์-์-๋ณธ๋ค๋-๋ง์ด-๋ง๋๊ฐ"><a href="#Q5-๊ฐ๋ฐ์๋-ํ๋ ฅ์-์-๋ณธ๋ค๋-๋ง์ด-๋ง๋๊ฐ" class="headerlink" title="Q5. ๊ฐ๋ฐ์๋ ํ๋ ฅ์ ์ ๋ณธ๋ค๋ ๋ง์ด ๋ง๋๊ฐ?"></a>Q5. ๊ฐ๋ฐ์๋ ํ๋ ฅ์ ์ ๋ณธ๋ค๋ ๋ง์ด ๋ง๋๊ฐ?</h4><p><img src="2.png"><br><br></p><p>๊ฐ์ธ์ ์ผ๋ก ์ง๊ธ ์ ๊ณ ์๋ FAQ์ค ๋ชจ๋ ์ฌ๋๋ค์ด ์ด ์ง๋ฌธ์ ๊ผญ ๋ด์คฌ์ผ๋ฉด ์ถ๋ค.<br>์๋๋ค. ๋ณธ๋ค. <code>๋ฌด์กฐ๊ฑด ๋ณธ๋ค</code>.</p><p>๊ธฐ์
๊ณต์ ๋ธ๋ก๊ทธ๋ KDT ์
์ฌ ์ฌ๋ก, ์ ํ๋ธ๊ฐ์ ๊ณณ์ ๋ณด๋ฉด, โ๋น์ ๊ณต์์ธ๋ฐ ๊ฐ๋ฐ์ง๊ตฐ์ผ๋ก ์ทจ๋ฝํด์ ์ด๋ด 6000์ด์ ๋ฐ์์~โํ๋ ๋ด์ฉ์ ์ฝ๊ฒ ๋ณผ ์ ์๋ค.<br>์ด ์ฌ๋ก๋ค์ ๋ง์ ๋น์ ๊ณต์๋ค์๊ฒ ํฌ๋ง์ ์ฃผ๊ธฐ๋ ํ์ง๋ง, ๋์์ ์ผ๋ถ๋ง ๋ณด๊ณ ์ ์ฒด๋ฅผ ํ๋จํ๋ ์ค๋ฅ๋ฅผ ๋ฒํ๊ฒ ํ ์ ์๋ค.<br>๋ค๋ค ์์ฐ ์ค์ ์๊ณ ์์ ๊ฒ์ด๋ค. ์ ์ด๋ฐ ๊ฒ๋ค์ด ๋์ ๋ค์ด์ค๋๊ฐ. ๋ฐ๋ก <strong>๋น์ ๊ณต์๊ฐ ์ ๊ณต์๋ ์ธ์์ ๊ฐ๋ฐ์ง๊ตฐ์ ์ทจ๋ฝํ๋ค ๋ผ๋ ๊ฒ ์์ฒด๊ฐ ๊ต์ฅํ ์ด๋ ต๊ธฐ ๋๋ฌธ</strong>์ด๋ค.</p><p>๊ธฐ์
์
์ฅ์์์ผ โ์ฐ๋ฆฌ๋ ์ ๊ณต/๋น์ ๊ณต์ ๊ฐ๋ฆฌ์ง ์๊ณ ์ค๋ ฅ์ด ์์ผ๋ฉด ๋ฝ์ต๋๋คโ๋ผ๋ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๋ ค๋ ์๋๋ก ๋ง๋ค์๊ฒ ์ง๋ง,<br>ํ์ค์ ์ผ๋ก ์ ๊ณต์๋ ๋ค์ํ ๊ต์๋ ๋ฐ ์ ๋ฌธ ์ปค๋ฆฌํ๋ผ์ ํตํด ์ฒด๊ณ์ ์ธ ๊ต์ก์ ๋ฐ์ ๊ธฐํ๊ฐ ๋ง๊ณ , ๋น์ ๊ณต์๋ ์ด๋ฌํ ๋ฆฌ์์ค๊ฐ ๋ถ์กฑํด ๋ ํฐ ๋
ธ๋ ฅ์ด ํ์ํ ํธ์ด๋ค.<br>๋ฐ๋ผ์ ๋จ์ํ ๋ฏธ๋์ด์์ ๋ณธ ์ฑ๊ณต ์ฌ๋ก๋ง์ ๋ณด๊ณ , ํนํ ๋น์ ๊ณต์ ์ผ์๋ก ์๋ฌด ๋
ธ๋ ฅ๋ ํ์ง ์์์์๋ ๋ถ๊ตฌํ๊ณ โ๋๋ ์ ๋ ๊ฒ ๋ ๊ฑฐ์ผโ๋ผ๊ณ ํฌ๋ง๋ง ๊ฐ์ง๋ค๊ฐ ํฐ ๋ญํจ๋ฅผ ๋ณผ ์ ์๋ค.<br><br></p><p>๊ทธ๋ ๋ค๋ฉด ๊ฐ๋ฐ์๊ฐ ๋๊ธฐ ์ํด SW๋ก ๋ฐ์ด ๋ ๋น์ ๊ณต์๋ค์ ์ด๋ป๊ฒ ํด์ผํ๋, <code>๊ณต๋ถ ๊ธฐ๋ก</code>์ ๋จ๊ธฐ๋ฉด ๋๋ค.<br>์์๋ ์ ์์ง๋ง, ์ ๊ณต์๋ค์ ์ ๋ฌธ๊ฐ์๊ฒ ์ ๋ฌธ ์ปค๋ฆฌํ๋ผ์ผ๋ก ์ปดํจํฐ ๊ณต๋ถ๋ฅผ ํ๊ธฐ ๋๋ฌธ์ ์๋์ ์ผ๋ก ์ ๋ฆฌํ ์
์ฅ์ผ ์ ๋ฐ์ ์๋ค.<br>๊ทธ๋ฆฌ๊ณ ์ด ์คํ์ <strong>ใ
ใ
๋ํ๊ต ์ปดํจํฐ๊ณตํ๊ณผ ์กธ์
</strong> ๊ฐ์ ํ์์ ๋จ ํ์ค๋ก ์์ถํด์ ์ค๋ช
ํ ์ ์๋๋ฐ ์ด๊ฒ ๋ํ ์ ๋ฆฌํ๊ฒ ์ ์ฉ๋ ์ ๋ฐ์ ์๋ค.<br>ํ์ ๋ ๊ธ์์/ํ์ด์ง ๋ด์์ ์์ ์ด ํ ์ ์๋ ๊ฒ๋ค์ ์ฌ๋ฌ ๊ฐ ๋์ดํด์ผ ํ๋๋ฐ, ๋น์ ๊ณต์์ผ ๊ฒฝ์ฐ โ์ด๋ฐ ๊ฒ์ ํ์ต๋๋คโ๋ฅผ ๋์ดํ ๋<br>์ ๊ณต์๋ โํ๊ณผ ์กธ์
โ ํ๋๋ก ๊ธฐ๋ณธ์ ์ธ ์ปดํจํฐ ๊ณต๋ถ๋ฅผ ํ๋ค๋ ๊ฒ์ ์
์ฆํ ์ ์์ผ๋ฉฐ ๋จ์ ๊ณต๊ฐ์๋ ์๊ธฐ์ดํ์ ๋ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.</p><p>์ฆ, ๋น์ ๊ณต์๋ค์ ์ ๊ณต์๋ค์ <strong>์กธ์
</strong> ํ์ดํ์ ๋น๋น ์ ์๋ ์คํ์ ๋ง๋ค์ด๋์ผ ๊ธฐ์
์์๋ ์์ฉ์ ํ๋๋ฐ, ์ด๋ฌํ ์ฑ๊ณผ๋ฅผ ์
์ฆํ๋ ๋ฐฉ๋ฒ์ ๊ฒฐ๊ตญ <code>๋ฌด์กฐ๊ฑด ๊ธฐ๋ก</code>๋ฐ์ ์๊ธฐ ๋๋ฌธ์ ๋ฌด์์ ๋ฐฐ์ฐ๋ ๊ธฐ๋ก์ ๋จ๊ธฐ๋ ๊ฒ์ ์ถ์ฒํ๋ค.<br><br></p><p>๋ง์ด ๊ธธ์ด์ก๋๋ฐ ์ ๋ฆฌํ์๋ฉด,</p><ul><li>๊ธฐ์
์ (๋น์ฐํ๊ฒ๋) <strong>์
์ฆ๋ ์ธ์ฌ</strong>๋ฅผ ๋ฝ๊ธธ ์ํ๋ฉฐ</li><li>๊ณต๋ถ ๊ธฐ๋ก์ด ์๋ ์ด์ <strong>์ ๋ฌธ๊ณผ์ ์ ๋ฐ์์์ ํ์คํ ์ฆ๋ช
ํ ์ ์๋ ์ ๊ณต์๋ค์ด ์ ๋ฆฌํ</strong> ๊ฒ์ด ๋น์ฐ์ง์ฌ์ด๋ค.</li><li>๋ฐ๋ผ์ ํ๋ ฅ์ ๋ฌด์กฐ๊ฑด ๋ณธ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.</li><li>๋น์ ๊ณต์์ผ์๋ก ์ ๊ณต์์์ ๊ฒฉ์ฐจ๋ฅผ ์ค์ด๊ธฐ ์ํด์ <code>๊ณต๋ถ๊ธฐ๋ก</code>์ ๋จ๊ธฐ๋ ๊ฒ์ ์ถ์ฒํ๋ค.</li></ul></blockquote><blockquote><h4 id="Q6-์ทจ์ค์-์ธ์ ๋ถํฐ-ํด์ผํ๋๊ฐ"><a href="#Q6-์ทจ์ค์-์ธ์ ๋ถํฐ-ํด์ผํ๋๊ฐ" class="headerlink" title="Q6. ์ทจ์ค์ ์ธ์ ๋ถํฐ ํด์ผํ๋๊ฐ?"></a>Q6. ์ทจ์ค์ ์ธ์ ๋ถํฐ ํด์ผํ๋๊ฐ?</h4><br><p>์ด ๊ธ์ ๋ณด๋ ๋น์ฅ ์์ํ๋ ๊ฒ์ ์ถ์ฒํ๋ค.</p><p>๋ฏธ๋ฆฌ ์๊ธฐ์๊ฐ์, ํ๋ก์ ํธ, ํฌํธํด๋ฆฌ์ค, ์ฝ๋ฉํ
์คํธ ๋ฑ์ ์ค๋นํด๋ด์ผ ๋์ค์ ๋ดค์ ๋ ๋ญ๊ฐ ๋ถ์กฑํ์ง ํ๋จํ๊ณ ์์ผ๋ก์ ๊ณํ์ ์์ํ๊ฒ ์ธ์ธ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.<br>์ด ๋ธ๋ก๊ทธ ๋ง๊ณ ๋ ์ธํฐ๋ท์ ์ข์ ๋ด์ฉ๋ค์ด ๋ง๊ธฐ ๋๋ฌธ์, ์ธํฐ๋ท์ ๋ค์ ธ๋ณด๊ณ ์ฃผ๋ณ ๊ฐ์ฐ์๋ ์ฐธ์ฌํด๋ณด๋ฉด์ ์์ ๋ง์ ์คํ์ ์ด๋ป๊ฒ ๋ฝ๋ผ ์ ์์์ง ์ถฉ๋ถํ ๊ณ ๋ฏผํ๋ ์๊ฐ์ ๊ฐ์ก์ผ๋ฉด ์ข๊ฒ ๋ค.</p></blockquote><p><br><br></p><h2 id="6-๐-๋ง์ง๋ง-ํ๊ณ -์ถ์-๋ง"><a href="#6-๐-๋ง์ง๋ง-ํ๊ณ -์ถ์-๋ง" class="headerlink" title="6. ๐ ๋ง์ง๋ง ํ๊ณ ์ถ์ ๋ง"></a>6. ๐ ๋ง์ง๋ง ํ๊ณ ์ถ์ ๋ง</h2><ul><li>ํฌํธํด๋ฆฌ์ค๋ ์ ๋ฐ ๊ฒธ์ํ๊ฒ ์์ฑํ์ง ๋ง์. ์์ฃผ ์ ๋ฅํ ๊ฒ์ฒ๋ผ ๊พธ๋ฏธ์</li><li>๋น ๋ฅผ์๋ก ์ํด๋ณผ๊ฒ ์ ํ ์๋ค. ๋ฏธ๋ฆฌ๋ฏธ๋ฆฌ ์ค๋นํ์. ๋ญ๋ผ๋ ๋ฏธ๋ฆฌ ํด๋์ผ ๋์ค์ ๋ดค์ ๋ ๊ณ ์น ์ ์๊ธฐ ๋๋ฌธ์ด๋ค</li></ul><p><br><br></p><h2 id="7-๐-๊ฐ์ด-๋ณด๋ฉด-์ข์-์์ค๋ค"><a href="#7-๐-๊ฐ์ด-๋ณด๋ฉด-์ข์-์์ค๋ค" class="headerlink" title="7. ๐ ๊ฐ์ด ๋ณด๋ฉด ์ข์ ์์ค๋ค"></a>7. ๐ ๊ฐ์ด ๋ณด๋ฉด ์ข์ ์์ค๋ค</h2><ul><li><a href="https://ruby-kim.github.io/2022/05/10/Retrospect/Bachelor/">๋ํ์ ๋ ์์๋ค๋ฉด ์ข์์ SW ํ</a></li><li><a href="https://ruby-kim.github.io/2022/04/23/Retrospect/Junior/">[ํ๊ธฐ] ์คํํธ์
/์ค์๊ธฐ์
/๋๊ธฐ์
์ธํด ๋ฐ ์ ๊ท์ง ์ค๋น ๊ณผ์ </a></li></ul><p><br><br></p><h2 id="8-์ด๋ฏธ์ง-์ถ์ฒ"><a href="#8-์ด๋ฏธ์ง-์ถ์ฒ" class="headerlink" title="8. ์ด๋ฏธ์ง ์ถ์ฒ"></a>8. ์ด๋ฏธ์ง ์ถ์ฒ</h2><ul><li><a href="https://www.saramin.co.kr/zf_user/">์ฌ๋์ธ</a></li><li><a href="https://www.miricanvas.com/ko">๋ฏธ๋ฆฌ์บ๋ฒ์ค</a></li><li><a href="https://www.flaticon.com/kr/free-icons/pictogram">Flaticon</a></li><li><a href="https://namu.wiki/w/%EB%82%98%EB%AC%B4%EC%9C%84%ED%82%A4:%EB%8C%80%EB%AC%B8">๋๋ฌด์ํค</a></li><li><a href="https://www.oss.kr/">OSS</a></li><li>๊ทธ ์ธ ์ง์ ์ ์</li></ul>]]></content>
<categories>
<category> ๐ Retrospect </category>
</categories>
<tags>
<tag> Retrospect </tag>
<tag> Job </tag>
</tags>
</entry>
<entry>
<title>[์คํ์์ค] 2024๋
9์ ์คํ์์ค ์์์ง (1): Fusion OS, KUtrace, Gitlab ๋งค๊ฐ ๊ฒํ ์ฌ๊ฑด, SQLite Transactions, Sendune, Garage</title>
<link href="/2024/09/10/OpenSource/2409(1)/"/>
<url>/2024/09/10/OpenSource/2409(1)/</url>
<content type="html"><![CDATA[<p><img src="0.png"></p><p>(์ฐธ๊ณ /์ถ์ฒ)<br>2024๋
์ ๋ณดํต์ ์ฐ์
์งํฅ์: <a href="https://www.oss.kr/open_up_intro">OpenUP ํ๋ก๊ทธ๋จ</a>์ 2024๋
๊ธฐ์ฌํ ํ๋ก ํฐ์ด๋ก์, ์คํ์์คSW๋ฅผ ํจ๊ป ๊ฐ๋ฐ ๋ฐ ๊ณต์ ํ๊ธฐ ์ํด ์์ฑ๋์์ต๋๋ค.<br>ํด๋น ๋ด์ฉ์ ์ github ํํ์ด์ง์ Explore repositories ๋ฐ feed ๋ด์ฉ์ ํ ๋๋ก ๋ง๋ค์ด์ก์ผ๋ฉฐ, ๊ฒ์๊ธ์ ๋ฌธ์ ์ฌํญ์ด ์์ผ์ ๋ถ๋ค์ ๋๊ธ ๋๋ <a href="mailto:[email protected]">[email protected]</a>์ผ๋ก ์ฐ๋ฝ ๋ถํ๋๋ฆฝ๋๋ค.</p><p><br><br><br></p><h2 id="Fusion-OS-Nim์ผ๋ก-๊ตฌํ๋-์ทจ๋ฏธ์ฉ-OS"><a href="#Fusion-OS-Nim์ผ๋ก-๊ตฌํ๋-์ทจ๋ฏธ์ฉ-OS" class="headerlink" title="Fusion OS: Nim์ผ๋ก ๊ตฌํ๋ ์ทจ๋ฏธ์ฉ OS"></a>Fusion OS: Nim์ผ๋ก ๊ตฌํ๋ ์ทจ๋ฏธ์ฉ OS</h2><img src="./1.png" width="300"><ul><li>Repository: <a href="https://github.com/khaledh/fusion">https://github.com/khaledh/fusion</a></li><li>Nim ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ๋ x86-64 ์ํคํ
์ฒ์ฉ ์ทจ๋ฏธ์ฉ ์ด์์ฒด์ </li><li>ํ์ฌ UEFI ๋ถํธ๋ก๋, ๋ฌผ๋ฆฌ ๋ฐ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์, ์ฌ์ฉ์ ๋ชจ๋, ์ ์ ํ ๋ฉํฐํ์คํน, ์์คํ
ํธ์ถ, ELF ๋ก๋, ํ์ด๋จธ ์ธํฐ๋ฝํธ ๊ธฐ๋ฅ์ ์ ๊ณต ์ค</li><li>ํ๋ก์ธ์ค ๊ฐ ํต์ , ๋์คํฌ I/O, ํ์ผ ์์คํ
, ํค๋ณด๋/๋ง์ฐ์ค ์
๋ ฅ, ์
ธ GUI ๋ฐ ๋คํธ์ํน์ ์ถ๊ฐ๋ฅผ ๊ณํ ์ค</li></ul><br><h2 id="KUtrace-์ ๋น์ฉ-Linux-์ปค๋-์ถ์ -๊ธฐ๋ฅ"><a href="#KUtrace-์ ๋น์ฉ-Linux-์ปค๋-์ถ์ -๊ธฐ๋ฅ" class="headerlink" title="KUtrace: ์ ๋น์ฉ Linux ์ปค๋ ์ถ์ ๊ธฐ๋ฅ"></a>KUtrace: ์ ๋น์ฉ Linux ์ปค๋ ์ถ์ ๊ธฐ๋ฅ</h2><ul><li>Repository: <a href="https://github.com/dicksites/KUtrace">https://github.com/dicksites/KUtrace</a></li><li>KUtrace๋ ํนํ ๋ค์ค ๊ธฐ๊ณ ์์คํ
์์ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์ดํดํ๋ ๋ฐ ๋์์ ์ฃผ๊ธฐ ์ํด ์ค๊ณ๋ ์ ๋น์ฉ Linux ์ปค๋ ์ถ์ ๊ธฐ๋ฅ ์คํ์์ค</li><li>eBPF ๋๊ตฌ์ ๋ฌ๋ฆฌ KUtrace๋ ์ปค๋ ํจ์น์ ๋ฃจํธ ์ ๊ทผ ๊ถํ์ด ํ์ํ์ฌ ์ ๊ทน์ ์ธ ์ ์ง ๊ด๋ฆฌ๊ฐ ํ์ํจ</li><li>x86 ๋ฐ ARM ํ๋ก์ธ์๋ฅผ ์ง์</li><li>ํจ์จ์ด ์ข๋ค๋ฉฐ ๊ทน์ฐฌ์ ๋ฐ๋ ์ค</li></ul><br><h2 id="Gitlab-๋งค๊ฐ-๊ฒํ -์ฌ๊ฑด"><a href="#Gitlab-๋งค๊ฐ-๊ฒํ -์ฌ๊ฑด" class="headerlink" title="Gitlab ๋งค๊ฐ ๊ฒํ ์ฌ๊ฑด"></a>Gitlab ๋งค๊ฐ ๊ฒํ ์ฌ๊ฑด</h2><img src="./2.jpg" width="300"><ul><li>Gitlab์ด ๋งค๊ฐ์ ๊ณ ๋ คํ๊ณ ์์ด ์ฌ์ฉ์๋ค ์ฌ์ด์์ ์๋น์ค ๋ชจ๋ธ์ ์ ์ฌ์ ์ธ ์ข
๋ฃ๋ ๋ณ๊ฒฝ์ ๋ํ ์ฐ๋ ค๊ฐ ์ ๊ธฐ๋๊ณ ์์</li><li>Gitlab๊ณผ ๊ฐ์ ์คํ ์์ค ์ต์
์ ์ฅ์ ์ ๋ํด ํ ๋ก ํ๋ฉฐ, ๋ ์ฌ์ด ๋ง์ด๊ทธ๋ ์ด์
๊ณผ ์ปค๋ฎค๋ํฐ ์ง์์ ์ธ๊ธํ๊ณ , Datadog์ด๋ IBM๊ณผ ๊ฐ์ ์ ์ฌ์ ๊ตฌ๋งค์์ ๋ํด์๋ ์ถ์ธกํ๋ ์ค</li><li>Gitlab์ ๊ฐ๊ฒฉ ์ ์ฑ
๊ณผ ๊ธฐ์
์ค์ฌ ์ ๊ทผ ๋ฐฉ์์ ๋ํ ๋นํ์ผ๋ก ์ธํด ์ผ๋ถ ์ฌ์ฉ์๋ค์ GitHub์ ๊ฐ์ ๋์์ผ๋ก ์ ํ์ ๊ณ ๋ คํ๊ณ ์์</li></ul><br><h2 id="SQLite-Transactions-์๋ก์ด-SQLite-ํธ๋์ ์
-๋ฒค์น๋งํน-๋๊ตฌ"><a href="#SQLite-Transactions-์๋ก์ด-SQLite-ํธ๋์ ์
-๋ฒค์น๋งํน-๋๊ตฌ" class="headerlink" title="SQLite Transactions: ์๋ก์ด SQLite ํธ๋์ ์
๋ฒค์น๋งํน ๋๊ตฌ"></a>SQLite Transactions: ์๋ก์ด SQLite ํธ๋์ ์
๋ฒค์น๋งํน ๋๊ตฌ</h2><ul><li>Homepage: <a href="https://reorchestrate.com/posts/sqlite-transactions/">https://reorchestrate.com/posts/sqlite-transactions/</a></li><li>Repository: <a href="https://github.com/seddonm1/sqlite-bench">https://github.com/seddonm1/sqlite-bench</a></li><li>ํนํ BEGIN CONCURRENT ๋ธ๋์น๋ฅผ DEFERRED ๋ฐ IMMEDIATE ๋์๊ณผ ๋น๊ตํ๋๋ฐ ๊ฐ๋ ฅํ ๋๊ตฌ</li><li>SQLite์์ ๋์์ฑ์ ๋ฌ์ฑ: ๋ค์ค ์ฐ๊ฒฐ ์ฌ์ฉ, ์ฐ๊ฒฐ ํ๋ง, ํ์ผ I/O ํผ์ก ๊ด๋ฆฌ ๋ฑ์ ๋ชฉํ๋ก ๊ฐ๋ฐ ์ค</li></ul><br><h2 id="Sendune-์คํ์์ค-HTML-์ด๋ฉ์ผ-๋์์ด๋"><a href="#Sendune-์คํ์์ค-HTML-์ด๋ฉ์ผ-๋์์ด๋" class="headerlink" title="Sendune: ์คํ์์ค HTML ์ด๋ฉ์ผ ๋์์ด๋"></a>Sendune: ์คํ์์ค HTML ์ด๋ฉ์ผ ๋์์ด๋</h2><img src="./3.png" width="500"><ul><li>์์ฑ ๋ฐ ์ ์ง๊ฐ ์ด๋ ค์ด html ์ด๋ฉ์ผ ์์ฑ์ ๊ฐ์ํํ๊ธฐ ์ํด ์ ์๋จ</li><li>๋ชจ๋ ์ด๋ฉ์ผ ์๋น์ค ์ ๊ณต์
์ฒด์์ ํธํ์ฑ์ ์ํ ์์ html์ ์์ฑํจ</li><li>Firefox์์ ๋๋๊ทธ ์ค ๋๋กญ ๊ธฐ๋ฅ๊ณผ ๊ด๋ จ๋ ๋ช ๊ฐ์ง ๋ฌธ์ ๊ฐ ๋ณด๊ณ ๋์์์๋ ๋ถ๊ตฌํ๊ณ , ์ปค๋ฎค๋ํฐ์ ๋ฐ์์ ๊ธ์ ์ </li></ul><br><h2 id="Garage-์คํ์์ค-๋ถ์ฐ-๊ฐ์ฒด-์ ์ฅ์"><a href="#Garage-์คํ์์ค-๋ถ์ฐ-๊ฐ์ฒด-์ ์ฅ์" class="headerlink" title="Garage: ์คํ์์ค ๋ถ์ฐ ๊ฐ์ฒด ์ ์ฅ์"></a>Garage: ์คํ์์ค ๋ถ์ฐ ๊ฐ์ฒด ์ ์ฅ์</h2><img src="./4.svg" width="200"><ul><li>Homepage: <a href="https://garagehq.deuxfleurs.fr/">https://garagehq.deuxfleurs.fr/</a></li><li>Repository: <a href="https://git.deuxfleurs.fr/Deuxfleurs/garage">https://git.deuxfleurs.fr/Deuxfleurs/garage</a></li><li>์์ฒด ํธ์คํ
์ ์ํด ์ค๊ณ๋ ์คํ ์์ค ๋ถ์ฐ ๊ฐ์ฒด ์ ์ฅ์ ์๋น์ค: ๋ฐ์ดํฐ๋ฅผ 3๊ฐ์ zone์ ๋ณต์ ํด ์ค๋ณต์ฑ ์ ๊ณต</li><li>Minio๋ณด๋ค ์์ ํ์ผ๊ณผ ๋ณต์ ์์ ๋ ๋์ ์ฑ๋ฅ์ผ๋ก ์ฑํ๋๊ณ ์์</li><li>์ฑ๋ฅ ํฅ์, ๋ฎ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋, ๋ถ์ฐ ํฉ์๋ฅผ ์ํ CRDTs(์ถฉ๋ ์๋ ๋ณต์ ๋ฐ์ดํฐ ์ ํ) ์ง์</li><li>ํ๋์จ์ด๋ฅผ ์ง์ํ๊ณ ํธํ์ฑ์ ์ํด Amazon S3 API๋ฅผ ๊ตฌํํ์ผ๋ฉฐ, NGI POINTER, NLnet / NGI0 Entrust ๋ฐ ์ ๋ฝ ์ฐํฉ์ Horizon 2021 ์ฐ๊ตฌ ๋ฐ ํ์ ํ๋ก๊ทธ๋จ์ ์๊ธ์ผ๋ก ์ง์๋ฐ๊ณ ์์</li></ul>]]></content>
<categories>
<category> ๐ OpenSource </category>
</categories>
<tags>
<tag> Opensource </tag>
</tags>
</entry>
<entry>
<title>[์คํ์์ค] 2024๋
8์ ์คํ์์ค ์์์ง (2): RouteLLM, ๋น์ ์ธ์ด ๋ชจ๋ธ, Tau, AuraFlow, gpu.cpp, Github ์๋ฒ ๋ค์ด</title>
<link href="/2024/08/27/OpenSource/2408(2)/"/>
<url>/2024/08/27/OpenSource/2408(2)/</url>
<content type="html"><![CDATA[<p><img src="0.png"></p><p>(์ฐธ๊ณ /์ถ์ฒ)<br>2024๋
์ ๋ณดํต์ ์ฐ์
์งํฅ์: <a href="https://www.oss.kr/open_up_intro">OpenUP ํ๋ก๊ทธ๋จ</a>์ 2024๋
๊ธฐ์ฌํ ํ๋ก ํฐ์ด๋ก์, ์คํ์์คSW๋ฅผ ํจ๊ป ๊ฐ๋ฐ ๋ฐ ๊ณต์ ํ๊ธฐ ์ํด ์์ฑ๋์์ต๋๋ค.<br>ํด๋น ๋ด์ฉ์ ์ github ํํ์ด์ง์ Explore repositories ๋ฐ feed ๋ด์ฉ์ ํ ๋๋ก ๋ง๋ค์ด์ก์ผ๋ฉฐ, ๊ฒ์๊ธ์ ๋ฌธ์ ์ฌํญ์ด ์์ผ์ ๋ถ๋ค์ ๋๊ธ ๋๋ <a href="mailto:[email protected]">[email protected]</a>์ผ๋ก ์ฐ๋ฝ ๋ถํ๋๋ฆฝ๋๋ค.</p><p><br><br><br></p><h2 id="RouteLLM-LLM-๋ผ์ฐํฐ-์ ๊ณต-๋ฐ-ํ๊ฐ-ํ๋ ์์ํฌ"><a href="#RouteLLM-LLM-๋ผ์ฐํฐ-์ ๊ณต-๋ฐ-ํ๊ฐ-ํ๋ ์์ํฌ" class="headerlink" title="RouteLLM: LLM ๋ผ์ฐํฐ ์ ๊ณต ๋ฐ ํ๊ฐ ํ๋ ์์ํฌ"></a>RouteLLM: LLM ๋ผ์ฐํฐ ์ ๊ณต ๋ฐ ํ๊ฐ ํ๋ ์์ํฌ</h2><img src="./1.png" width="300"><ul><li>Repository: <a href="https://github.com/lm-sys/RouteLLM">https://github.com/lm-sys/RouteLLM</a></li><li>๋น์ฉ ์ต์ ํ์ ์ค์ ์ ๋๊ณ LLM(๋ํ ์ธ์ด ๋ชจ๋ธ) ๋ผ์ฐํฐ๋ฅผ ์ ๊ณตํ๊ณ ํ๊ฐํ๊ธฐ ์ํด ์ค๊ณ๋ ํ๋ ์์ํฌ</li><li>๋ ๊ฐ๋จํ ์ฟผ๋ฆฌ๋ฅผ ์ ๋ ดํ ๋ชจ๋ธ๋ก ๋ผ์ฐํ
ํ์ฌ OpenAI์ ํด๋ผ์ด์ธํธ์ ๋ํ ๋น์ฉ ํจ์จ์ ์ธ ๋์์ ์ ๊ณต</li><li>์ฃผ์ ๊ธฐ๋ฅ: ํ๋ จ๋ ๋ผ์ฐํฐ๋ฅผ ์ ๊ณตํ์ฌ ๋น์ฉ์ ์ต๋ 85%๊น์ง ์ ๊ฐํ ์ ์์ผ๋ฉฐ, ์๋ ์ ํ, ํ ํฐ๋น ๋น์ฉ, ๋ชจ๋ธ ์ ํ๊ณผ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ -> ์์ฐ์ ์ค์ํ๋ ๊ธฐ์
๋ค์๊ฒ ์ ์ฉํ ๊ฒ์ผ๋ก ๋ณด์</li><li>๊ทธ ์ธ๋ก๋ ๋ค์ํ ๋ชจ๋ธ๊ณผ ์ ๊ณต์
์ฒด๋ฅผ ์ง์ํ๋ฉฐ, ์๋ฒ ๋ฉ ์์ฑ์ ์ํด OPENAI_API_KEY๊ฐ ํ์ํ๊ณ ๋น์ฉ๊ณผ ํ์ง์ ๊ท ํ์ ๋ง์ถ๊ธฐ ์ํด ์๊ณ๊ฐ ์กฐ์ ์ด ๊ฐ๋ฅํจ</li></ul><br><h2 id="๋น์ -์ธ์ด-๋ชจ๋ธ-์๊ฐ์ -์์
์-๋ํ-์ด๋ ค์"><a href="#๋น์ -์ธ์ด-๋ชจ๋ธ-์๊ฐ์ -์์
์-๋ํ-์ด๋ ค์" class="headerlink" title="๋น์ ์ธ์ด ๋ชจ๋ธ: ์๊ฐ์ ์์
์ ๋ํ ์ด๋ ค์"></a>๋น์ ์ธ์ด ๋ชจ๋ธ: ์๊ฐ์ ์์
์ ๋ํ ์ด๋ ค์</h2><ul><li>์ต๊ทผ <a href="https://vlmsareblind.github.io/">๋
ผ๋ฌธ</a>์ ๋ฐ๋ฅด๋ฉด GPT-4์ Sonnet 3.5, Gemini-1.5 Pro์ ๊ฐ์ ๋น์ ์ธ์ด ๋ชจ๋ธ(VLM)์ด ์ด๋ฏธ์ง-ํ
์คํธ ์์
์์ ๋ฐ์ด๋์ง๋ง, ๊ฐ๋จํ ์๊ฐ์ ์์
์์ ์ด๋ ค์์ ๊ฒช๊ณ ์๋ค๋ ์ฃผ์ฅ์ด ๋์ด</li><li>๋นํ๊ฐ๋ค์ VLM์ด ํน์ ์์
์์๋ ์คํจํ ์ ์์ง๋ง, ๊ด๋ จ ๋ฐ์ดํฐ๋ก ํ๋ จ๋ ๋ ๋ค๋ฅธ ์์
์์๋ ๋ฐ์ด๋ ์ฑ๊ณผ๋ฅผ ๋ณด์ธ๋ค๊ณ ์ฃผ์ฅํ๋ฉฐ, ๊ณผ์ฅ๋๊ณ ์คํด๋ฅผ ๋ถ๋ฌ์ผ์ผํฌ ์ ์๋ ์ ๋ชฉ์ ๋ํด ๊ฒฝ๊ณ ์ค</li><li>์ด ์ฃผ์ ๋ VLMs๋ฅผ ํ๊ฐํ๋ ๋ณต์ก์ฑ๊ณผ ๊ทธ ํ๊ณ ๋ฐ ๊ฐ์ ์ ์ดํดํ๋ ๊ฒ์ ์ค์์ฑ์ ๊ฐ์กฐํจ</li></ul><br><h2 id="Tau-์คํ์์ค-PaaS"><a href="#Tau-์คํ์์ค-PaaS" class="headerlink" title="Tau: ์คํ์์ค PaaS"></a>Tau: ์คํ์์ค PaaS</h2><img src="./2.png" width="300"><ul><li>Homepage: <a href="https://tau.how/">https://tau.how/</a></li><li>Repository: <a href="https://github.com/taubyte/tau">https://github.com/taubyte/tau</a></li><li>๋คํธ์ํฌ ์๋ ๊ฒ์์ ์ํด libp2p๋ฅผ ์ฌ์ฉํ๊ณ ๋ถ์ฐ ์ ์ฅ์ ์ํด IPFS๋ฅผ ์ฌ์ฉํ๋ Vercel, Netlify, Cloudflare์ ์คํ ์์ค, ์์ฒด ํธ์คํ
ํ๋ซํผ ์๋น์ค(PaaS) ๋์ ์คํ์์ค</li><li>WebAssembly ๋ค์ดํฐ๋ธ๋ก ๋ฒค๋ ์ข
์์ ํผํ๋ ๋ฑ์ ์ด์ ์ด ์์</li><li>๋ค๋ง ์ฌ์ฉ์๋ค์ ๋ฌธ์๊ฐ ๋ชจํธํ๊ณ ๊ฐ๋
์ด ๋ถ๋ถ๋ช
ํ ํธ</li><li>๋ง๋ค์ด์ง ๊ฒ์ ๋นํด ์ฟ ๋ฒ๋คํฐ์ค ๋ฐ Coolify์ CapRover์ ๊ฐ์ ๋ค๋ฅธ PaaS ์๋ฃจ์
๊ณผ์ ๋น๊ตํ๋ฉด ํฐ ์ฐจ์ด์ ์ ์์ผ๋ฉฐ ์ด๋ ๊ณง ํ๋ก์ ํธ์ ์ ์ฌ๋ ฅ์ ๋ํ๋ด๊ณ ์์</li></ul><br><h2 id="AuraFlow-Stable-Diffusion-3์-์คํ์์ค-๋์์ฑ
"><a href="#AuraFlow-Stable-Diffusion-3์-์คํ์์ค-๋์์ฑ
" class="headerlink" title="AuraFlow: Stable Diffusion 3์ ์คํ์์ค ๋์์ฑ
"></a>AuraFlow: Stable Diffusion 3์ ์คํ์์ค ๋์์ฑ
</h2><img src="./3.svg" width="300"><ul><li>Homepage: <a href="https://blog.fal.ai/auraflow/">https://blog.fal.ai/auraflow/</a></li><li>Repository: <a href="https://github.com/fal-ai">https://github.com/fal-ai</a></li><li>flow ๊ธฐ๋ฐ ํ
์คํธ-์ด๋ฏธ์ง ์์ฑ ๋ชจ๋ธ๋ก, v0.1์ ์ด๊ธฐ ์ถ์์์๋ ๋ถ๊ตฌํ๊ณ ๊ฐ๋ฅ์ฑ์ ๋ณด์ฌ์ฃผ๋ ์คํ์์ค</li><li>๊ฐ๋จํ ํ๋กฌํํธ์์๋ ์ ์๋ํ์ง๋ง ๋ณต์กํ ํ๋กฌํํธ์ ๋ถ์ ๋ฌธ์์ ์ด๋ ค์์ ๊ฒช๊ณ ์์ด ๊ฐ์ ์ด ํ์ํจ</li><li>์ค์ ์ธ๊ฐ์ด ์์ฑํ๋ ํ
์คํธ์ ํ๋กฌํํธ ์ฒ๋ฆฌ์ ์์ด NLP์ ์ค์์ฑ์ด ๋๋๋๊ณ ์์</li></ul><br><h2 id="gpu-cpp-ํด๋์ฉ-์ ์์ค-GPU-์ฐ์ฐ์-์ํ-๋ผ์ด๋ธ๋ฌ๋ฆฌ"><a href="#gpu-cpp-ํด๋์ฉ-์ ์์ค-GPU-์ฐ์ฐ์-์ํ-๋ผ์ด๋ธ๋ฌ๋ฆฌ" class="headerlink" title="gpu.cpp: ํด๋์ฉ ์ ์์ค GPU ์ฐ์ฐ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ"></a>gpu.cpp: ํด๋์ฉ ์ ์์ค GPU ์ฐ์ฐ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ</h2><ul><li>Repository: <a href="https://github.com/AnswerDotAI/gpu.cpp">https://github.com/AnswerDotAI/gpu.cpp</a></li><li>OpenGL, Direct3D, Metal์ ์ต์ํ ๊ฐ๋ฐ์๋ค์ด ์ ๊ทผํ ์ ์๋๋ก ๋จ์ผ ํค๋ ํ์ผ API๋ฅผ ์ ๊ณตํ๋ ํด๋์ฉ ์ ์์ค GPU ์ฐ์ฐ์ ์ํ ๊ฒฝ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ</li><li>๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์นGPU ๊ตฌํ์ ์์กด๋จ = ํฌ๋ก์ค ํ๋ซํผ ๊ธฐ๋ฅ๊ณผ dawn ๋ฐ wgpu์ ๊ฐ์ ์ฑ์ํ ๊ตฌํ</li><li>Vulkan, Metal, OpenCL, ROCm, CUDA์ ๊ฐ์ ๋ค๋ฅธ GPU ๊ณ์ฐ ํ๋ ์์ํฌ์์ ์ฑ๋ฅ ๋น๊ต์ ๋ํ ์๊ฒฌ์ด ์ฃผ๋ฅผ ์ด๋ฃจ๊ณ ์์</li></ul><br><h2 id="Github-์๋ฒ๊ฐ-๋ค์ด๋จ"><a href="#Github-์๋ฒ๊ฐ-๋ค์ด๋จ" class="headerlink" title="Github ์๋ฒ๊ฐ ๋ค์ด๋จ"></a>Github ์๋ฒ๊ฐ ๋ค์ด๋จ</h2><img src="./4.png" width="300"><ul><li>2024๋
8์ 15์ผ, Github๊ฐ ๋ค์ด๋๋ ์ฌ๊ฑด์ด ๋ฐ์ํจ</li><li>๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธํ๋ผ ๋ณ๊ฒฝ์ผ๋ก ์ ์ ์ด ๋ฐ์ํ์: ์ค์ ์ง์ค์ ์๋น์ค์ ๋ฌธ์ ์ ๊ณผ ๋ฐฑ์
๊ณํ์ ํ์์ฑ์ด ๊ฐ์กฐ๋จ</li><li>์ด ๋ Actions, Pages, Pull Requests์ ๊ฐ์ ์๋น์ค๊ฐ ์๋ํ์ง ์์์</li></ul>]]></content>
<categories>
<category> ๐ OpenSource </category>
</categories>
<tags>
<tag> Opensource </tag>
</tags>
</entry>
<entry>
<title>OAuth2.0๋ฅผ ์์๋ณด์</title>
<link href="/2024/08/20/Security/Oauth2/"/>
<url>/2024/08/20/Security/Oauth2/</url>
<content type="html"><![CDATA[<p>์์ฆ ๋ก๊ทธ์ธ ๋ฐ ํ์๊ฐ์
๊ตฌํ ์ ํ์๋ผ๋ Oauth2.0์ ๋ํด์ ๊ฐ๋
์ ์์ธํ๊ฒ ํบ์๋ณด๊ณ ์ ํ๋ค.</p><h2 id="OAuth๋"><a href="#OAuth๋" class="headerlink" title="OAuth๋?"></a>OAuth๋?</h2><p>ํ๋ค์์ผ๋ก๋ Open Authorization์ผ๋ก ๋ถ๋ฅด๋ฉฐ, ์น ๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์ธ์ฆ ๋ฐ ๊ถํ์ ๋ถ์ฌํ๋ ๊ฐ๋ฐฉํ ํ์ค ํ๋กํ ์ฝ์ด๋ค.</p><p>์ค๋ช
์ ์์, ์ผ๋จ ์ ๋ช
ํฌํธ์ ๊ฐ๋ฐ ๋ฌธ์์์ ์ ์๋ ๋ด์ฉ์ ํ ๋ฒ ๊ฐ์ ธ์๋ดค๋ค.</p><blockquote><p>์ด ํ๋กํ ์ฝ์์๋ third-party ์ ํ๋ฆฌ์ผ์ด์
์ด ์ฌ์ฉ์์ ๋ฆฌ์์ค์ ์ ๊ทผํ๊ธฐ ์ํ ์ ์ฐจ๋ฅผ ์ ์ํ๊ณ ์๋น์ค ์ ๊ณต์์ API๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ถํ์ ๋ถ์ฌํฉ๋๋ค.<br>๋ํ์ ์ผ๋ก ๋ค์ด๋ฒ ๋ก๊ทธ์ธ, ๊ตฌ๊ธ ๋ก๊ทธ์ธ๊ณผ ๊ฐ์ ์์
๋ฏธ๋์ด ๊ฐํธ ๋ก๊ทธ์ธ์ด ์์ต๋๋ค.<br>OAuth2.0์ ์ฌ์ฉํด third-party ์ ํ๋ฆฌ์ผ์ด์
์ด ์ฌ์ฉ์์ ์์
๋ฏธ๋์ด ํ๋กํ ์ ๋ณด์ ์ ๊ทผํ ์ ์๋๋ก ํฉ๋๋ค.<br>B2B PRISM Live Studio ์ญ์ OAuth2.0์ ์ฌ์ฉํ์ฌ ๊ถํ์ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ OAuth2.0์ ๊ธฐ๋ณธ ๊ฐ๋
์ ์๋ดํ๊ณ , ๊ถํ ๋ถ์ฌ ๋ฐฉ๋ฒ์ ์ค๋ช
ํฉ๋๋ค.</p><p>์ถ์ฒ: <a href="https://guide.ncloud-docs.com/docs/b2bpls-oauth2">NCP ๊ฐ๋ฐ ๋ฌธ์</a></p></blockquote><p>์ด๋ ์ ๋ ๊ฐ๋ฐ์ ์งฌ์ด ์ฐฌ ์ฌ๋์ด๋ผ๋ฉด ๋ฐ๋ก ์ดํดํ ์ ์๊ฒ ์ง๋ง, ๊ฐ๋ฐ์ ์
๋ฌธํ์ง ๋ณ๋ก ์๋๊ฑฐ๋ ๊ฐ๋ฐ ๋ฌธ์ ์ฝ๋๊ฒ ์์ง ์ต์์น ์์ ์ฌ๋๋ค์ ๋ญ ์๋ฆฐ๊ฐ ์ถ์ ๊ฒ์ด๋ค.</p><p>์ฝ๊ฒ ์ค๋ช
ํ์๋ฉด, <code>OAuth๋ ๋ค๋ฅธ ์ฌ์ดํธ, ์ฑ์์ ์์
ํ์๊ฐ์
/๋ก๊ทธ์ธ (๋๋ ๊ฐํธ ํ์๊ฐ์
/๋ก๊ทธ์ธ์ด๋ผ๊ณ ํจ)์ ํ ๋ ์ฌ์ฉ๋๋ ๊ฒ</code>์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.<br>๊ฐ๋ น ์ด๋ค ์ฌ์ดํธ์ ๋ก๊ทธ์ธ์ ํ ๋ <strong>Google๋ก ๋ก๊ทธ์ธํ๊ธฐ</strong>, <strong>Naver๋ก ๋ก๊ทธ์ธํ๊ธฐ</strong>๊ฐ ๋ณด์ธ๋ค๋ฉด ์ด ๋ OAuth๋ฅผ ์ฌ์ฉํ๋ค๋ ์๋ฏธ์ด๋ค.</p><p><br><br></p><h2 id="OAuth-โ2-0โ"><a href="#OAuth-โ2-0โ" class="headerlink" title="OAuth โ2.0โ"></a>OAuth โ2.0โ</h2><p>์ธํฐ๋ท์ ๊ฒ์ํด๋ณด๋ฉด ๋๋ถ๋ถ <code>2.0</code>์ด๋ผ๋ ๋ฒ์ ์ ์ฐพ์ ์ ์๋๋ฐ, ํ์ฌ ๋์ค์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฒ์ ์ด <code>2.0</code>์ด๊ธฐ ๋๋ฌธ์ด๋ค.</p><p>์ฆ ์ด์ ๋ฒ์ (=1.0)์ด ์์์ผ๋ฉฐ, ์ด์ ๋ฒ์ ์์ ๋ณด์ํ ์ ์ด ์๊ฒจ์ 2.0์ด ๋์๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.</p><p>์ด์ ์ ์ฌ์ฉํ ๊ฒ์์ ์ด๋ค ๋ฌธ์ ๊ฐ ์์๋์ง, ๊ทธ๋ฆฌ๊ณ ์ต๊ทผ์๋ ์ 2.0์ ์ฌ์ฉํ๋์ง ์์๋ณด์.</p><h3 id="1-๊ธฐ์กด-์ธ์ฆ-๋ฐฉ์-Basic-Authentication"><a href="#1-๊ธฐ์กด-์ธ์ฆ-๋ฐฉ์-Basic-Authentication" class="headerlink" title="(1) ๊ธฐ์กด ์ธ์ฆ ๋ฐฉ์: Basic Authentication"></a>(1) ๊ธฐ์กด ์ธ์ฆ ๋ฐฉ์: Basic Authentication</h3><p>์ด์จ๋ ๊ฐ์ ๊ฐ๋ฐ์ ์
์ฅ์์ ๋ก๊ทธ์ธ ํ ์ ์ ์๊ฒ ํ๋ก๊ทธ๋จ ์ ๊ทผ ๊ถํ์ ์ฃผ๊ธฐ ์ํด์๋ ์ธ์ฆ์ด ๋ ์ ์ ๋ผ๊ณ ํ์๋ฅผ ํด์ผํ๊ธด ํ๋ค.</p><p>๋ฐ๋ผ์ ๊ธฐ์กด์๋ Basic Authentication (ํํ Auth๋ผ๊ณ ๋ถ๋ฆ)์ ๋ฐ๋ผ, ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ์ฉ์์ ์์ด๋ & ๋น๋ฐ๋ฒํธ๋ฅผ ์ง์ ์ ๊ณตํด ์ ๊ทผ ๊ถํ์ ์คฌ๋ค.</p><p>ํ์ง๋ง ๋ค์์ ๋ฌธ์ ๊ฐ ํญ์ ๊ฑฐ๋ก ๋์๊ณ , ์ด ๋๋ฌธ์ OAuth 1.0์ด ์๊ฒจ๋ฌ๋ค.</p><ul><li>๋ณด์ ์ทจ์ฝ์ฑ: ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉ์์ ์๊ฒฉ ์ฆ๋ช
์ ์ ์ฅํ๊ฑฐ๋ ์ ์กํ๋ ๊ณผ์ ์์ ์ ์ถ ์ํ</li><li>๊ถํ ๊ด๋ฆฌ ๋ถ๊ฐ: ํน์ ์์์ ๋ํ ์ ํ์ ์ธ ๊ถํ ๋ถ์ฌ๊ฐ ๋ถ๊ฐ๋ฅ. (๋ชจ๋ ๊ถํ์ด ์ด๋ฆผ)</li><li>๋ณต์ก์ฑ ์ฆ๊ฐ: ์ฌ์ฉ์ ๋น๋ฐ๋ฒํธ๊ฐ ๋ณ๊ฒฝ๋๋ฉด, ์ด๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ์๋น์ค์์ ์์ ํด์ผ ํจ</li></ul><p>ํ์ค ์์ฝํ๋ฉด <strong>ํดํน ๋นํ๋ฉด ๋ชจ๋ ์ ๋ณด๊ฐ ํธ๋ ค์ ๋ฌธ์ </strong>๋ผ๋ ์๋ฏธ์ด๋ค.</p><h3 id="2-OAuth-1-0์-๋ฑ์ฅ-๋ฐ-์ ํ์ "><a href="#2-OAuth-1-0์-๋ฑ์ฅ-๋ฐ-์ ํ์ " class="headerlink" title="(2) OAuth 1.0์ ๋ฑ์ฅ ๋ฐ ์ ํ์ "></a>(2) OAuth 1.0์ ๋ฑ์ฅ ๋ฐ ์ ํ์ </h3><h5 id="๊ฐ๋ฐ-๋ฐฐ๊ฒฝ"><a href="#๊ฐ๋ฐ-๋ฐฐ๊ฒฝ" class="headerlink" title="๊ฐ๋ฐ ๋ฐฐ๊ฒฝ"></a>๊ฐ๋ฐ ๋ฐฐ๊ฒฝ</h5><p>์ํํธ์จ์ด๋ ๋๋ ์ด ๋ฐ์ ํ๊ณ ์๊ณ , ์ด ๋๋ฌธ์ ์ฌ๋๋ค์ ๋ณด์์ ๋ํด ๊น๊ฒ ์๊ฐํ๊ฒ ๋์๋ค.<br>๊ทธ๋์ ๋์จ ๊ฐ๋
์ด ๋ฐ๋ก OAuth 1.0์ด๋ค.</p><p>๊ฐ๋ฐ์ ์
์ฅ์์๋ ๋ณด์์ ๋๊ฒ ๋ฏผ๊ฐํ๊ฒ ๋ฐ์๋ค์ฌ์ผ ํ๊ณ , ํ์ง๋ง ๊ด๋ฆฌ๊ฐ ๋งค์ฐ ๋นก์ธ๋ค๋ณด๋ ๊ตฌ๊ธ์ด๋ ๋ค์ด๋ฒ๊ฐ์ด <strong>(์ฃผ๋ก) ๋๊ธฐ์
์์ ์ด๋ฏธ ๊ตฌํํด๋ ์ธ์ฆ ๋ก์ง์ ๊ฐ์ ธ์์ ์ฌ์ฉ</strong>ํ๋ ๊ฒ์ด๋ค.<br>๋๊ธฐ์
์์ ๊ตฌํํ ์ธ์ฆ ๋ก์ง์ ์๋ฌด๋๋ ์ค์๊ท๋ชจ ๊ธฐ์
๋ค์ ๋นํด ๋ณด์ ๊ด๋ฆฌ๊ฐ ๋นก์
๊ฒ์ด๋ฉฐ, ๋ง์ฝ์ ์ ๋ณด๊ฐ ํธ๋ ธ๋ค๊ณ ํด๋ ์ฑ
์์ด ๋๊ธฐ์
์๊ฒ ์์ง ์ฐ๋ฆฌ๊ฐ์ ์์๋ฏผ์๊ฒ๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.<br><del>ํญํ ๋๋ฆฌ๊ธฐ</del><br><del>๋ฌผ๋ก ๊ตฌํ ์๋ชปํด์ ์ ๋ณด ๋
ธ์ถ๋๊ฒ ์ฝ๋ฉํ๋ฉด ์ฐ๋ฆฌ ์๋ชป์ด๊ธด ํ๋ค</del></p><p>๋ฌผ๋ก ๊ทธ ์ธ์๋, ์ด๋ฐ ์ธ์ฆ ๋ก์ง ํ๋ ๊ตฌํํ๋๊ฒ ์ข ๋นก์ผ ํธ์ด๋ผ ์ด๋ฏธ ๊ตฌํํ๊ฑฐ ๊ฐ์ ธ์์ ๊ฐ๋ฐ ์๊ฐ์ ์๋ผ๋๊ฒธ ์ฌ์ฉํ๊ธฐ๋ ํ๋ค.</p><h5 id="Auth์-๋ค๋ฅธ-์ "><a href="#Auth์-๋ค๋ฅธ-์ " class="headerlink" title="Auth์ ๋ค๋ฅธ ์ "></a>Auth์ ๋ค๋ฅธ ์ </h5><p>OAuth 1.0์์๋ ๋จ์ด ๊ตฌํํ ์ฌ์ฉ์ ์ธ์ฆ ๋ก์ง์ ๊ฐ์ ธ์ค๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์, ๋ด๊ฐ ํด๋น ์ธ์ฆ ๋ก์ง์ ๊ฐ์ ธ์๋ ๋๋๊ฐ๋ฅผ ์ฆ๋ช
ํ ์๋จ์ด ํ์ํ๋ค. ์ด๊ฒ์ด ๋ฐ๋ก <code>HMAC-SHA1 (์๋ช
๊ธฐ๋ฐ ์ธ์ฆ)</code>์ด๋ค.<br>์ด ๋ก์ง์ ์ด์ฉํ๋ฉด ๊ธฐ์กด์ ๊ตฌํ๋ ์ธ์ฆ ๋ก์ง์ ๋ฐํ์ผ๋ก, ์์ด๋ ๋ฐ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ฃ์ผ๋ฉด ์ ๊ทผ ๊ถํ์ ๋ฐ์์ฌ ์ ์๋ค.</p><h5 id="ํ๊ณ์ "><a href="#ํ๊ณ์ " class="headerlink" title="ํ๊ณ์ "></a>ํ๊ณ์ </h5><ul><li>๋ณต์กํ ํ๋ก์ธ์ค: ์์ฒญ๋ง๋ค ์ผ์ผ์ด ์๋ช
์์ฑ ๋ฐ ๊ฒ์ฆ์ด ํ์ -> ๊ตฌํ ๋ฐ ๋๋ฒ๊น
์ด ์ด๋ ค์ฐ๋ฉฐ, ๊ฐ๋ฐ์์๊ฒ ๋๋ฌด ๋ง์ ํ์ต์ ์๊ตฌํจ</li><li>ํ์ฅ์ฑ ๋ถ์กฑ: ํน์ ์ธ์ฆ/๊ถํ ์๋๋ฆฌ์ค์ ๋ง์ถฐ ์ค๊ณ๋์ด ๋ค์ํ ํด๋ผ์ด์ธํธ ์ ํ(SPA, ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์
๋ฑ)์ ์ ์ฉํ๊ธฐ ์ด๋ ค์</li><li><strong>TSL ์์กด์ฑ ๋ถ์กฑ</strong>: ์ฌ์ค ์ ์์ธ<ul><li>์๋ช
์ผ๋ก ๋ณด์์ ๊ฐํํ์ผ๋, TLS๋ฅผ ํ์๋ก ์๊ตฌํ์ง ์์ <strong>Man-in-the-Middle</strong>์ ๋งค์ฐ ์ทจ์ฝ์ </li><li>(์ฐธ๊ณ ) Man-in-the-Middle(์ค๊ฐ์ ๊ณต๊ฒฉ): ๋ ๋น์ฌ์ ๊ฐ์ ํต์ ์ ๊ฐ๋ก์ฑ์ ์กฐ์ ๋ฐ ์ฟ๋ฃ๋ ์ฌ์ด๋ฒ ๊ณต๊ฒฉ ๋ฐฉ์<blockquote><p>(์์น ์ ์ )<br>๊ณต๊ฒฉ์๋ ํด๋ผ์ด์ธํธ(์ฌ์ฉ์)๊ฐ ์ฌ์ฉํ๊ณ ์๋ wifi์ ์ ์ํจ<br>๊ทธ๋ฆฌ๊ณ ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์ ํต์ ๊ฒฝ๋ก์ ์ ๋ณต</p><p>(ํต์ ๊ฐ๋ก์ฑ๊ธฐ)<br>์ด ๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ ์์ฒญ์ ๋ณด๋<br>์๋ฒ์ ๋๋ฌํ๊ธฐ ์ ์ ํด๋น ์์ฒญ์ ๊ณต๊ฒฉ์๊ฐ ๊ฐ๋ก์ฑ<br>ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ์ ๋ณด๋ฅผ ์์ ํ๊ฑฐ๋ ์ฝ๊ณ ์๋ฒ์ ์ ๋ฌ</p><p>(์๋ต ๊ฐ๋ก์ฑ๊ธฐ)<br>๋ง์ฐฌ๊ฐ์ง๋ก, ์๋ฒ์์ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด๋ธ ์๋ต๋ ๊ณต๊ฒฉ์๊ฐ ๊ฐ๋ก์ฑ<br>์๋ฒ๊ฐ ๋ณด๋ธ ์๋ต ๋ด์ฉ์ ์์ ํ๊ฑฐ๋ ์ฝ๊ณ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌ</p></blockquote></li></ul></li></ul><h3 id="3-OAuth-2-0์-๋ฑ์ฅ"><a href="#3-OAuth-2-0์-๋ฑ์ฅ" class="headerlink" title="(3) OAuth 2.0์ ๋ฑ์ฅ"></a>(3) OAuth 2.0์ ๋ฑ์ฅ</h3><p>์ด๋ ๊ฒ OAuth 1.0์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ณ ์ ๋์จ ๊ฒ์ด ๋ฐ๋ก OAuth 2.0์ด๋ค.</p><ul><li>ํ๋ก์ธ์ค ๊ฐ์ํ: ์๋ช
๋์ <code>Access Token</code>์ ์ฌ์ฉํด์ ์์ฒญ์ ๋จ์ํ</li><li>ํ์ฅ์ฑ ๋ฐ ํ์คํ<ul><li>ํ์ฅ ๊ฐ๋ฅํ ๊ตฌ์กฐ๋ก, ์ถ๊ฐ์ ์ธ ์ธ์ฆ ๋ฉ์ปค๋์ฆ(JWT, OpenID Connect ๋ฑ)๊ณผ ์ฝ๊ฒ ํตํฉ ๊ฐ๋ฅ</li><li>๋ค์ํ ํ๋ซํผ๊ณผ ์๋น์ค(Google, Facebook, GitHub ๋ฑ)์์ ํ์ค์ผ๋ก ์ฑํ</li><li>๋ค์ํ ํด๋ผ์ด์ธํธ ์ ํ ์ง์<ul><li>๋ค์ํ Grant Type ์ ๊ณต:<ul><li>Authorization Code Grant: ์๋ฒ ์ฌ์ด๋ ์ ํ๋ฆฌ์ผ์ด์
.</li><li>Implicit Grant: ๋ธ๋ผ์ฐ์ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์
.</li><li>Client Credentials Grant: ์๋ฒ ๊ฐ ํต์ .</li><li>Resource Owner Password Grant: ์ ๋ขฐํ ์ ์๋ ํด๋ผ์ด์ธํธ.</li></ul></li><li>๊ฐ ์๋๋ฆฌ์ค์ ๋ง๋ ์ ์ฐํ ์ธ์ฆ ๋ฐฉ์ ์ ๊ณต.</li></ul></li></ul></li><li>TSL ํ์ ์ฌ์ฉ: ๋ฐ์ดํฐ ์ ์ก ์ค์ ๋ณด์์ ๋ณด์ฅํ์ฌ ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ ์
์ฆ ๊ฐ๋ฅ</li></ul><br><p>๊ธฐ๋ฅ์ด ๊ฐ์ ์ด ๋์์ง๋ง, ์ด๊ฒ์ด ๊ทธ๋ ๋ค๊ณ โจ๋ง๋ฅโจ์ธ ๊ฒ์ ์๋๋ค.<br>ํ์ฌ ํฌ๊ฒ ๋ ๊ฐ์ง ๋จ์ ์ด ์๋๋ฐ, ๋ฐ๋ก</p><ul><li>์ด๊ธฐ ์ค์ ์ด ๊น๋ค๋กญ๊ณ </li><li><strong>Access Token</strong>์ด ์ ์ถ๋๋ฉด ์
์ฉ๋ ๊ฐ๋ฅ์ฑ์ด ๋งค์ฐ ๋์์ง๊ธฐ ๋๋ฌธ์ด๋ค.</li></ul><p>์ด ๋ํ ์ธ์ ๊ฐ ํด๊ฒฐํด์ผ ํ๋ ๋ฌธ์ ๋ก ํ ๋ก ์ด ์ด๋ฃจ์ด์ง๊ณ ์์ผ๋, ํ์ฌ๊น์ง๋ก๋ ํ ํฐ๋ง ์ ์ถ ์๋๋ฉด ์ด๋ก ์ ์๋ฒฝํ๊ธฐ ๋๋ฌธ์ ๋ค๋ค ๋ฐ๋ก ํ์ค์ผ๋ก ์ฑํํ ๊ฒ์ด๋ค.<br>๋ฐ๋ผ์ 2.0์ด 2012๋
์ ๋์๋๋ฐ, ํ์ฌ๊น์ง 3.0์ ๋์ค์ง ์์ ์ํ์ด๋ค.</p><img src="./2.png" width="800"><h3 id="4-OAuth-2-0-์ฃผ์-์ฉ์ด"><a href="#4-OAuth-2-0-์ฃผ์-์ฉ์ด" class="headerlink" title="(4) OAuth 2.0 ์ฃผ์ ์ฉ์ด"></a>(4) OAuth 2.0 ์ฃผ์ ์ฉ์ด</h3><ul><li>Resource Owner (์์ ์์ ์)<ul><li>์์์ ์ฃผ์ธ. ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ์๋ฅผ ์ง์นญํจ</li><li>ex) Facebook ๊ณ์ ์ ๊ฐ์ง ์ฌ์ฉ์</li></ul></li><li>Client (ํด๋ผ์ด์ธํธ)<ul><li>์์ ์์ ์๊ฐ ํ์ฉํ ์์์ ์ ๊ทผํ๋ ค๋ ์ ํ๋ฆฌ์ผ์ด์
</li><li>ex) ์์ ์ Google Drive์ ํ์ผ์ ์
๋ก๋ํ๋ ์๋น์ค</li></ul></li><li>Authorization Server (์ธ์ฆ ์๋ฒ)<ul><li>ํด๋ผ์ด์ธํธ๊ฐ ์ธ๊ฐ ์ฝ๋ ๋๋ ํ ํฐ์ ์์ฒญํ๋ ์๋ฒ</li><li>์: Google, Facebook ๋ฑ</li></ul></li><li>Resource Server (์์ ์๋ฒ)<ul><li>๋ณดํธ๋ ์์์ด ์ ์ฅ๋ ์๋ฒ</li><li>์: Google Drive API ์๋ฒ</li></ul></li><li>Access Token (์ก์ธ์ค ํ ํฐ)<ul><li>ํด๋ผ์ด์ธํธ๊ฐ ์์ ์๋ฒ์ ์ ๊ทผํ ๋ ์ฌ์ฉํ๋ ์์ ํค</li><li>๋ง๋ฃ ์๊ฐ์ด ์์</li></ul></li></ul><h3 id="5-OAuth-2-0-์๋-๋ฐฉ์"><a href="#5-OAuth-2-0-์๋-๋ฐฉ์" class="headerlink" title="(5) OAuth 2.0 ์๋ ๋ฐฉ์"></a>(5) OAuth 2.0 ์๋ ๋ฐฉ์</h3><img src="./1.png" width="500"><p>์ถ์ฒ: <a href="https://developers.google.com/identity/protocols/oauth2?hl=ko">GCP ๊ฐ๋ฐ ๋ฌธ์</a></p><ol><li><strong>Request token</strong><ul><li>์ฌ์ฉ์(ํด๋ผ์ด์ธํธ)๋ ๋ก๊ทธ์ธ์ ์๋ํจ. ์ด ๋ Google์ด๋ Naver๊ฐ์ ์์
๋ก๊ทธ์ธ์ ์ ํํจ = ์ฌ์ฉ์๋ ์ฌ์ฉ์ ๊ถํ์ ์ป๊ธฐ ์ํด ์ธ์ฆ์ ๋ฐ์์ผํจ</li><li>์ด๋ ์ฌ์ฉํ๋ ํ ํฐ์ ์
์ฒด๋ง๋ค ๊ตฌํ์ด ๋ค๋ฆ: ๊ฐ๋ฐ๋ฌธ์๋ฅผ ๊ผญ ์ฐธ๊ณ ํ ๊ฒ</li></ul></li><li><strong>Authorization code</strong><ul><li>์ฌ์ฉ์๊ฐ ์ธ์ฆ ์๋ฒ์์ ๋ก๊ทธ์ธ์ ์๋ฃํ๋ฉด, ์ธ์ฆ ์๋ฒ๋ Authorization code๋ฅผ redirect url๋ก ์ ๋ฌํจ</li><li>์ด ๋ code๋ ์์๋ก, ์๊ฐ์ด ์ง๋๋ฉด ๋ค์ ์ฌ๋ฐ๊ธ์ ๋ฐ์์ผ ํจ</li></ul></li><li><strong>Exchange code for token & Token response</strong>: code๋ฅผ ์ด์ฉํด์ curl ์์ฒญ์ ๋ณด๋์ผ๋ก์จ <code>Access token</code>์ ๋ฐ๊ธํจ</li><li><strong>Use token to call API</strong><ul><li>API๋ฅผ ์์ฒญํ ๋, Access token์ ์ฌ์ฉํด์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ธ์ฆํจ</li><li>์ค๋ช
์ ์ํด ๋ก๊ทธ์ธ์ ์์๋ก ๋ค์๊ธฐ ๋๋ฌธ์, ์ฌ๊ธฐ์๋ login API๊ฐ ์ฌ์ฉ๋ ๊ฒ์ด๊ณ ์ธ์ฆ์ด ์ ๋๋ค๋ฉด ๋ฐ๋ก ๋ก๊ทธ์ธ์ด ๋ ๊ฒ์</li></ul></li></ol>]]></content>
<categories>
<category> ๐ Security </category>
</categories>
<tags>
<tag> Security </tag>
<tag> Auth </tag>
<tag> OAuth2 </tag>
</tags>
</entry>
<entry>
<title>[์คํ์์ค] 2024๋
8์ ์คํ์์ค ์์์ง (1): Xpra, Rye, DB Browser for SQLite (DB4S), Crawlee for Python, AMD์ Silo AI ์ธ์, Zed</title>
<link href="/2024/08/11/OpenSource/2408(1)/"/>
<url>/2024/08/11/OpenSource/2408(1)/</url>
<content type="html"><![CDATA[<p><img src="0.png"></p><p>(์ฐธ๊ณ /์ถ์ฒ)<br>2024๋
์ ๋ณดํต์ ์ฐ์
์งํฅ์: <a href="https://www.oss.kr/open_up_intro">OpenUP ํ๋ก๊ทธ๋จ</a>์ 2024๋
๊ธฐ์ฌํ ํ๋ก ํฐ์ด๋ก์, ์คํ์์คSW๋ฅผ ํจ๊ป ๊ฐ๋ฐ ๋ฐ ๊ณต์ ํ๊ธฐ ์ํด ์์ฑ๋์์ต๋๋ค.<br>ํด๋น ๋ด์ฉ์ ์ github ํํ์ด์ง์ Explore repositories ๋ฐ feed ๋ด์ฉ์ ํ ๋๋ก ๋ง๋ค์ด์ก์ผ๋ฉฐ, ๊ฒ์๊ธ์ ๋ฌธ์ ์ฌํญ์ด ์์ผ์ ๋ถ๋ค์ ๋๊ธ ๋๋ <a href="mailto:[email protected]">[email protected]</a>์ผ๋ก ์ฐ๋ฝ ๋ถํ๋๋ฆฝ๋๋ค.</p><p><br><br><br></p><h2 id="Xpra-X11์-์ํ-์๊ฒฉ-์ ํ๋ฆฌ์ผ์ด์
"><a href="#Xpra-X11์-์ํ-์๊ฒฉ-์ ํ๋ฆฌ์ผ์ด์
" class="headerlink" title="Xpra: X11์ ์ํ ์๊ฒฉ ์ ํ๋ฆฌ์ผ์ด์
"></a>Xpra: X11์ ์ํ ์๊ฒฉ ์ ํ๋ฆฌ์ผ์ด์
</h2><ul><li>Repository: <a href="https://github.com/Xpra-org/xpra">https://github.com/Xpra-org/xpra</a></li><li>์๊ฒฉ ํธ์คํธ์์ X11 ํ๋ก๊ทธ๋จ์ ์คํํ๊ณ ๋ก์ปฌ์์ ํ๊ธฐํ๋ฉฐ, state๋ฅผ ์์ง ์๊ณ ๋ค์ ์ฐ๊ฒฐํ ์ ์๋ ๊ธฐ๋ฅ</li><li>์ค๋์ค, ํ๋ฆฐํฐ, ํด๋ฆฝ๋ณด๋, ์์คํ
ํธ๋ ์ด, ์๋ฆผ ๋ฐ ์น์บ ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ ํตํฉ</li><li>Windows, MacOS, Linux ๋ฑ์์ ์ค์น ๊ฐ๋ฅ</li><li>Wayland์์ ์ฌ์ฉ์ ๋ํ ๋
ผ์์ด ๊ณ์๋๊ณ ์์ผ๋ฉฐ, ๊ฐ ์ ํ๋ฆฌ์ผ์ด์
๋ง๋ค ์ฅ๋จ์ ์ด ์์ผ๋ ์ ์ฐพ์๋ณด๊ณ ์ฌ์ฉํ ๊ฒ</li></ul><br><h2 id="Rye-Python-ํ๋ก์ ํธ-๋ฐ-ํจํค์ง-๊ด๋ฆฌ-์๋ฃจ์
"><a href="#Rye-Python-ํ๋ก์ ํธ-๋ฐ-ํจํค์ง-๊ด๋ฆฌ-์๋ฃจ์
" class="headerlink" title="Rye: Python ํ๋ก์ ํธ ๋ฐ ํจํค์ง ๊ด๋ฆฌ ์๋ฃจ์
"></a>Rye: Python ํ๋ก์ ํธ ๋ฐ ํจํค์ง ๊ด๋ฆฌ ์๋ฃจ์
</h2><img src="./1.svg" width="300"><ul><li>Homepage: <a href="https://rye.astral.sh/">https://rye.astral.sh/</a></li><li>Repository: <a href="https://github.com/astral-sh/rye">https://github.com/astral-sh/rye</a></li><li>Python ์ค์น, ํ๋ก์ ํธ, ์ข
์์ฑ ๋ฐ ๊ฐ์ ํ๊ฒฝ ๊ด๋ฆฌ๋ฅผ ์ํ ํตํฉ ๊ฒฝํ์ ์ ๊ณตํ๋ ํฌ๊ด์ ์ธ ํ๋ก์ ํธ ๋ฐ ํจํค์ง ๊ด๋ฆฌ ์๋ฃจ์
</li><li>๋ณต์กํ ํ๋ก์ ํธ, ๋ชจ๋
ธ๋ ํฌ(์ฌ๋ฌ ํ๋ก์ ํธ๋ฅผ ํฌํจํ๋ ์ ์ฅ์) ๋ฐ ๊ธ๋ก๋ฒ ๋๊ตฌ ์ค์น๋ฅผ ์ง์ํ์ฌ ๋ค์ํ ๊ฐ๋ฐ ์๊ตฌ์ ๋ง๊ฒ ๋ค์ฌ๋ค๋ฅํ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅ</li><li>์ค์น๊ฐ ๊ฐ๋จํ๋ฉฐ, Linux, macOS ๋ฐ Windows์ ๋ํ ๊ตฌ์ฒด์ ์ธ ์ง์นจ์ด ์ ๊ณต๋๋ฉฐ, Rust์ Cargo๋ฅผ ์ฌ์ฉํ์ฌ ์์ค์์ ์ปดํ์ผํ๋ ์ต์
๋ ์ ๊ณต๋จ</li><li>์ฆ, ๋ชจ๋ ํ๋ซํผ๊ณผ ์ด์ ์ฒด์ ์์ ์๋ํ๋ requirements.txt ํ์ผ์ ์์ฑํ ์ ์๋ โ๋ฒ์ฉโ ํด์๋๋ฅผ ์ง์ํ๋ Python ํจํค์ง ๋๊ตฌ</li><li>PyTorch์ ๊ฐ์ ์ข
์์ฑ์ ํฌํจํ ๋ณต์กํ ํ๋ก์ ํธ์์ Rye์ ํฅ์๋ ํด์ ๋ฅ๋ ฅ ๋๋ถ์ Poetry์ ๊ฐ์ ๋ค๋ฅธ ๋๊ตฌ์์ Rye๋ก์ ์ฑ๊ณต์ ์ธ ์ ํ์ ํ๋ค๋ ๋ณด๊ณ ๊ฐ ์๋ฐ๋ฅด๊ณ ์์</li></ul><br><h2 id="DB-Browser-for-SQLite-DB4S"><a href="#DB-Browser-for-SQLite-DB4S" class="headerlink" title="DB Browser for SQLite (DB4S)"></a>DB Browser for SQLite (DB4S)</h2><img src="./2.svg" width="300"><ul><li>Homepage: <a href="https://sqlitebrowser.org/">https://sqlitebrowser.org/</a></li><li>Repository: <a href="https://github.com/sqlitebrowser/sqlitebrowser">https://github.com/sqlitebrowser/sqlitebrowser</a></li><li>์คํ๋ ๋์ํธ์ ์ ์ฌํ ์ธํฐํ์ด์ค์ ์์ ํ SQL ์ฟผ๋ฆฌ ๊ธฐ๋ฅ์ ๊ฐ์ถ ๊ณ ํ์ง์ ์๊ฐ์ ์คํ ์์ค SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ผ ๊ด๋ฆฌ ๋๊ตฌ</li><li>๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ผ, ํ
์ด๋ธ ๋ฐ ๋ ์ฝ๋๋ฅผ ์์ฑ, ํธ์ง ๋ฐ ๊ด๋ฆฌํ ์ ์์ผ๋ฉฐ, ๋ฐ์ดํฐ์ ๊ฐ์ ธ์ค๊ธฐ/๋ด๋ณด๋ด๊ธฐ์ SQL ์ฟผ๋ฆฌ ์คํ๋ ์ง์ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ์ ์์ด ๋ค์ฌ๋ค๋ฅํ ๋๊ตฌ</li><li>Windows, MacOS, Linux์์ ์ฌ์ฉ ๊ฐ๋ฅ</li><li>ํนํ ๋์ฉ๋ CSV ํ์ผ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์์ด ํจ์จ์ด ์ข์ผ๋ฉฐ, DBeaver์ SQLiteStudio์ ๊ฐ์ ๋ค๋ฅธ ๋๊ตฌ๋ค๊ณผ ๋น๊ตํ์ฌ ๊ธ์ ์ ์ผ๋ก ํ๊ฐ๋๊ณ ์์</li><li>STRICT ์ง์ ๋ฐ ์คํ๋ผ์ธ ๋ผ์ด์ ์ค์ ๊ฐ์ ์ถ๊ฐ ๊ธฐ๋ฅ ๋ฐ ์ง์์ด ํ์ํ ์ํฉ</li></ul><br><h2 id="Crawlee-for-Python-์น-์คํฌ๋ํ-๋ฐ-๋ธ๋ผ์ฐ์ -์๋ํ-๋ผ์ด๋ธ๋ฌ๋ฆฌ"><a href="#Crawlee-for-Python-์น-์คํฌ๋ํ-๋ฐ-๋ธ๋ผ์ฐ์ -์๋ํ-๋ผ์ด๋ธ๋ฌ๋ฆฌ" class="headerlink" title="Crawlee for Python: ์น ์คํฌ๋ํ ๋ฐ ๋ธ๋ผ์ฐ์ ์๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ"></a>Crawlee for Python: ์น ์คํฌ๋ํ ๋ฐ ๋ธ๋ผ์ฐ์ ์๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ</h2><img src="./3.svg" width="300"><ul><li>Homepage: <a href="https://crawlee.dev/python/">https://crawlee.dev/python/</a></li><li>Repository: <a href="https://github.com/apify/crawlee-python">https://github.com/apify/crawlee-python</a></li><li>์ ๋ขฐํ ์ ์๋ ํฌ๋กค๋ฌ๋ฅผ ๋น ๋ฅด๊ฒ ๊ตฌ์ถํ ์ ์๋๋ก ์ค๊ณ๋ ์๋ก์ด ์น ์คํฌ๋ํ ๋ฐ ๋ธ๋ผ์ฐ์ ์๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ</li><li>HTTP ๋ฐ ํค๋๋ฆฌ์ค ๋ธ๋ผ์ฐ์ ํฌ๋กค๋ง์ ์ํ ํตํฉ ์ธํฐํ์ด์ค, ์๋ ๋ณ๋ ฌ ํฌ๋กค๋ง, ํ์
ํํธ, ์๋ ์ฌ์๋, ํ๋ก์ ํ์ , ์ธ์
๊ด๋ฆฌ, ๊ตฌ์ฑ ๊ฐ๋ฅํ ์์ฒญ ๋ผ์ฐํ
, ์ง์์ ์ธ URL ํ, ํ๋ฌ๊ทธ์ธ ๊ฐ๋ฅํ ์คํ ๋ฆฌ์ง ์ง์</li><li>ํฅํ ๋ฌธ์ ๊ฐ์ ๋ฐ ์ถ๊ฐ ๊ธฐ๋ฅ์ ๊ณํ ์ค</li></ul><br><h2 id="AMD๊ฐ-Silo-AI๋ฅผ-6์ต-6500๋ง-๋ฌ๋ฌ์-์ธ์"><a href="#AMD๊ฐ-Silo-AI๋ฅผ-6์ต-6500๋ง-๋ฌ๋ฌ์-์ธ์" class="headerlink" title="AMD๊ฐ Silo AI๋ฅผ 6์ต 6500๋ง ๋ฌ๋ฌ์ ์ธ์"></a>AMD๊ฐ Silo AI๋ฅผ 6์ต 6500๋ง ๋ฌ๋ฌ์ ์ธ์</h2><ul><li>AMD๊ฐ AI ๋ฐ ML์์ ์ํํธ์จ์ด๋ฅผ ํฅ์์ ์ํด Silo AI๋ฅผ ์ธ์ํจ</li><li>๋ฐ๋ผ์ AMD ํ๋์จ์ด๋ฐ์ Silo AI์ LLM์ ์ธํ
ํจ์ผ๋ก์จ AMD์ SW์คํ๊ณผ ๊ฒฝ์๋ ฅ์ ๊ฐํํ ๊ฒ์ผ๋ก ์์๋จ</li></ul><br><h2 id="Zed-์๋ก์ด-๋ฆฌ๋
์ค-ํ
์คํธ-ํธ์ง๊ธฐ"><a href="#Zed-์๋ก์ด-๋ฆฌ๋
์ค-ํ
์คํธ-ํธ์ง๊ธฐ" class="headerlink" title="Zed: ์๋ก์ด ๋ฆฌ๋
์ค ํ
์คํธ ํธ์ง๊ธฐ"></a>Zed: ์๋ก์ด ๋ฆฌ๋
์ค ํ
์คํธ ํธ์ง๊ธฐ</h2><img src="./4.png" width="200"><ul><li>Homepage: <a href="https://zed.dev/linux">https://zed.dev/linux</a></li><li>Repository: <a href="https://github.com/zed-industries/zed">https://github.com/zed-industries/zed</a></li><li>Zed์ ์๋ ๋ฐ Nativeํ ๋๋, ํ์
๊ฐ๋ฅ, UI ๋์์ธ ๋ฑ์์ ํธํ์ ๋ฐ๊ณ ์์</li><li>๋ค๋ง Typescript ํตํฉ ๋ฐ ๋ฒ์ ๊ด๋ฆฌ์์๋ ์ง์ ์ ๋ฐ๋ ์ค</li><li>์ ์ฌ์ ์ธ ์ฌ์ฉ์๊ฐ ๋ง์์ ๋ฐ๋ผ ์ ์ฌ์ ์ธ ๋ฏธ๋ ์์ตํ์ ๋ํ ์ฐ๋ ค๊ฐ ์ฌ๊ธฐ๋๋ ์ค. ํ์ฌ๋ ๋๋ถ๋ถ์ ์ฌ์ฉ์๋ค์ด ๋๊ตฌ๋ฅผ ๊ณ์ ์ฌ์ฉํ๋ฉด์ ๊ฐ๋ฐ ์ํฉ์ ์ฃผ์ํ๋ ์ค</li></ul>]]></content>
<categories>
<category> ๐ OpenSource </category>
</categories>
<tags>
<tag> Opensource </tag>
</tags>
</entry>
<entry>
<title>[์คํ์์ค] 2024๋
7์ ์คํ์์ค ์์์ง (2): SmoothMQ, OpenDNS, Ladybird, Windows 10์ Firefox 97 ์๋ฌ, Webflow</title>
<link href="/2024/07/29/OpenSource/2407(2)/"/>
<url>/2024/07/29/OpenSource/2407(2)/</url>
<content type="html"><![CDATA[<p><img src="0.png"></p><p>(์ฐธ๊ณ /์ถ์ฒ)<br>2024๋
์ ๋ณดํต์ ์ฐ์
์งํฅ์: <a href="https://www.oss.kr/open_up_intro">OpenUP ํ๋ก๊ทธ๋จ</a>์ 2024๋
๊ธฐ์ฌํ ํ๋ก ํฐ์ด๋ก์, ์คํ์์คSW๋ฅผ ํจ๊ป ๊ฐ๋ฐ ๋ฐ ๊ณต์ ํ๊ธฐ ์ํด ์์ฑ๋์์ต๋๋ค.<br>ํด๋น ๋ด์ฉ์ ์ github ํํ์ด์ง์ Explore repositories ๋ฐ feed ๋ด์ฉ์ ํ ๋๋ก ๋ง๋ค์ด์ก์ผ๋ฉฐ, ๊ฒ์๊ธ์ ๋ฌธ์ ์ฌํญ์ด ์์ผ์ ๋ถ๋ค์ ๋๊ธ ๋๋ <a href="mailto:[email protected]">[email protected]</a>์ผ๋ก ์ฐ๋ฝ ๋ถํ๋๋ฆฝ๋๋ค.</p><p><br><br><br></p><h2 id="SmoothMQ-SQLite-๊ธฐ๋ฐ์-SQS-๋์ฒด-์คํ์์ค"><a href="#SmoothMQ-SQLite-๊ธฐ๋ฐ์-SQS-๋์ฒด-์คํ์์ค" class="headerlink" title="SmoothMQ: SQLite ๊ธฐ๋ฐ์ SQS ๋์ฒด ์คํ์์ค"></a>SmoothMQ: SQLite ๊ธฐ๋ฐ์ SQS ๋์ฒด ์คํ์์ค</h2><ul><li>Repository: <a href="https://github.com/poundifdef/SmoothMQ">https://github.com/poundifdef/SmoothMQ</a></li><li>Amazon SQS๋ฅผ ๋์ฒดํ ์ ์๋ ์คํ์์ค</li><li>Go ์ธ์ด๋ก ์์ฑ๋์์ผ๋ฉฐ SQLite๋ฅผ ์ ์ฅ์๋ก ์ฌ์ฉํ๋ ๋จ์ผ ๋ฐ์ด๋๋ฆฌ๋ก ๋ฐฐํฌ๋จ</li><li>์ผ์ ๊ด๋ฆฌ, ๊ฐ์์ฑ, ์๋ ์ ํ๊ณผ ๊ฐ์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ๋จ์ํ ์๋ํฌ์ธํธ๋ฅผ ๋ณ๊ฒฝํจ์ผ๋ก์จ ๊ธฐ์กด SQS ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ํธํ๋จ</li><li>์ฌ๋ฌ ํ๋กํ ์ฝ(AMQP, PubSub)์ ์ง์ํ๋ฉฐ ๋ค์ํ ์คํ ๋ฆฌ์ง ๋ฐฑ์๋(RocksDB, Postgres)์ ์ ์ํ ์ ์์</li><li>ํฅํ ๋ถ์ฐ ๋ฐ ์๋ ํ์ฅ ๊ธฐ๋ฅ์ ๊ณํํ๊ณ ์์ผ๋ฉฐ, ๋น์ฉ ํจ์จ์ ์ธ ํธ์คํ
ํ ์์คํ
์ ์ ๊ณตํ๋ ๊ฒ์ ๋ชฉํํจ</li></ul><br><h2 id="OpenDNS-Canal-์-๋ถ๋ฒ-๋ณต์ -์ฐจ๋จ-๋ช
๋ น์ผ๋ก-์ธํด-ํ๋์ค์์-์๋น์ค-์ค๋จ"><a href="#OpenDNS-Canal-์-๋ถ๋ฒ-๋ณต์ -์ฐจ๋จ-๋ช
๋ น์ผ๋ก-์ธํด-ํ๋์ค์์-์๋น์ค-์ค๋จ" class="headerlink" title="OpenDNS: Canal+์ ๋ถ๋ฒ ๋ณต์ ์ฐจ๋จ ๋ช
๋ น์ผ๋ก ์ธํด ํ๋์ค์์ ์๋น์ค ์ค๋จ"></a>OpenDNS: Canal+์ ๋ถ๋ฒ ๋ณต์ ์ฐจ๋จ ๋ช
๋ น์ผ๋ก ์ธํด ํ๋์ค์์ ์๋น์ค ์ค๋จ</h2><ul><li>ํ๋์ค ๋ฒ์์ด Canal+์ ์์ฒญ์ ๋ฐ๋ผ ๊ธฐ์กด์ ๋ถ๋ฒ ์ฌ์ดํธ ์ฐจ๋จ์ ์ฐํํ๋ DNS ๊ธฐ๋ก์ ์ฐจ๋จํ๋๋ก Google, Cloudflare, ๋ฐ Cisco์ ๋ช
๋ นํจ</li><li>์ด์ ๋์ํ์ฌ ์ฃผ์ ๊ธฐ์
๋ค์ด ํ๋์ค์์ OpenDNS ์๋น์ค๋ฅผ ์ฒ ํํจ</li><li>์ด๋ DNS ์กฐ์๊ณผ ์ ์ฌ์ ์ธ ์ ๋ถ ๊ถํ ๋จ์ฉ์ผ๋ก ๋ณผ ์ ์์ผ๋ฉฐ, ์ฌ์ฉ์๋ค์ด ๋์ฒด DNS ์๋ฒ ๋๋ VPN์ผ๋ก ์ด๋ํ๊ฒ ๋จ = DNS ์ฐจ๋จ์ ์ํํ๋๋ฐ ์์ด์ ๊ธฐ์ ์ ์ธ ์ด๋ ค์๊ณผ ์ํฅ์ด ์์ ๊ฒ์ผ๋ก ๋ณด์</li></ul><br><h2 id="Ladybird-๋
๋ฆฝ-์น-๋ธ๋ผ์ฐ์ "><a href="#Ladybird-๋
๋ฆฝ-์น-๋ธ๋ผ์ฐ์ " class="headerlink" title="Ladybird: ๋
๋ฆฝ ์น ๋ธ๋ผ์ฐ์ "></a>Ladybird: ๋
๋ฆฝ ์น ๋ธ๋ผ์ฐ์ </h2><p><img src="1.webp"></p><ul><li>Homepage: <a href="https://github.com/LadybirdBrowser/ladybird">https://github.com/LadybirdBrowser/ladybird</a></li><li>Repository: <a href="https://github.com/LadybirdBrowser/ladybird">https://github.com/LadybirdBrowser/ladybird</a></li><li>์ฒ์์๋ SerenityOS๋ฅผ ์ํ HTML ๋ทฐ์ด์์ผ๋, ์ง๊ธ์ Linux, macOS ๋ฐ ๊ธฐํ ์ ๋์ค ๊ณ์ด ์์คํ
์ ์ง์ํจ</li><li>๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ์ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉฐ, ์น ๋ธ๋ผ์ฐ์ ๋ก์์ ๋จ์ผํ ๋ชฉ์ ์ ์ง์คํ๊ณ , ๊ด๊ณ ๋ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ํตํ ์์ต ์ฐฝ์ถ์ด ์์</li><li>์ํ ๋ฒ์ ์ถ์๋ 2026๋
์ฌ๋ฆ์ผ๋ก ๊ณํ๋์ด ์์ผ๋ฉฐ, ๊ฐ๋ฐ ์๊ธ์ ํ์๊ณผ ๊ธฐ๋ถ๋ก ์ถฉ๋น๋จ. ์ต๊ทผ Github ์ฐฝ๋ฆฝ์ (ํฌ๋ฆฌ์ค ์์คํธ๋์ค)์๊ฒ 100๋ง ๋ฌ๋ฌ ๊ธฐ๋ถ๊ธ์ ๋ฐ์</li></ul><br><h2 id="Windows-10์-Firefox-97-์๋ฌ-๋ณต์ฌ-amp-๋ถ์ฌ๋ฃ๊ธฐ-์ปจํ
์คํธ-๋ฉ๋ด-ํญ๋ชฉ-๋นํ์ฑํ"><a href="#Windows-10์-Firefox-97-์๋ฌ-๋ณต์ฌ-amp-๋ถ์ฌ๋ฃ๊ธฐ-์ปจํ
์คํธ-๋ฉ๋ด-ํญ๋ชฉ-๋นํ์ฑํ" class="headerlink" title="Windows 10์ Firefox 97 ์๋ฌ: ๋ณต์ฌ & ๋ถ์ฌ๋ฃ๊ธฐ ์ปจํ
์คํธ ๋ฉ๋ด ํญ๋ชฉ ๋นํ์ฑํ"></a>Windows 10์ Firefox 97 ์๋ฌ: ๋ณต์ฌ & ๋ถ์ฌ๋ฃ๊ธฐ ์ปจํ
์คํธ ๋ฉ๋ด ํญ๋ชฉ ๋นํ์ฑํ</h2><ul><li>Homepage: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1863246">https://bugzilla.mozilla.org/show_bug.cgi?id=1863246</a></li><li>ํ์ด์ง ๋ถ๋งํฌ ๋ค ์๋ค๋ก ์ด๋ํ ๋, ๋ณต์ฌ ๋ฐ ๋ถ์ฌ๋ฃ๊ธฐ ์ปจํ
์คํธ ๋ฉ๋ด ํญ๋ชฉ์ด ๋นํ์ฑํ๋๋ ๋ฌธ์ ํ์ธ</li><li>ํ๋ก์ธ์ค ๊ฐ์ ์ถฉ๋์ ์์ธ์ผ๋ก ๋ณด๊ณ ์์ผ๋ฉฐ, ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์์ ์์
์ ์งํ ์ค</li><li>์์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก๋ ์ฃผ์ ํ์์ค์ ํด๋ฆญํ๊ฑฐ๋ ํญ์ ์ ํํ๋ฉด ๋จ</li><li>ํฅํ ๋ฆด๋ฆฌ์ฆ์์ ํด๊ฒฐ๋ ๊ฒ์ผ๋ก ๋ณด์ด๋, ๊ด์ฌ์ด ์๋ ์ฌ๋๋ค์ ์คํ์์ค ๊ธฐ์ฌ๋ฅผ ์๊ฐํด๋ณด๋ฉด ์ข์ ๋ฏ</li></ul><br><h2 id="Webflow-๊ฐ๋จํ-ํ๋ฌ๊ทธ์ธ์ผ๋ก-React-์ ํ๋ฆฌ์ผ์ด์
์-์๊ฐ์ ์ผ๋ก-ํธ์ง"><a href="#Webflow-๊ฐ๋จํ-ํ๋ฌ๊ทธ์ธ์ผ๋ก-React-์ ํ๋ฆฌ์ผ์ด์
์-์๊ฐ์ ์ผ๋ก-ํธ์ง" class="headerlink" title="Webflow: ๊ฐ๋จํ ํ๋ฌ๊ทธ์ธ์ผ๋ก React ์ ํ๋ฆฌ์ผ์ด์
์ ์๊ฐ์ ์ผ๋ก ํธ์ง"></a>Webflow: ๊ฐ๋จํ ํ๋ฌ๊ทธ์ธ์ผ๋ก React ์ ํ๋ฆฌ์ผ์ด์
์ ์๊ฐ์ ์ผ๋ก ํธ์ง</h2><ul><li>Homepage: <a href="https://onlook.dev/">https://onlook.dev/</a></li><li>Repository: <a href="https://github.com/onlook-dev/onlook">https://github.com/onlook-dev/onlook</a></li><li>๊ฐ๋ฐ์๊ฐ ๋ก์ปฌ์์ ์คํ ์ค์ธ React ์ ํ๋ฆฌ์ผ์ด์
์ ์๊ฐ์ ์ผ๋ก ํธ์งํ๊ณ ์ค์๊ฐ์ผ๋ก ์ฝ๋๋ฅผ ๋ค์ ์์ฑํ ์ ์๋ ์ฑ</li><li>๊ฐ๋จํ ํ๋ฌ๊ทธ์ธ ์ถ๊ฐ๋ง์ผ๋ก ๋ก์ปฌ์์ ์คํ ๊ฐ๋ฅํ๋ฉฐ, React parser, processing, CSS๋ฅผ Tailwind๋ก ๋ณํํ๋ ๊ธฐ๋ฅ ํฌํจ</li><li>ํฅํ ๋ ์ด์ด ๊ฒ์ฌ ๋ฐ ์ ํ, ์์ ์ฌ์ ๋ ฌ, ์ฝ๋ ๋ฐ์ ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํ ํ
์คํธ ๊ฐ๋ฐ์ด ํ์ํจ</li></ul>]]></content>
<categories>
<category> ๐ OpenSource </category>
</categories>
<tags>
<tag> Opensource </tag>
</tags>
</entry>
<entry>
<title>[์คํ์์ค] 2024๋
7์ ์คํ์์ค ์์์ง (1): Google Sheets, Corcel, Python, Posit, Eclipse Theia IDE, Overleaf</title>
<link href="/2024/07/13/OpenSource/2407(1)/"/>
<url>/2024/07/13/OpenSource/2407(1)/</url>
<content type="html"><![CDATA[<p><img src="0.png"></p><p>(์ฐธ๊ณ /์ถ์ฒ)<br>2024๋
์ ๋ณดํต์ ์ฐ์
์งํฅ์: <a href="https://www.oss.kr/open_up_intro">OpenUP ํ๋ก๊ทธ๋จ</a>์ 2024๋
๊ธฐ์ฌํ ํ๋ก ํฐ์ด๋ก์, ์คํ์์คSW๋ฅผ ํจ๊ป ๊ฐ๋ฐ ๋ฐ ๊ณต์ ํ๊ธฐ ์ํด ์์ฑ๋์์ต๋๋ค.<br>ํด๋น ๋ด์ฉ์ ์ github ํํ์ด์ง์ Explore repositories ๋ฐ feed ๋ด์ฉ์ ํ ๋๋ก ๋ง๋ค์ด์ก์ผ๋ฉฐ, ๊ฒ์๊ธ์ ๋ฌธ์ ์ฌํญ์ด ์์ผ์ ๋ถ๋ค์ ๋๊ธ ๋๋ <a href="mailto:[email protected]">[email protected]</a>์ผ๋ก ์ฐ๋ฝ ๋ถํ๋๋ฆฝ๋๋ค.</p><p><br><br><br></p><h2 id="Google-Sheets-JavaScript-gt-WasmGC-์ด์ "><a href="#Google-Sheets-JavaScript-gt-WasmGC-์ด์ " class="headerlink" title="Google Sheets: JavaScript -> WasmGC ์ด์ "></a>Google Sheets: JavaScript -> WasmGC ์ด์ </h2><ul><li>Google Sheets๊ฐ ์ฑ๋ฅ ํฅ์์ ์ํด JavaScript์์ WasmGC(WebAssembly Garbage Collection)์ผ๋ก ์ ํ</li><li>์ด๊ธฐ์๋ ์ฑ๋ฅ์ด ๋๋ ธ์ง๋ง JS๋ฒ์ ๋ณด๋ค ๋ ๋ฐฐ ๋น ๋ฅด๊ฒ ์ต์ ํ๋จ</li><li>ํ์ง๋ง ์ฌ์ ํ Excel๊ฐ์ ๋ค์ดํฐ๋ธ ์ ํ๋ฆฌ์ผ์ด์
์ ๋นํด ๋๋ฆฌ๋ค๊ณ ๋ฐ์์ด ๋ง์ผ๋ฉฐ, ์น ๊ธฐ์ ์ ์์ด์ ์ต์ ํ์ ์ง์์ ์ธ ๋ฐ์ ์ ๊ฐ์กฐํจ</li></ul><br><h2 id="Corcel-WordPress-๋ฐฑ์๋๋ก-์ต์ ํ๋-๋ผ์ด๋ธ๋ฌ๋ฆฌ"><a href="#Corcel-WordPress-๋ฐฑ์๋๋ก-์ต์ ํ๋-๋ผ์ด๋ธ๋ฌ๋ฆฌ" class="headerlink" title="Corcel: WordPress ๋ฐฑ์๋๋ก ์ต์ ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ"></a>Corcel: WordPress ๋ฐฑ์๋๋ก ์ต์ ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ</h2><img src="./1.png" width="200"><ul><li>Repository: <a href="https://github.com/corcel/corcel">https://github.com/corcel/corcel</a></li><li>Laravel์ Eloquent ORM์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋ PHP ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก: WordPress ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ง์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ผ๋ฉฐ, Composer๋ฅผ ํตํด Laravel ๋๋ ๋ค๋ฅธ PHP ํ๋ก์ ํธ์์ ์ฌ์ฉํ ์ ์์</li><li>์ฃผ์ ๊ธฐ๋ฅ: ์ฌ์ฉ์ ์ ์ ๊ฒ์๋ฌผ ์ ํ, ์์ฝ๋, ๋ถ๋ฅ๋ฒ, ํ์ด์ง, ์ฒจ๋ถ ํ์ผ, ์์ ๋ณธ, ์ธ๋ค์ผ, ์ต์
, ๋ฉ๋ด, ์ฌ์ฉ์ ๋ฐ ์ธ์ฆ</li><li>์ค์น ๋ฐ ๊ตฌ์ฑ์ ๊ฐ๋จํ๋ฉฐ, Laravel 5.5+ ๋ฒ์ ์์๋ ์๋ ๋ฑ๋ก์ด ๊ฐ๋ฅํจ<ul><li>๋จ ์ด์ ๋ฒ์ ์ด๋ Laravel์ด ์๋ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ ์๋ ์ค์ ์ด ํ์ํจ</li></ul></li><li>WordPress ๋ฐ์ดํฐ์์ ๋งค๋๋ฌ์ด ์ธํฐํ์ด์ค๋ก ์ฐฌ์ฌ๋ฅผ ๋ฐ๊ณ ์์ผ๋ฉฐ, WordPress ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉ์ด ํ์ํ PHP ํ๋ก์ ํธ์ ์ ์ง ๊ฐ๋ฅํ ์๋ฃจ์
์ ์ ๊ณตํ์ฌ Prismic, Strapi, Shopify์ ๊ฐ์ ๋๊ตฌ๋ค๊ณผ ๋น๊ตํด๋ ๊ธ์ ์ ์ธ ํ๊ฐ๋ฅผ ๋ฐ๊ณ ์์</li></ul><br><h2 id="Python-์ ํ-์ฑ-์คํ ์ด-๊ฑฐ๋ถ-์ฌ๊ฑด"><a href="#Python-์ ํ-์ฑ-์คํ ์ด-๊ฑฐ๋ถ-์ฌ๊ฑด" class="headerlink" title="Python: ์ ํ ์ฑ ์คํ ์ด ๊ฑฐ๋ถ ์ฌ๊ฑด"></a>Python: ์ ํ ์ฑ ์คํ ์ด ๊ฑฐ๋ถ ์ฌ๊ฑด</h2><ul><li>Python 3.11์์ 3.12๋ก ์
๊ทธ๋ ์ด๋ ๋๋ฉด์, ์ผ๋ถ Python์ฑ์ด urllibํ์์ ํฌํจ๋ <code>itms-services</code> ๋ฌธ์์ด ๋๋ฌธ์ Apple์ ์ฑ ์คํ ์ด์์ ๊ฑฐ๋ถ๋จ<ul><li>macOS์ ์๋๋ฐ์ค ์ฑ์์ ๊ธ์ง๋์ด ์๋ ๋ฌธ์์ด์</li><li>PyInstall๋ก ๋น๋๋ ๊ฒฝ์ฐ ๋ฐ์ํ๋ ๊ฒ์ ๋ณด๊ณ ๋จ</li></ul></li><li>Python 3.13์์ โ์ฑ ์คํ ์ด ์ค์โ๋ผ๋ ๋น๋ ํ์ ์ต์
์ ์ถ๊ฐํ๊ธฐ๋ก ํฉ์๊ฐ ์ด๋ฃจ์ด์ก์ผ๋ฉฐ, ์ฑ ์คํ ์ด ์ ์ถ ์ ๋ฌธ์ ๊ฐ ๋๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ์ฌ ์์ ๋ก์ SW ํ๋ก์ ํธ๊ฐ ๋ ์ ์๋๋ก ๊ฒฐ์ ํจ</li><li>๋์์ผ๋ก๋ SignPath์ ๋ฌด๋ฃ ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ์ ์๋จ</li></ul><br><h2 id="Posit-RStudio-๊ฐ๋ฐ์๊ฐ-์ ์ํ-Visual-Studio-Code-๊ธฐ๋ฐ-R-๋ฐ-Python-IDE"><a href="#Posit-RStudio-๊ฐ๋ฐ์๊ฐ-์ ์ํ-Visual-Studio-Code-๊ธฐ๋ฐ-R-๋ฐ-Python-IDE" class="headerlink" title="Posit: RStudio ๊ฐ๋ฐ์๊ฐ ์ ์ํ Visual Studio Code ๊ธฐ๋ฐ R ๋ฐ Python IDE"></a>Posit: RStudio ๊ฐ๋ฐ์๊ฐ ์ ์ํ Visual Studio Code ๊ธฐ๋ฐ R ๋ฐ Python IDE</h2><img src="./2.svg" width="200"><ul><li>Homepage: <a href="https://positron.posit.co/">https://positron.posit.co/</a></li><li>Repository: <a href="https://github.com/posit-dev/positron">https://github.com/posit-dev/positron</a></li><li>macOS, Windows ๋ฐ Linux์์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ถ๊ฐ ํ์ฅ ์์ด R๊ณผ Python์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์</li><li>IDE์๋ ๋ฐ์ดํฐ ๋ฐ ๋ณ์ ํ์๊ธฐ๊ฐ ํฌํจ๋์ด ์์ด ๋ฐ์ดํฐ ์กฐ์์ด ์ฉ์ดํ๋ฉฐ, OpenVSX ๋ ์ง์คํธ๋ฆฌ๋ฅผ ํตํด ๋ค๋ฅธ VS Code ํ์ฅ ๊ธฐ๋ฅ๋ ์ง์ํ์ง๋ง ์์ง ์ด๊ธฐ ๊ฐ๋ฐ ๋จ๊ณ์ ์์</li></ul><br><h2 id="Eclipse-Theia-IDE"><a href="#Eclipse-Theia-IDE" class="headerlink" title="Eclipse Theia IDE"></a>Eclipse Theia IDE</h2><ul><li>Eclipse ์ฌ๋จ์์ Theia IDE๋ฅผ ์ด์ ์ ์์ผ๋ก ์ฌ์ฉํ ์ ์๋ค๊ณ ๋ฐํํจ</li><li>์ด์ ๋ฐ๋ผ Microsoft์ Visual Studio Code์ ๋ํ ์คํ์์ค ๋์์ผ๋ก ์๊ธฐ๋งค๊น์ ํ๋ ์ค</li><li>Ericsson, IBM, Google๊ณผ ๊ฐ์ ์ฃผ์ ๊ธฐ์
๋ค์ ๊ธฐ์ฌ๋ฅผ ๋ฐ๊ณ ์์</li><li>์ฝ๋๋ฅผ forkํ์ง ์์๋ ๊ด๋ฒ์ํ ์ปค์คํฐ๋ง์ด์ง์ ํ์ฉํ์ฌ ๋ฐ์คํฌํ ๋ฐ ํด๋ผ์ฐ๋ IDE ๋ชจ๋์ ์ ํฉํจ</li></ul><br><h2 id="Overleaf-LaTeX-ํธ์ง๊ธฐ"><a href="#Overleaf-LaTeX-ํธ์ง๊ธฐ" class="headerlink" title="Overleaf: LaTeX ํธ์ง๊ธฐ"></a>Overleaf: LaTeX ํธ์ง๊ธฐ</h2><img src="./3.png" width="300"><ul><li>Repository: <a href="https://github.com/overleaf/overleaf">https://github.com/overleaf/overleaf</a></li><li>Overleaf: ํธ์คํ
์๋น์ค์ ๋ก์ปฌ ๋ฐฐํฌ ๋ชจ๋ ๊ฐ๋ฅํ ์คํ ์์ค ์ค์๊ฐ ํ์
LaTeX ํธ์ง๊ธฐ -> ์ฃผ๋ก ๋
ผ๋ฌธ ์์ฑ์ ์ฌ์ฉ๋จ</li><li>Overleaf Server Pro: ๋ณด์(SSO์ LDAP ๋๋ SAML) ๋ฐ ๊ณ ๊ธ ํ์
๋๊ตฌ๋ฅผ ํฌํจ</li><li>์ด ํ๋ก์ ํธ๋ ๋ฐฐํฌ๋ฅผ ์ํด Docker๋ฅผ ์ฌ์ฉํ๋ฉฐ, ์์ธํ ๋น๋ ์ง์นจ๊ณผ ๊ธฐ์ฌ๋ GNU Affero General Public License Version 3์ ์๊ฑฐํจ</li><li>Markdown์ ๋ํ Pandoc ์ง์๊ณผ ๊ฐ์ ์ถ๊ฐ ๊ธฐ๋ฅ์ ๋ํ ์์ฒญ์ด ์์ผ๋ฉฐ, ์ด์ ๋ํ ๊ธฐ์ฌ๊ฐ ํ์ํจ</li></ul>]]></content>
<categories>
<category> ๐ OpenSource </category>
</categories>
<tags>
<tag> Opensource </tag>
</tags>
</entry>
<entry>
<title>Container ์ ๋ฆฌ</title>
<link href="/2024/07/12/DevOps/Container/"/>
<url>/2024/07/12/DevOps/Container/</url>
<content type="html"><![CDATA[<p>๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด ์๋ฌด๋๋ docker๋ฅผ ๋ง์ด ์ฐ๊ฒ ๋ ํ
๋ฐ, ๊ทธ ๋ ์ปจํ
์ด๋ ์ด์ฉ์ ์ฉ~~ ์ด๋ผ๋ ๊ฐ๋
์ด ๋์ค๋ฉด์ ์ฌ๋๋ค์ ๋จธ๋ฆฌ๊ฐ ์ํ์ง๊ธฐ ์์ํ๋ค.<br>๋ฐ๋ผ์ ์ปจํ
์ด๋์ ๋ํด ๊ฐ๋
์ ์ก๊ณ ์ถ์ ์ฌ๋์ด๋ผ๋ฉด ์ด ๊ธ์ ์ ์ฝ์ด๋ณด๊ธธ ์ถ์ฒํ๋ค. ๋ฐฐํฌ ์ธํ
(ํนํ devops, cloud native)์์ ๋ง์ด ์ธ๊ธ๋๋ ๊ฐ๋
์ด๊ธฐ ๋๋ฌธ์ด๋ค.</p><h2 id="1-Container๋"><a href="#1-Container๋" class="headerlink" title="1. Container๋"></a>1. Container๋</h2><p>์ปจํ
์ด๋๋ ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์ข
์์ฑ์ ํ๋๋ก ๋ฌถ์ด ์ด๋์๋ ์คํํ ์ ์๋ ์ผ์ข
์ <strong>๊ฐ๋ฒผ์ด ์คํ ํ๊ฒฝ</strong>์ด๋ค.</p><p>๋ฐ๋ผ์ ํน์ OS๋ ํ๊ฒฝ์ ์์กดํ์ง ์๊ณ ๋์ผํ๊ฒ ์คํ๋๋ค๋ ์๋ฏธ๋ค.</p><blockquote><p>์ฝ๊ฒ ํ์ด๋ณด์๋ฉด, ํ๋ก์ ํธ๋ฅผ ์งํํ๋๋ฐ A๋ Windows์์, B๋ MacOS์์ ์งํํ๋ค๊ณ ์ณ๋ณด์.<br>๋ฐ๋ผ์ ๊ฐ ํ๊ฒฝ๋ง๋ค ์ธํ
์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ์ข
์์ฑ์ ๊ฐ์ ์ธํ
์ผ๋ก ๋ค์ด๋ฐ๋๋ผ๋ ์ค๋ฅ๊ฐ ๋ ์ ์๋ค๋ ์๋ฏธ๋ค.<br>์ด ๋ ์ปจํ
์ด๋๋ฅผ ์ฌ์ฉํ๋ฉด OS๊ฐ ๋ค๋ฆ์๋ ๋ถ๊ตฌํ๊ณ ๋์ผํ๊ฒ ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ค. </p></blockquote><h2 id="2-Container์์-์ฌ์ฉํ๋-์ค์-๊ฐ๋
"><a href="#2-Container์์-์ฌ์ฉํ๋-์ค์-๊ฐ๋
" class="headerlink" title="2. Container์์ ์ฌ์ฉํ๋ ์ค์ ๊ฐ๋
"></a>2. Container์์ ์ฌ์ฉํ๋ ์ค์ ๊ฐ๋
</h2><p>๋ง๋ก๋ง ์ ์ผ๋ฉด ์ดํด๊ฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ์๋๋ฆฌ์ค๋ฅผ ํ๋ ์ ์ํด์ ์ค๋ช
์ ํด๋ณด๋๋ก ํ๊ฒ ๋ค.</p><blockquote><p><code>์ํฉ</code></p><ul><li>A: Windows ์ฌ์ฉ์, B: Macbook ์ฌ์ฉ์</li><li>์ด ๋์ ํํ๋ก <strong>Python Flask ์น ์ ํ๋ฆฌ์ผ์ด์
</strong>์ ๊ฐ๋ฐ ์ค</li><li>A๋ ๋ก์ปฌ Windows์์, B๋ ๋ก์ปฌ Macbook์์ ์์
์ค์ = ํ๋ก์ ํธ ์คํ ํ๊ฒฝ์ด ๋ค๋ฆ</li><li>A๋ ์ปจํ
์ด๋ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๋์ผํ ํ๊ฒฝ์์ ์คํ๋ ์ ์๋๋ก ์ค์ ํ๊ณ ์ด๋ฅผ B์๊ฒ ๊ณต์ ํ๋ ค๊ณ ํจ</li></ul></blockquote><table><thead><tr><th align="center">๊ฐ๋
</th><th align="center">์ค๋ช
</th><th align="center">์์</th></tr></thead><tbody><tr><td align="center">Container</td><td align="center">์ ํ๋ฆฌ์ผ์ด์
์คํ ํ๊ฒฝ</td><td align="center">- A๋ Python Flask ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ๊ธฐ ์ํด ์ปจํ
์ด๋๋ฅผ ์ฌ์ฉํจ<br>- B๋ A๊ฐ ๋ง๋ ์ปจํ
์ด๋๋ฅผ ๊ทธ๋๋ก ์คํํ๋ฉด ๋์ผํ ํ๊ฒฝ์์ ์ฑ์ด ์คํ๋จ</td></tr><tr><td align="center">Container Image</td><td align="center">์คํ ํ๊ฒฝ์ ํ
ํ๋ฆฟ์ผ๋ก ์ ์ฅ</td><td align="center">- A๋ ์ปจํ
์ด๋ ์คํ์ ์ํ ํ๊ฒฝ(Python, Flask, ๊ทธ ์ธ ๊ธฐํ requirements.txt ์์กด์ฑ ๋ชจ๋)์ ์ด๋ฏธ์ง๋ก ์ ์ฅ</td></tr><tr><td align="center">Container Runtime</td><td align="center">์ปจํ
์ด๋๋ฅผ ์คํ ๋ฐ ๊ด๋ฆฌ</td><td align="center">- A์ B ๋ชจ๋ ์ปจํ
์ด๋ ๋ฐํ์์ ์ฌ์ฉํ์ฌ ์ปจํ
์ด๋๋ฅผ ์คํ</td></tr><tr><td align="center">Container Orchestration</td><td align="center">์ฌ๋ฌ ์ปจํ
์ด๋์ ๋ฐฐํฌ, ์ค์ผ์ผ๋ง, ๊ด๋ฆฌ ๋ฑ์ ์๋ํ</td><td align="center">- A์ B์ ํ๋ก์ ํธ๊ฐ ์ฑ์ฅํ๋ฉฐ ํธ๋ํฝ์ด ์ฆ๊ฐํ๋ฉด, ์ค์ผ์คํธ๋ ์ด์
๋๊ตฌ๋ก ์ปจํ
์ด๋๋ฅผ ํ์ฅ</td></tr><tr><td align="center">Namespaces</td><td align="center">์ปจํ
์ด๋์ ๋ฆฌ์์ค(CPU, ๋ฉ๋ชจ๋ฆฌ ๋ฑ) ๊ฒฉ๋ฆฌ</td><td align="center">- Flask ์น ์ปจํ
์ด๋ / PostgreSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปจํ
์ด๋ / Redis ์บ์ ์ปจํ
์ด๋ (๊ฐ๊ฐ ๋ถ๋ฆฌ)<br>- ์ปจํ
์ด๋๋ณ๋ก ๋
๋ฆฝ๋ ๋คํธ์ํฌ ์คํ(IP์ฃผ์, ํฌํธ, ๋ผ์ฐํ
ํ
์ด๋ธ ๋ฑ)์ ๊ฐ์ง<br>- A์ ๋ก์ปฌ ์์คํ
์์ ์คํ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ํ์ธํ ๋, ์ปจํ
์ด๋์ ๋ด๋ถ ํ๋ก์ธ์ค๋ฅผ ๊ฒ์ํ ์ ์์</td></tr><tr><td align="center">CGroups(Control Groups)</td><td align="center">๋ฆฌ์์ค ์ฌ์ฉ๋ ์ ํ</td><td align="center">- Flask ์น ์ปจํ
์ด๋ / PostgreSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปจํ
์ด๋ / Redis ์บ์ ์ปจํ
์ด๋ (๊ฐ๊ฐ ๋ถ๋ฆฌ)<br>- A๊ฐ ์ปจํ
์ด๋๋ฅผ ์์ฑํ ๋ ํ ์ชฝ ์ปจํ
์ด๋๋ก๋ง ๋๋ฌด ๋ง์ด ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ์ง ์๋๋ก ์ ์ด</td></tr><tr><td align="center">Networking</td><td align="center">์ปจํ
์ด๋ ๊ฐ ์ธ๋ถ ํต์ </td><td align="center">- Flask ์น ์ปจํ
์ด๋ / PostgreSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปจํ
์ด๋ / Redis ์บ์ ์ปจํ
์ด๋ (๊ฐ๊ฐ ๋ถ๋ฆฌ)<br>- A์ B๋ ์น ์ปจํ
์ด๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปจํ
์ด๋๋ฅผ ์ฐ๊ฒฐํ์ฌ ์ฌ์ฉ</td></tr><tr><td align="center">Registry</td><td align="center">์ปจํ
์ด๋ ์ด๋ฏธ์ง๋ฅผ ์ ์ฅ ๋ฐ ๋ฐฐํฌ</td><td align="center">- A๋ ์ปจํ
์ด๋ ์ด๋ฏธ์ง๋ฅผ Hub์ ์
๋ก๋ํ์ฌ B์ ๊ณต์ <br>- B๋ Hub์์ ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ฐ์ ์ฌ์ฉ</td></tr></tbody></table><h2 id="3-Container-VS-VM-Virtual-Machine"><a href="#3-Container-VS-VM-Virtual-Machine" class="headerlink" title="3. Container VS VM(Virtual Machine)"></a>3. Container VS VM(Virtual Machine)</h2><table><thead><tr><th align="center">Container</th><th align="center">Virtual Machine</th></tr></thead><tbody><tr><td align="center">Kernal ๊ณต์ </td><td align="center">Hypervisor ๊ธฐ๋ฐ</td></tr><tr><td align="center">๋น ๋ฅธ ์๋, ๊ฐ๋ฒผ์, ์ด์์ฑ</td><td align="center">๋์ ๊ฒฉ๋ฆฌ์ฑ, ์์ ํ OS ์ ๊ณต</td></tr></tbody></table><h3 id="Kernal-์ปค๋-์๋ก-์ฌ์ด์ข๊ฒ-์๋ณดํ๋ฉฐ-์ปดํจํฐ-์์-๊ณต์ "><a href="#Kernal-์ปค๋-์๋ก-์ฌ์ด์ข๊ฒ-์๋ณดํ๋ฉฐ-์ปดํจํฐ-์์-๊ณต์ " class="headerlink" title="Kernal (์ปค๋): ์๋ก ์ฌ์ด์ข๊ฒ ์๋ณดํ๋ฉฐ ์ปดํจํฐ ์์ ๊ณต์ "></a>Kernal (์ปค๋): ์๋ก ์ฌ์ด์ข๊ฒ ์๋ณดํ๋ฉฐ ์ปดํจํฐ ์์ ๊ณต์ </h3><ul><li>OS์ ํต์ฌ ๋ถ๋ถ์ผ๋ก, HW์ SW๊ฐ์ ๋ค๋ฆฌ ์ญํ </li><li>์ ํ๋ฆฌ์ผ์ด์
์ด ํ๋์จ์ด ์์(CPU, ๋ฉ๋ชจ๋ฆฌ, ๋์คํฌ, ๋คํธ์ํฌ ๋ฑ)์ ์ฌ์ฉํ ์ ์๋๋ก ์ค๊ฐ</li></ul><blockquote><p><code>์ํฉ</code> </p><ul><li>C, D, E๋ ๊ฐ๊ฐ Flask, PostgreSQL, Redis๋ก ์คํ ์ค</li><li>CPU๋ 4์ฝ์ด, ๋ฉ๋ชจ๋ฆฌ๋ 8GB๋ก ์ค์ </li></ul><p><code>์์</code></p><ul><li>C๊ฐ ๋ฌ๋ ์ค์ผ ๋ (D์ E๋ ์ ํด ์ํ):<ul><li>C(Flask) ๊ฐ ๋ชจ๋ CPU์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉ</li><li>๋ค๋ฅธ ์ปจํ
์ด๋(D, E)๊ฐ ๋นํ์ฑ ์ํ์ด๋ฏ๋ก ์ปค๋์ ์์์ C์ ์ต๋ํ ๋ฐฐ๋ถ</li></ul></li><li>D(PostgreSQL) ๋ฌ๋ ์์: ์ปค๋์ด ์์์ ๋์ ์ผ๋ก ์กฐ์ <ul><li>C(Flask)** ๊ฐ CPU 2์ฝ์ด, ๋ฉ๋ชจ๋ฆฌ 4GB๋ฅผ ์ฌ์ฉํ๋๋ก ์ค์</li><li>D(PostgreSQL)*์๊ฒ CPU 2์ฝ์ด, ๋ฉ๋ชจ๋ฆฌ 4GB๋ฅผ ๋ฐฐ๋ถ</li><li>์์์ด ๋ถ์กฑํ ๊ฒฝ์ฐ <strong>cgroups(Control Groups)</strong> ์ค์ ์ ๋ฐ๋ผ ํน์ ์ปจํ
์ด๋(C ๋๋ D)์ ์์์ ์ ํ</li></ul></li><li>D์ E๊ฐ ๋์์ ๋ฌ๋ ์์: ์์์ด ๋ ๋ง์ด ๋๋ ์ง<ul><li>C(Flask): CPU 1์ฝ์ด, ๋ฉ๋ชจ๋ฆฌ 3GB</li><li>D(PostgreSQL): CPU 2์ฝ์ด, ๋ฉ๋ชจ๋ฆฌ 3GB</li><li>E(Redis): CPU 1์ฝ์ด, ๋ฉ๋ชจ๋ฆฌ 2GB</li></ul></li></ul></blockquote><h3 id="Hypervisor-ํ์ดํผ๋ฐ์ด์ -์ฌ์ด๊ฐ-์์ข์์-์์์-๋น๋ฆฌ๋-์๋ก-๊ณต์ ํ์ง-์์"><a href="#Hypervisor-ํ์ดํผ๋ฐ์ด์ -์ฌ์ด๊ฐ-์์ข์์-์์์-๋น๋ฆฌ๋-์๋ก-๊ณต์ ํ์ง-์์" class="headerlink" title="Hypervisor (ํ์ดํผ๋ฐ์ด์ ): ์ฌ์ด๊ฐ ์์ข์์ ์์์ ๋น๋ฆฌ๋ ์๋ก ๊ณต์ ํ์ง ์์"></a>Hypervisor (ํ์ดํผ๋ฐ์ด์ ): ์ฌ์ด๊ฐ ์์ข์์ ์์์ ๋น๋ฆฌ๋ ์๋ก ๊ณต์ ํ์ง ์์</h3><ul><li>๊ฐ์ํ๋ฅผ ์ํ ์ํํธ์จ์ด</li><li>๋ฌผ๋ฆฌ์ ํ๋์จ์ด(= ์ค์ ์ปดํจํฐ)์์ ์ฌ๋ฌ ๊ฐ์ VM์ ์คํํ ์ ์๊ฒํจ</li></ul><blockquote><p><code>์ํฉ</code></p><ul><li>C, D, E๋ ๊ฐ๊ฐ Windows, Ubuntu, CentOS๋ก ์คํ ์ค<br>CPU๋ 8์ฝ์ด, ๋ฉ๋ชจ๋ฆฌ๋ 16GB๋ก ์ค์ </li></ul><p><code>์์</code></p><ul><li>C๊ฐ ์คํ ์ค์ผ ๋ (D์ E๋ ๋นํ์ฑ ์ํ):<ul><li>C(Windows)๊ฐ CPU 8์ฝ์ด, ๋ฉ๋ชจ๋ฆฌ 16GB๋ฅผ ์ฌ์ฉ</li><li>๋ค๋ฅธ VM(D, E)์ด ๋นํ์ฑ ์ํ์ด๋ฏ๋ก ํ์ดํผ๋ฐ์ด์ ๋ ๋ชจ๋ ์์์ C์ ๋ฐฐ๋ถ</li></ul></li><li>D(Ubuntu)๊ฐ ์คํ์ ์์ํ๋ฉด: ํ์ดํผ๋ฐ์ด์ ๊ฐ ์์์ ๋์ ์ผ๋ก ์กฐ์ <ul><li>C(Windows): CPU 4์ฝ์ด, ๋ฉ๋ชจ๋ฆฌ 8GB</li><li>D(Ubuntu): CPU 4์ฝ์ด, ๋ฉ๋ชจ๋ฆฌ 8GB</li><li>๊ฐ VM์ ๋
๋ฆฝ๋ OS์ ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ๋ฉฐ ์๋ก ์ํฅ์ ์ฃผ์ง ์์</li></ul></li><li>D์ E(CentOS)๊ฐ ๋์์ ์คํ์ ์์ํ๋ฉด: ์์์ด ์ธ VM์ผ๋ก ๋๋ ์ง<ul><li>C(Windows): CPU 3์ฝ์ด, ๋ฉ๋ชจ๋ฆฌ 6GB</li><li>D(Ubuntu): CPU 3์ฝ์ด, ๋ฉ๋ชจ๋ฆฌ 6GB</li><li>E(CentOS): CPU 2์ฝ์ด, ๋ฉ๋ชจ๋ฆฌ 4GB</li><li>๊ฐ VM์ ๋
๋ฆฝ๋ OS์ ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ๋ฉฐ ์๋ก ์ํฅ์ ์ฃผ์ง ์์<br>=> ๋ง์์ง๋ฉด ์ปดํจํฐ ์๋ ์ ํ ์์ธ</li></ul></li></ul></blockquote><h2 id="4-Container-๋๊ตฌ๋ค"><a href="#4-Container-๋๊ตฌ๋ค" class="headerlink" title="4. Container ๋๊ตฌ๋ค"></a>4. Container ๋๊ตฌ๋ค</h2><p>(ํ๋์ฉ ๊ธ ์์ฑ ing. ์์ฑํ ๋๋ง๋ค ๋งํฌ ์ถ๊ฐ ์์ )</p><h3 id="Container-Runtime"><a href="#Container-Runtime" class="headerlink" title="Container Runtime"></a>Container Runtime</h3><ul><li>Docker: ์ปจํ
์ด๋ ์ํ๊ณ๋ฅผ ์ฃผ๋ํ ๋ํ์ ์ธ ๋ฐํ์</li><li>Containerd: Docker์ ํต์ฌ ๋ฐํ์์ผ๋ก ๋ถ๋ฆฌ๋์ด Kubernetes์์ ์ง์ ์ฌ์ฉ ๊ฐ๋ฅ</li><li>Podman: ๋ฐ๋ชฌ๋ฆฌ์ค ์ปจํ
์ด๋ ์คํํ๊ฒฝ์ผ๋ก Docker์ ๋์ฒด์ </li><li>CRI-O: Kubernetes์ ํธํ๋๋ ๊ฒฝ๋ ๋ฐํ์</li></ul><h3 id="Container-Ochestration"><a href="#Container-Ochestration" class="headerlink" title="Container Ochestration"></a>Container Ochestration</h3><ul><li>Kubernetes: ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ปจํ
์ด๋ ์ค์ผ์คํธ๋ ์ด์
๋๊ตฌ. ์๋ ์ค์ผ์ผ๋ง, ๋ณต๊ตฌ, ๋ฐฐํฌ ์ง์</li><li>Docker Swarm: ๊ฐ๋จํ ์ค์ผ์คํธ๋ ์ด์
์ ์ ํฉํ Docker ๋ด์ฅ ๋๊ตฌ</li><li>Nomad: HashiCorp์์ ๊ฐ๋ฐํ ๊ฒฝ๋ ์ค์ผ์คํธ๋ ์ด์
๋๊ตฌ</li></ul><h3 id="Container-Image"><a href="#Container-Image" class="headerlink" title="Container Image"></a>Container Image</h3><ul><li>Buildah: Docker ์์ด ์ด๋ฏธ์ง๋ฅผ ๋น๋ ๊ฐ๋ฅ</li><li>Kaniko: ํด๋ผ์ฐ๋ ํ๊ฒฝ์์ ์์ ํ๊ฒ ์ด๋ฏธ์ง ๋น๋</li></ul><h3 id="์ปจํ
์ด๋-๋ณด์-๋๊ตฌ"><a href="#์ปจํ
์ด๋-๋ณด์-๋๊ตฌ" class="headerlink" title="์ปจํ
์ด๋ ๋ณด์ ๋๊ตฌ"></a>์ปจํ
์ด๋ ๋ณด์ ๋๊ตฌ</h3><ul><li>Falco: ์ค์๊ฐ ์ปจํ
์ด๋ ๋ณด์ ์ด๋ฒคํธ ๊ฐ์ง</li><li>Aqua Security: ์ปจํ
์ด๋ ํ๊ฒฝ ๋ณด์์ ํฌ๊ด์ ์ผ๋ก ๊ด๋ฆฌ</li></ul>]]></content>
<categories>
<category> โผ DevOps </category>
</categories>
<tags>
<tag> DevOps </tag>
<tag> Container </tag>
</tags>
</entry>
<entry>
<title>[์คํ์์ค] 2024๋
6์ ์คํ์์ค ์์์ง (2): June-va, Farm, Llama.ttf, LetterDrop, LINQPad, CentOS Linux 7</title>
<link href="/2024/06/30/OpenSource/2406(2)/"/>
<url>/2024/06/30/OpenSource/2406(2)/</url>
<content type="html"><![CDATA[<p><img src="0.png"></p><p>(์ฐธ๊ณ /์ถ์ฒ)<br>2024๋
์ ๋ณดํต์ ์ฐ์
์งํฅ์: <a href="https://www.oss.kr/open_up_intro">OpenUP ํ๋ก๊ทธ๋จ</a>์ 2024๋
๊ธฐ์ฌํ ํ๋ก ํฐ์ด๋ก์, ์คํ์์คSW๋ฅผ ํจ๊ป ๊ฐ๋ฐ ๋ฐ ๊ณต์ ํ๊ธฐ ์ํด ์์ฑ๋์์ต๋๋ค.<br>ํด๋น ๋ด์ฉ์ ์ github ํํ์ด์ง์ Explore repositories ๋ฐ feed ๋ด์ฉ์ ํ ๋๋ก ๋ง๋ค์ด์ก์ผ๋ฉฐ, ๊ฒ์๊ธ์ ๋ฌธ์ ์ฌํญ์ด ์์ผ์ ๋ถ๋ค์ ๋๊ธ ๋๋ <a href="mailto:[email protected]">[email protected]</a>์ผ๋ก ์ฐ๋ฝ ๋ถํ๋๋ฆฝ๋๋ค.</p><p><br><br><br></p><h2 id="June-va-๋ก์ปฌ-์์ฑ-์ฑ๋ด"><a href="#June-va-๋ก์ปฌ-์์ฑ-์ฑ๋ด" class="headerlink" title="June-va: ๋ก์ปฌ ์์ฑ ์ฑ๋ด"></a>June-va: ๋ก์ปฌ ์์ฑ ์ฑ๋ด</h2><ul><li>Repository: <a href="https://github.com/mezbaul-h/june">https://github.com/mezbaul-h/june</a></li><li>june-va๋ Ollama, Hugging Face Transformers, Coqui TTS Toolkit์ ํตํฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ก์ปฌ์์ ์ฒ๋ฆฌํจ์ผ๋ก์จ ํ๋ผ์ด๋ฒ์๋ฅผ ๋ณด์ฅํ๋ ๋ก์ปฌ ์์ฑ ์ฑ๋ด</li><li>๊ธฐ๋ณธ ๋ชจ๋: ์์ฑ ์
๋ ฅ ๋ฐ ์ค๋์ค/ํ
์คํธ ์ถ๋ ฅ</li><li>Python 3.10+ ์ด์์์ ์ค์น ํ์, JSON ๊ตฌ์ฑ ํ์ผ์ ํตํด ์ฌ์ฉ์ ์ ์๋ฅผ ํด์ผํจ</li><li>ํนํ Coqui XTTSv2์ ์คํธ๋ฆฌ๋ฐ ๋ชจ๋์์ ์ฝ 500ms์ latency๋ฅผ ๊ธฐ๋กํจ</li><li>์ฐจ์ธ๋ ๋ํํ AI๋ก์จ ๋ง์ ์ฃผ๋ชฉ์ ๋ฐ๊ณ ์์ผ๋ฉฐ, ํ ์ด์์คํดํธ ํตํฉ์ ์ํ ์์ด์ค๋ฐ ํ๋กํ ์ฝ์ ์ฃผ๋ชฉํ๋ ์ค</li></ul><br><h2 id="Farm-Rust๋ก-์์ฑ๋-vite-ํธํ-๊ฐ๋ฅํ-๋น ๋ฅธ-๋น๋-๋๊ตฌ"><a href="#Farm-Rust๋ก-์์ฑ๋-vite-ํธํ-๊ฐ๋ฅํ-๋น ๋ฅธ-๋น๋-๋๊ตฌ" class="headerlink" title="Farm: Rust๋ก ์์ฑ๋ vite ํธํ ๊ฐ๋ฅํ ๋น ๋ฅธ ๋น๋ ๋๊ตฌ"></a>Farm: Rust๋ก ์์ฑ๋ vite ํธํ ๊ฐ๋ฅํ ๋น ๋ฅธ ๋น๋ ๋๊ตฌ</h2><img src="./1.png" width="300"><ul><li>Homepage: <a href="https://www.farmfe.org/">https://www.farmfe.org/</a></li><li>Repository: <a href="https://github.com/windirstat/windirstat">https://github.com/windirstat/windirstat</a></li><li>JS ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์ ์ ์ํด ์ค๊ณ๋ Rust ๊ธฐ๋ฐ์ ์น ๋น๋ ๋๊ตฌ</li><li>์ง์์ ์ธ ๋ชจ๋ ์์ค์ ์บ์ฑ์ ํตํด ๋ณ๊ฒฝ๋ ๋ชจ๋๋ง ์ปดํ์ผ</li><li>React์ Vue๊ฐ์ ๋ค์ํ ํ์ผ ์ ํ๊ณผ ํ๋ ์์ํฌ๋ฅผ ์ง์ํ๋ ํ๋ถํ ๊ธฐ๋ฅ ์ ๊ณต. ํนํ Vite์์์ ๋น๋ ์๊ฐ์ ํฌ๊ฒ ๋จ์ถํ ์ ์์: CI ํ์ดํ๋ผ์ธ์์ ๋งค์ฐ ๊ธ์ ์ ์ธ ๋ฉด๋ชจ๋ฅผ ๋ณด์</li><li>ESBuild, Rollup, Bun๊ฐ์ ๊ฒ๋ค๊ณผ ๋น๊ตํด์, ์ฑ๋ฅ ํฅ์ ๋ฐ ์์ ์ฑ, ์ํ๊ณ ์ง์์ ๋ํ ์ง์์ ์ธ ๊ด์ฌ์ ๊ฐ์ง ๊ฒ์ ์๊ตฌํจ</li></ul><br><h2 id="Llama-ttf-LLM-ํฐํธ"><a href="#Llama-ttf-LLM-ํฐํธ" class="headerlink" title="Llama.ttf: LLM ํฐํธ"></a>Llama.ttf: LLM ํฐํธ</h2><img src="./2.png" width="300"><ul><li>Homepage: <a href="https://fuglede.github.io/llama.ttf/">https://fuglede.github.io/llama.ttf/</a></li><li>Harfbuzz ํฐํธ ์
ฐ์ดํ ์์ง๊ณผ WebAssembly (Wasm)๋ฅผ ํ์ฉํ์ฌ LLM ๋ฐ ์ถ๋ก ์์ง์ผ๋ก๋ ์๋ํ๋ ํฐํธ ํ์ผ</li><li>Wasm์ด ํ์ฑํ๋ Harfbuzz ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์
๋ด(ex. ํ
์คํธ ํธ์ง๊ธฐ, ์ด๋ฉ์ผ ํด๋ผ์ด์ธํธ ๋ฑ)์์ ๊ณต๊ธ์
์ฒด ์
๋ฐ์ดํธ ์์ด ํ
์คํธ ์์ฑ์ด ๊ฐ๋ฅํจ</li><li>์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๋ ํฐํธ ํ์ผ ํฌ๊ธฐ๋ 60MB์ด๋ฉฐ, ๋ก์ปฌ LLM ์คํ์ด ๊ฐ๋ฅํจ</li><li>๋จ ๊ฐ๋ฐ์ ์์ด ์ฌ์ฉํ๋ ํฐํธ ํ์ผ ํฌ๊ธฐ๋ 280GB๋ก ์๋นํ ์ปค์ ์ฌ์ฉํ๊ธฐ์๋ ์์ง ์ด๋ ค์์ด ์์</li></ul><br><h2 id="LetterDrop-TinyLetter๋ฅผ-๋์ฒดํ๋-๋ด์ค๋ ํฐ-๊ด๋ฆฌ-์๋น์ค"><a href="#LetterDrop-TinyLetter๋ฅผ-๋์ฒดํ๋-๋ด์ค๋ ํฐ-๊ด๋ฆฌ-์๋น์ค" class="headerlink" title="LetterDrop: TinyLetter๋ฅผ ๋์ฒดํ๋ ๋ด์ค๋ ํฐ ๊ด๋ฆฌ ์๋น์ค"></a>LetterDrop: TinyLetter๋ฅผ ๋์ฒดํ๋ ๋ด์ค๋ ํฐ ๊ด๋ฆฌ ์๋น์ค</h2><img src="./3.svg" width="300"><ul><li>Homepage: <a href="https://letterdrop.com/">https://letterdrop.com/</a></li><li>Repository: <a href="https://github.com/i365dev/LetterDrop">https://github.com/i365dev/LetterDrop</a></li><li>Cloudflare Workers๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์ถ๋ ์์ ํ๊ณ ํจ์จ์ ์ธ ๋ด์ค๋ ํฐ ๊ด๋ฆฌ ์๋น์ค</li><li>Cloudflare์ Workers, KV, R2, Queues์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ด์ค๋ ํฐ ์์ฑ, ๋ฐฐํฌ, ๊ตฌ๋
๊ด๋ฆฌ ๋ฐ ์คํจํ ์ด๋ฉ์ผ ์ฒ๋ฆฌ๋ฅผ ํธ๋ค๋ง ํ ์ ์์</li><li>ํฅํ ์ ๋ ํ
์คํธ ์ถ๊ฐ, ์ด๋ฉ์ผ ํ
ํ๋ฆฟ, ์ด๋ฉ์ผ ์ด๋๋ฅ ์ถ์ , ๋ ๋ง์ ์๋ํํฐ ์ด๋ฉ์ผ ์๋น์ค ์ง์, ๊ทธ๋ฆฌ๊ณ ๋ค์ค ํ
๋ํธ ๊ธฐ๋ฅ์ ๋์
ํ ๊ฒ์ ๊ณํ ์ค</li></ul><br><h2 id="LINQPad-์๊ฐ"><a href="#LINQPad-์๊ฐ" class="headerlink" title="LINQPad ์๊ฐ"></a>LINQPad ์๊ฐ</h2><img src="./4.png" width="300"><ul><li>Homepage: <a href="https://www.linqpad.net/">https://www.linqpad.net/</a></li><li>Repository: <a href="https://github.com/magicuidesign/magicui">https://github.com/magicuidesign/magicui</a></li><li>C# 12, .NET 8 ์ง์</li><li>LINQ(๋๋ SQL)์ DB ์ฟผ๋ฆฌ: SQL/Azure, ์ค๋ผํด, SQLite, PostgresDB ๋ฐ MySQL ์ง์</li><li>AI ์๋ ์์ฑ, ํตํฉ ๋๋ฒ๊น
๋ฐ ํ๋ถํ ์ถ๋ ฅ ํ์ํ์ ๊ฐ์ ๊ณ ๊ธ ๊ธฐ๋ฅ ์ ๊ณต: ๋น ๋ฅธ ์ฝ๋ฉ ๋ฐ ๋์ ๊ฐ๋ฐ์ ์ํ ๊ฐ๋ ฅํ ๋๊ตฌ๋ก ์ฃผ๋ชฉ๋ฐ๊ณ ์์</li><li>๋จ Windows ์ ์ฉ์ด๋ฉฐ ๋น์ฉ์ ๋ํ ๋ฌธ์ ๊ฐ ์์ผ๋ฉฐ, ํฌ๋ก์ค ํ๋ซํผ ์ง์ ๋ฐ Visual Studio ํตํฉ์ ๋ํด ํ ๋ก ์ค</li></ul><br><h2 id="CentOS-Linux-7-2024๋
-6์-30์ผ-EOL"><a href="#CentOS-Linux-7-2024๋
-6์-30์ผ-EOL" class="headerlink" title="CentOS Linux 7: 2024๋
6์ 30์ผ EOL"></a>CentOS Linux 7: 2024๋
6์ 30์ผ EOL</h2><ul><li>EOL: End Of Life = ์ ํ์ ๋ผ์ดํ ์ฌ์ดํด ์ข
๋ฃ = ๋ ์ด์ ์
๋ฐ์ดํธ ๋ฐ ๋ณด์ ํจ์น๊ฐ ์์</li><li>๋์์ ์ผ๋ก Rocky Linux, AlmaLinux๋๋ Debian์ด ๊ฑฐ๋ก ๋๊ณ ์์. ๋๋ ์ด์์ฒด์ ๋ณ๊ฒฝ ์ํ๋ฅผ ์ํ ์ปจํ
์ด๋ ๊ณ ๋ ค ์ค</li></ul>]]></content>
<categories>
<category> ๐ OpenSource </category>
</categories>
<tags>
<tag> Opensource </tag>
</tags>
</entry>
<entry>
<title>[์ปจํผ๋ฐ์ค] Tech Summit Silicon Valley 2024 ํ๊ธฐ - 2์ผ์ฐจ</title>
<link href="/2024/06/22/Conference/24USA/silicon-valley-2/"/>
<url>/2024/06/22/Conference/24USA/silicon-valley-2/</url>
<content type="html"><![CDATA[<h2 id="1-PANEL-SESSION-The-Future-of-Tech-Startups-Trends-and-Predictions"><a href="#1-PANEL-SESSION-The-Future-of-Tech-Startups-Trends-and-Predictions" class="headerlink" title="1. PANEL SESSION: The Future of Tech Startups: Trends and Predictions"></a>1. PANEL SESSION: The Future of Tech Startups: Trends and Predictions</h2><img src="./1.jpeg" width="500"><p>์ฌ๊ธฐ์๋ ์ ๋ช
๋๊ธฐ์
ํ
ํฌ๊ธฐ์
๋ถํฐ ์คํํธ์
๊น์ง ๋ชจ๋ ๋ชจ์ฌ์ ์ด์ผ๊ธฐ๋ฅผ ์งํํ๋ค.<br>์ฃผ์ ๊ฐ ์ฃผ์ ๋ค๋ณด๋๊น ๋น์ฐํ๊ฒ๋ AI์ ์ฐ๊ด๋์ด ์ง๋ฌธ์ด ๋ง์ด ๋์๋๋ฐ, ๋ด์ฉ์ ๋๋ต์ ์ผ๋ก ์ด๋ ๊ฒ ์์๋ค.</p><ul><li>AI๊ฐ ๋ฐ์ ํ๋ ๊ณผ์ ์์, ์ฐ๋ฆฌ๋ ์์ผ๋ก ์ ํํ ์๋ฃจ์
/์ฒ ์ ํ ๋ณด์ ๊ด๋ จ ์ชฝ์ผ๋ก ์ ๊ฒฝ์ ๋ง์ด ์จ์ผํ๋ค.</li><li>๋ฐ์ดํฐ์ ํ๋ฆฌํฐ๊ฐ ์ฌ๋ผ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ฐ์๋ก ๋น์ธ์ง ๊ฒ์ด๋ค. ๋ชจ๋ธ๋ ๊ทธ ๋น์ผ ๋ฐ์ดํฐ๋ก ์ด์๋๊ธฐ ๋๋ฌธ์ด๋ค.</li><li>Intrastructure์ ์ผ๋ก๋ ์ฑ๋ฆฐ์ง๊ฐ ๋ ๊ฒ์ด๋ค. ์ฌ๊ธฐ๋ ๊ฒฐ๊ตญ ๋์ด ์ฐ๊ด๋์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.</li><li>AI๋ผ๊ณ ๋ฌดํฑ๋๊ณ ๋์ ํ๋๊ฑด ์ง์ํ๋ค. ์์ ์ ์ํธํํ ์ ํํ์์ ๋๋ ๋ค๋ค ๊ทธ์ชฝ์ผ๋ก ๋ฐ์ด๋ค์๋๋ฐ, ๊ฒฐ๊ณผ๊ฐ ๋ง์ด ์ข์ง ์์๋ค. ์ด๋ ์ ๋ ์ ์์๋ณด๊ณ ํ๋๊ฒ ์ข์ ๊ฒ ๊ฐ๋ค.</li><li>Founder๋ผ๋ฉด ๋ฌด์กฐ๊ฑด ๊ณต๋ถ๊ฐ ํ์ํ๋ค. ์ด๊ฒ์ ๊ฒ ์ก๋คํ๊ฒ ์ต๋ํ ๊ณต๋ถํด์ผํ๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ฃจ์
์ด scalableํ์ง, ์ผ์ง ์์๋ด์ผ ํ๋ค.</li></ul><h2 id="2-Unraveling-Tomorrow-Mapping-the-Next-20-Years-of-Technological-Evolution"><a href="#2-Unraveling-Tomorrow-Mapping-the-Next-20-Years-of-Technological-Evolution" class="headerlink" title="2. Unraveling Tomorrow: Mapping the Next 20 Years of Technological Evolution"></a>2. Unraveling Tomorrow: Mapping the Next 20 Years of Technological Evolution</h2><img src="./2.jpeg" width="500"><p>์ด ์ธ์
์์๋ IoT, Bio, Eco, VR/AR ๋ฑ ๋ค์ํ ํ๋์์์ ๋ณํ ๋ฐ ์ ๋ง์ ๋ฐํํ๋ค.<br>์ฌ๊ธฐ์๋ ๊ฒฐ๊ตญ ํ๋ ์๊ธฐ๋ ๊ฐ์๋๋ฐ, ๋ฐ์ดํฐ๊ฐ ์ ์ ์์ผ์๋ก ํ๋ฆฌํฐ๊ฐ ์ฌ๋ผ๊ฐ๋ฉฐ, ๊ฐ๊ฒฉ์ด ๋น์ธ์ง ๊ฒ์ด๋ผ๋ ์๊ธฐ์๋ค.</p><p>์ฌ๊ธฐ์๋ ์ธ์
์ ๋ชฉ์ Technological์ด ๋ถ์ด์ ๊ทธ๋ฐ์ง ๊ฐ๋ฐ์๋ง ์ฐธ์ฌํ๋ ๊ธฐ์ (?)์ด ์ผ์ด๋์ ๊ธฐ์ ์ ์ผ๋ก ๊น๊ฒ ํ ๋ก ํ๋ ์๊ฐ์ ๊ฐ์ง ์ ์์๋ค.</p><ul><li>IoT์ชฝ๋ ์ง๊ธ AI๋ฅผ ๋์
ํ๋ ์ค์ด๋ค. ๊ทผ๋ฐ ์ฌ๊ธฐ๋ Cloud ํ๊ฒฝ์ ์ด์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ Infrastructure์ชฝ์ผ๋ก ์ผ๋จ cost์กฐ์ ์ ์ต์ฐ์ ์ผ๋ก ๋๊ณ ๊ฐ๋ฐํ๊ณ ์๋ค.<ul><li>Cloud๋ AWS๊ฐ ๊ฐ์ฅ ํธํ๋ฐ ๋น์ธ๋ค. ์ฐจ๋ผ๋ฆฌ GCP๋ฅผ ์ฌ์ฉํ๋๊ฒ ๋ ๋ซ๋ค. AWS๋ณด๋ค๋ ์ ๊ทผ์ฑ์ด ์ข ๋จ์ด์ง๋๋ฐ ๊ฐ๊ฒฉ๋ฉด์์๋ ์ข๋ค.</li><li>๊ทผ๋ฐ IaC๊ฐ ๋์ค๋ฉด์ AWs, GCP, Azure๋ ์ฌ์ฉํ๊ธฐ ํธํด์ก๋ค. Terraform์ ์ฌ์ฉํ๋ฉด ์ด ๋ชจ๋ ๊ฒ๋ค์ ๊ด๋ฆฌํ ์ ์๋ค. ์์ง ์ด๊ฑธ ๋ค๋ฃจ๋ ์ฌ๋์ด ๋ถ์กฑํ ํธ์ธ ๊ฒ ๊ฐ๋๋ผ.</li><li>Terraform ์์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ข์ ์์ด๋์ด์ธ๋ฐ, ๊ทธ๊ฒ ์คํ์์ค๋ค๋ณด๋๊น ๋ถ์์ ํ๋ฉด์ด ์๊ธด ํ๋ค. ๊ทธ๋ฐ๋ฐ AI๊ธฐ๋ฐ ์ฐ์
๋ฐ์ ์๋๊ฐ ๋น ๋ฅด๋ค๋ณด๋ ์คํ์์ค๊ฐ ์์ ํ๋๊ธฐ ์ ์ ์น๊ณ ์ฌ๋ผ๊ฐ๋ฒ๋ฆฌ๋ ์ฌ์ฉ์ด ์ ๋งคํ๋ค. -> ๊ทธ๊ฑด ์ด์ฉ ์ ์๋ ๊ฒ ๊ฐ๋ค. ๊ทธ์ ์ฐ๋ฆฌ๊ฐ ์ต๋ํ ๊ธฐ์ฌํ๋ ์๋ฐ์ ์๋ค. ์๋ ์ฌ๊ธฐ ์
๊ณ๋ ๋นจ๋ฆฌ ๋ณํ์ง ์๋๋</li></ul></li></ul><h2 id="3-How-AI-is-transforming-skill-development-and-validation-of-the-future-of-work"><a href="#3-How-AI-is-transforming-skill-development-and-validation-of-the-future-of-work" class="headerlink" title="3. How AI is transforming skill development and validation of the future of work"></a>3. How AI is transforming skill development and validation of the future of work</h2><img src="./3.jpeg" width="500"><p>์ด ์ธ์
์ ์ฌ๋ฐ๊ฒ ๋ดค๋๋ฐ, ๋ฐํ์๋ถ์ด NLP์ 10๋
๋๊ฒ ์ข
์ฌํ์ ๋ถ์ด์๊ธฐ ๋๋ฌธ์ด๋ค.<br>์์ ์ด ๊ฐ๋ฐํ ๊ธฐ์ ์ ์์๋ก NLP๊ฐ ์ด๋ป๊ฒ ๋ฐ์ ํ๋์ง ์๊ธฐํ๋๋ฐ, ๋ด๊ฐ NLP ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ ๋์ณค๋ ๋ถ๋ถ์ ๋ํด ์์ฐ์ค๋ฝ๊ฒ ์ง์ด์ฃผ์๋๊ฑธ ๋ณด๊ณ ์ ๊ธฐํ๋ค๋ ๋๋์ ๋ฐ์๋ค.<br>์ฐธ๊ณ ๋ก ์ด๋ถ์ด ๊ฐ์กฐํ์ ๊ฒ๋ ๋ค๋ฅธ ์ธ์
๊ณผ ๊ฑฐ์ ๋์ผํ๋ค.</p><ul><li>์์ผ๋ก๋ ์ธ๊ณต์ง๋ฅ ํ๋ฆฌํฐ๊ฐ ๋ ์ข์์ง ๊ฒ์ด๋ค. ์ฆ ์๋น์ค ์ ๊ณต ์ง์ด ๋ ์ข์์ง ๊ฒ์ด๋ค.</li><li>์ฆ ์ฐ๋ฆฌ๋ ์ด๊ฑฐ๋ฅผ ์ด๋ป๊ฒ โํ์ฉโํ๋์ง์ ๊ด๊ฑด์ด ๋ฌ๋ ธ๋ค.</li><li>๊ฐ๋ฐ์ ์
์ฅ์์๋ ์ด๋ป๊ฒ ํ๋ฆฌํฐ ๋์ ๋ชจ๋ธ์ ์ ๊ณตํ ๊ฑด์ง ๊ณ ๋ฏผํด์ผ ํ ํ์์ฑ์ด ์๋ค.<br>์ผ๋จ ์ข์ ๋ชจ๋ธ์ ๋ง๋ค๊ธฐ ์ํด์๋ ์ข์ ๋ฐ์ดํฐ๊ฐ ํ์ํ๋ฉฐ, ์ด ๊ณผ์ ์์ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ์ ์ค์์ฑ์ด ๋ ์ปค์ง๊ณ ์๋ค.</li><li>ํฌ์์๋ ๊ณต๋ถ๋ฅผ ํด์ผํ๋ค. AI/๊ฐ๋ฐ์ ๋ํด ์ ํ ๋ชจ๋ฅด๋ ์ํ์์ ํฌ์ํ ๊ฒ์ด ์๋๋ผ, ๋ฐ์ดํฐ์ ํ๋ฆฌํฐ๊ฐ ์ด๋ค์ง๋ฅผ ํ์
ํ๋ ๋์ ๊ธธ๋ฌ์ผ ํ๋ค. ๋ง์ ๊ธฐ์
๋ค์์ ์ฐ๋ ๊ธฐ ๋ฐ์ดํฐ๋ก ํ์ต์ ์์ผ ๋์ ๋ญ๋นํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ, ์ด๋ฅผ ์์๋ด์ผ ํ๋ค.<ul><li>GPT๊ธฐ์ ์ด ๋ง์ด ๋ฐ์ ํ๊ธฐ ๋๋ฌธ์ ์ด ๋ชจ๋ธ๋ค์๊ฒ ๋ฌผ์ด๋ณด๋ฉด ์ด๋ ์ ๋ ์ฌ์ ์ง์์ ์ป์ ์ ์์ ๊ฒ์ด๋ค.</li></ul></li><li>(์ ๋ฆฌ) ์์ผ๋ก ์ธ๊ณต์ง๋ฅ ์ฐ์
์ ๋ชจ๋ธ์ด ์๋ โํ๋ฆฌํฐโ๋ก ์นํจ๋ฅผ ๋๋ ๊ฒ์ด๋ค. ์ด ๊ณผ์ ์์ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ/์๋ํ์ ์ค์์ฑ์ ๋ ์ปค์ง ๊ฒ์ด๋ค.</li></ul><h2 id="2์ผ์ฐจ-ํ๊ธฐ"><a href="#2์ผ์ฐจ-ํ๊ธฐ" class="headerlink" title="2์ผ์ฐจ ํ๊ธฐ"></a>2์ผ์ฐจ ํ๊ธฐ</h2><ul><li><p>์ด๋ ๋ฐ๋ผ AI์ ๋ํ ๊น์ ํ ๋ก ์ด ์งํ๋๋ ๊ฒ ๊ฐ๋ค. ๊ณต์ ์์์์ ๊ธฐ์ ์ ์ธ ์๊ธฐ๋ ์ํ๋ค๋ง, ๋ค๋ค ํ๊ฒฐ๊ฐ์ด โ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌโ, โ์๋ํโ์ ๊ฐ์กฐ๋ฅผ ๋๋ ๊ฒ์ ๋ณด๋ฉด ์์ผ๋ก์ AI๊ฐ๋ฐ์ ์ด๋ฅผ ๋์ฌ๊ฒจ๋ด์ผ ํ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.</p></li><li><p>์ด ๋ ๋ 1์ผ์ฐจ์ ๋์ผํ๊ฒ ์ธ์
์ด ๋๋๊ณ ๊ฐ๋ฐ์๋ค๋ผ๋ฆฌ ๋ชจ์ฌ์ ๋ํ์ ์ฅ์ ํผ์ณค๋ค.<br>์์ด๋ก ๋ํํ๊ธฐ ๋๋ฌธ์ ์ ์ ์ง์ค ํ๋๋ผ ๋๋ฌด ํผ๊ณคํ๋๋ฐ, ๋ค๋ค ๊ทธ๊ฑฐ ๊ฐ์ํ๊ณ ๋ํํ
๋ง์ ๊ฑธ์ด์ฃผ๋๋ผใ
ใ
ใ
ใ
ใ
ใ
์ฐธ ๋ฐ๋ปํ ์ฌ๋๋ค์ด๋ค ใ
ใ
ใ
</p><p>๋ํ ๋ด์ฉ์ ์์ฝํ๋ฉด ์๋์ ๊ฐ๋ค.</p><ul><li>์ด ๋ ์ ๋ฐ์ดํฐ์ ๋ํด์ ์ฌ๋ ์๊ฒ ๋ํ๋ฅผ ๋๋ด๋๋ฐ, ์ฌ๋ ์ฌ๋๊ฒ ๋ค ๊ฑฐ๊ธฐ์ ๊ฑฐ๊ธฐ์ธ์ง ์๊ฐ์ด ๋์ผํ ๊ณณ์ด ๋ง์๋ค.<br>๋ํ์ ์ผ๋ก ๋ฐ์ดํฐ ์ ์ ์ ๊ดํด์์๋๋ฐ, ๋ฐ์ดํฐ ์ ์ ๊ฐ ๊น๋ค๋กญ๋ค๋ณด๋ ๊ธฐ์ +์๊ฐ ๋น์ฉ์ด ํฌ๊ฒ ๋๋ ํธ์ด๋ผ๊ณ ํ๋ค.<br>๊ทธ๋ฐ๋ฐ ๋น์ ๊ณต์๋ค(ํนํ ๋น์ ๊ณต์ CEO๊ฐ์ ์ฌ๋๋ค)์ด ์ด๊ฒ์กฐ์ฐจ ๋ชจ๋ฅด๋ ์ํ์์ ํฌ์๋ฅผ ๊ณ์ํ๋ค๋ณด๋ ์ ์ฒด ํฌ์๊ธ์ 30% ์ด์์ ์๋ฑํ ๊ณณ์ ๋์ ์ฌ์ฉํ๋ฉด์ ์ต์ ์ ๊ฒฐ๊ณผ๋ฌผ์ ์๊ตฌํ๋ค๋ฉฐ ํ์จ์ ์ฌ๋๋ผ.</li><li>์ด์จ๋ ๊ฐ์ ์คํ์์ค ๋ฉด์์๋ ๋ฐ์ดํฐ ์ ์ ์ชฝ์ผ๋ก ์ฝ๋๊ฐ ์์ผ๋ฉด ์ฌ๋ฌ๋ชจ๋ก SW์ฐ์
์ ๊ธ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ๊ฒ ๊ฐ๋ค๋ ์๊ธฐ๊ฐ ๋์๋ค.</li><li>๊ทธ ์ธ๋ก๋ ์๋ก ํ์ฌ์ ๊ดํ ์๊ธฐ์ ์์ผ๋ก์ ํซ์ด์ ํ๋ ์์ํฌ/๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ํ ๋ก ์ ๋๋ด๋ค. ๋ด๊ฐ ๋ชจ๋ฅด๋ ์คํ์์ค๋ค์ ๋ง์ด ์ ํ ์ ์์ด์ ํ์ธต ๋ ๋๋ํด์ง ๊ธฐ๋ถ์ด ๋ค์๋ค.</li></ul></li><li><p>ํ์ผ์ ์ด๋ฆฌ๋ค๋ณด๋ ๋ค๋ค ํ์ฌ <-> ์ปจํผ๋ฐ์ค๋ฅผ ์ค๊ฐ๋๋ผ ํ์ฌ๊ฐ ์๊ฐ๋ณด๋ค ์๋๋ฒ
์ฉํ์ง๋ ์์๋ค. ๋ค๋ง ์๊ฐ๋๋ง๋ค ๋ค์ํ ์ฌ๋๋ค์ ๋ง๋ ์ ์์ด์ ์ฌ๋ฐ์๋ ๊ฒ ๊ฐ๋ค. (์ฒด๊ฐ์์ผ๋ก๋ ํ 1000๋ช
์ ๋ ์จ๋ฏ..?)<br>๋ค์์ ๊ธฐํ๊ฐ ๋๋ค๋ฉด ๋ ๊ฐ์ ์ฌ๋๋ค์ด๋ ๋ํ๋ฅผ ๋๋ ๋ณด๊ณ ์ถ์ ์๊ฐ์ด ๋ค์๋ค ๐</p></li></ul>]]></content>
<categories>
<category> โ๏ธ Conference </category>
</categories>
<tags>
<tag> Conference </tag>
</tags>
</entry>
<entry>
<title>[์ปจํผ๋ฐ์ค] Tech Summit Silicon Valley 2024 ํ๊ธฐ - 1์ผ์ฐจ</title>
<link href="/2024/06/21/Conference/24USA/silicon-valley-1/"/>
<url>/2024/06/21/Conference/24USA/silicon-valley-1/</url>
<content type="html"><![CDATA[<h2 id="๊ทธ-๋ง๊ณ -๋ง์-์ปจํผ๋ฐ์ค-์ค-์ค๋ฆฌ์ฝ๋ฐธ๋ฆฌ๋ฅผ-์ ํํ-์ด์ ๋"><a href="#๊ทธ-๋ง๊ณ -๋ง์-์ปจํผ๋ฐ์ค-์ค-์ค๋ฆฌ์ฝ๋ฐธ๋ฆฌ๋ฅผ-์ ํํ-์ด์ ๋" class="headerlink" title="๊ทธ ๋ง๊ณ ๋ง์ ์ปจํผ๋ฐ์ค ์ค ์ค๋ฆฌ์ฝ๋ฐธ๋ฆฌ๋ฅผ ์ ํํ ์ด์ ๋?"></a>๊ทธ ๋ง๊ณ ๋ง์ ์ปจํผ๋ฐ์ค ์ค ์ค๋ฆฌ์ฝ๋ฐธ๋ฆฌ๋ฅผ ์ ํํ ์ด์ ๋?</h2><p>๊ฐ๋ฐ์๋ค์ ์ธ๊ณ ์ต๊ณ ์ ํ๋ โ์ค๋ฆฌ์ฝ๋ฐธ๋ฆฌโ์์ ์ด๋ฆฌ๋ ์ปจํผ๋ฐ์ค๋ผ๋ ๊ฒ๋ ์๋ฏธ๊ฐ ์์์ง๋ง, ๋๋ ๊ทธ ๋ฌด์๋ณด๋ค <u>์ค๋ฆฌ์ฝ๋ฐธ๋ฆฌ ๊ฐ๋ฐ์๋ค๊ณผ ์ต์ ๊ธฐ์ ๋ํฅ์ ๋ํด โ๋คํธ์ํนโ</u>์ ํด๋ณด๊ณ ์ถ์ด์ ์ฐธ์ํ๊ฒ ๋์๋ค.</p><p>ํ์๋ ์๋
์ ์์ด๊ณต๋ถ ํ๋ซํผ์ ํตํด ์ค๋ฆฌ์ฝ๋ฐธ๋ฆฌ์ ์ด์ฒญ๋ฐ์ ๊ตฌ๊ธ, ์ฐ๋ฒ, ๋ฉํ ๋ฑ ๋ค์ํ ๊ธฐ์
๋ค์ ํฌ์ดํด๋ดค๋๋ฐ, <u>์ ์ฌ/์ ๋
์ ๋จน๊ฑฐ๋ ์ฌ์ง์ด ์ฌ๋ ์๊ฐ์ผ ๋์กฐ์ฐจ ์ค๋ฆฌ์ฝ๋ฐธ๋ฆฌ ๊ฐ๋ฐ์๋ค์ ๋งค์ฐ ์ด์ ์ ์ผ๋ก ์ด๋ค ์ฃผ์ ์ ๋ํด ํ ๋ก </u>ํ๋ ๋ชจ์ต์ด ์ฐธ ์ธ์ ๊น์๊ธฐ ๋๋ฌธ์ด๋ค.</p><p>๊ทธ ๋น์ ์ธ์ ๊ฐ๋ ๋ํํ๊ฒ ์ง๋ผ๋ฉฐ ์ฌ๋๋ค์๊ฒ ํน๋ณํ ๋ง์ ๊ฑธ์ง๋ ์๊ณ ๋์ด๊ฐ๋๋ฐ, <a href="https://www.oss.kr/open_up_intro">OpenUp</a>์์ ์ต๋ 250๋ง์๊น์ง ์ปจํผ๋ฐ์ค ์ง์์ ํด์ค ๋์ 1๋
๋ค์ธ ์ง๊ธ ๋ฐ๋ก ๊ฟ์ ์ด๋ฃจ๊ฒ ๋์๋ค (?!)</p><p>์ฐธ๊ณ ๋ก ์ด๋ฒ์ ์ฐธ์ฌํ ์ปจํผ๋ฐ์ค ์ด๋ฆ์ ๋ฐ๋ก <a href="https://techsummit.tech/san-francisco/">Tech Summit Silicon Valley</a> ์๋ค.</p><img src="./1.png" width="500"><br><h2 id="์ค๋ฆฌ์ฝ๋ฐธ๋ฆฌ์-๊ฐ-๋-์ฐธ๊ณ ํ -์ "><a href="#์ค๋ฆฌ์ฝ๋ฐธ๋ฆฌ์-๊ฐ-๋-์ฐธ๊ณ ํ -์ " class="headerlink" title="์ค๋ฆฌ์ฝ๋ฐธ๋ฆฌ์ ๊ฐ ๋ ์ฐธ๊ณ ํ ์ "></a>์ค๋ฆฌ์ฝ๋ฐธ๋ฆฌ์ ๊ฐ ๋ ์ฐธ๊ณ ํ ์ </h2><p>์๋ ํ๊ธฐ๋ฅผ ์ปจํผ๋ฐ์ค ๋ด์ฉ์ ๋ํด์๋ง ์ ์ผ๋ ค๊ณ ํ์ผ๋, ์ปจํผ๋ฐ์ค ์ฅ์๊ฐ <u>์ธ๊ตญ + ์๊ณจ</u>์ธ ์ ์ ๊ฐ์ํด์ ํ ๋ฒ ์์ฑ์ ํด๋ณด๋๋ก ํ๋ค.<br>์ค๋ฆฌ์ฝ๋ฐธ๋ฆฌ์ ๊ฐ๊ฒ ๋๋ค๋ฉด ์๋ ๋ด์ฉ์ ์ฐธ๊ณ ํ์.</p><ul><li>์ค๋ฆฌ์ฝ๋ฐธ๋ฆฌ = ๊นก์๊ณจ<ul><li>๋ฌผ๋ก ์ฐ๋ฆฌ๋๋ผ ์๊ณจ์ ๋นํด ๋ฒ์ค์ ์งํ์ฒ ์ด ์ ๋์ด ์์ผ๋, ๊ฒฐ๊ตญ ์๊ณจ์ ์๊ณจ์ด๋ค. ํ๋ฌผ๋ฉฐ ๋์ ๋์ค๊ตํต๋ ์ ์ฐ์ฐฉ๋๋ ํธ์ธ๋ฐ, ์๊ณจ์ด๋ฉด ์ค์ฃฝํ ๊น (โฆ)<br>๋ ์๋ผ๋ ค๊ณ ๋์ค๊ตํต ์ด์ฉํ๋ค๊ฐ ์คํ๋ ค ์ฝ์์ ๋ฆ๋ ๋น์์ฌํ๊ฐ ๋ฒ์ด์ง ์ ์๋ค.</li><li>๊ฒ๋ค๊ฐ โ๋ฏธ๊ตญโ์ ์๊ณจ์ด๋ค. ๋ฏธ๊ตญ ๋
๋ฉ์ด๋ฆฌ์ ์ฐ๋ฆฌ๋๋ผ๋ฅผ ๋น๊ตํ๋ฉด ์ ๋ ์๋๋ค. ๋ฏธ๊ตญ์ ๋ชจ๋ ๊ณณ์ด ์ฐจ๊ฐ ์์ผ๋ฉด ๋์๋ค๋๊ธฐ๊ฐ ์ฐธ ํ๋ค๋ค. ์ฐจ๋ก 10๋ถ์ธ ๊ฑฐ๋ฆฌ๊ฐ ๋๋ณด๋ก๋ 1์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ๊ณณ์ด๋ค.</li><li>๋ ์ ์์ผ๋ฉด ์ํ๋์์ค์ฝ ๊ตญ์ ๊ณตํญ์์ ๋ด๋ฆฌ์๋ง์ ๋ ํธ์นด๋ฅผ ๋น๋ฆฌ์. ์๊ฐ๋ณด๋ค ์ธ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฏธ๊ตญ์ ๊ตํต ๋ฒ๊ท๋ ์ฐ๋ฆฌ๋๋ผ์ ๊ฑฐ์ ๋์ผํ๋ค.<ul><li>โ๋น๋ณดํธ ์ขํ์ , STOPํ์งํ, ์ค์ฟจ๋ฒ์คโ๊ฐ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ธ๋ฐ, ์ด๊ฑฐ๋ ์ ํ๋ธ ์์ ๋ช ๊ฐ ๋ณด๋ฉด ์ฝ๊ฒ ์ดํดํ ์ ์๋ค.</li><li>๋๋ก๊ฐ ๋งค์ฐ ๋์ผ๋ฉฐ, (๊ณ ์๋๋ก์ ํํด) ์๋ ์ ํ๋ ํ๊ตญ๋ณด๋ค ๋๊ทธ๋ฌ์ด ํธ์ด๋ผ ์ฝ๊ฒ ์ ์ํ ์ ์๋ค.</li><li>์ด ๋ ๊ตฌ๊ธ ์ง๋๋ก ๋ค๋น๊ฒ์ด์
์ ์ด์ฉํ๋ฉด ๋๋ค.</li></ul></li></ul></li><li>๋ฏธ๊ตญ ๋๋ถ๋ณด๋ค ์์ด์ ๋ํ ๊ฑฐ๋ถ๊ฐ์ด ์ ์ ํธ<ul><li>ํ์์ ๊ฐ์ธ์ ์ธ ์๊ฐ์ด๋ค๋ง, ๋ฅ๋ ฅ์๋ ์ฌ๋๋ค์ด ๋ชจ์ฌ์๋ ๊ณณ์ด๋ค๋ณด๋ ์์ด๊ถ์ด ์๋ ์ฌ๋๋ค์ด ๋ง๋ค.</li><li>๊ทธ๋งํผ ๋ค์ํ ์์ด ๋ฐ์์ ๊ตฌ์ฌํด ์๋ก์ ์์ด๋ฅผ ๋ชป์์๋ฃ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ๊ทธ๋์ ์์ด๋ก ์ด๋ป๊ฒ๋ ๋ํ๋ฅผ ํ๋ ค๊ณ ํ๋ค๋ฉด (๋๋ถ๋ณด๋ค ๋น๊ต์ ) ์๋๋ฐฉ์ ๋์ฑ ์กด์คํ๊ณ ์ดํดํ๋ ค๋ ๋ชจ์ต์ ๋ณด์ฌ์ค๋ค.</li><li>์์ด์ ๋๋ ค์์ ๊ฐ์ง ๋ง๊ณ ์์ ์ด ๋ฌด์จ ๋ง์ ํ๊ณ ์ถ์์ง ์ดํํ์. ๋ค๋ค ์ด์ฌํ ๋ค์ด์ฃผ๊ณ ์๊ธฐํด์ค ๊ฒ์ด๋ค.</li></ul></li></ul><p>๊ทธ ์ธ ๋๋จธ์ง๋ ์ธํฐ๋ท์ โ๋ฏธ๊ตญ ์ฌํโ๊ฐ์ ํค์๋๋ฅผ ๊ฒ์ํด์ ์ฐพ์๋ณด๋ฉด ๋ ๊ฒ์ด๋ค.</p><p><br><br><br></p><p>์๋๋ ์ด๋ ๊ฒ ๋ง๋ฌด๋ฆฌํ๊ณ , ๋ณธ๊ฒฉ์ ์ผ๋ก ์ปจํผ๋ฐ์ค ํ๊ธฐ๋ฅผ ์์ฑํด๋ณด๋๋ก ํ๊ฒ ๋ค.<br>์ด๋ฒ ํฌ์คํธ์์๋ 6์ 19์ผ์ ์งํ๋ ์ปจํผ๋ฐ์ค ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์์ฑํด๋ดค๋ค.</p><img src="./2.jpeg" width="300"><p><del>๋ง์ ๊ธ ์์ฑํ๋ ์ด ์ฌ์ง ๋ฃ์ ๊ณณ์ด ์์ด์ ์ฌ๊ธฐ๋ค๊ฐ ๋๊ฒจ๋ณธ๋ค</del></p><hr><h2 id="1-Using-technology-as-a-way-to-enable-financial-inclusion-in-emerging-markets"><a href="#1-Using-technology-as-a-way-to-enable-financial-inclusion-in-emerging-markets" class="headerlink" title="1. Using technology as a way to enable financial inclusion in emerging markets"></a>1. Using technology as a way to enable financial inclusion in emerging markets</h2><img src="./4.png" width="500">์๋ AI/DB์ชฝ์ผ๋ก ๋ค์ผ๋ ค๋ค๊ฐ ํด๋น ๊ฐ์ฐ๋ค์ด ๋ณ๊ฒฝ/์ทจ์๋์ด ์๊ฐ์ด ๋น์ด ๊ณ ๋ฏผํ๋ค๊ฐ ๋ค์ด๋ณด๊ฒ ๋์๋ค.<p>์ค๋งํธํฐ์ผ๋ก ๋ฐฐ๋ฌ, ์ฃผ์ฐจ, ํ์ต ๋ฑ ๋ชจ๋ ๊ฒ์ ํ ์ ์๋ ์๋๊ฐ ๋์์ผ๋ฉฐ, ์ํ์
๋ฌด๋ ๋์งํธํ๊ฐ ๋ง์ด ๊ฐ์๋์๋ค๋ฉฐ 2025๋
์๋ 3.7 trilion๋งํผ์ ์์ฅ ๊ท๋ชจ๋ฅผ ์์ธกํ๊ณ ์๋ค๋ ๋ด์ฉ์ด์๋ค.</p><p>๋ธ๋ผ์ง์ 76%, ํ๋ฃจ์ 63%, ๋ฉ์์ฝ์ 71%, ์น ๋ ์ 81%๋ค์ด ๋์งํธ๋ฑ
ํฌ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ ์ฐ๊ตฌ๊ฒฐ๊ณผ๋ ๋ณด๊ณ , ์ด์ชฝ ๋ถ์ผ ์ด์ฌ์๋ก์ ๋ด์ฉ์ ์ฝ๊ฒ ํ์ดํด์ค์ ์ฌ๋ฐ๊ฒ ๋ค์๋ค.</p><p>์ฌ๊ธฐ๋ QnA๊ฐ ์ฌ๋ฐ์๋๋ฐ, ์ธ์์ด ๊น์ด์ ํ ๋ฒ ๋จ๊ฒจ๋ณธ๋ค.</p><ul><li>Q) ์ด๋ฌํ ์ ๋ณด๋ ์ด๋ป๊ฒ ์ฐพ์๋๊ฐ?<br>A) MasterCard, Visa ๋ฑ์์ ์ฐ๊ตฌ๋ฅผ ํ์ฉํ ๊ฒ์ด๋ฉฐ, ์ ๋ถ์์๋ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ข
ํฉํด์ ์์ผ๋ก์ ์์ฅ์ด ์ด๋ป๊ฒ ๋ณํํ ๊ฒ์ธ์ง ์์ธกํ๊ณ ์์. ์คํฐ๋๋ ์ฐพ์๋ณด๋ฉด ๋ง์</li><li>Q) ์๋ฉ๋ฆฌ์นด์์ ์ต๊ทผ ๋๋๋๊ณ ์๋ ์ ๋ต์?<br>A) Cash Free, Bank Transfer๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉํฅ์ผ๋ก ์ ๋ต์ ์ก๊ณ ์๋ค</li><li>Q) ์์ผ๋ก ๋์งํธ๋ฑ
ํฌ์ชฝ์ผ๋ก ์ฐ์
์ด ํ์ฅ๋ ๊ฒ ๊ฐ์๊ฐ?<br>A) ์ ํ์ ์ธ ์ข
์ดํต์ฅ์ ์ก๊ธํ๋๋ฐ ๋ถํธํ ์ ์ด ๋ง์ผ๋ฉฐ, ๋์งํธ๋ฑ
ํฌ๋ ์ด ๋จ์ ์ ์ ๋ถ ํด๊ฒฐํ๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ตญ์๋ ์์ฅ์ ๋ค ๋จน์ ๊ฑฐ๊ธด ํ ๊ฑฐ๋ค. ๊ทธ๊ฒ ์ธ์ ์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง</li></ul><h2 id="2-WORKSHOP-Unlocking-Growth-AI-Driven-Strategies-Beyond-Metrics-and-Manuals"><a href="#2-WORKSHOP-Unlocking-Growth-AI-Driven-Strategies-Beyond-Metrics-and-Manuals" class="headerlink" title="2. WORKSHOP: Unlocking Growth: AI-Driven Strategies Beyond Metrics and Manuals"></a>2. WORKSHOP: Unlocking Growth: AI-Driven Strategies Beyond Metrics and Manuals</h2><img src="./6.png" width="500">์ด ๋ถ์ ๊ต์๋์ธ๋ฐ, AI์ ๋ํด์ ์ข ๋ ์ง์ค์ ์ผ๋ก ์ธ์
์ ์งํํ๋ค.<p>์ต๊ทผ ์ํธํ ์์
๋ถํฐ ์ ๋ถ ์ปดํจํฐ์ ์์กดํ๊ณ ์๋ ์ํฉ์ด๊ธฐ ๋๋ฌธ์, AI๊ฐ ๊ฒฐ๊ตญ์๋ ๋ชจ๋ ์ผ์ ๋ค ํ ๊ฑฐ๋ค๋ ์๊ธฐ์ ์ต๊ทผ์๋ ์๋ํ ์ชฝ์ผ๋ก ํฌ๊ฒ ๊ด์ฌ์ ๋ฐ๊ณ ์๋ ์ํฉ์ด๋ผ ์ด ์์ฅ์ ์ ์ํ๋ผ๊ณ ํ๋ค.<br>๋ํ ์ต๊ทผ AI + ์คํ์์ค์ ๋ฐ์ ์ผ๋ก ๊ฐ๋ฐ์ด ์ฌ์์ก๊ธฐ ๋๋ฌธ์ ๋น์ ๊ณต์๋ผ๋ ํ ๋ฒ ๊ฐ๋ฐ์ ๋์ ์ ํด๋ณผ๋งํ๋ค๋ ๋ด์ฉ์ด ์์๋ค.</p><p>์ฌ๊ธฐ์๋ ์ด ๋ด์ฉ์ ํฌ๊ฒ ๊ฐ์กฐํ๋ค.</p><ul><li>Identify your key workflows</li><li>Experiment with different ai tools</li><li>Create replicable prompts</li><li>Measure and iterate</li></ul><h2 id="3-PANEL-SESSION-Exploring-the-Power-of-Artificial-Intelligence"><a href="#3-PANEL-SESSION-Exploring-the-Power-of-Artificial-Intelligence" class="headerlink" title="3. PANEL SESSION: Exploring the Power of Artificial Intelligence"></a>3. PANEL SESSION: Exploring the Power of Artificial Intelligence</h2><img src="./3.png" width="500"><p>์ฌ๊ธฐ์๋ AI๊ฐ ์ฃผ์ ์ธ ๋งํผ, ์ต๊ทผ AI์
๊ณ์ ํซ์ด์ ChatGPT์ ๋ํด ๊ธธ๊ฒ ํ ๋ก ํ๋ ์๊ฐ์ ๊ฐ์ก๋ค.<br>๋ด ์๊ฐ๊ณผ ๋์ผํ๊ฒ โ๊ฐ๋จํ ๊ฒ์ ๋ํด์๋ ์ฌ์ฉ์ด ์ฉ์ดํ๋, C๋ ๋ฒจ์ ์์์ง์ธ ๊ฒฝ์ฐ์๋ ์์ฌ๊ฒฐ์ ์ด ํ์ํ ๋ ์ฌ์ฉ์ ์ฃผ์ํด์ผ ํ๋คโ๋ ๋ด์ฉ์ด์๋ค.</p><p>๋ ๋ฒ์งธ๋ก๋ AI ํ์ต์ ๊ดํด์๋ ์๊ธฐ๋ฅผ ๋๋ด๋๋ฐ, ์ธ๊ณต์ง๋ฅ ๊ฐ๋ฐ์ ์์ด์๋ ๊ฒฐ๊ตญ ๋ฐ์ดํฐ์ organization์ด ์ค์ํ๋ค๋ฉฐ ์ฒด๊ณ์ ์ผ๋ก ๋ถ๋ฅํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์ฐ๊ตฌํด์ผํ๋ค๊ณ ๋ํ๋ฅผ ๋๋ด๋ค.<br>๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๋๋๋ ๊ฒ์ ๊ฒฐ๊ตญ ์๋ํ๊ฐ ๋ค์ด๊ฐ๊ฒ ๋ ํ
๋ฐ, ๊ฐ๋ฐ์๋ ๋น๊ฐ๋ฐ์๋ ์ด์ชฝ์ผ๋ก๋ ๊ด์ฌ์ ๊ฐ์ง๋ฉด ์ข์ ๊ฒ์ด๋ผ๊ณ ์ด์ผ๊ธฐ๊ฐ ์๊ฐ๋ค.</p><p>๋ง์ง๋ง์ผ๋ก AI๊ฐ๋ฐ์์ ๋ํฅ์ ๊ดํ ํ ๋ก ๋ ์ด๋ฃจ์ด์ก๋๋ฐ, ์์์ง๋ค์๊ฒ๋ โAI๊ฐ๋ฐ์๋ฅผ ๋ฐ๋ก ์ฑ์ฉํ์ง ๋ง๊ณ ChatGPT๋ Llama3๊ฐ์ ๊ฑธ ๋จผ์ ์ฌ์ฉํด๋ณผ ๊ฒ. BM ์ค์ผ์ผ์ด ์ปค์ง ๋ ๊ณ ์ฉ์ ๊ณ ๋ คํ๋ผโ,<br>๊ฐ๋ฐ์์๊ฒ๋ โ์ฑ์ฉ ์์ฅ์ด ๋๊ฒฐ๋ ๋งํผ ๋ณด์์ ์ผ๋ก ์ ๊ทผํด์ผ ํ๋ค. ๋ฐ๋ผ์ AI๊ฐ๋ฐ์๊ฐ ๋๋ ค๋ฉด degree๋ฅผ ๋ชปํด๋ ์์ฌ๊น์ง๋ ํด๋๋๊ฒ ์ข์ ๊ฒ ๊ฐ๋คโ๋ผ๋ ๋ด์ฉ์ผ๋ก ์ ๋ฆฌํ ์ ์์ ๊ฒ ๊ฐ๋ค.</p><h2 id="4-PANEL-SESSION-Data-Driven-Innovation"><a href="#4-PANEL-SESSION-Data-Driven-Innovation" class="headerlink" title="4. PANEL SESSION: Data-Driven Innovation"></a>4. PANEL SESSION: Data-Driven Innovation</h2><img src="./5.png" width="500"><p>์ฌ๊ธฐ์๋ ๋ฐ์ดํฐ์ ๊ดํด์ ์ข ๋ ์์ธํ๊ฒ ํจ๋๋ค์ด ๋ํ๋ฅผ ๋๋๋ ์ธ์
์ด์๋ค.</p><p>์ต๊ทผ์ ๋ฐ์ดํฐ๋ ๊ณ ๊ฐ์ ์ดํด์ํค๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๊ฒ์ด๋ฉฐ, โ๋ณด์, ์ ํ์ฑโ์ ๋ํ ์ดํ์ด ์ข ๋ ํ์ํ๊ณ <br>๊ธฐ์ ์ ๋ฐ๋ฌ๋ก ์ธํด ํ๋ ์์ํฌ์์ ๊ฒฐํฉ์ด ์ฝ๊ณ ๋ฐ์ดํฐ์์ง๋์ด๋ค์ด ํ์ดํ๋ผ์ธ์ ์ฝ๊ฒ ๊ตฌ์ถํ ์ ์์ด ๋ฌด์กฐ๊ฑด์ ์ผ๋ก ๋ฐ์ดํฐํ๋ฆฌํฐ๋ฅผ ์ฆ๊ฐ์์ผ์ผ ํ๋ค๋ ๋ด์ฉ์ด์๋ค.</p><p>๋ค๋ง ์ฒด๊ณ์ ์ผ๋ก ์ ๋ฆฌํ๋ ์ต๊ด์ ๊ธฐ๋ฅผ๊ฑฐ๋ฉด ์ํ ๊ณต๋ถ๋ ๋ฌด์กฐ๊ฑด์ ์ผ๋ก ์ถ์ฒํ๋ฉฐ, AI์ ๊ด์ฌ์ด ์๋ค๋ฉด ์ธ์ด ๋ชจ๋ธ ํ๋ซํผ์ด 2๋
์ฌ์ด์ ๋ง์ด ๋ฐ์ ํ๊ธฐ ๋๋ฌธ์ ํ๋ฆฌํฐ๋ ํด๋ง๋ค ๋ค๋ฅด๊ฒ ์ง๋ง ๊ฐ๋ฐ์ ์ฌ์ธ ๊ฒ์ด๋ผ๋ ์๊ธฐ๊ฐ ๋์๋ค.</p><p>๊ฒฐ๋ก ์ ์ผ๋ก๋ ๋ฐ์ดํฐ์ ๋ํ โ๋ณด์, ์ ํ์ฑโ์ ๋ํด์ ์ ๋ถ ๊ท์ ๊น์ง ๊ฐํ๋ ๊ฒ์ผ๋ก ๋ณด์ด๊ธฐ ๋๋ฌธ์<br>๋ฐ์ดํฐ ๋ชจ๋ธ ๋ฆฌํํ ๋ง์ ๋งค์ฐ ์กฐ์ฌํด์ผ ํ๋ค๋ ๋ด์ฉ์ด ์์๋ค.</p><p>์คํ์์ค๋ฅผ ๊ธฐ์
์์๋ ์ฌ์ฉํ ํ
๋ฐ, ์ด ์ ์์๋ ์คํ์์ค ๊ฐ๋ฐ์๋ค๋ ์ ์ํด์ผ๊ฒ ๋ ์๊ฐ์ด ๋ค์๋ค.</p><h2 id="1์ผ์ฐจ-ํ๊ธฐ"><a href="#1์ผ์ฐจ-ํ๊ธฐ" class="headerlink" title="1์ผ์ฐจ ํ๊ธฐ"></a>1์ผ์ฐจ ํ๊ธฐ</h2><ul><li><p>์ผ๋จ ๊ฐ๋ฐ์ ์ค์ฌ์ ์ปจํผ๋ฐ์ค๊ฐ ์๋๊ธฐ ๋๋ฌธ์, ์ปจํผ๋ฐ์ค ๋ด์ฉ์ ์ผ๋ฐ์ธ๋ค๋ ์ดํดํ๊ธฐ ์ฝ๊ฒ๋ ๊ตฌ์ฑ์ด ๋์ด ์์๋ค.<br>๊ทผ๋ฐ ์ค๋ฆฌ์ฝ๋ฐธ๋ฆฌ ํน์ฑ๋ต๊ฒ ๊ฒฐ๊ตญ์ ๊ฐ๋ฐ์๋ค๋ผ๋ฆฌ ์๋ฐ์ ์ผ๋ก ๋ชจ์ฌ์ ์ถ๊ฐ๋ก ์๊ฒฌ์ ๋๋๋ ์๊ฐ์ ๊ฐ์ง ์ ์์ด์ ์ปจํผ๋ฐ์ค๊ฐ ์ฌ๋ฏธ์์๋ ๊ฒ ๊ฐ๋ค.<br>๋ค๋ค ๋ฐ์ค์ ๋๊ฒ, ์์ฆ ํธ๋๋ ํ์
๊ฒธ ์คํ์์ค ๊ฐ๋ฐํ๋๋ฐ ์ข ๋์๋๋ ์ ๋ณด ์๋ ์ถ์ด ํ๊ตญ์์ ๋นํ๊ธฐํ๊ณ ์์ ์ฐธ๊ฐํ๋ค๊ณ ์๊ธฐํ๋๊น<br>๋นํ๊ธฐ ํ๊ณ ์ค๋๋ผ ํ๋ค์๊ฒ ๋ค๋ฉฐ ์์์ ์ด๊ฒ ์ ๊ฒ ์ ์ฑ๊ฒจ์คฌ๋ค. ์์ด๋ ์ํ๋ค๊ณ ์นญ์ฐฌํด์ฃผ๊ณ .. <del>ํ ์ข
ํ๊ตญ์ธ์ ๊ฐ๋์ ๋๋ฌผ์ ํ๋ ธ์ด์</del></p><p>์๋๋ ๋ํ ๋ด์ฉ์ ์์ฝํ ๊ฒ์ด๋ค.</p><ul><li>์คํ์์ค์ ๋ํด์๋ ๋ค๋ฅธ ๋๋ผ์์๋ ์ํ๊ณ๋ฅผ ํค์ฐ๋ ค๊ณ ๋
ธ๋ ฅํ๋ค๊ณ ํ๋ค. ๋ฃ๊ธฐ๋ก๋ ํ๋์ค(์๋๊ฑธ๋ก ๊ธฐ์ตํ๋๋ฐ ์ ํํ์ง๋ ์๊ณ .. ์ผ๋จ ์ ๋ฝ ์ด๋๊ฐ)๋ ์ฌํด์ ์คํ์์ค๋ฅผ ๋งค๋
์ ์ ํ์ฌ ํด๋น ๋ฉ์ธ ์ปจํธ๋ฆฌ๋ทฐํฐ์๊ฒ ์๊ธ์ ์ค๋ค๊ณ ํ๋ค. ์ธ๊ตญ์ธ๋ ๋์ ์ค๋ค๊ณ ํ๋๋ฐ ํ ๋ฒ ๊ด์ฌ ์์ผ๋ฉด ์ฐพ์๋ณด๋ผ๊ณ ํ๋๋ผ</li><li>์ต๊ทผ ์ด์์๋ Redis์ ๋ํด์๋ ์ด๋ค ํ ๋ก ์ ํ๋๋ฐ, ๋ค๋ค ์ด๋ฒ ์ฌํ๋ก ์คํ์์ค ์ํ๊ณ๊ฐ ์ด๋ ์ ๋ ์์ถ๋์๋ค๋ฉฐ ์์ฌ์ดํ๋ ๋ชฉ์๋ฆฌ๋ฅผ ๋๋ค.</li><li>๋น์ฐํ AI์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํด์๋ ๋ํ๋ฅผ ๋๋ด๋ค. ์ฌ๊ธฐ์๋ ๋์ผํ๊ฒ AI๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ผ๋จ organization์ด ์ ๋๋ก ๋์ผ ๊ด๋ฆฌ๋ฉด์์, ํ์ต๋ฉด์์ ๋ชจ๋ ์ข์ ๊ฒฐ๊ณผ๋ฌผ์ ์ป์ ์ ์๋ค๊ณ ์๊ธฐํ๋ค.<br>๊ทธ ์ธ ํ์์ ๊ถ๊ธํ๋ ๊ฒ๋ค(ex. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ก์ปฌ์๊ฐ ์ ์ฅ ๊ด๋ จ)์ ๋ฌผ์ด๋ดค๋๋ฐ, ๋ค๋ค ์ฌ๋์ธ์ง๋ผ ์๊ฒฌ์ด ๋ค๋ค ๋ค๋ฅด๋๋ผ. ๊ทผ๋ฐ ์๊ธฐ๋ฅผ ๋ค์ด๋ณด๋ฉด ์ ๋ฆฌ ์คํ์ผ๋ง ๋ค๋ฅผ ๋ฟ ๋ฐ์ดํฐ๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ์ ๋ฆฌํ ๊ฒ์ ๋์ผํ๊ธฐ์ ๋ชจ๋ ๋ค์ด๋ณผ ๋ง ํ๋ค.<br>๊ทธ๊ฒ๋ณด๋ค ๋ํ๋ฅผ ๋๋๋๋ฐ ์๋ก ์๊ฒฌ์ ์กด์คํ๋ฉด์ ์๊ฒฌ ์ดํํ๋๊ฒ ์ธ์ ๊น์๋ค. ์ฌ๊ธฐ๋ ๋งํ๋ ๊ฒ๋ถํฐ๋ ๋๊ฒ ์ ๋ฌธ์ ์ผ๋ก ํ๋ ๋๋์ด๋๊น.</li><li>์ทจ์ง ๋ฉด์์๋โฆ ๋ฏธ๊ตญ ์์ฅ์ ์์ง๋ ๋งค์ฐ ์ฐจ๊ฐ๋ค๊ณ ํ๋ค.<br>์ค์ ๋ก ๋๋ฅผ ๋ง์์ ๋ค์ดํ๋ ๋น
ํ
ํฌ ๊ธฐ์
๊ฐ๋ฐ์๋ ์์ฅ์ด ์ด๋์ ๋ ๊ด์ฐฎ์ผ๋ฉด ๋๋ณด๊ณ ์ฌ๊ธฐ์ ์ผํ์๊ณ ์ถ์ฒํ๊ณ ์ถ์๋ฐ, ์ฌ๊ธฐ๊ฐ ๋๋ฌด ์ด์ผ์ํ์ด๋ค๋ณด๋ ์ง๊ธ ์ง์ฅ์ ๊ณ์ ๋ค๋๋๊ฒ ์์ ํด ๋ณด์ธ๋ค๋ฉฐ ์์ฌ์ํ๋๋ผ. (์ค๋ฆฌ์ฝ๋ฐธ๋ฆฌ ์์ฒด๊ฐ ์ฝ๊ฒ ์ทจ์ง๋๊ณ ์๋ฆฌ๋ ๊ณณ์ด๋ผ์ง๋ง, ์์ฆ ์ ๋ฆฌํด๊ณ ๋ ์ฝ๊ณ ์ทจ์ง/์ด์ง์ด ์ด๋ ค์์ก๋ค๊ณ ํ์จ์ ์ฌ๋ ๊ฑด ๋ค)<br>๊ฐ์ธ์ ์ธ ์๊ฐ์ด๋ค๋ง ๋ฏธ๊ตญ์ด ํ๊ตญ ์์ฅ์ 1๋
๋ค๋ผ๊ณ ์๊ฐํ๊ณ ๋ณด๋ ํธ์ธ๋ฐ, ์์ง๋ ์ฌ๊ธฐ๊ฐ ์ผ์์ฅ์ธ๊ฑฐ ๋ณด๋ฉด ์ทจ์ง ์์ฅ์ด ์ฐธ ์ถฅ๊ตฌ๋ ์ถ์ ์๊ฐ์ด ๋ ๋ค ใ
ใ
</li></ul></li></ul><ul><li><p>์๋ ์ด๋ ๋ฃ๊ณ ์ถ์๋ ์ปจํผ๋ฐ์ค ์ฃผ์ ๊ฐ</p><ul><li>AI translation & language accessibility</li><li>Business Models Innovation using AI Technology Workshop</li></ul><p>์์ผ๋, ์์ฝ๊ฒ๋ ํด๋น ์ฃผ์ ๋ ๋ณ๊ฒฝ/์ทจ์๋์ด ์ฐธ์ํ์ง ๋ชปํ๋ค. ํนํ NLP์ชฝ์ผ๋ก ๊ด์ฌ์ด ๋ง์๋๋ฐ ์ข ๋ง์ด ์์ฝ๋๋ผ ๐ฅฒ</p></li><li><p>์์ธ์ง ๋ชจ๋ฅด๊ฒ ์ผ๋ ์์ ๋น์๋ฆฌ๊ฐ ๋ง์์๋ ๋ถ๊ตฌํ๊ณ ๋ค์์ ์์ ๋ฃ๋ ์ฌ๋๋ค์ด ๋ง์๋ค. ์ค๊ฐ์ ๋๊ฐ๋ ค๊ณ ๊ทธ๋ฐ๊ฐ ์ถ์๋๋ฐ, ๊ทธ๊ฑด ๋ ์๋ ๊ฒ ๊ฐ์๋ค. ๋๋ถ๋ถ ๋ค์ด์์ ๋๊น์ง ๋ฃ๋๋ผ. ์ฌ๊ธฐ ๋ฌธํ๊ฐ ๊ทธ๋ฐ๊ฑด์ง, ์๋๋ฉด ์์ ์์์ ์ฃผ๋ชฉ๋ฐ๊ธฐ ์ซ์ด์ ๊ทธ๋ฐ๊ฑด์ง๋ ์์ง๋ ๋ฏธ์คํ
๋ฆฌ ใ
ใ
;;</p></li></ul>]]></content>
<categories>
<category> โ๏ธ Conference </category>
</categories>
<tags>
<tag> Conference </tag>
</tags>
</entry>
<entry>
<title>[์คํ์์ค] 2024๋
6์ ์คํ์์ค ์์์ง (1): Alacritty, WinDirStat Microsoft, Emacs Easy Draw, MagicUI, Spot</title>
<link href="/2024/06/10/OpenSource/2406(1)/"/>
<url>/2024/06/10/OpenSource/2406(1)/</url>
<content type="html"><![CDATA[<p><img src="0.png"></p><p>(์ฐธ๊ณ /์ถ์ฒ)<br>2024๋
์ ๋ณดํต์ ์ฐ์
์งํฅ์: <a href="https://www.oss.kr/open_up_intro">OpenUP ํ๋ก๊ทธ๋จ</a>์ 2024๋
๊ธฐ์ฌํ ํ๋ก ํฐ์ด๋ก์, ์คํ์์คSW๋ฅผ ํจ๊ป ๊ฐ๋ฐ ๋ฐ ๊ณต์ ํ๊ธฐ ์ํด ์์ฑ๋์์ต๋๋ค.<br>ํด๋น ๋ด์ฉ์ ์ github ํํ์ด์ง์ Explore repositories ๋ฐ feed ๋ด์ฉ์ ํ ๋๋ก ๋ง๋ค์ด์ก์ผ๋ฉฐ, ๊ฒ์๊ธ์ ๋ฌธ์ ์ฌํญ์ด ์์ผ์ ๋ถ๋ค์ ๋๊ธ ๋๋ <a href="mailto:[email protected]">[email protected]</a>์ผ๋ก ์ฐ๋ฝ ๋ถํ๋๋ฆฝ๋๋ค.</p><p><br><br><br></p><h2 id="Alacritty-๋ฒ ํ-๋ฒ์ -๊ณต๊ฐ"><a href="#Alacritty-๋ฒ ํ-๋ฒ์ -๊ณต๊ฐ" class="headerlink" title="Alacritty: ๋ฒ ํ ๋ฒ์ ๊ณต๊ฐ"></a>Alacritty: ๋ฒ ํ ๋ฒ์ ๊ณต๊ฐ</h2><p><img src="1.png"></p><ul><li>Homepage: <a href="https://alacritty.org/">https://alacritty.org/</a></li><li>Repository: <a href="https://github.com/alacritty/alacritty">https://github.com/alacritty/alacritty</a></li><li>OpenGL์ ์ฌ์ฉํ๋ ๊ณ ์ฑ๋ฅ ํฌ๋กํ ํ๋ซํผ ํฐ๋ฏธ๋ ์๋ฎฌ๋ ์ดํฐ: macOS, Linux, BSD ์ง์</li><li>์ผ๋ถ ๋๋ฝ๋ ๊ธฐ๋ฅ ๋ฐ ๋ฒ๊ทธ๊ฐ ์์ผ๋ฉฐ, ํ์ฌ ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์
๊ณผ์ โํตํฉโ์ ์ค์ ์ ๋๊ณ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐ ์ค</li><li>์๋์ GPU์ธก๋ฉด์์๋ ํธํ์ ๋ฐ๊ณ ์์ผ๋, ์คํฌ๋กค๋ฐ ๊ธฐ๋ฅ์ด ์์ด ์ถํ ๊ธฐ๋ฅ ์ ๊ณต์ด ํ์ํจ</li></ul><br><h2 id="WinDirStat-Windows์ฉ-์คํ-์์ค-๋์คํฌ-์ฌ์ฉ๋-์ ๋ฆฌ-ํ๋ก๊ทธ๋จ"><a href="#WinDirStat-Windows์ฉ-์คํ-์์ค-๋์คํฌ-์ฌ์ฉ๋-์ ๋ฆฌ-ํ๋ก๊ทธ๋จ" class="headerlink" title="WinDirStat: Windows์ฉ ์คํ ์์ค ๋์คํฌ ์ฌ์ฉ๋ ์ ๋ฆฌ ํ๋ก๊ทธ๋จ"></a>WinDirStat: Windows์ฉ ์คํ ์์ค ๋์คํฌ ์ฌ์ฉ๋ ์ ๋ฆฌ ํ๋ก๊ทธ๋จ</h2><img src="./2.png" width="100"><ul><li>Homepage: <a href="https://windirstat.net/">https://windirstat.net/</a></li><li>Repository: <a href="https://github.com/windirstat/windirstat">https://github.com/windirstat/windirstat</a></li><li>Windows์์ ๋์คํฌ ์ฌ์ฉ๋์ ๋ณด๊ณ ์ ๋ฆฌํ ์ ์๋ ์คํ์์ค</li><li>๋์ค์ ์ธ ์คํ์์ค์ง๋ง ์ ๋ฐ์ ์ผ๋ก ๋๋ฆฌ๋ค๋ ๋นํ์ด ์์</li><li>์ต๊ทผ ์๋ ๋ฐ ๋ณด์, ์๊ฐํ์ ๋ํด์ ๊ธฐ์ฌ์๋ฅผ ๋ชจ์งํ๊ณ ์์</li></ul><br><h2 id="Microsoft-์๋น์ค-์ค๋จ์ผ๋ก-์ฌ๋ฌ-์คํ์์ค-์๋น์ค-์ผ์-์ค๋จ"><a href="#Microsoft-์๋น์ค-์ค๋จ์ผ๋ก-์ฌ๋ฌ-์คํ์์ค-์๋น์ค-์ผ์-์ค๋จ" class="headerlink" title="Microsoft ์๋น์ค ์ค๋จ์ผ๋ก ์ฌ๋ฌ ์คํ์์ค ์๋น์ค ์ผ์ ์ค๋จ"></a>Microsoft ์๋น์ค ์ค๋จ์ผ๋ก ์ฌ๋ฌ ์คํ์์ค ์๋น์ค ์ผ์ ์ค๋จ</h2><img src="./3.png" width="600"><ul><li>2024๋
5์ 23์ผ์ Microsoft๊ฐ ์ผ์ ์๋น์ค ์ค๋จ์ด ๋ฐ์ํจ: Bing, Copilot, ChatGPT, DuckDuckGo ๋ฑ ๋ค์ํ ์คํ์์ค ์๋น์ค์ ์ฅ์ ๋ฐ์</li><li>โ์จ๋ผ์ธ ์๋น์ค์ Microsoft ์ธํ๋ผ์ ๋ํ ๋์ ์์กด๋โ๋ฅผ ์ฃผ์ ๋ก ๋ค์ํ ํ ๋ก ์ด ์งํ๋๊ณ ์์</li></ul><br><h2 id="Emacs-Easy-Draw-์๊ฐ"><a href="#Emacs-Easy-Draw-์๊ฐ" class="headerlink" title="Emacs Easy Draw ์๊ฐ"></a>Emacs Easy Draw ์๊ฐ</h2><img src="./4.gif" width="600"><ul><li>Homepage: <a href="https://misohena.jp/blog/2021-09-21-emacs-easy-draw.html">https://misohena.jp/blog/2021-09-21-emacs-easy-draw.html</a></li><li>Repository: <a href="https://github.com/misohena/el-easydraw">https://github.com/misohena/el-easydraw</a></li><li>Emacs์ฉ ๊ทธ๋ฆฌ๊ธฐ ๋๊ตฌ๋ก, ์ฌ์ฉ์๊ฐ ์ง์ ๊ทธ๋ฆผ์ ๋ง๋ค๊ณ ํธ์งํ ์ ์์ผ๋ฉฐ, HTML๋๋ LaTeX๋ก ๋ด๋ณด๋ด๊ธฐ ๊ธฐ๋ฅ ์ง์</li><li>ํ์ฌ ํ๊ธฐ ๋ฐ ํ์
๊ธฐ๋ฅ์ด ๋ถ์กฑํ์ง๋ง, ์ ์ฌ์ ์ผ๋ก ๋์ ํ์ ๋ฐ๊ณ ์์ผ๋ฉฐ ์ต๊ทผ ํ๋ก๊ทธ๋จ โํตํฉโ์ ์ค์ ์ ๋๊ณ ๊ฐ๋ฐ์ ์งํ ์ค</li></ul><br><h2 id="MagicUI-์๊ฐ"><a href="#MagicUI-์๊ฐ" class="headerlink" title="MagicUI ์๊ฐ"></a>MagicUI ์๊ฐ</h2><img src="./5.gif" width="600"><ul><li>Homepage: <a href="https://magicui.design/">https://magicui.design/</a></li><li>Repository: <a href="https://github.com/magicuidesign/magicui">https://github.com/magicuidesign/magicui</a></li><li>React, Typescript, Tailwind CSS ๋ฑ์ผ๋ก ์ ์๋ ๋ฌด๋ฃ ์คํ์์ค ์ ๋๋ฉ์ด์
์ปดํฌ๋ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ</li><li>๋์์ธ๊ณผ ๊ธฐ๋ฅ์ ๋ํด ํธํ์ ๋ฐ๊ณ ์์ผ๋, ์๋๊ฐ ๋๋ฆฌ๋ฉฐ ๋ฆฌ์์ค๋ฅผ ํ์ ์ด์์ผ๋ก ์๋นํด ๊ฐ๋ก ์๋ฐ์ด ์งํ์ค</li></ul><br><h2 id="Spot-์๊ฐ"><a href="#Spot-์๊ฐ" class="headerlink" title="Spot ์๊ฐ"></a>Spot ์๊ฐ</h2><img src="./6.gif" width="600"><ul><li>Homepage: <a href="https://llama.meta.com/llama3/">https://llama.meta.com/llama3/</a></li><li>Repository: <a href="https://github.com/meta-llama/llama3">https://github.com/meta-llama/llama3</a></li><li>Go ๊ฐ๋ฐ์๋ค์ ์ํ ์๋ก์ด ํฌ๋ก์ค ํ๋ซํผ GUI ๋ผ์ด๋ธ๋ฌ๋ฆฌ</li><li>macOS, Linux, BMD์์ ์ผ๊ด๋ API๋ฅผ ์ ๊ณตํ ์ ์๋๋ก ์ค๊ณ๋จ</li><li>์ ์ ํ๋ก์ ํธ๋ก ์คํ์์ค ๊ฐ๋ฐ์๋ก์ ํฅ๋ฏธ๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๋ ๊ฒ์ ์ถ์ฒ</li></ul>]]></content>
<categories>
<category> ๐ OpenSource </category>
</categories>
<tags>
<tag> Opensource </tag>
</tags>
</entry>
<entry>
<title>[์คํ์์ค] 2024๋
5์ ์คํ์์ค ์์์ง (2): Quill, DuckDuckGo, NoTunes, OpenAI, Secret Llama</title>
<link href="/2024/05/27/OpenSource/2405(2)/"/>
<url>/2024/05/27/OpenSource/2405(2)/</url>
<content type="html"><![CDATA[<p><img src="0.png"></p><p>(์ฐธ๊ณ /์ถ์ฒ)<br>2024๋
์ ๋ณดํต์ ์ฐ์
์งํฅ์: <a href="https://www.oss.kr/open_up_intro">OpenUP ํ๋ก๊ทธ๋จ</a>์ 2024๋
๊ธฐ์ฌํ ํ๋ก ํฐ์ด๋ก์, ์คํ์์คSW๋ฅผ ํจ๊ป ๊ฐ๋ฐ ๋ฐ ๊ณต์ ํ๊ธฐ ์ํด ์์ฑ๋์์ต๋๋ค.<br>ํด๋น ๋ด์ฉ์ ์ github ํํ์ด์ง์ Explore repositories ๋ฐ feed ๋ด์ฉ์ ํ ๋๋ก ๋ง๋ค์ด์ก์ผ๋ฉฐ, ๊ฒ์๊ธ์ ๋ฌธ์ ์ฌํญ์ด ์์ผ์ ๋ถ๋ค์ ๋๊ธ ๋๋ <a href="mailto:[email protected]">[email protected]</a>์ผ๋ก ์ฐ๋ฝ ๋ถํ๋๋ฆฝ๋๋ค.</p><p><br><br><br></p><h2 id="Quill-v2-๋ฆด๋ฆฌ์ฆ"><a href="#Quill-v2-๋ฆด๋ฆฌ์ฆ" class="headerlink" title="Quill v2 ๋ฆด๋ฆฌ์ฆ"></a>Quill v2 ๋ฆด๋ฆฌ์ฆ</h2><img src="./1.png" width="600"><ul><li>Homepage: <a href="https://quilljs.com/">https://quilljs.com/</a></li><li>Repository: <a href="https://github.com/slab/quill">https://github.com/slab/quill</a></li><li>๋ฌด๋ฃ ์คํ์์ค ์์ฆ์
(WYSIWYG) ํธ์ง๊ธฐ</li><li>์๊ท๋ชจ ํ๋ก์ ํธ์ ์ ํฉํ๋ฉฐ ํ
์คํธ ํธ์ง๊ธฐ๋ก์ ๊ทน์ฐฌ์ ๋ฐ๊ณ ์์</li><li>๋ค๋ง ์ฌ์ฉํ๋๋ฐ ์์ด์ ๋์ด๋๊ฐ ์์ผ๋ฉฐ, ProseMirror์ ๋์กฐํด ์์ผ๋ก์ ๊ฐ๋ฐ ๋ฐฉํฅ์ฑ์ ๋ํด ํ๋ฐํ ํ ๋ก ์ ์งํ ์ค</li></ul><br><h2 id="DuckDuckGo-AI-์ฑํ
-์ง์"><a href="#DuckDuckGo-AI-์ฑํ
-์ง์" class="headerlink" title="DuckDuckGo: AI ์ฑํ
์ง์"></a>DuckDuckGo: AI ์ฑํ
์ง์</h2><p><img src="./2.png"></p><ul><li>Homepage: <a href="https://duckduckgo.com/?q=DuckDuckGo&ia=chat">https://duckduckgo.com/?q=DuckDuckGo&ia=chat</a></li><li>Repository: <a href="https://github.com/duckduckgo">https://github.com/duckduckgo</a></li><li>๊ฐ์ธ์ ๋ณด๋ฅผ ์์งํ์ง ์๋ ๊ฒ์ ์์ง์ด๋ฉฐ, ์ฝ๋ ์ผ๋ถ๊ฐ ์คํ์์ค๋ก ๊ตฌ์ฑ๋์ด ์์</li><li>์ด๋ฒ์ GPT-3.5, Claude 3, Llama3 ๋ฑ์ AI ๋ชจ๋ธ์ ์ ์ฉํจ</li><li>๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ๋ AI ์๊ณ ๋ฆฌ์ฆ์ ํจ์จ์ฑ๊ณผ ํ๋ผ์ด๋ฒ์ ๋ณด์ฅ ์ ๋์ ๋ํ ์๊ฒฌ์ด ์ต๊ทผ ๋ค๋ค์ง๊ณ ์์</li></ul><br><h2 id="NoTunes-Apple์์
-์๋-์คํ-์ค์ง-ํ๋ก๊ทธ๋จ-macOS"><a href="#NoTunes-Apple์์
-์๋-์คํ-์ค์ง-ํ๋ก๊ทธ๋จ-macOS" class="headerlink" title="NoTunes: Apple์์
์๋ ์คํ ์ค์ง ํ๋ก๊ทธ๋จ (macOS)"></a>NoTunes: Apple์์
์๋ ์คํ ์ค์ง ํ๋ก๊ทธ๋จ (macOS)</h2><p><img src="3.png"></p><ul><li>Repository: <a href="https://github.com/tombonez/noTunes">https://github.com/tombonez/noTunes</a></li><li>Apple์์
์ด ์๋์ผ๋ก ์คํ๋์ง ์๋๋ก ์ค๊ณ๋ macOS ์ฑ</li><li>Apple์์
๋ง๊ณ ๋ ๋ค์ํ macOS ์ ํ๋ฆฌ์ผ์ด์
์ ๋ถ๋ง์ด ์๋ ์ฌ๋๋ค์ด ๋ง์ผ๋ฉฐ, ์๊ฐ์ด ์ง๋ ์๋ก ์ด์ ๋น์ทํ ์คํ์์ค๋ค์ด ๋์ฌ ๊ฒ์ผ๋ก ์์ธก๋จ</li></ul><br><h2 id="OpenAI-ChatGPT-4o-๊ณต๊ฐ-๋ฐ-๊ธฐ๋๊ถ์-๋ํ-๋
ผ๋"><a href="#OpenAI-ChatGPT-4o-๊ณต๊ฐ-๋ฐ-๊ธฐ๋๊ถ์-๋ํ-๋
ผ๋" class="headerlink" title="OpenAI: ChatGPT 4o ๊ณต๊ฐ ๋ฐ ๊ธฐ๋๊ถ์ ๋ํ ๋
ผ๋"></a>OpenAI: ChatGPT 4o ๊ณต๊ฐ ๋ฐ ๊ธฐ๋๊ถ์ ๋ํ ๋
ผ๋</h2><p><img src="4.png"></p><ul><li>AI์ ์ฌ๋๊ฐ์ด ๋ํํ ์ ์๋ ChatGPT 4o ๊ณต๊ฐ</li><li>์ ์ง ์ง์๋ค์ด ์ ํ์ ์ธ ์คํ๋ณด๋ฉ ๊ณ์ฝ์ผ๋ก ํ์ฌ๋ฅผ ๋นํํ ๊ถํ๊ณผ ๊ธฐ๋๊ถ์ โํ์โ ์๊ฒ ๋จ์ผ๋ก์จ ๋
ผ๋์ด ํ์ฌ์งํ์ค</li></ul><br><h2 id="๋น๊ณต๊ฐ-LLM-์ฑ๋ด-Secret-Llama-Llama-3-Mistral-๋ฐ-๊ธฐํ-์คํ-์์ค-๋ชจ๋ธ์-์ง์ํ๋-๋ธ๋ผ์ฐ์ -๋ด-์์ -๋น๊ณต๊ฐ-LLM-์ฑ๋ด"><a href="#๋น๊ณต๊ฐ-LLM-์ฑ๋ด-Secret-Llama-Llama-3-Mistral-๋ฐ-๊ธฐํ-์คํ-์์ค-๋ชจ๋ธ์-์ง์ํ๋-๋ธ๋ผ์ฐ์ -๋ด-์์ -๋น๊ณต๊ฐ-LLM-์ฑ๋ด" class="headerlink" title="๋น๊ณต๊ฐ LLM ์ฑ๋ด Secret Llama: Llama 3, Mistral ๋ฐ ๊ธฐํ ์คํ ์์ค ๋ชจ๋ธ์ ์ง์ํ๋ ๋ธ๋ผ์ฐ์ ๋ด ์์ ๋น๊ณต๊ฐ LLM ์ฑ๋ด"></a>๋น๊ณต๊ฐ LLM ์ฑ๋ด Secret Llama: Llama 3, Mistral ๋ฐ ๊ธฐํ ์คํ ์์ค ๋ชจ๋ธ์ ์ง์ํ๋ ๋ธ๋ผ์ฐ์ ๋ด ์์ ๋น๊ณต๊ฐ LLM ์ฑ๋ด</h2><img src="./5.png" width="300"><ul><li>Homepage: <a href="https://secretllama.com/">https://secretllama.com</a></li><li>Repository: <a href="https://github.com/abi/secret-llama">https://github.com/abi/secret-llama</a></li><li>๋ํ ๋ฐ์ดํฐ๊ฐ ์ปดํจํฐ ์ธ๋ถ๋ก ์ ์ถ๋์ง ์์ผ๋ฉฐ, ์๋ฒ๊ฐ ํ์ํ์ง ์์ ์ค์นํ ํ์ ์์ด ๋ฐ๋ก ์คํ๋ผ์ธ ๋ธ๋ผ์ฐ์ ์์ ์๋ํ๋ ํ๋ก๊ทธ๋จ</li><li>Llama3, Mistral ๋ฐ ๊ธฐํ ์คํ ์์ค ๋ชจ๋ธ์ ์ฑํ ์ค / ChatGPT์ฒ๋ผ ๊ตฌ์ฑ๋ ์ ์ ์นํ์ ์ธ UI</li><li>์ธํฐํ์ด์ค ๊ฐ์ ๋ฐ ๋ค์ํ ๋ชจ๋ธ ์ง์, ์ด๊ธฐ ๋ชจ๋ธ ๋ก๋ฉ ์๊ฐ ๋จ์ถ, ๋ฒ๊ทธ ์์ ๋ฑ ๋ค๋ฐฉ๋ฉด์์ ์คํ์์ค ๊ธฐ์ฌ์๋ฅผ ๋ชจ์ง ์ค</li></ul>]]></content>
<categories>
<category> ๐ OpenSource </category>
</categories>
<tags>
<tag> Opensource </tag>
</tags>
</entry>
<entry>
<title>[์คํ์์ค] 2024๋
5์ ์คํ์์ค ์์์ง (1): Penpot, CoreNet, Redka, Valkey, Asciinema, Llama3</title>
<link href="/2024/05/13/OpenSource/2405(1)/"/>
<url>/2024/05/13/OpenSource/2405(1)/</url>
<content type="html"><![CDATA[<p><img src="0.png"></p><p>(์ฐธ๊ณ /์ถ์ฒ)<br>2024๋
์ ๋ณดํต์ ์ฐ์
์งํฅ์: <a href="https://www.oss.kr/open_up_intro">OpenUP ํ๋ก๊ทธ๋จ</a>์ 2024๋
๊ธฐ์ฌํ ํ๋ก ํฐ์ด๋ก์, ์คํ์์คSW๋ฅผ ํจ๊ป ๊ฐ๋ฐ ๋ฐ ๊ณต์ ํ๊ธฐ ์ํด ์์ฑ๋์์ต๋๋ค.<br>ํด๋น ๋ด์ฉ์ ์ github ํํ์ด์ง์ Explore repositories ๋ฐ feed ๋ด์ฉ์ ํ ๋๋ก ๋ง๋ค์ด์ก์ผ๋ฉฐ, ๊ฒ์๊ธ์ ๋ฌธ์ ์ฌํญ์ด ์์ผ์ ๋ถ๋ค์ ๋๊ธ ๋๋ <a href="mailto:[email protected]">[email protected]</a>์ผ๋ก ์ฐ๋ฝ ๋ถํ๋๋ฆฝ๋๋ค.</p><p><br><br><br></p><h2 id="Penpot-2-0-๋ฆด๋ฆฌ์ฆ"><a href="#Penpot-2-0-๋ฆด๋ฆฌ์ฆ" class="headerlink" title="Penpot 2.0 ๋ฆด๋ฆฌ์ฆ"></a>Penpot 2.0 ๋ฆด๋ฆฌ์ฆ</h2><p><img src="1.png"></p><ul><li>Homepage: <a href="https://penpot.app/">https://penpot.app/</a></li><li>Repository: <a href="https://github.com/penpot/penpot">https://github.com/penpot/penpot</a></li><li>์น ๊ธฐ๋ฐ ์คํ ์์ค ๋์์ธ ๋๊ตฌ๋ก, ๋์์ด๋์ ๊ฐ๋ฐ์ ๊ฐ์ ํ์
์ ์ด์งํ๋ ํ๋ก์ ํธ</li><li>๊น๋ํ UI/UX๋ก ๊ฐํธํ๊ฒ ํ๋ก๊ทธ๋จ ์ปจํธ๋กค์ด ๊ฐ๋ฅํจ</li><li>UI ๋์์ธ์ ๋ํด์ ํผ๊ทธ๋ง์ ์ฐจ๋ณ์ฑ์ด ์๋ค๊ณ ํ ๋ก ์ด ์งํ๋๋ ์ค</li></ul><br><h2 id="Apple์-์๋ก์ด-AI-๋ชจ๋ธ-CoreNet"><a href="#Apple์-์๋ก์ด-AI-๋ชจ๋ธ-CoreNet" class="headerlink" title="Apple์ ์๋ก์ด AI ๋ชจ๋ธ: CoreNet"></a>Apple์ ์๋ก์ด AI ๋ชจ๋ธ: CoreNet</h2><img src="./2.png" width="100"><ul><li>Repository: <a href="https://github.com/apple/corenet">https://github.com/apple/corenet</a></li><li>2024๋
4์ 24์ผ๋ถํฐ ์ด์ ์์</li><li>CoreNet: ๊ฐ์ฒด ๋ถ๋ฅ, ๊ฐ์ง ๋ฐ ์ธ๋ถํ ์์
์ ์ํ ์๊ท๋ชจ ๋ชจ๋ธ๋ถํฐ ๋๊ท๋ชจ ๋ชจ๋ธ๊น์ง ํ๋ จํ๊ธฐ ์ํด Apple์์ ๋ง๋ ์ฌ์ธต ์ ๊ฒฝ๋ง ํดํท<ul><li>Python 3.9 ์ด์ ๋๋ Pytorch 3.10 ์ด์์ด ํ์</li><li>CVNets์์ ๋ฐ์ ํจ</li></ul></li><li>๊ฐ๋ฐ์๋ฅผ ์ํ Apple Silicon ๊ธฐ๊ธฐ ๋ฐ ๋๊ตฌ ์ฌ์ฉ ๊ณ ๋ ค ์ฌํญ, macOS ์ค์ ๊ด๋ฆฌ๋ฅผ ์ํ Nix-Darwin, ์คํ ์์ค ์ ํ์ ์์ตํ ๊ฐ๋ฅ์ฑ์ ๋ํด์๋ ๋
ผ์ ์ค</li></ul><br><h2 id="Redka-SQLite๋ก-์์ฑ๋-Redis"><a href="#Redka-SQLite๋ก-์์ฑ๋-Redis" class="headerlink" title="Redka: SQLite๋ก ์์ฑ๋ Redis"></a>Redka: SQLite๋ก ์์ฑ๋ Redis</h2><img src="./3.svg" width="200"><ul><li>Repository: <a href="https://github.com/nalgeon/redka">https://github.com/nalgeon/redka</a></li><li>2024๋
4์ 6์ผ๋ถํฐ ์ด์ ์์</li><li>SQLite๋ฅผ ํ์ฉํ์ฌ ๊ธฐ์กด์ Redis๋ฅผ ์ฌ๊ตฌ์ฑํ๋ ํ๋ก์ ํธ</li><li>๋ฌธ์์ด ๊ด๋ จ CLI์ ์ค์ ์ ๋๊ณ ์ฃผ์ Redis ๋ฐ์ดํฐ ์ ํ๊ณผ ๋ช
๋ น์ ์ง์ํ๋ฉฐ, ๋
๋ฆฝํ ์๋ฒ ์ต์
๊ณผ Go API๋ฅผ ํ์ฉํ ์ธํ๋ก์ธ์ค ์๋ฒ ์ต์
๋ชจ๋ ์ ๊ณต: SQL ๋ณด๊ธฐ, Redis API์์ ํธํ์ฑ, ACID ํธ๋์ญ์
๋ฑ์ ๊ธฐ๋ฅ์ ์ค์ฌ์ผ๋ก ๊ฐ๋ฐ</li><li>Redis๋ณด๋ค ์ฝ 2~6๋ฐฐ ์ ๋ ๋๋ฆฌ์ง๋ง Redka์ ์๋นํ ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ ์์
์ ๊ด๋ฆฌํ ์ ์์</li><li>ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ, ACID ํธ๋์ญ์
๋ฐ SQL ์ธํฐํ์ด์ค์ ๊ฐ์ ์ด์ ์ ์ ๊ณตํ๋ ์ฌ์ฉ์ ์นํ์ ์ธ API๋ฅผ ๋ชฉํ๋ก ํ ๋ก ๋ฐ ๊ฐ๋ฐ ์งํ ์ค</li><li><strong>[์ฐธ๊ณ ]</strong><ul><li>์ต๊ทผ Redis์ ์คํ์์ค ๋ผ์ด์ ์ค๊ฐ ๋ณ๊ฒฝ๋์ผ๋ฉฐ, Redka๋ ์ํฅ์ ๋ฐ์ ๊ฒ์ผ๋ก ์์๋จ</li><li>์ด์ ๋ํ ๋ฐ๋ฐ์ด ๋ฌด์ฒ ์ฌํด ๋ฐ๋ก ๋ค์์ ์๊ฐํ <code>Valkey</code>๊ฐ ์ต๊ทผ ์ง์ง๋ฅผ ๋ฐ๊ณ ์์</li></ul></li></ul><br><h2 id="Valkey-Redis์-๋ผ์ด์ ์ค-๋ณ๊ฒฝ์ผ๋ก-์ธํด-ํฐ-์ง์ง๋ฅผ-๋ฐ๊ณ -์๋-๋ฐ์ดํฐ๋ฒ ์ด์ค"><a href="#Valkey-Redis์-๋ผ์ด์ ์ค-๋ณ๊ฒฝ์ผ๋ก-์ธํด-ํฐ-์ง์ง๋ฅผ-๋ฐ๊ณ -์๋-๋ฐ์ดํฐ๋ฒ ์ด์ค" class="headerlink" title="Valkey: Redis์ ๋ผ์ด์ ์ค ๋ณ๊ฒฝ์ผ๋ก ์ธํด ํฐ ์ง์ง๋ฅผ ๋ฐ๊ณ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค"></a>Valkey: Redis์ ๋ผ์ด์ ์ค ๋ณ๊ฒฝ์ผ๋ก ์ธํด ํฐ ์ง์ง๋ฅผ ๋ฐ๊ณ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค</h2><p><img src="6.svg"></p><ul><li>Homepage: <a href="https://valkey.io/">https://valkey.io/</a></li><li>Repository: <a href="https://github.com/valkey-io/valkey">https://github.com/valkey-io/valkey</a></li><li>์ ๋ช
ํ ๊ธฐ์
๋ฐ ๊ด๋ฆฌ์๋ก๋ถํฐ ์๋นํ ์ง์ง๋ฅผ ์ป๊ณ ์์ผ๋ฉฐ AWS, Google Cloud, Oracle๊ณผ ๊ฐ์ ์ฃผ์ ์
์ฒด ์ง์์ ๋ฐ๋ ์ค</li><li>Redis์ ๋ผ์ด์ ์ค ๋ณ๊ฒฝ์ผ๋ก Redis์ ์ฃผ์ ๊ณ ๊ฐ๋ค์ด Valkey๋ก ๋ง์ด๊ทธ๋ ์ด์
์ ์งํ ์ค</li></ul><br><h2 id="Asciinema-LLM-์๊ณ ๋ฆฌ์ฆ-๋์
์ผ๋ก-ํ๋ก๊ทธ๋จ-์๋-ํฅ์"><a href="#Asciinema-LLM-์๊ณ ๋ฆฌ์ฆ-๋์
์ผ๋ก-ํ๋ก๊ทธ๋จ-์๋-ํฅ์" class="headerlink" title="Asciinema: LLM ์๊ณ ๋ฆฌ์ฆ ๋์
์ผ๋ก ํ๋ก๊ทธ๋จ ์๋ ํฅ์"></a>Asciinema: LLM ์๊ณ ๋ฆฌ์ฆ ๋์
์ผ๋ก ํ๋ก๊ทธ๋จ ์๋ ํฅ์</h2><p><img src="4.png"></p><ul><li>Homepage: <a href="https://asciinema.org/">https://asciinema.org/</a></li><li>Repository: <a href="https://github.com/asciinema/asciinema">https://github.com/asciinema/asciinema</a></li><li>ํฐ๋ฏธ๋ ์
๋ ฅ ๋ด์ฉ์ CLI๋ก ์ฝ๊ฒ ๊ธฐ๋กํ ์ ์๋ ํ๋ก๊ทธ๋จ</li><li>์๋ก์ด ์๊ณ ๋ฆฌ์ฆ์ผ๋ก LLM ์ถ๋ก ์๋๋ฅผ 2๋ฐฐ๋ก ํฅ์์ํด: ๋ชจ๋ธ ์๋ ๋ฐ ์ ํ๋, ๋ฉ๋ชจ๋ฆฌ ๋ก๋ฉ์ ์ ์ฐํ๊ฒ ์ ํํ ์ ์์</li></ul><br><h2 id="Meta์-์๋ก์ด-AI-๋ชจ๋ธ-Llama3"><a href="#Meta์-์๋ก์ด-AI-๋ชจ๋ธ-Llama3" class="headerlink" title="Meta์ ์๋ก์ด AI ๋ชจ๋ธ: Llama3"></a>Meta์ ์๋ก์ด AI ๋ชจ๋ธ: Llama3</h2><img src="./5.png" width="100"><ul><li>Homepage: <a href="https://llama.meta.com/llama3/">https://llama.meta.com/llama3/</a></li><li>Repository: <a href="https://github.com/meta-llama/llama3">https://github.com/meta-llama/llama3</a></li><li>๋ค์ํ ํ๋ฉด ํฌ๊ธฐ์์ ๋ฐ์ํ ๋์์ธ์ ์ํ CSS ๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ฅผ ๋ณด์ฌ์ฃผ๋ โ๋ฐ์ํ ๋์์ธ์ ์ํ AI ๋ชจ๋ธโ ์ถ์</li></ul>]]></content>
<categories>
<category> ๐ OpenSource </category>
</categories>
<tags>
<tag> Opensource </tag>
</tags>
</entry>
<entry>
<title>[TIPS] Python, Javascript ํ๋ก์ ํธ์์ ์ ์ฉํ regex ๋ฌธ๋ฒ ๋ฐ ๊ด๋ จ ํจํค์ง ๋ชจ์์ง</title>
<link href="/2022/11/25/Tips/Regex/"/>
<url>/2022/11/25/Tips/Regex/</url>
<content type="html"><![CDATA[<p>์ฌ์ฉ์์ ์
๋ ฅ๊ฐ์ด ์ ํจํ์ง ํ์ธํ๋ ์์
์ ํด์ผํ ๋๊ฐ ์๋๋ฐ, ์ด ๋ ์ฌ์ฉํ๋ฉด ์ ์ฉํ ํจํค์ง์ ๊ฐ์ข
regex๋ฅผ ์ ๋ฆฌํด๋ดค์ต๋๋ค.</p><p>(์์ ์
๋ฐ์ดํธ ์์ )</p><h2 id="Python3"><a href="#Python3" class="headerlink" title="Python3"></a>Python3</h2><hr><ul><li><a href="https://pydantic-docs.helpmanual.io/">pydantic</a></li></ul><br><h3 id="Email-Validation"><a href="#Email-Validation" class="headerlink" title="- Email Validation"></a>- Email Validation</h3><ul><li><p>RFC-5322 ํ์ค ๊ธฐ์ค</p><pre class="line-numbers language-python"><code class="language-python"><span class="token keyword">import</span> reEMAIL_REGEX <span class="token operator">=</span> r<span class="token string">"((?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\]))g"</span><span class="token keyword">return</span> re<span class="token punctuation">.</span>fullmatch<span class="token punctuation">(</span>EMAIL_REGEX<span class="token punctuation">,</span> email<span class="token punctuation">)</span> <span class="token comment" spellcheck="true"># True or False</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li></ul><h3 id="Name-Validation"><a href="#Name-Validation" class="headerlink" title="- Name Validation"></a>- Name Validation</h3><ul><li>letter(a-z, A-Z), apostrophe, hyphen ์ง์</li><li>์ฌ๊ธฐ์๋ ์ต์ ๊ธธ์ด 1 ๋ฐ ์ต๋ ๊ธธ์ด 20์ธ ๋ฌธ์์ด๋ง ์ ํจํ ๊ฒ์ผ๋ก ํ๋จ<pre class="line-numbers language-python"><code class="language-python"><span class="token keyword">import</span> reNAME_REGEX <span class="token operator">=</span> r<span class="token string">"(^[aA-zZ '-]{1,20})"</span><span class="token keyword">return</span> re<span class="token punctuation">.</span>fullmatch<span class="token punctuation">(</span>NAME_REGEX<span class="token punctuation">,</span> name<span class="token punctuation">)</span> <span class="token comment" spellcheck="true"># True or False</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li></ul><p><br><br><br></p><h2 id="Javascript"><a href="#Javascript" class="headerlink" title="Javascript"></a>Javascript</h2><hr><ul><li><a href="https://github.com/jquense/yup">yup</a>: ์ฃผ๋ก <a href="https://formik.org/">formik</a>๊ณผ ํฉ์ณ์ ์ฌ์ฉํ๋ค<br></li></ul><h3 id="Email-Validation-1"><a href="#Email-Validation-1" class="headerlink" title="- Email Validation"></a>- Email Validation</h3><ul><li>RFC-5322 ํ์ค ๊ธฐ์ค<pre class="line-numbers language-javascript"><code class="language-javascript"><span class="token keyword">const</span> EMAIL_REGEX <span class="token operator">=</span> <span class="token regex">/^[-a-z0-9!#$%&'*+/=?^_`{|}~]+(\.[-a-z0-9!#$%&'*+/=?^_`{|}~]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i</span><span class="token punctuation">;</span><span class="token keyword">const</span> ex1 <span class="token operator">=</span> <span class="token string">"I can do it"</span><span class="token punctuation">;</span><span class="token keyword">const</span> ex2 <span class="token operator">=</span> <span class="token string">"[email protected]"</span><span class="token punctuation">;</span>console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>ex1<span class="token punctuation">.</span><span class="token function">match</span><span class="token punctuation">(</span>EMAIL_REGEX<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment" spellcheck="true">// false</span>console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>ex2<span class="token punctuation">.</span><span class="token function">match</span><span class="token punctuation">(</span>EMAIL_REGEX<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment" spellcheck="true">// true</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li></ul>]]></content>
<categories>
<category> ๐พ Etc </category>
</categories>
<tags>
<tag> Python3 </tag>
<tag> Regex </tag>
<tag> Javascript </tag>
</tags>
</entry>
<entry>
<title>๋คํธ์ํฌ ๊ธฐ๋ณธ</title>
<link href="/2022/05/30/NS/Basic/"/>
<url>/2022/05/30/NS/Basic/</url>
<content type="html"><![CDATA[<h2 id="IPv4"><a href="#IPv4" class="headerlink" title="IPv4"></a>IPv4</h2><hr><p><img src="./ipv4.png"></p><ul><li>์ปดํจํฐ ์ฌ์ด์ ํต์ ์ ํ๊ธฐ ์ํด์๋ ์ปดํจํฐ ์์น๊ฐ์ ์์์ผ ํจ</li><li>์ด๋ ๊ฐ ์ปดํจํฐ์ <code>์์น๊ฐ(์ฃผ์)</code> IP ์ฃผ์๋ผ๊ณ ์ง์นญํจ (IP Version 4)</li><li>์ <code>.</code> ์ฌ์ด์ ์ซ์๋ค์ ์ฅํ
(octet)์ด๋ผ๊ณ ๋ถ๋ฆ</li></ul><h4 id="IPv4-ํด๋์ค"><a href="#IPv4-ํด๋์ค" class="headerlink" title="IPv4 ํด๋์ค"></a>IPv4 ํด๋์ค</h4><p><img src="./ipclass.png"></p><ul><li>์ฒซ ๋ฒ์งธ ์ฅํฏ์ ์์๋ฆฌ์ ๋ฐ๋ผ ํด๋์ค ๊ตฌ๋ถ</li><li>์ฃผ๋ก A, B class ์ฌ์ฉ<ul><li><strong>A Class</strong>: ์ฒซ ๋ฒ์งธ ์ฅํฏ์ ๋งจ ์์๋ฆฌ ๋นํธ๊ฐ 0<br><img src="./nethostbitA.png"><ul><li>8bit์ ๋คํธ์ํฌ bit + 24bit์ ํธ์คํธ bit</li><li>์ฆ 1๊ฐ์ ๋คํธ์ํฌ๊ฐ 2^24๊ฐ์ ip๋ฅผ ๋ณด์ </li><li>์ด๋ฌํ ๋คํธ์ํฌ๊ฐ 2^7๊ฐ๋งํผ ์์ (์๋ณ์ ์ ์ธ)</li><li>๋๊ท๋ชจ ํ๋ก์ ํธ์ ์ ํฉ: ๊ตญ๊ฐ ๋จ์</li></ul></li><li><strong>B Class</strong>: ์ฒซ ๋ฒ์งธ ์ฅํฏ์ ์ ๋์๋ฆฌ์ ๋นํธ๊ฐ 1, 0<br><img src="./nethostbitB.png"><ul><li>16bit์ ๋คํธ์ํฌ bit + 16bit์ ํธ์คํธ bit</li><li>์ฆ 1๊ฐ์ ๋คํธ์ํฌ๊ฐ 2^16๊ฐ์ ip๋ฅผ ๋ณด์ </li><li>์ด๋ฌํ ๋คํธ์ํฌ๊ฐ 2^14๊ฐ๋งํผ ์์ (์๋ณ์ ์ ์ธ)</li></ul></li><li><strong>C Class</strong>: ์ฒซ ๋ฒ์งธ ์ฅํฏ์ ์ ์ธ์๋ฆฌ์ ๋นํธ๊ฐ 1, 1, 0<br><img src="./nethostbitC.png"><ul><li>24bit์ ๋คํธ์ํฌ bit + 8bit์ ํธ์คํธ bit</li><li>์ฆ 1๊ฐ์ ๋คํธ์ํฌ๊ฐ 2^8๊ฐ์ ip๋ฅผ ๋ณด์ </li><li>์ด๋ฌํ ๋คํธ์ํฌ๊ฐ 2^21๊ฐ๋งํผ ์์ (์๋ณ์ ์ ์ธ)</li><li>์๊ท๋ชจ ํ๋ก์ ํธ์ ์ ํฉ</li></ul></li></ul></li></ul><p><br><br></p><h2 id="Subnet-Sub-Network"><a href="#Subnet-Sub-Network" class="headerlink" title="Subnet: Sub + Network"></a>Subnet: Sub + Network</h2><hr><p><img src="./subnet.png"></p><ul><li>ํ ์ฌ๋์ด ํ๋์ ๋คํธ์ํฌ๋ฅผ ์์ ์ IP๊ฐ ๋ชจ์๋ฆ -> ๋ชจ์๋ฅธ IP๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๋คํธ์ํฌ๋ฅผ ๋ถํ ํ๋ ๊ฐ๋
</li><li>๋นจ๊ฐ์ ๋ถ๋ถ์ ์ซ์๋ง ๋ฐ๋๋ ๊ฒ์ ํ์ธํ ์ ์์</li><li>์ด๋ฅผ ๊ฐํธํ๊ฒ ํ๊ธฐํ๊ธฐ<ul><li><code>[๊ทธ๋ฃน์์ ๋งจ ์์ ip์ฃผ์/32bit ์ค ๊ทธ๋๋ก์ธ ๋ถ๋ถ ๊ฐ์]</code>๋ก ํ๊ธฐ</li><li>subnet A: 211.11.124.0/25</li><li>subnet B: 211.11.124.128/25</li></ul></li></ul><p><br><br></p>]]></content>
<categories>
<category> ๐ Network/Security </category>
</categories>
<tags>
<tag> Network </tag>
<tag> IP </tag>
<tag> Subnet </tag>
</tags>
</entry>
<entry>
<title>Windows & Mac์์ nvm ์ค์นํ๊ธฐ (Node.js, Npm, Yarn ์ค์น)</title>
<link href="/2022/05/17/Etc/Windows-Mac-Osx-Nvm-Install/"/>
<url>/2022/05/17/Etc/Windows-Mac-Osx-Nvm-Install/</url>
<content type="html"><![CDATA[<p>๊ฐ๋ฐ ํ๋ก์ ํธ์ ๋ฐ๋ผ์ Node์ ๋ฒ์ ์ ์ฌ๋ฌ ๊ฐ ์ค์นํ๊ณ ๋ฒ๊ฐ์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ,<br>์ด๋ด ๋๋ nvm(Node Version Manager)๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ๊ฐ์ node ๋ฒ์ ์ ์ค์นํ์ฌ ์ํ๋ node ๋ฒ์ ์ ๊ณจ๋ผ์ ์ฌ์ฉํ ์ ์๋ค.</p><br><h2 id="์ค์น-์-์ฌ์ -์ฃผ์-์ฌํญ"><a href="#์ค์น-์-์ฌ์ -์ฃผ์-์ฌํญ" class="headerlink" title="์ค์น ์ ์ฌ์ ์ฃผ์ ์ฌํญ"></a>์ค์น ์ ์ฌ์ ์ฃผ์ ์ฌํญ</h2><ul><li>๊ธฐ์กด์ Node๊ฐ ์ค์น๋์ด ์๋ค๋ฉด Node๋ฅผ ์ ๊ฑฐํด์ผ ํ๋ค.</li><li>๊ธ์ ์
๋ก๋ํ ๋ ์ง ๊ทธ๋๋ก ์์ง๋ง, node๋ ํ๋ก๊ทธ๋จ์ผ๋ก ๊ณ์ ๋์์์ด ์
๋ฐ์ดํธ๋๋ฉฐ ๋ฐ์ ํ๋ค.<br>๊ธ์ ๋์์๋ ๋ฒ์ ๊ทธ๋๋ก ๋ฐ๋ผ ์น๋ ๊ฒ๋ณด๋ค๋ <strong>์์ ์ด ์ฌ์ฉํ ๋ฒ์ ์ ์ง์ ๊ณ ๋ฅด๊ณ ์ค์นํ ๊ฒ</strong>์ ์ถ์ฒํ๋ค.<br>์ค์นํ ์ ์๋ node ๋ฒ์ ๋ฆฌ์คํธ๋ ์ฌ๊ธฐ์ ์ฐธ๊ณ ํ๋ฉด ๋๋ค: <a href="https://nodejs.org/ko/download/releases/">https://nodejs.org/ko/download/releases/</a></li></ul><p><br><br></p><h2 id="Windows์์-์ค์นํ๊ธฐ"><a href="#Windows์์-์ค์นํ๊ธฐ" class="headerlink" title="Windows์์ ์ค์นํ๊ธฐ"></a>Windows์์ ์ค์นํ๊ธฐ</h2><ol><li><p><a href="https://github.com/coreybutler/nvm-windows/releases">nvm-windows repository</a>์ ์ ์ํ์ฌ release๋ ํ์ผ์ ๋ค์ด๋ฐ๋๋ค. ์ด ๋ ํ์ผ์ ํ์ด <code>.zip</code>์ธ ๊ฒ์ ๋ค์ด๋ฐ๋๋ค.<br><img src="1.png"></p><br></li><li><p>์์ถ์ ํ๋ฉด ํด๋ ๋ด๋ถ์ <code>nvm-setup.exe</code> ํ์ผ์ด ์๋๋ฐ, ํด๋น ํ์ผ์ ์คํํ๋ฉด nvm์ด ์ค์น๋๋ค.<br><img src="2.png"></p><br></li><li><p>์๋์ฐ ํฐ๋ฏธ๋์์ ์๋ ๋ช
๋ น์ด๋ค์ ํตํด node๋ฅผ ๋ฒ์ ๋ณ๋ก ์ค์น ๋ฐ ๊ด๋ฆฌ, ์ฌ์ฉ์ ํ ์ ์๋ค.</p><pre class="line-numbers language-shell"><code class="language-shell"># nvm ๋ฒ์ ํ์ธnvm version# ์ค์น๋ node ๋ฆฌ์คํธnvm ls# node ๋ฒ์ ๋ณ ์ค์นํ๊ธฐnvm install 14.17.6# nvm์์ ํน์ node ๋ฒ์ ํ์ฑํํ๊ธฐnvm use 15.11.0# npm์ผ๋ก yarn ์ค์นํ๊ธฐnpm install -g yarn<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li></ol><p><br><br></p><h2 id="Mac์์-์ค์นํ๊ธฐ"><a href="#Mac์์-์ค์นํ๊ธฐ" class="headerlink" title="Mac์์ ์ค์นํ๊ธฐ"></a>Mac์์ ์ค์นํ๊ธฐ</h2><ul><li><p>nvm repository: <a href="https://github.com/nvm-sh/nvm">https://github.com/nvm-sh/nvm</a></p><pre class="line-numbers language-shell"><code class="language-shell"># nvm ์ค์นํ๊ธฐcurl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash# node ๋ฒ์ ๋ณ ์ค์นํ๊ธฐnvm install 14.17.3# nvm์์ ํน์ node ๋ฒ์ ํ์ฑํํ๊ธฐnvm use 15.11.0# npm์ผ๋ก yarn ์ค์นํ๊ธฐnpm install -g yarn<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li><li><p>๋ง์ฝ์ nvm์ ์ค์นํ๊ณ ํ์ธํ์ ๋ <code>command not found</code>๊ฐ ๋์ค๋ฉด <code>bash_profile</code>์ ํ์ธํ์.</p><pre class="line-numbers language-bash"><code class="language-bash"><span class="token function">vi</span> ~/.bash_profile<span class="token comment" spellcheck="true"># ์๋์ ์ฝ๋ ํ์ธ. ์คํ๋ ๋๋ฝ ์ ์ง์ ์์ </span><span class="token function">export</span> NVM_DIR<span class="token operator">=</span><span class="token string">"<span class="token variable">$HOME</span>/.nvm"</span><span class="token punctuation">[</span> -s <span class="token string">"<span class="token variable">$NVM_DIR</span>/nvm.sh"</span> <span class="token punctuation">]</span> <span class="token operator">&&</span> <span class="token keyword">.</span> <span class="token string">"<span class="token variable">$NVM_DIR</span>/nvm.sh"</span> <span class="token comment" spellcheck="true"># This loads nvm</span><span class="token comment" spellcheck="true"># ์ฌ์์</span><span class="token function">source</span> ~/.bash_profile<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li></ul>]]></content>
<categories>
<category> ๐พ Etc </category>
</categories>
<tags>
<tag> Node.js </tag>
<tag> Npm </tag>
<tag> Yarn </tag>
<tag> Nvm </tag>
</tags>
</entry>
<entry>
<title>DevOps ๊ฐ์</title>
<link href="/2022/05/12/DevOps/Intro/"/>
<url>/2022/05/12/DevOps/Intro/</url>
<content type="html"><![CDATA[<h2 id="1-DevOps-์ ์"><a href="#1-DevOps-์ ์" class="headerlink" title="1. DevOps ์ ์"></a>1. DevOps ์ ์</h2><hr><blockquote><p>โA set of practices intended to reduce the time between commiting a change to a system and the change being placed into normal production, while ensuring high qualityโ</p><p>์ ํ์ ๋ณ๊ฒฝ์ฌํญ์ ํ์ง์ ๋ณด์ฅํจ๊ณผ ๋์์ ํ๋ก๋์
์ ๋ฐ์ํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋จ์ถํ๊ธฐ ์ํ ์ค์ฒ ๋ฐฉ๋ฒ์ ๋ชจ์</p></blockquote><ul><li>๊ฐ๋ฐ(Dev)์ ์ด์(Ops)์ ํฉ์ฑ์ด</li><li>๊ฐ๋ฐ๊ณผ ์ด์์ ๊ฒฝ๊ณ๋ฅผ ํ๋ฌผ๊ณผ ํ๋์ ํ์ผ๋ก ํตํฉํ๊ณ ์ ํ๋ ๋ฌธํ ๋๋ ์ฒ ํ</li><li>๊ฐ๋ฐ๊ณผ ์ด์์ ๋ฒฝ์ ํ๋ฌผ์ด ๋ ๋นจ๋ฆฌ ์์ฃผ ๋ฐฐํฌํ๋ ๊ฒ</li></ul><p><br><br></p><h2 id="2-DevOps๊ฐ-ํ์ํ-์ด์ "><a href="#2-DevOps๊ฐ-ํ์ํ-์ด์ " class="headerlink" title="2. DevOps๊ฐ ํ์ํ ์ด์ "></a>2. DevOps๊ฐ ํ์ํ ์ด์ </h2><hr><p><img src="./sdlc.png"></p><ul><li>์กฐ์ง์ ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด ๊ฐ ๋จ๊ณ ๋ณ ์ ๋ฌธ๊ฐ๋ก ๊ตฌ์ฑ๋ ๊ธฐ๋ฅ ์กฐ์ง์ ์ด์ํ ์ ์์</li><li>๊ทธ๋งํผ ์์ฌ์ํต์ด ๋ง์์ง๊ธฐ ๋๋ฌธ์ ์ปค๋ฎค๋์ผ์ด์
์ ๋ฌธ์ ๊ฐ ๋ฐ์</li><li>๊ฐ๋ฐ์๊ฐ SW ์์ ์ฃผ๊ธฐ ์ค ์ฌ๋ฌ ๋จ๊ณ์ ์ฐธ์ฌํ๋ค๋ฉด ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์</li></ul><p><img src="./netflix.png"></p><ul><li>๋ทํ๋ฆญ์ค์์ ์ ์ํ๋ <strong>Full-cycle Developer</strong></li><li>SW ๊ฐ๋ฐ ์์ ์ฃผ๊ธฐ์ ์ ์ฒด์ ์ง์ ์ฐธ์ฌํ๋ ๊ฐ๋ฐ์</li></ul>]]></content>
<categories>
<category> โผ DevOps </category>
</categories>
<tags>
<tag> DevOps </tag>
</tags>
</entry>
<entry>
<title>๋ํ์ ๋ ์์๋ค๋ฉด ์ข์์ SW ํ</title>
<link href="/2022/05/10/Retrospect/Bachelor/"/>
<url>/2022/05/10/Retrospect/Bachelor/</url>
<content type="html"><![CDATA[<p>SW๋ถ์ผ๋ฅผ ์ ํํ๊ณ ์คํ์ ์์ผ๋ฉฐ ๊ฐ์ฅ ๊ณ ์ํ๋ ๊ฒ ์ค ํ๋๊ฐ ๋ฐ๋ก <strong>์กฐ์ธํด์ฃผ๋ ์ฌ๋์ด ์๋ค๋ ๊ฒ</strong>์ด์๋ค.</p><p>์ด๋ค ๋ถ์ผ๋ ๋ฉํ ๊ฐ ์๋ค๋ฉด ํจ์จ์ ์ผ๋ก ์คํ์ ์๊ณ ๋น ๋ฅด๊ฒ ๊ธฐ์ ์ ์ต๋ํ ์ ์๊ฒ ์ง๋ง, ์ฃผ๋ณ์ ์ปดํจํฐ ๋ถ์ผ์ ์ข
์ฌํ๋ ์ฌ๋์ด ๋ ์ป๊ณ ๋ด๋ ์ ํ ์์๋ค.<br>์ฌ์ง์ด ๋ํ๊ต ์์ฒด๋ฅผ ๋์จ ์ฌ๋์ด ์ฃผ๋ณ์ ์น์ธ๋(๋ฌธ๊ณผ ์ ๊ณต) ํ๋๋ฐ์ ์์๊ธฐ์, ํผ์์ ์ต์คํธ๋ฆผ ์น ์ ํ๊ธฐ ๋์ ๊ธฐ๋ฅผ ์ฐ์๋ ๊ฒ ๊ฐ๋ค.</p><p>๋๊ฐ์ ์ฌ๋์ด ๋ ์ด์ ์๊ธธ ๋ฐ๋ผ๋ฉฐ, ๋๋ฆ ์๊ฐํ๋ ๊ฟํ๋ค์ ์ ์ด๋ณด๋ ค๊ณ ํ๋ค.</p><blockquote><p>์ถ๊ฐ์ ์ผ๋ก ๊ถ๊ธํ ๋ด์ฉ ์์ผ์๋ฉด ์ธ์ ๋ ์ง ํธํ๊ฒ ๋๊ธ ๋จ๊ฒจ์ฃผ์ธ์ :-)</p></blockquote><p><br><br></p><h2 id="์ธ์ด-์ ํ"><a href="#์ธ์ด-์ ํ" class="headerlink" title="์ธ์ด ์ ํ"></a>์ธ์ด ์ ํ</h2><p>๋ณธ์ธ์ด ํ๊ณ ์ถ์ ๋ถ์ผ์ ์ธ์ด๋ฅผ ์ ํํ๋ค. ๋ฑํ ํ๊ณ ์ถ์ ๋ถ์ผ๊ฐ ์๋ค๋ฉด ์ ์ผ ๋ฌด๋ํ <code>Java</code>๋ฅผ ์ถ์ฒํ๋ค. ์ทจ์
์์ฅ ์์ฒด๊ฐ ์๋ฒ ๊ฐ๋ฐ์ ์์๊ฐ ๋ง์๋ฐ, ๊ทธ ์ค ์ ๋ฐ์ ์ผ๋ก ๊ฐ์ฅ ๋ง์ด ๊ตฌํ๋ ๊ธฐ์ ์คํ์ด ๋ฐ๋ก <code>Java</code>์ด๊ธฐ ๋๋ฌธ์ด๋ค.<br>๋ค๋ง ์คํํธ์
์ ๋
ธ๋ฆฌ๊ณ ์๋ค๋ฉด <code>Javascript</code>, <code>Python</code>์ ์ถ์ฒํ๋ค. ์ต๊ทผ ์คํํธ์
๋ค์ด ์ด ๋ ์ธ์ด๋ฅผ ์ฃผ์ ๊ธฐ์ ์คํ์ผ๋ก ์ ํํ๋ ์ถ์ธ๋ค.</p><p>์ฝ๋ฉ ํ
์คํธ ์ธ์ด๋ก๋ ๋ฌด๋ํ๊ฒ <code>C/C++</code>, <code>Python</code>์ ์ถ์ฒํ๋ค. ๋ค๋ฅธ ์ธ์ด๋ฅผ ์ ํํด๋ ๊ด๊ณ์๋ค. ์์ ์ด ๊ฐ์ฅ ์์ ์๋ ์ธ์ด๋ฅผ ์ ํํ๋ ๊ฒ์ด ์ข๋ค.<br>์ฃผ๋ณ์์ ์ข
์ข
์๊ฐ์ด๊ณผ ๋ฌธ์ ๋๋ฌธ์ <code>Python</code>์ ๋ง์ค์ด๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ, ์๊ฐ์ด๊ณผ ๋ฌธ์ ๋ ๋์ค์ ํด๊ฒฐํ ์ผ์ด๋ค. ์ผ๋จ ๋์๊ฐ๋ ์ฝ๋๋ฅผ ๋ง๋ค์ด์ผ ๋ถ๋ถ์ ์๋ผ๋ ์ป์ ์ ์์ง ์๊ฒ ๋๊ฐ.</p><p>์ฌ์ค ํ๋ถ์ ์์ค์์ ์ธ์ด ์ ํ์ ํฌ๊ฒ ์ค์ํ์ง ์๋ค. ์๋๋ฉด ์ทจ์งํด๋ดค์ ์จ๋ณด๋ฉ๋ง ํ๊ท 1๊ฐ์-3๊ฐ์ ์ ๋ ๋๋ฆฌ๋๋ฐ ๊ทธ๋ฌ๋ฉด ์ผ์ ์ปค๋
๊ณต๋ถ๋ง ์ฃผ๊ตฌ์ฅ์ฐฝ ํ๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค.<br>(์นด์นด์ค ๋ค๋๋ ์ง์ธ ์, <strong>์
์ฌํ์ง 5๊ฐ์ ๋๋๋ฐ ์ผ ํ๋๋ ์ํ๊ณ ๊ณต๋ถ๋ง ํ์ดโฆ</strong> <del>๋ฌผ๊ฒฝ๋ ฅ</del>)<br>๊ทธ๋์ ํ๋ถ์ ์์ ์ ๋ ์ ์์ผ๋ฉด ๋ค์ํ ์์
์ ์ ํ๋ฉด์ ์ฌ๋ฌ ์ธ์ด๋ค์ ์ตํ๋ณด๋ ๊ฒ์ ์ถ์ฒํ๋ค.<br>๋ค๋ง ๋ถ์ผ๋ง๋ค ์ฃผ๋ ฅ์ผ๋ก ํ๋ ์ธ์ด๊ฐ ์๊ธฐ ๋๋ฌธ์, ํน์ ๋ถ์ผ๋ฅผ ๊ฐ๊ธฐ๋ก ๊ฒฐ์ฌํ์ผ๋ฉด ๊ทธ ์ธ์ด๋ ๊ณต๋ถํด๋๋๊ฒ ์ข๋ค.</p><table> <tbody><tr> <td><b>๋ถ์ผ</b></td> <td><b>์ธ์ด</b></td> </tr> <tr> <td>AI/๋น
๋ฐ์ดํฐ</td> <td>Python</td> </tr> <tr> <td>์๋ฒ</td> <td>Java</td> </tr> <tr> <td>ํ๋ก ํธ์๋</td> <td>Javascript</td> </tr> <tr> <td>ํ๋์จ์ด/์๋ฒ ๋๋</td> <td>C, C++</td> </tr></tbody></table><p><br><br></p><h2 id="์กธ์
-์ -๋ฐ๋์-๋ค์ด์ผ-ํ -์ ๊ณต-๊ณผ๋ชฉ"><a href="#์กธ์
-์ -๋ฐ๋์-๋ค์ด์ผ-ํ -์ ๊ณต-๊ณผ๋ชฉ" class="headerlink" title="์กธ์
์ ๋ฐ๋์ ๋ค์ด์ผ ํ ์ ๊ณต ๊ณผ๋ชฉ"></a>์กธ์
์ ๋ฐ๋์ ๋ค์ด์ผ ํ ์ ๊ณต ๊ณผ๋ชฉ</h2><ul><li>์๋ฃ๊ตฌ์กฐ</li><li>์๊ณ ๋ฆฌ์ฆ</li><li>๋ฐ์ดํฐ๋ฒ ์ด์ค</li><li>๋คํธ์ํฌ</li><li>์ด์์ฒด์ </li></ul><p>๋๋ถ๋ถ ๊ธฐ์
๋ค์ด <code>์ฝ๋ฉํ
์คํธ > ๋ฉด์ </code> ๊ณผ์ ์ ๊ฑฐ์น๋๋ฐ, ๋จผ์ ์ฝ๋ฉํ
์คํธ๋ ๋๋ถ๋ถ ์๋ฃ๊ตฌ์กฐ, ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๊ฐ ์ถ์ ๋๋ค.<br>๋ฉด์ ์์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค, ๋คํธ์ํฌ, ์ด์์ฒด์ ์ ๊ด๋ จํด ์ง๋ฌธ์ด ๋ฐ๋ฐ์ด์ผ๋ก ๋ค์ด์ค๋ฏ๋ก ๊ผญ ์๊ฐํด๋๋ ๊ฒ์ ์ถ์ฒํ๋ค.<br>์ด ๊ณผ๋ชฉ๋ค ์ค ํ๋๋ผ๋ ๊ณต๋ถ๋ฅผ ์ํ๊ณ ์ทจ๋ฝ์ ๋์ ํ๋ค๋ฉด ํ์ค์ ์ผ๋ก ๋ง์ด ํ๋ค๋ค.</p><p><br><br></p><h2 id="๋น์ ๊ณต์-๊ฐ๋ฐ์"><a href="#๋น์ ๊ณต์-๊ฐ๋ฐ์" class="headerlink" title="๋น์ ๊ณต์ ๊ฐ๋ฐ์"></a>๋น์ ๊ณต์ ๊ฐ๋ฐ์</h2><p>์ปดํจํฐ๊ณตํ์ด ๋ง๋งํ ํ๋ฌธ์ ์๋์ง๋ง, ๋ถ์ผ ํน์ฑ ์ ์ธํฐ๋ท์ ์๋ง์ ์ง๋ฃ๋ค์ด ์กด์ฌํ๋ฉฐ ์๋ฃ ๊ณต์ ๊ฐ ํ๋ฐํ ํธ์ด๋ค.<br>์ ํ๋ธ, ์นด์นด์คํก ์คํํก๋ฐฉ, ๊ทธ ์ธ ๋ค์ํ ์ปค๋ฎค๋ํฐ๋ค ๋ฐ ์ฌ์ดํธ์์ ์ํ๋ ์ ๋ณด๋ฅผ ์ฝ๊ฒ ์ฐพ์ ์ ์๋ค.</p><p>๊ทธ๋๋ ์ ์ฑ์ด ์๋ง์ผ๋ฉด ๊ต์ฅํ ๊ดด๋ก์ด ๋ถ์ผ์ด๊ธฐ ๋๋ฌธ์ ๋ํ์์ด๋ผ๋ฉด ํ๋ก๊ทธ๋๋ฐ ๊ณผ๋ชฉ์ ํ ๋ฒ ๋ค์ด๋ณด๊ณ , ์๋๋ผ๋ฉด ์ธํฐ๋ท ์๋ฃ๋ค์ ํตํด ๊ณต๋ถ๋ฅผ ํด๋ณด๋ ๊ฒ์ ์ถ์ฒํ๋ค.</p><p><br><br></p><h2 id="ํ๊ต-x2F-๋น์ ๊ณต์-๋ฉ๋ฆฌํธ"><a href="#ํ๊ต-x2F-๋น์ ๊ณต์-๋ฉ๋ฆฌํธ" class="headerlink" title="ํ๊ต / ๋น์ ๊ณต์ ๋ฉ๋ฆฌํธ"></a>ํ๊ต / ๋น์ ๊ณต์ ๋ฉ๋ฆฌํธ</h2><p>์ด๋ค ๊ณณ์ด๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋ฒ์ ๋ณด๊ธฐ์ ์ฌ๊ธฐ ๋ํ ํ๋ฒ์ ์กด์ฌ๋ฅผ ํผํด๊ฐ ์ ์๋ค. ๋ค๋ง ๋ค๋ฅธ ๋ถ์ผ์ ๋นํ๋ฉด ๊ฐ๋ฐ ์์ฒด๋ ํ๊ต ํ๊ณผ๋ฅผ ์ ๋ณด๋ ์ง๊ตฐ์ผ๋ก ํ๊ฐ๋๋ค.<br>๋ฐ๋ผ์ ํ๊ต ๋ค์๋ฐธ๋ฅ์ ์ปดํจํฐ ์ธ ์ ๊ณต ๋๋ฌธ์ ์ทจ์
์ด ์๋๋ค๊ณ ๋งํ๋ ์ฌ๋๋ค์ โ๋ด๊ฐ ๊ณผ์ฐ ์ด์ฌํ ์ด์๋?โ๋ผ๋ฉฐ ์์งํ๊ฒ ์๊ธฐ๋ฐ์ฑ์ ์๊ฐ์ ๊ฐ์ ธ์ผ ํ๋ค. ์ ๋ง ๋
ธ๋ ฅ๋ง ํ๋ค๋ฉด ์ปค๋ฒ๊ฐ ๋ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.</p><blockquote><p>๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ๋๋ ์๋๋ค ํ์๋ ๋ถ๋ค, ๊ฒฝ์์๋ค๊ณผ ๋น๋น ์ ์๋ ์คํ์ ๋ง๋ค๊ธฐ ์ํด ๋ถ๋ํ ๋
ธ๋ ฅ์ ํ์
จ์ต๋๊น? ๋จ๋ค์ด ๋ ๋ ์ ๋ง ์ ๋ ์์๊ณ ๊ณต๋ถํ์
จ๋์? ๊ฐ์ด์ ์์ ์น๊ณ ํ ๋ฒ ์๊ฐํด๋ณด์๊ธธ ๋ฐ๋๋๋ค.</p></blockquote><p>๋น์ ๊ณต์๋ค์ ๊ด๋ จํด์ ์ถ๊ฐ์ ์ธ ์กฐ์ธ์ ํด๋ณด์๋ฉด, ๋น์ ๊ณต์๊ฐ ๋ฝํ์ง ์๋ ์ด์ ๋ <code>์ ๊ณต์์ ๋น๊ตํ์ ๋ ๊ทธ๋งํ ๊ฒฝํ๊ณผ ์ง์์ด ๋ถ์กฑํ๋ค๊ณ ํ๋จ</code>๋๊ธฐ ๋๋ฌธ์ด๋ค. ๋๋ถ๋ถ์ ๋น์ ๊ณต์๋ค์ด ๋ถํธ์บ ํ๋ ๊ตญ๋น์ง์์ผ๋ก ๊ฐ๋ฐ๊ณต๋ถ๋ฅผ ํ๋๋ฐ, ์ด ๋ชจ๋ ๊ณผ์ ๋ค์ด ๊ธธ์ด๋ดค์ 1๋
์ด๊ธฐ ๋๋ฌธ์ ํ์ค์ ์ผ๋ก๋ 4๋
์ ์ ๊ณต์๋ค๊ณผ ๋น๊ต๋๋๊ฑด ๋น์ฐํ๋ค.</p><p>๊ทธ๋๋ ๊ฐ๋ฐ ์คํ์ ์๊ณ ์ ํ๋ค๋ฉด ๊ฐ์ธ์ ์ผ๋ก ์ถ์ฒํ๋ ๊ฒ์ <code>๋ถํธ์บ ํ</code>์ด๋ค.<br>์ด๋ฏธ ๊ฐ๋ฐ์๋ค ์ฌ์ด์์ <strong>๊ตญ๋น์ง์ = ๊ฐ๋ฐ์ ์ฐ์ด๋๋ ๊ณต์ฅ -> ๊ตญ๋น์ง์ ์ถ์ = ์ฝ๋ฉ ๋์ถฉ ๋ฐฐ์ด ์ฌ๋</strong>์ผ๋ก ์ธ์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ด๋ค. (์ข์๊ธฐ์
์ ์ ์ฌํ ์ดํด๋ณด๋ฉด ๊ตญ๋น์ง์ ์ถ์ ์ด ๋ง์ ๊ฒฝ์ฐ๋ฅผ ์ฐพ์ ์ ์๋ค)</p><p>๋ค์์ ๊ทธ ์ค ์ถ์ฒํ๋ ๋ถํธ์บ ํ ํ๋ก๊ทธ๋จ์ด๋ค.</p><ul><li><a href="https://woowacourse.github.io/">์ฐ์ํ ํ
ํฌ์ฝ์ค (์ฐํ
์ฝ)</a></li><li><a href="https://boostcamp.connect.or.kr/">BoostCamp (๋ถ์คํธ์บ ํ / ๋ถ์บ )</a></li><li><a href="https://www.swmaestro.org/sw/main/main.do">SW๋ง์์คํธ๋ก(์๋ง)</a></li><li><a href="https://42seoul.kr/seoul42/main/view">42SEOUL</a>: ํ๋์ค์ ์ ๋ช
ํ๋ก๊ทธ๋จ์ธ 42Ecole์ ๋ฒค์น๋งํนํ ๋ํ๋ฏผ๊ตญ ์ ๋ถ ์ง์ SW ๊ฐ๋ฐ์ ์์ฑ ํ๋ก๊ทธ๋จ์ด๋ค. ์ ์ธ๊ณ์ ์ผ๋ก ์ ๋ช
ํ ํ๋ก๊ทธ๋จ์ธ ๋งํผ ํ์ฌ ์ง์ํ์ ๋ ๋์๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.</li><li><a href="https://www.ssafy.com/">Ssafy(์ธํผ)</a>: ์ผ์ฑ์์ ์ง์ํ๋ SW ๊ฐ๋ฐ์ ์์ฑ ํ๋ก๊ทธ๋จ์ด๋ค. ์กธ์์ ์ด์๋ง ์ฐธ๊ฐ ๊ฐ๋ฅํ๋ค.</li></ul><p>๊ตญ๋น์ง์์ ์ ํํ๋๋ผ๋ ์์ ์ ๋
ธ๋ ฅ์ ๋ฌ๋ ธ์ผ๋ ๋๋์ฑ ์ด์ฌํ CS๊ณต๋ถ๋ฅผ ํ๋ ๊ฒ์ ์ถ์ฒํ๋ค.</p><p><br><br></p><h2 id="๊ฐ๋ฐ์๋ก-์ง์ํ -์-์๋-๊ธฐ์
"><a href="#๊ฐ๋ฐ์๋ก-์ง์ํ -์-์๋-๊ธฐ์
" class="headerlink" title="๊ฐ๋ฐ์๋ก ์ง์ํ ์ ์๋ ๊ธฐ์
"></a>๊ฐ๋ฐ์๋ก ์ง์ํ ์ ์๋ ๊ธฐ์
</h2><p>ํฌ๊ฒ ๋ ๊ฐ์ง๋ก ๋๋๋ค.<br>(๊ธ์ต๊ถ IT ๋ฑ ๋ค์ํ๊ฒ ์๊ฒ ์ง๋ง ์ด ์ชฝ์ผ๋ก๋ ์ ๋ชฐ๋ผ์ ํจ์ค)</p><ul><li><strong>๋๊ธฐ์
IT ์ํ์ฌ</strong>: LG CNS, ํ๋์คํ ์๋ฒ, ์ผ์ฑ SDS ๋ฑ<ul><li>๊ทธ๋ฃน ๊ณ์ด์ฌ์ IT ์๋น์ค๋ฅผ ๊ฐ๋ฐ ๋ฐ ์ด์</li><li>ํํ ๋๊ธฐ์
SI๋ก ๋ถ๋ฆฌ๋ฉฐ, ์ทจ์
์์ฅ์์ ๊ฐ์ฅ ๋ง์ด ์ฑ์ฉ</li><li>์ฅ์ : ๋์ ์ฐ๋ด๊ณผ ์์ ์ฑ</li><li>๋จ์ : ์์ง์ ์ธ ๊ธฐ์
๋ฌธํ, ๊ฐ๋ฐ ๊ธฐํ๊ฐ ์ ์(๋์ฒด๋ก ์ด์ ์
๋ฌด ์์ฃผ)</li></ul></li><li><strong>IT ์๋น์ค ๊ธฐ์
</strong>: ๋ค์นด๋ผ์ฟ ๋ฐฐ(๋ค์ด๋ฒ, ์นด์นด์ค, ๋ผ์ธ, ์ฟ ํก, ๋ฐฐ๋ฌ์ ๋ฏผ์กฑ)<ul><li>๊ฐ๋ฐ์ ์ธ ์ธก๋ฉด์์ ์์ ๋ฅผ ๋ณด์ฅ๋ฐ์ ์ ์์ผ๋ฉฐ ๋ค์ํ ๊ธฐํ ๋ํ ์ ํ ์ ์์</li><li>๊ณ์ ๊ฐ๋ฐ ๊ณต๋ถ๋ฅผ ํ๋ฉด์ ์ฑ์ฅํ๊ณ ์ถ๋ค๋ฉด ์ถ์ฒ</li><li>์ฅ์ : ์์ ๋ก์ด ๊ธฐ์
๋ฌธํ</li><li>๋จ์ : ํ์ ๊ณต๋ถ, ๊ธฐ์
๋ณ ์ฐ๋ด์ฐจ๊ฐ ๋งค์ฐ ํผ(๋๊ธฐ์
vs ์คํํธ์
), ์์ ์ฑ ๋ณด์ฅ ๋ชปํจ</li></ul></li></ul><p><br><br></p><h2 id="๊ฐ์ด-์ฝ์ด๋ณด๋ฉด-์ข์-๊ธ"><a href="#๊ฐ์ด-์ฝ์ด๋ณด๋ฉด-์ข์-๊ธ" class="headerlink" title="๊ฐ์ด ์ฝ์ด๋ณด๋ฉด ์ข์ ๊ธ"></a>๊ฐ์ด ์ฝ์ด๋ณด๋ฉด ์ข์ ๊ธ</h2><ul><li><a href="https://ruby-kim.github.io/2022/04/23/Retrospect/Junior/">[ํ๊ธฐ] ์คํํธ์
/์ค์๊ธฐ์
/๋๊ธฐ์
์ธํด ๋ฐ ์ ๊ท์ง ์ค๋น ๊ณผ์ </a></li><li><a href="https://ruby-kim.github.io/2024/09/12/Retrospect/Portfolio/">๊ฐ๋ฐ์ ํฌํธํด๋ฆฌ์ค, ์ด๋ ๊ฒ ์ค๋นํด๋ณด์</a></li></ul>]]></content>
<categories>
<category> ๐ Retrospect </category>
</categories>
<tags>
<tag> Retrospect </tag>
<tag> Job </tag>
<tag> 42SEOUL </tag>
</tags>
</entry>
<entry>
<title>[MSA] Micro Service Architecture: Outer - Service Mesh</title>
<link href="/2022/04/30/Architecture/MSA-outer-service-mesh/"/>
<url>/2022/04/30/Architecture/MSA-outer-service-mesh/</url>
<content type="html"><![CDATA[<p>MSA์ Outer Architecture ์ค Service Mesh์ ๋ํด ์์๋ณด์.</p><p><br><br></p><h2 id="MSA-๊ฐ๋
-์ค๋ช
-์ฝ์ด๋ณด๊ธฐ"><a href="#MSA-๊ฐ๋
-์ค๋ช
-์ฝ์ด๋ณด๊ธฐ" class="headerlink" title="MSA ๊ฐ๋
์ค๋ช
์ฝ์ด๋ณด๊ธฐ"></a>MSA ๊ฐ๋
์ค๋ช
์ฝ์ด๋ณด๊ธฐ</h2><hr><ul><li><a href="https://ruby-kim.github.io/2022/04/26/Architecture/MSA-Intro/">[MSA] Micro Service Architecture ๊ฐ์</a></li></ul><p><br><br></p><h2 id="Service-Mesh"><a href="#Service-Mesh" class="headerlink" title="Service Mesh"></a>Service Mesh</h2><hr><p><img src="1.png"></p><ul><li>๋งํฌํฌ๋ก์๋น์ค ๊ฐ์ ํต์ (๋คํธ์ํฌ)์ ์ ์ดํ๋ ์ญํ <ul><li>ํต์ ๋ฐ ๋คํธ์ํฌ ๊ธฐ๋ฅ์ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๋ถ๋ฆฌํ ๋คํธ์ํฌ ํต์ ์ธํ๋ผ</li><li>๋ชจ๋ ์๋น์ค์ ์ธํ๋ผ layer๋ก ์๋น์ค๋ค ๊ฐ์ ํต์ ์ฒ๋ฆฌ</li></ul></li><li>service discovery, service routing, load balancing(ํธ๋ํฝ ๊ด๋ฆฌ) ๋ฐ ๋ณด์ ๋ฑ์ ๋ด๋นํจ</li></ul><p><br><br></p><h2 id="API-Gateway์์-์ฐจ์ด์ "><a href="#API-Gateway์์-์ฐจ์ด์ " class="headerlink" title="API Gateway์์ ์ฐจ์ด์ "></a>API Gateway์์ ์ฐจ์ด์ </h2><hr><p>๋จผ์ <a href="https://ruby-kim.github.io/2022/04/28/Architecture/MSA-outer-gateway/">[MSA] Micro Service Architecture: Outer - External Gateway</a>๋ฅผ ์ฝ๊ณ ์๋ ํ๋ฅผ ๋ณด๋ ๊ฒ์ ์ถ์ฒํ๋ค.</p><ul><li>์ต๊ทผ MSA์์ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉ:<ul><li>API Gateway๋ ๋
ธ์ถ๋๋ ๋ถ๋ถ(External)์ ์์นํ๋ฉฐ ๋ด๋ถ์๋น์ค๋ฅผ ๋ณดํธ ๋ฐ ์ ์ดํ๋ ์ญํ ๋ก ์ฌ์ฉ</li><li>Service Mesh๋ ๋ด๋ถ ์๋น์ค(Internal)์ ์์นํ์ฌ ์๋น์ค๋ฅผ ๊ด๋ฆฌํ๋ ๊ตฌ์กฐ๋ก ์ฌ์ฉ<br><img src="2.png"></li></ul></li></ul><table> <tbody><tr> <td></td> <td>API Management</td> <td>Service Mesh</td> </tr> <tr> <td><b>์ ์ฉ๋๋ ์์น</b></td> <td>๋ง์ดํฌ๋ก์๋น์ค ๊ทธ๋ฃน์ ์ธ๋ถ ๊ฒฝ๊ณ์ ์์นํ์ฌ ์ญํ ์ํ</td> <td>๊ฒฝ๊ณ ๋ด๋ถ์์ ์ญํ ์ํ</td> </tr> <tr> <td><b>์ํคํ
์ณ ํํ</b></td> <td>์ค์์ง์คํ ์ํคํ
์ณ = SPOF(Single Point of Failure) ์์ฑ</td> <td>๋ถ์ฐํ ์ํคํ
์ณ = SPOF๋ฅผ ์์ฑํ์ง ์๊ณ ํ์ฅ์ด ์ฉ์ด</td> </tr> <tr> <td><b>ํจํด</b></td> <td>- Gateway proxy pattern ์ฌ์ฉ<br>- Consumer(ํธ์ถ์)๊ฐ ๊ตฌํ ๋ด์ฉ์ ์ ํ์์์ด Gateway๋ฅผ ํธ์ถํ๋ ๋ฐฉ๋ฒ๋ง ์๋ฉด Gateway๊ฐ ์์์ ์ํํด์ฃผ๋ ๋ฐฉ์</td> <td>- Sidecar proxy pattern ์ฌ์ฉ<br>- Consumer(ํธ์ถ์)์ ์ฝ๋์ Provider(๊ณต๊ธ์)์ ์ฃผ์๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ, failover์ ๊ด๋ จ๋ ์ฝ๋ ๋ฑ์ ๋ด์ฉ์ด ๋ค์ด๊ฐ๊ฒ ์ค์ <br>- ํธ์ถ์์ ์ฝ๋๋ ์ดํ๋ฆฌ์ผ์ด์
์ฝ๋(๋น์ฆ๋์ค ๋ก์ง)์ ๋ด์ฅ๋์ง x, sidecar ํํ๋ก ๋ณ๊ฐ๋ก ๊ด๋ฆฌ๋จ</td> </tr> <tr> <td>๋ผ์ฐํ
์ฃผ์ฒด</td> <td>์๋ฒ</td> <td>์์ฒญํ๋ ์๋น์ค</td> </tr> <tr> <td>๋ผ์ฐํ
๊ตฌ์ฑ์์</td> <td>๋ณ๋์ ๋คํฐ์ํฌ๋ฅผ ๋์
ํ๋ ๋
๋ฆฝ์ ์ธ API gateway ๊ตฌ์ฑ ์์</td> <td>์๋น์ค ๋ด sidecar๋ก Local network ์คํ์ ์ผ๋ถ๊ฐ ๋จ</td> </tr> <tr> <td>๋ก๋ ๋ฐธ๋ฐ์ฑ</td> <td>- ๋จ์ผ ์๋ํฌ์ธํธ๋ฅผ ์ ๊ณต<br>- API Gateway ๋ด ๋ก๋๋ฐธ๋ฐ์ฑ์ ๋ด๋นํ๋ ๊ตฌ์ฑ์์์ ์์ฒญ์ redirectionํ์ฌ ํด๋น ๊ตฌ์ฑ ์์๊ฐ ์ฒ๋ฆฌํจ</td> <td>- Service Registry์์ ์๋น์ค ๋ชฉ๋ก์ ์์ ํจ<br>- sidecar์์ ๋ก๋๋ฐธ๋ฐ์ฑ ์๊ณ ๋ฆฌ์ฆ์ ํตํด ์ํํจ</td> </tr> <tr> <td>๋คํธ์ํฌ</td> <td>์ธ๋ถ ์ธํฐ๋ท๊ณผ ๋ด๋ถ ์๋น์ค ๋คํธ์ํฌ ์ฌ์ด</td> <td>- ๋ด๋ถ ์๋น์ค ๋คํธ์ํฌ ์ฌ์ด <br> - ์์ฉ ํ๋ก๊ทธ๋จ์ ๋คํธ์ํฌ ๊ฒฝ๊ณ ๋ด์์๋ง ํต์ ์ด ๊ฐ๋ฅํ๊ฒ ํจ</td> </tr> <tr> <td>๋ถ์</td> <td>API์ ๋ํ ์ฌ์ฉ์ ๋ฐ ๊ณต๊ธ์์ ๋ํ ๋ชจ๋ ํธ์ถ์ ๋ํด ์์ง๋๊ณ ๋ถ์</td> <td>Mesh ๋ด ๋ชจ๋ ๋ง์ดํฌ๋ก์๋น์ค ๊ตฌ์ฑ์์์ ๋ํด ๋ถ์</td> </tr></tbody></table><p><br><br></p><h2 id="Service-Mesh์-์ข
๋ฅ"><a href="#Service-Mesh์-์ข
๋ฅ" class="headerlink" title="Service Mesh์ ์ข
๋ฅ"></a>Service Mesh์ ์ข
๋ฅ</h2><hr><p><img src="3.png"></p><h4 id="PaaS-Platform-as-a-Service-์-์ผ๋ถ๋ก-์๋น์ค-์ฝ๋์-ํฌํจ๋๋-์ ํ"><a href="#PaaS-Platform-as-a-Service-์-์ผ๋ถ๋ก-์๋น์ค-์ฝ๋์-ํฌํจ๋๋-์ ํ" class="headerlink" title="PaaS (Platform as a Service)์ ์ผ๋ถ๋ก ์๋น์ค ์ฝ๋์ ํฌํจ๋๋ ์ ํ"></a>PaaS (Platform as a Service)์ ์ผ๋ถ๋ก ์๋น์ค ์ฝ๋์ ํฌํจ๋๋ ์ ํ</h4><ul><li>Microsoft Azure Service fabric, lagom, SENECA</li><li>ํ๋ ์์ํฌ ๊ธฐ๋ฐ์ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ -> service mesh๋ฅผ ๊ตฌํํ๋๋ฐ ํนํํ ์ฝ๋๊ฐ ํ์ํจ(Mesh-native Code)</li></ul><h4 id="๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก-๊ตฌํ๋์ด-API-ํธ์ถ์-ํตํด-Service-mesh์-๊ฒฐํฉ๋๋-์ ํ"><a href="#๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก-๊ตฌํ๋์ด-API-ํธ์ถ์-ํตํด-Service-mesh์-๊ฒฐํฉ๋๋-์ ํ" class="headerlink" title="๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๊ตฌํ๋์ด API ํธ์ถ์ ํตํด Service mesh์ ๊ฒฐํฉ๋๋ ์ ํ"></a>๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๊ตฌํ๋์ด API ํธ์ถ์ ํตํด Service mesh์ ๊ฒฐํฉ๋๋ ์ ํ</h4><ul><li>Spring Cloud, Netflix OSS(Ribon/Hystrix/Eureka/Archaius), finagle</li><li>ํ๋ ์์ํฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉ<ul><li>Netflix์ Prana๋ sidecar ํํ๋ก ๋์ํจ</li></ul></li><li>Service mesh๋ฅผ ์ดํดํ๊ณ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํจ (Mesh Aware Code)</li></ul><h4 id="Sidecar-proxy๋ฅผ-์ด์ฉํ์ฌ-Service-mesh๋ฅผ-๋ง์ดํฌ๋ก์๋น์ค์-์ฃผ์
ํ๋-์ ํ"><a href="#Sidecar-proxy๋ฅผ-์ด์ฉํ์ฌ-Service-mesh๋ฅผ-๋ง์ดํฌ๋ก์๋น์ค์-์ฃผ์
ํ๋-์ ํ" class="headerlink" title="Sidecar proxy๋ฅผ ์ด์ฉํ์ฌ Service mesh๋ฅผ ๋ง์ดํฌ๋ก์๋น์ค์ ์ฃผ์
ํ๋ ์ ํ"></a>Sidecar proxy๋ฅผ ์ด์ฉํ์ฌ Service mesh๋ฅผ ๋ง์ดํฌ๋ก์๋น์ค์ ์ฃผ์
ํ๋ ์ ํ</h4><ul><li>Istio/Envoy, Consul, Linkerd</li><li>sidecar proxy ํํ๋ก ๋์</li><li>service mesh์ ๋ฌด๊ดํ๊ฒ ์ฝ๋ ์์ฑ<blockquote><p><b>sidecar pattern</b><br><img src="4.png"></p><ul><li>์ปจํ
์ด๋ ๋ฐฐํฌ๋ฐฉ์์ ๊ฒฝ์ฐ ๋ชจ๋ ์์ฉ ํ๋ก๊ทธ๋จ ์ปจํ
์ด๋์ ์ถ๊ฐ๋ก sidecar ์ปจํ
์ด๋๊ฐ ๋ฐฐํฌ๋จ</li><li>์๋น์ค์ ๋ค์ด์ค๊ฑฐ๋ ๋๊ฐ๋ ๋ชจ๋ ๋คํธ์ํฌ ํธ๋ํฝ์ ์ฒ๋ฆฌ </li><li>๋น์ฆ๋์ค ๋ก์ง์ด ํฌํจ๋ ์ค์ ์๋น์ค์ sidecar๊ฐ ๋ณ๋ ฌ๋ก ๊ตฌ์ฑ๋จ = ์๋น์ค ํธ์ถ์์ proxy๋ฅผ ํตํด ํธ์ถ(์๋น์ค๊ฐ ์ง์ ์๋น์ค ํธ์ถx)</li><li>๋๊ท๋ชจ ๋ง์ดํฌ๋ก์๋น์ค ํ๊ฒฝ์ด์ฌ๋ ๊ฐ๋ฐ์๊ฐ ๋ณ๋์ ์์
์์ด ์๋น์ค์ ์ฐ๊ฒฐ, ๋ก๊น
, ๋ชจ๋ํฐ๋ง, ๋ณด์, ํธ๋ํฝ ์ ์ด๋ฅผ ํ ์ ์์</li><li>์ต๊ทผ Service Mesh์์ Sidecar pattern ์ ํ์ ๋ง์ด ์ฌ์ฉํ๋ ์ถ์ธ</li></ul></blockquote></li></ul><p><br><br></p><h2 id="Service-Mesh์-์ฃผ์-๊ธฐ๋ฅ"><a href="#Service-Mesh์-์ฃผ์-๊ธฐ๋ฅ" class="headerlink" title="Service Mesh์ ์ฃผ์ ๊ธฐ๋ฅ"></a>Service Mesh์ ์ฃผ์ ๊ธฐ๋ฅ</h2><hr><p>์ผ๋ฐ์ ์ผ๋ก Istio๋ consul, Linkerd์ ๊ฐ์ Service Mesh ํ๋ ์์ํฌ๋ค์์ ๊ธฐ๋ฅ ์ง์</p><ul><li>Service Discovery</li><li>Load balancing (์ง์ฐ์๊ฐ ๊ธฐ๋ฐ / ๋๊ธฐ์ด ๊ธฐ๋ฐ)</li><li>Dynamic Request Routing</li><li>Circuit Breaking</li><li>์ํธํ (TLS)</li><li>๋ณด์</li><li>Health check, Retry and Timeout</li><li>Metric ์์ง</li></ul>]]></content>
<categories>
<category> ๐ง Architecture </category>
</categories>
<tags>
<tag> MSA </tag>
<tag> Architecture </tag>
<tag> API </tag>
<tag> ESB </tag>
<tag> Sidecar </tag>
</tags>
</entry>
<entry>
<title>[MSA] Micro Service Architecture: Outer - External Gateway</title>
<link href="/2022/04/28/Architecture/MSA-outer-gateway/"/>
<url>/2022/04/28/Architecture/MSA-outer-gateway/</url>
<content type="html"><![CDATA[<p>MSA์ Outer Architecture ์ค External Gateway์ ๋ํด ์์๋ณด์.</p><p><br><br></p><h2 id="MSA-๊ฐ๋
-์ค๋ช
-์ฝ์ด๋ณด๊ธฐ"><a href="#MSA-๊ฐ๋
-์ค๋ช
-์ฝ์ด๋ณด๊ธฐ" class="headerlink" title="MSA ๊ฐ๋
์ค๋ช
์ฝ์ด๋ณด๊ธฐ"></a>MSA ๊ฐ๋
์ค๋ช
์ฝ์ด๋ณด๊ธฐ</h2><hr><ul><li><a href="https://ruby-kim.github.io/2022/04/26/Architecture/MSA-Intro/">[MSA] Micro Service Architecture ๊ฐ์</a></li></ul><p><br><br></p><h2 id="External-Gateway"><a href="#External-Gateway" class="headerlink" title="External Gateway"></a>External Gateway</h2><hr><p><img src="1.png"></p><ul><li>์ ์ฒด ์๋น์ค ์ธ๋ถ๋ก๋ถํฐ ๋ค์ด์ค๋ ์ ๊ทผ์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋๋ฌ๋ด์ง ์๊ณ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์์</li><li>์ฌ์ฉ์ ์ธ์ฆ (Consumer Identity Provider)๊ณผ ๊ถํ ์ ์ฑ
๊ด๋ฆฌ(Policy Management)๋ฅผ ์ํ</li><li><code>API Gateway</code>๊ฐ ๊ฐ์ฅ ํต์ฌ์ ์ธ ์ญํ </li></ul><p><br><br></p><h2 id="API-Gateway"><a href="#API-Gateway" class="headerlink" title="API Gateway"></a>API Gateway</h2><hr><ul><li>์๋ฒ ์ต์๋จ์ ์์นํ์ฌ ๋ชจ๋ API ํธ์ถ์ ๋ฐ์ (API ์๋ฒ๋ค์ endpoint ๋จ์ผํ๋ฅผ ํด์ฃผ๋ ๋๋ค๋ฅธ ์๋ฒ)</li><li>API์ ๋ํ ์ธ์ฆ๊ณผ ์ธ๊ฐ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์์: ๋ฐ์ API ํธ์ถ์ ์ธ์ฆํ ํ, ์ ์ ํ ์๋น์ค๋ค์ ๋ฉ์ธ์ง๋ฅผ ์ ๋ฌ(routing)</li><li>SOA์ ํต์ฌ ์ธํ๋ผ์ธ <code>ESB</code>(Enterprise Service Bus)์์ ๋น๋กฏ๋จ<ul><li>EBS๋ SOAP/XML ๊ธฐ๋ฐ์ ๋ฌด๊ฑฐ์ด ๊ธฐ๋ฅ</li><li>API Gateway๋ REST/JSON ๊ธฐ๋ฐ์ ๊ฐ๋ฒผ์ด ๊ธฐ๋ฅ</li></ul></li></ul><p><br><br></p><h2 id="API-Gateway์-์ฃผ์-๊ธฐ๋ฅ"><a href="#API-Gateway์-์ฃผ์-๊ธฐ๋ฅ" class="headerlink" title="API Gateway์ ์ฃผ์ ๊ธฐ๋ฅ"></a>API Gateway์ ์ฃผ์ ๊ธฐ๋ฅ</h2><hr><ol><li><strong>์ธ์ฆ ๋ฐ ์ธ๊ฐ</strong> (Authentication and Authorization)<ul><li>MSA์์ ๊ฐ๊ฐ์ ์๋น์ค์ APIํธ์ถ์ ๋ํ ์ธ์ฆ ๋ฐ ์ธ๊ฐ๋ฅผ ํ๋ค๋ ๊ฒ = ๊ฐ์ ์์ค์ฝ๋๋ฅผ ์๋น์ค ์ธ์คํด์ค๋ค๋ง๋ค ์ฌ์ด์ค์ผ ํจ = ์์ค์ ์ค๋ณต์ด ์ฌํ์ฌ ์ ์ง ๊ด๋ฆฌ๊ฐ ์ด๋ ต๊ณ , ๋ก๊น
๋ชจ๋ํฐ๋ง์ ๊ด๋ฆฌํ๋ ๊ฒ๋ ๋งค์ฐ ์ด๋ ค์์ง</li><li>๋ฐ๋ผ์ ์ธ์ฆ์ ๊ด๋ฆฌ๋ ์ธ์ฆ, SSL, ํ๋กํ ์ฝ ๋ณํํ ๊ฐ์ ๊ธฐ๋ฅ๋ค์ API Gateway์์ ์คํ๋ก๋ -> ๊ฐ๊ฐ์ ์๋น์ค ๋ถ๋ด ์ค์ด๊ธฐ ๋ฐ ์๋น์ค ๊ด๋ฆฌ, ์
๊ทธ๋ ์ด๋๊ฐ ์ฉ์ดํจ<blockquote><p>Authentication (์ธ์ฆ) vs Authorization (์ธ๊ฐ)</p><ul><li>Authentication: ์ ์ ๊ฐ ๋๊ตฌ์ธ์ง ํ์ธํ๋ ์ ์ฐจ </li><li>Authorizatoin: ์ด๋ ํ ์ ์ ๊ฐ ํน์ ์์์ ์ ๊ทผํ๋ ค ํ ๋, ๊ทธ์ ๋ํ ์ ๊ทผ ๊ถํ์ด ์๋์ง ํ์ธํ๋ ์ ์ฐจ</li></ul></blockquote></li></ul></li><li><strong>์์ฒญ ์ ์ฐจ์ ๋จ์ํ</strong><ul><li>API Gateway๊ฐ ์์ ์ ํด๋ผ์ด์ธํธ์ ์ฌ๋ฌ ์๋น์ค๋ค์ ๋ํ ์์ฒญ์ ์งํํด์ผ ํจ</li><li>API Gateway๋ ์ฌ๋ฌ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋จ์ผ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ผ๋ก ๋์ฒด ๊ฐ๋ฅํ๋๋ก ๋ง๋ค์ด์ค</li><li>๋ฐ๋ผ์ ํด๋ผ์ด์ธํธ์ ๋ฐฑ์๋ ๊ฐ APU ํต์ ๋์ด ์ค์ด ๋๊ธฐ์๊ฐ์ด ์ค์ด์ค์ด๊ณ ํจ์จ์ฑ์ ๋์ผ ์ ์์</li></ul></li><li><strong>๋ผ์ฐํ
๋ฐ ๋ก๋๋ฐธ๋ฐ์ฑ</strong><ul><li>ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์ ์๋ ๋ฉ์์ง์ ๋ฐ๋ผ, API ํธ์ถ์ ์ ์ ํ ์๋น์ค์ ๋ผ์ฐํ
</li><li>์๋น์ค ์ธ์คํด์ค๋ค์ ๋ํ ๋ถํ๋ถ์ฐ ๊ฐ๋ฅ</li></ul></li><li><strong>์๋น์ค ์ค์ผ์คํธ๋ ์ด์
</strong><ul><li><code>์ค์ผ์คํธ๋ ์ด์
</code>: ์ฌ๋ฌ ๊ฐ์ ๋ง์ดํฌ๋ก ์๋น์ค๋ฅผ ๋ฌถ์ด ์๋ก์ฐ ์๋น์ค๋ฅผ ๋ง๋๋ ๊ฐ๋
</li><li>๊ณผ๋ํ ์ค์ผ์คํธ๋ ์ด์
๋ก์ง: APU Gateway์ ๋ถ๋ด์ ๋๋ฆฌ๋ ๊ฒ = ์ฑ๋ฅ ์ ํ</li></ul></li><li><strong>์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ</strong><ul><li>API Gateway๋ ๊ฐ ์๋น์ค ํธ์ถ์ ์ํด ์๋น์ค๋ง๋ค IP์ฃผ์ ๋ฐ ํฌํธ๋ฒํธ๋ฅผ ์๊ณ ์์ด์ผ ํจ</li><li>lagacy ํ๊ฒฝ์์๋ ํฌ๊ฒ ๋ฌธ์ ๋ ์ ์ด ์์ง๋ง, ํด๋ผ์ฐ๋ ํ๊ฒฝ์์๋ <code>๋์ </code>์ผ๋ก ๋ฐฐํฌ๋๊ธฐ ๋๋ฌธ์ ์๋น์ค ์์น๋ฅผ ์ฐพ๋ ๊ฒ์ด ์ด๋ ค์<ul><li>์ด๋ฌํ ์๋น์ค์ ์์น๋ฅผ ์ฐพ๋ ๊ฒ์ <code>Service Discory</code></li></ul></li><li>์๋ฒ ์ฌ์ด๋๋ ํด๋ผ์ด์ธํธ ์ฌ์ด๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ ๊ตฌํ ๊ฐ๋ฅ</li></ul></li></ol><p><br><br></p><h2 id="API-Gateway-์ ์ฉ-์-๊ณ ๋ ค์ฌํญ"><a href="#API-Gateway-์ ์ฉ-์-๊ณ ๋ ค์ฌํญ" class="headerlink" title="API Gateway ์ ์ฉ ์ ๊ณ ๋ ค์ฌํญ"></a>API Gateway ์ ์ฉ ์ ๊ณ ๋ ค์ฌํญ</h2><hr><ul><li><p>API Gateway ๊ณ์ธต์ด ์ถ๊ฐ์ ์ผ๋ก ๋ง๋ค์ด์ง๋ค๋ ์๋ฏธ = ๊ทธ ๋งํผ ๋คํธ์ํฌ latency ์ฆ๊ฐ</p></li><li><p>API Gateway์ Scale-out ์ ์ฉ์ด ์ ์ฐํ๊ฒ ์ผ์ด๋์ง ์์ ๊ฒฝ์ฐ, API Gateway๊ฐ ๋ณ๋ชฉ์ง์ ์ด ๋์ด ์ดํ๋ฆฌ์ผ์ด์
์ ์ฑ๋ฅ์ ํ๊ฐ ์ผ์ด๋ ์ ์์</p></li><li><p>API Gateway์ ๊ฐ์ฅ ํฐ ๋จ์ ์ <code>API Gateway๋ฅผ ๋ด๋ถ ๋ง์ดํฌ๋ก์๋น์ค์ ๊ฒฐํฉํ๋ค๋ ๊ฒ</code><br>-> ๊ธฐ์กด SOA์์์ EBS(Enterprise Service Bus)์์ ๋ฐ์ํ๋ ๋ฌธ์ ์ ์ด ๋ค์ ๋ฐ์ํ ์ ์์</p><blockquote><p>2000๋
๋ ํ๋ฐ, ๋ง์ SOA ํ๋ก์ ํธ๊ฐ ์คํจํ ์ด์ ๋ก SOA์ ํต์ฌ์ ์ธ ์์ ์ค ํ๋์ธ ESB๊ฐ ๊ผฝํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์.</p><ul><li>๋น์ EBS ๋ด๋ถ ์ฒ๋ฆฌ ๋ก์ง์ XML ๊ธฐ๋ฐ์ผ๋ก ํ๋๋ฐ, XML์ ํ์ฑ์ ์ค๋ฒํค๋๊ฐ ํฐ ์์
</li><li>EBS๋ ๊ฐ๋ฒผ์ด ์ฐ์ฐ ์ธ์๋ ๊ณผ๋ํ Orchestration ๋ฑ ๋ฌด๊ฑฐ์ด ๋ก์ง์ ๊ฐ์ง. ๋๋ถ๋ถ ESB๋ฅผ Gateway๋ก์ ํน์ฑ์ด ์๋ ์์คํ
์ ํตํฉํ๊ธฐ ์ํ ์ญํ ๋ก ๋ง์ด ๊ตฌํํ์</li></ul></blockquote></li></ul>]]></content>
<categories>
<category> ๐ง Architecture </category>
</categories>
<tags>
<tag> MSA </tag>
<tag> Architecture </tag>
<tag> API </tag>
<tag> ESB </tag>
</tags>
</entry>
<entry>
<title>[MSA] Micro Service Architecture ๊ฐ์</title>
<link href="/2022/04/26/Architecture/MSA-Intro/"/>
<url>/2022/04/26/Architecture/MSA-Intro/</url>
<content type="html"><![CDATA[<p>์์ฆ ํซ์ด์๋ก ๊ฐ๋ฐ์๋ผ๋ฉด ๋ฌด์กฐ๊ฑด ์์์ผ ํ ๊ฐ๋
์ธ MSA์ ์ ์ด๋ณด๊ณ ์ ํ๋ค.</p><h2 id="MSA์-๋ฑ์ฅ๋ฐฐ๊ฒฝ-๋ชจ๋๋ฆฌ์-์ํคํ
์ฒ-Monolithic-Architecture"><a href="#MSA์-๋ฑ์ฅ๋ฐฐ๊ฒฝ-๋ชจ๋๋ฆฌ์-์ํคํ
์ฒ-Monolithic-Architecture" class="headerlink" title="MSA์ ๋ฑ์ฅ๋ฐฐ๊ฒฝ: ๋ชจ๋๋ฆฌ์ ์ํคํ
์ฒ (Monolithic Architecture)"></a>MSA์ ๋ฑ์ฅ๋ฐฐ๊ฒฝ: ๋ชจ๋๋ฆฌ์ ์ํคํ
์ฒ (Monolithic Architecture)</h2><hr><p><img src="1.png"></p><ul><li>์ํํธ์จ์ด์ ๋ชจ๋ ๊ตฌ์ฑ ์์๊ฐ ํ ํ๋ก์ ํธ์ ํตํฉ๋์ด์๋ ํํ<ul><li>์ฝ๊ฒ ํ๊ต์์ ํ๋ก์ ํธํ ๋๋ฅผ ์๊ฐํ๋ฉด ๋จ<ul><li>์๊ท๋ชจ ํ๋ก์ ํธ์์ ํฉ๋ฆฌ์ : ๊ฐ๋จํ architecture, ์ฉ์ดํ ์ ์ง๋ณด์</li></ul></li></ul></li><li>์๋ฐฑ๋ช
์ ๊ฐ๋ฐ์๊ฐ ํฌ์
๋๋ ํ๋ก์ ํธ๊ฐ์, <strong>์ผ์ ๊ท๋ชจ ์ด์์ ์๋น์ค</strong>๋ฅผ ์ด์ํ ๋ ํ๊ณ๊ฐ ์์<ul><li>์๋น์ค, ํ๋ก์ ํธ๊ฐ ์ปค์ง๋ฉด ์ปค์ง์๋ก ์ํฅ๋ ํ์
๋ฐ ์ ์ฒด ์์คํ
๊ตฌ์กฐ ํ์
์ ์ด๋ ค์์ด ์์</li><li>๋น๋ ์๊ฐ ๋ฐ ํ
์คํธ ์๊ฐ, ๋ฐฐํฌ ์๊ฐ์ด ๊ธฐํ๊ธ์์ ์ผ๋ก ๋์ด๋จ</li><li>์๋น์ค๋ฅผ ๋ถ๋ถ์ ์ผ๋ก scale-outํ๊ธฐ ํ๋ฆ</li><li>๋ถ๋ถ์ ์ฅ์ ๊ฐ ์ ์ฒด ์๋น์ค์ ์ฅ์ ๋ก ์ด์ด์ง ์ ์์</li></ul></li></ul><p><br><br></p><h2 id="Micro-Service-๋ป"><a href="#Micro-Service-๋ป" class="headerlink" title="Micro Service ๋ป"></a>Micro Service ๋ป</h2><hr><p><img src="2.png"></p><blockquote><p>โthe microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery.โ</p></blockquote><p>์ถ์ฒ: <a href="https://martinfowler.com/articles/microservices.html">https://martinfowler.com/articles/microservices.html</a></p><ul><li><strong>small services, each running in its own process</strong>: ์ค์ค๋ก ๋์๊ฐ ์ ์๋ ์์ ์๋น์ค</li><li><strong>independently deployable</strong>: ๋
๋ฆฝ์ ๋ฐฐํฌ ๊ฐ๋ฅ</li><li>๊ฐ๊ฐ์ ์๋น์ค๋<ul><li>๋งค์ฐ ์์ ๋จ์๋ก ๊ตฌ์ฑ๋์ด ์์ง๋ง ์๋น์ค ์์ฒด๋ ํ๋์ MA(๋ชจ๋๋ฆฌํฑ ์ํคํ
์ฒ)์ ์ ์ฌ ๊ตฌ์กฐ๋ฅผ ์ง๋</li><li>๋
๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌ ๊ฐ๋ฅ</li><li>๋ค๋ฅธ ์๋น์ค์ ๋ํ ์์กด์ฑ์ด ์ต์ํ ๋์ด์ผ ํจ</li><li>๊ฐ๋ณ ํ๋ก์ธ์ค๋ก ๊ตฌ๋๋๋ฉฐ, REST์ ๊ฐ์ ๊ฐ๋ฒผ์ด ๋ฐฉ์์ผ๋ก ํต์ ๋์ด์ผ ํจ</li></ul></li></ul><p><br><br></p><h2 id="MSA์-์ฅ์ "><a href="#MSA์-์ฅ์ " class="headerlink" title="MSA์ ์ฅ์ "></a>MSA์ ์ฅ์ </h2><hr><ul><li>๋ฐฐํฌ(Deployment) ๊ด์ : ์๋น์ค ๋ณ ๊ฐ๋ณ ๋ฐฐํฌ ๊ฐ๋ฅ (๋ฐฐํฌ ์ ์ ์ฒด ์๋น์ค ์ค๋จ์ด ์์) -> ์๊ตฌ์ฌํญ์ ์ ์ํ๊ฒ ๋ฐ์ํ์ฌ ๋น ๋ฅด๊ฒ ๋ฐฐํฌํ ์ ์์</li><li>ํ์ฅ(Scaling) ๊ด์ : ํน์ ์๋น์ค์ ๋ํ ํ์ฅ์ฑ์ด ์ฉ์ด -> ํด๋ผ์ฐ๋ ์ฌ์ฉ์ ์ ํฉํ ์ํคํ
์ฒ</li><li>์ฅ์ (Failure) ๊ด์ : ์ฅ์ ๊ฐ ์ ์ฒด ์๋น์ค๋ก ํ์ฅ๋ ๊ฐ๋ฅ์ฑ์ด ์ ์ -> ๋ถ๋ถ์ ์ฅ์ ์ ๋ํ ๊ฒฉ๋ฆฌ๊ฐ ์์ํจ</li><li>์ ๊ธฐ์ ์ ์ ์ฉ์ด ์ ์ฐํ๋ฉฐ, ์๋น์ค๋ฅผ polyglotํ๊ฒ ๊ฐ๋ฐ/์ด์ํ ์ ์์</li></ul><p><br><br></p><h2 id="MSA์-๋จ์ "><a href="#MSA์-๋จ์ " class="headerlink" title="MSA์ ๋จ์ "></a>MSA์ ๋จ์ </h2><hr><ul><li>Monolithic Architecture๋ณด๋ค ๋ณต์กํ ์ํคํ
์ฒ -> ์ ์ฒด ์๋น์ค๊ฐ ์ปค์ง์๋ก ๊ทธ ๋ณต์ก๋๋ ๊ธฐํ๊ธ์์ ์ผ๋ก ๋์ด๋จ</li><li>์ฑ๋ฅ: ์๋น์ค ๊ฐ ํธ์ถ ์ API๋ฅผ ์ฌ์ฉํจ -> ํต์ ๋น์ฉ ๋ฐ latency(์ง์ฐ ์๊ฐ)์ด ๊ทธ๋งํผ ๋์ด๋จ</li><li>ํ
์คํธ/ํธ๋์ญ์
: ์๋น์ค๊ฐ ๋ถ๋ฆฌ๋์ด ์์ -> ํ
์คํธ์ ํธ๋์ญ์
๋ณต์ก๋ ์ฆ๊ฐ, ๋ง์ ์์์ ์๊ตฌ</li><li>๋ฐ์ดํฐ ๊ด๋ฆฌ: ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฌ ์๋น์ค์ ๊ฑธ์ณ ๋ถ์ฐ๋๊ธฐ ๋๋ฌธ์ ํ ๋ฒ์ ์กฐํํ๊ธฐ ์ด๋ ต๊ณ , ๋ฐ์ดํฐ์ ์ ํฉ์ฑ ๋ํ ๊ด๋ฆฌ๊ฐ ํ๋ฆ</li></ul><p><br><br></p><h2 id="MSA-๊ตฌ์กฐ"><a href="#MSA-๊ตฌ์กฐ" class="headerlink" title="MSA ๊ตฌ์กฐ"></a>MSA ๊ตฌ์กฐ</h2><hr><p><img src="3.png"></p><ol><li><strong>Inner Architecture</strong> (๋จ์ ๋ถ๋ถ): ๋ด๋ถ ์๋น์ค์ ๊ด๋ จ๋ ์ํคํ
์ฒ<ul><li>๊ณ ๋ ค์ฌํญ<ul><li>๋ง์ดํฌ๋ก ์๋น์ค๋ฅผ ์ด๋ป๊ฒ ์ ์ํ ๊ฒ์ธ๊ฐ?</li><li>DB Access ๊ตฌ์กฐ๋ฅผ ์ด๋ป๊ฒ ์ค๊ณํ ๊ฒ์ธ๊ฐ?</li><li>๋ง์ดํฌ๋ก ์๋น์ค ๋ด api๋ฅผ ์ด๋ป๊ฒ ์ค๊ณํ ๊ฒ์ธ๊ฐ?</li><li>๋
ผ๋ฆฌ์ ์ธ ์ปดํฌ๋ํธ๋ค์ layer๋ฅผ ์ด๋ ํ ๋ฐฉ์์ผ๋ก ์ค๊ณํ ๊ฒ์ธ๊ฐ?</li></ul></li><li>ํ์ค์ด ์์ด MSA๋ฅผ ์ค๊ณํ๋๋ฐ ๊ฐ์ฅ ์ด๋ ค์ด ๋ถ๋ถ</li></ul></li><li><strong>Outer Architecture</strong> (ํ์ ๋ถ๋ถ)<ul><li><a href="https://ruby-kim.github.io/2022/04/28/Architecture/MSA-outer-gateway/">External Gateway</a></li><li><a href="https://ruby-kim.github.io/2022/04/30/Architecture/MSA-outer-service-mesh/">Service Mesh</a></li><li>Container Management</li><li>Backing Services</li><li>Telemetry</li><li>CI/CD Automation</li></ul></li></ol>]]></content>
<categories>
<category> ๐ง Architecture </category>
</categories>
<tags>
<tag> MSA </tag>
<tag> Architecture </tag>
</tags>
</entry>
<entry>
<title>[ํ๊ธฐ] ์คํํธ์
/์ค์๊ธฐ์
/๋๊ธฐ์
์ธํด ๋ฐ ์ ๊ท์ง ์ค๋น ๊ณผ์ </title>
<link href="/2022/04/23/Retrospect/Junior/"/>
<url>/2022/04/23/Retrospect/Junior/</url>
<content type="html"><![CDATA[<h2 id="1-๐ฉ๐ปโ๐ป-๋ด๊ฐ-๊ฐ๋ฐ์โฆ"><a href="#1-๐ฉ๐ปโ๐ป-๋ด๊ฐ-๊ฐ๋ฐ์โฆ" class="headerlink" title="1. ๐ฉ๐ปโ๐ป ๋ด๊ฐ ๊ฐ๋ฐ์โฆ?"></a>1. ๐ฉ๐ปโ๐ป ๋ด๊ฐ ๊ฐ๋ฐ์โฆ?</h2><p>๋์
์ค๋น๋ฅผ ํ๋ฉด์๋ ์ปดํจํฐ๋ ๋จ 1๋ ์๊ฐํ์ง ์์์ง๋ง ํ์ค๋ถ์ ์ ํ๊ธฐ์ ์ด๋ฏธ ๋ํ๊ต ๋ฑ๋ก๊น์ง ๋ง์ณ๋ฒ๋ ธ๋ค.<br>๊ฒฐ๋ก ์ ์ผ๋ก ์ํํธ์จ์ดํ๊ณผ์ ์
ํํ์ผ๋ ํ ๋ฒ ํด๋ณด์๋ฉฐ ๋์ ํ๋๋ฐ ๊ธ์, ๋ค๋ค ํ ๋ฒ์ ํฉ๊ฒฉํ๋ ํ๊ต c์ธ์ด ์ธ์ฆ์ํ์ 2๋ฒ์ด๋ ๋๋ฐฉํ๋ค.</p><p>์ด ๋ ์ปดํจํฐ์ ๋ํ ์ฌ๋ฅ์ด ๊ทธ๋ ๊ฒ ๋ฐ์ด๋์ง ์์๊ฑธ ๊นจ๋ฌ์ ๋ค๋ฅธ ๊ธธ์ ์ฐพ์ผ๋ ค ํ์ง๋ง ๋ฐ๋ ๊ตฌ๋ฉ๋ณด๋ค ๋ ์ข์, ์ทจ์
์ด ํ๋ ์ด ์๊ตญ์ ๋ด๊ฐ ๋ฐฐ์ด๊ฑฐ๋ผ๊ณค ์ปดํจํฐ๋ฐ์ ์์ด ๊ฒฐ๊ตญ ๊ฐ๋ฐ์์ ๊ธธ์ ๋ฐ๊ฐ์ ์ ์ผ๋ก ์ ํํ๊ฒ ๋๋ค.<br><code>๊ฐ๋ฐ์๋ก ์ทจ์งํ๋ค</code>๋ผ๊ณ ๋ด ์์ ์ ๋ฉ๋์ํค๊ณ ์ธ์ ํ๋๋ก ๋ง๋๋๊ฒ ๊ฐ์ฅ ์ด๋ ค์ ๋ ๊ฒ ๊ฐ๋ค.</p><p><br><br></p><h2 id="2-๐ฏ-์ธ๋ถ-์ง๋ก-์ ํ-์คํ-์๊ธฐ-x3D-๋์ธํ๋"><a href="#2-๐ฏ-์ธ๋ถ-์ง๋ก-์ ํ-์คํ-์๊ธฐ-x3D-๋์ธํ๋" class="headerlink" title="2. ๐ฏ ์ธ๋ถ ์ง๋ก ์ ํ + ์คํ ์๊ธฐ = ๋์ธํ๋"></a>2. ๐ฏ ์ธ๋ถ ์ง๋ก ์ ํ + ์คํ ์๊ธฐ = ๋์ธํ๋</h2><p>๊ฐ๋ฐ์๋ก ๋ชฉํ๋ฅผ ์ก์์ผ๋ ํ์คํ, ์๋๋ก์ด๋, ๋ฐ์ดํฐ์ฌ์ด์ธ์ค ๋ฑ ์ธ๋ถ ์ง๋ก๋ฅผ ์ก์์ผ ํ๋๋ฐ ์ปดํจํฐ ๋ถ์ผ๊ฐ ๋๋ฌด ๋์ด ๋์ ํ ์ ํ์ ํ ์ ์์๋ค.<br>๊ทธ๋๋ง ์ฌ๋ฅ ์๋ ๋ถ์ผ๋ก ๊ฐ์ผํ ๊ฒ ๊ฐ์๋ฐ ๋ฐฐ์ธ ๋ด์ฉ์ด ๋๋ฌด๋๋ ๋ง์๊ณ , ๊ฐ๋ฉ์ด๋ ๋จธ๋ฆฌ๋ ์ข์ ํธ์ด ์๋๋ฐ ์๋ฅด๋ฐ์ดํธ + ํ๊ต(21ํ์ ) ๋ณํ์ผ๋ก ์จ์ ํ ํ์ต์ ์ง์คํ๊ธฐ ์ด๋ ค์ด ํ๊ฒฝ์ด์๋ค.<br>๊ทธ๋์ ํจ์จ์ ์ธ ํ์ต๋ฐฉ์์ ๊ณ ์ํ๋๋ฐ ๊ทธ๊ฒ ๋ฐ๋ก <code>๋์ธํ๋</code>์ด์๋ค.</p><h4 id="์-๋์ธํ๋"><a href="#์-๋์ธํ๋" class="headerlink" title="์ ๋์ธํ๋?"></a>์ ๋์ธํ๋?</h4><p>๋ ์๋ ํ์ ์
์ฅ์์ ๋ฌด์ธ๊ฐ๋ฅผ ๋ฌด๋ฃ๋ก ๋ฐฐ์ธ ์ ์๋ค๋ ๊ฒ, ๊ฐ๋์ ํ๋๋น๋ ์ค๋ค๋๊ฒ ๋งค์ฐ ๊ธ์ ์ ์ผ๋ก ๋ณด์๋ค.<br>๊ทธ๋ฆฌ๊ณ ๋ํ์์ด ๋์์ผ๋ ๊ทธ ๋๋ง ๋ฐ์ ์ ์๋ ํํ ์ต๋ํ ๋ค ๋ฐ์๋ด์ผ ํ์ง ์๊ฒ ๋๊ฐ ์ถ์๋ค.</p><h4 id="๋์ธํ๋-์ข
๋ฅ"><a href="#๋์ธํ๋-์ข
๋ฅ" class="headerlink" title="๋์ธํ๋ ์ข
๋ฅ"></a>๋์ธํ๋ ์ข
๋ฅ</h4><ul><li>์ ์ฃผ์ฝ๋ฉ๋ฒ ์ด์ค์บ ํ 10๊ธฐ (2019๋
์๋ฐ๊ธฐ) <a href="https://blog.naver.com/dev_rubykim/222449187535">์ฑ
1</a> <a href="https://blog.naver.com/dev_rubykim/222449183632">์ฑ
2</a><br>3๋
์ ํ๋ฒ ๋ค์ด๊ฐ๊น ๋ง๊นํ๋ ํ์ด์ค๋ถ ๊ณ์ ์ด ์๋๋ฐ, ๊ฐ์๊ธฐ ์๊ฐ๋ ์ ์ ๋ค์ด๊ฐ๋๋ ์น๊ตฌ ํ ๋ช
์ด ์ ์ฃผ์ฝ๋ฉ๋ฒ ์ด์ค์บ ํ์ ์ข์์ ํ์๋ฅผ ๋จ๊ธด๊ฒ ํผ๋์ ๋จ๋ฉด์ ์์ฐ์ค๋ ์๊ฒ ๋์๋ค.<br>์๋ฌด๊ฒ๋ ์๋ ์คํ์ด๋ผ ์ง์ฌ์ ๋ด์ ์ง์์๋ฅผ ์ผ๋๋ ์ด์ข๊ฒ ํฉ๊ฒฉํ๋ค. (๋ญ์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง 1์ฅ ์ผ๋๋ฐ ํฉ๊ฒฉํ๋ค. ๋ฐ๋ฉด 10์ฅ ๋๊ฒ ์ด ์ฌ๋์ ๋จ์ด์ก๋ค๊ณ ํ๋ค. ์ด์์ง ๋ง๋ก๋ ์ง์์ด์ ์ ํฌ์ปค์ฑ์ ์ ๋ง์ถ ์ง์์๋ฅผ ๋ฝ์๋ค๋๋ฐ ๋ด๊ปโฆ ์ ๋ชจ๋ฅด๊ฒ ๋ค.)<br>๊ฐ์ ํ์ด์ฌ ์๋ํ ์์
์ ๋ค์ผ๋ฉฐ ์ด์ ์ก์ ๊ธฐํ ํํํ ์ฟ๋ณด๋ค๊ฐ ์ด ์ข๊ฒ ์ฑ
2๊ถ์ ๊ณต๋์งํ ๋ฐ ์ถํํ๋ค.</li><li><a href="https://blog.naver.com/dev_rubykim/222457413201">๋ค์ด๋ฒ BOOSTER</a> (2019๋
ํ๋ฐ๊ธฐ)<br>๋ค์ด๋ฒ์ ๋ถ์คํธ์ฝ์ค๋ฅผ ์๊ฐํ๋ ์ค, ๋ถ์คํธ ์ฝ์ค ํ๋ณด๋์ฌ๋ฅผ ๋ฝ๋๋ค๋ ๊ณต์ง๋ฅผ ๋ณด๊ณ ์ง์ํ๋ค.<br>๋น์ ๋ธ๋ก๊ทธ ์ด์์ ์ง์คํ๊ณ ์๋ํฐ๋ผ ์ผ๋ฐฉ๋ฌธ์๊ฐ 100๋ช
์ ๋ ๋๋๋ฐ ๊ทธ ๋์ ํฉ๊ฒฉํ ๊ฒ ๊ฐ๋ค.<br>๋๋ถ์ ์๋๋ก์ด๋ ์ฝ์ค๋ฅผ ์๊ฐํ๋ฉฐ ๋ฌด๋ฃ๋ก ์ ๋ฌธ๊ฐ ์ฒจ์ญ์ ๋ฐ์ ์ ์์๋ค. 1ํ์ 3๋ง 5์ฒ์ ์ ๋์๋ ๊ฑธ๋ก ๊ธฐ์ตํ๋๋ฐ ํ๋ณด๋์ฌ๋ก์ ๋์ฐจ๊ฒ ์ ํ์ฉํ๋ ๋์ธํ๋์ด๋ค.</li><li><a href="https://blog.naver.com/dev_rubykim/222457399153">HUFS IT</a> (2020๋
ํ๋ฐ๊ธฐ)<br>์ด ํ๋ก๊ทธ๋จ์ ์ทจ์ค์ + ์ฐฝ์
์ ์ํ ์ฌ๋์ ๋ฝ๋ ๊ณณ์ด๋ค. ์ฒ์์๋ 3ํ๋
์ด๋ผ๋ ์ด์ ๋ก ๋จ์ด์ก๋๋ฐ, 4ํ๋
์ ๋ค์ ์ง์ํ๋ ๋ถ์๋ค. ์ธ๊ณต์ง๋ฅ๊ณผ ๋ธ๋ก์ฒด์ธ์ ๋ํ ์์
์ ๋ค์๋๋ฐ ์ ๋ถ ์ด๋ก ๊ด๋ จ ๋ด์ฉ์ด์๋ค. ์ฌ๋ด์ผ๋ก ์ค๊ฐ์ ์์์ ์ฒจ์ญ ๋ฑ๋ ๋ด์ฃผ์
จ๋๋ฐ ์ ์ตํ๋ ๊ฒ ๊ฐ๋ค.</li><li><a href="https://blog.naver.com/PostList.naver?blogId=dev_rubykim&from=postList&categoryNo=23">๋์ฝ์บ (๋ํ๊ต ์ฝ๋ฉ ์บ ํ) ์ํฌํฐ์ฆ 1๊ธฐ</a> (2021๋
ํ๋ฐ๊ธฐ)<br>๋น์ ์ฝ๋์์์ DB ๊ฐ์๋ฅผ ๋ค์๋๋ฐ ์ง๊ธ๊น์ง ๋ค์๋ ์์
์ค ๊ฐ์ฅ ์ฝ๊ณ ๋จธ๋ฆฌ์ ์์ ๋ฐํ๋ ์ค๋ช
์ ์ด์ฌํ ์์
์ ์๊ฐํ๋ ์ค์ด์๋ค. ์๊ฐ ๋ง๋ฃ ๊ธฐ๊ฐ์ด ๋ค๊ฐ์ ์์ฌ์ํ๋ ์ฐจ ๋์ฝ์บ ์ํฌํฐ์ฆ๋ฅผ ํ๋ฉด ์ถ๊ฐ ์๊ฐ๊ถ์ ์ค๋ค๊ณ ํ์ฌ ์ง์ํ๊ณ , ๋๋ถ์ ์๊ฐ๊ถ์ ๋ฐ์ ์ถ๊ฐ๋ก ์์
์ ๋ ๋ค์ ์ ์์๋ค.</li><li><a href="https://blog.naver.com/PostList.naver?blogId=dev_rubykim&from=postList&categoryNo=39">JE์ฝ๋ฒ ์ํฌํฐJU 2๊ธฐ</a> (2021๋
ํ๋ฐ๊ธฐ)<br>์ ์ฃผ์ฝ๋ฉ๋ฒ ์ด์ค์บ ํ์์ ์ฃผ์ตํ๋ ์ํฌํฐ์ฆ ํ๋์ผ๋ก, ์ ์ฝ๋ฒ ์์ ๋ง๋ ๊ฐ์๋ค์ ๋ชจ๋ ๋ฌด๋ฃ๋ก ์ ๊ณตํด์ค๋ค ํ์ฌ ์ง์ํ๊ณ ์ด์ฌํ ์๊ฐํ๋ค. ์ฌ๊ธฐ์ Django ์์
์ ๋ง์ด ์๊ฐํ๋ค.</li></ul><h4 id="๋์ธํ๋-ํฉ๊ฒฉํ"><a href="#๋์ธํ๋-ํฉ๊ฒฉํ" class="headerlink" title="๋์ธํ๋ ํฉ๊ฒฉํ"></a>๋์ธํ๋ ํฉ๊ฒฉํ</h4><ol><li><p>๋๋ถ๋ถ์ ๋์ธํ๋๋ค์ ์๊ธฐ ๊ธฐ์
PR์ ์ํด ์งํํ๋ค.<br>๋ฐ๋ผ์ ํจ๊ณผ์ ์ธ ๊ธฐ์
ํ๋ณด๋ฅผ ํ ์ ์๋ ๋ฐฉ์์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋๋ ๊ฒ์ด ์ข๋ค.</p><ul><li><a href="https://blog.naver.com/dev_rubykim">๋ธ๋ก๊ทธ</a>: ๋ณดํต ๋์ธํ๋์ ๋ธ๋ก๊ทธ๋ฅผ ํตํด ํ๋ก๊ทธ๋จ ๊ด๋ จ ํฌ์คํ
์ ์งํํ๋ค.</li><li><a href="https://www.youtube.com/channel/UCbOmJzYjQAxdtuJdPI0f9Sg">์ ํ๋ธ</a>: ๊ฐ๋ฐ ๊ด๋ จ ๋์ธํ๋์ผ๋ก๋ ๊ฑฐ์ ์ฐ์ด์ง ์๋๋ค.</li><li><a href="https://www.instagram.com/rubyhae_/">์ธ์คํ๊ทธ๋จ</a>: ๋ณดํต ์นด๋๋ด์ค ํ์์ผ๋ก ์งํ๋๋ค.</li></ul><p>ํ๋ซํผ์ ์๊ด์์ด, ๋ฏธ๋ฆฌ ์ฝ๊ฐ์ ์ฝํ
์ธ ๋ฅผ ์
๋ก๋ํ์ฌ ์ด๋ ์ ๋์ ๋ฐฉ๋ฌธ์๋ฅผ ๋ง๋ค์ด ๋๋ ๊ฒ์ด ๊ด๊ฑด์ด๋ค.</p></li><li><p>๊ฐ ๋์ธํ๋์์ ์ค์์ ๋ณด๋ ๋ถ๋ถ ํ์
ํ๊ธฐ<br>๊ฐ๊ฐ์ ๊ธฐ์
๋ง๋ค ์ค์์ ํ๋ ๋ถ๋ถ์ด ๋ค๋ฅด๋ค.<br><strong>๋ด์ฌ</strong>๊ฐ์ด ๋จ์๊ฒ ์ ํ ์ํฅ๋ ฅ์ ๋ผ์น ์ ์๋๊ฐ, ์๋๋ฉด <strong>์ทจ์
</strong>์ด๋ <strong>์ฐฝ์
</strong>์ ๊ด์ฌ์ด ์๋๊ฐ ๋ฑ ๋ค์ํ ์กฐ๊ฑด์ ๊ฐ์ง๊ณ ์ง์์์ ํฉ๋ถ์ ๊ฒฐ์ ํ๋ค.<br>์ด๋ ์ฃผ์ต์ฌ์ ํ์ฌ์ด๋
์ด๋ ์ฐฝ์
์์ ๊ฐ์น๊ด์ ๋ณด๊ณ ์ฝ๊ฒ ํ๋จํ ์ ์๋๋ฐ, ๋ณดํต ์ธํฐ๋ท์ ๊ฒ์ํ๋ฉด ์๋ฃ๋ค์ ์ฐพ์ ์ ์์ผ๋ ์ด๊ฒ์ ๊ฒ ํ ๋ฒ ๊ฒ์ํด๋ณด๋๊ฑธ ์ถ์ฒํ๋ค. ๋์ธํ๋ ์ฌ์ดํธ์ ์๋ ์ฌ๋๋ค์ ํ๊ธฐ๋ค์ ํตํด์๋ ์ดํด๋ณผ ์ ์๋ค.</p></li></ol><h4 id="๋์ธํ๋-์ฌ์ดํธ-์ถ์ฒ"><a href="#๋์ธํ๋-์ฌ์ดํธ-์ถ์ฒ" class="headerlink" title="๋์ธํ๋ ์ฌ์ดํธ ์ถ์ฒ"></a>๋์ธํ๋ ์ฌ์ดํธ ์ถ์ฒ</h4><p>์ฌ๋ฌ ๋์ธํ๋ ์ฌ์ดํธ๊ฐ ์๋๋ฐ, ๋๋ถ๋ถ์ ๋์ธํ๋ ์ฌ์ดํธ์ ๋์ผํ ๋ด์ฉ์ด ์ฌ๋ผ์ค๊ธฐ ๋๋ฌธ์ ์ฌ์ดํธ๋ ํ๋๋ง ์ถ์ฒํ๋ ค๊ณ ํ๋ค.</p><ul><li><a href="https://allforyoung.com/">์์ฆ๊ฒ๋ค</a><br>์์ค์ ๋์์๋ ๋์ธํ๋ ์ฌ์ดํธ ์ค ๊ฐ์ฅ ๊น๋ํ UI๋ก ๊ตฌ์ฑ๋๋ค.</li><li><a href="https://github.com/ruby-kim/Realtime-IT-Contest-notification">๊ณต๋ชจ์ & ๋์ธํ๋ ์๋ฆผ repository</a><br>42SEOUL์ ํ๋ฉด์ ์ ๊น ์ฌ๋๋ค ๋ชจ์ ์งํํ๋ ํ๋ก์ ํธ๋ค. 3์ผ์ 1๋ฒ ๋์ธํ๋ ์ฌ์ดํธ๋ฅผ ํฌ๋กค๋งํ์ฌ issue๋ฅผ ์๋ open/closeํ๋๋ก ์ค์ ํ๋ค.</li></ul><h4 id="๊ทธ-์ธ-์คํ์-์ํ-ํ๋"><a href="#๊ทธ-์ธ-์คํ์-์ํ-ํ๋" class="headerlink" title="๊ทธ ์ธ ์คํ์ ์ํ ํ๋"></a>๊ทธ ์ธ ์คํ์ ์ํ ํ๋</h4><p>์ด์ ์ฐ๋๊ฑฐ ์ค์ง ์คํ ์๊ธฐ๋ฅผ ์ํด ์ฐธ๊ฐํ๋ ํ๋ก๊ทธ๋จ ๋ฐ ๋ํ์ ๊ดํด์๋ ์ ์ด๋ณธ๋ค.</p><ol><li>ํ๊ต ์ฐ๊ตฌ์ค ์ธํด (2019๋
์๋ฐ๊ธฐ)<br>์ด์ ๋ํ์์ด ๋๊ฑฐ ๋ํ์ ๋น์ค๋ฌด๋ฆฌํ ์ํ๋ ํด๋ณด๊ณ ํ ๋ฐฉ๋ฒ์ ์ฐพ๋ ์ค ํ๊ต์์ ์ฐ๊ตฌ์ค ์ธํด์ ๋ฝ๋๋ค๋ ๊ณต๊ณ ๋ฌธ์ ๋ณด๊ณ ์ง์ํ๋ค.<br>๊ต์๋๊ณผ ๋ฉด์ ์ ๋ดค๋๋ฐ ์ข๊ฒ ๋ด์ฃผ์
์ ์ธํด์ผ๋ก ๋ค์ด๊ฐ๋ค. ๊ทธ๋ฐ๋ฐ ์ธํด์ด๋ผ ๊ทธ๋ฐ๊ฐ ๋๋ฌด ํ๋ฆฌํ๊ฒ ๋์ฃผ์๋๋ผ.<br>๋ญ๊ฐ ๊ต์๋์ด ํ๋ผ๋๋๋ก ํ๋๋ฐ, ๊ฒฐ๊ณผ๋ฌผ์ ๋ด๋์๋ ๊ทธ์ ๋ง๋ ํ์ด๋ ๊ฒฐ๊ณผ ๋ฑ.. ๋ด๊ฒ ๋จ๋ ๊ฒ์ด ์ ํ ์์ด์ ๊ฒฐ๊ตญ ๋์๋ค.</li><li>๊ณ ๊ต SW๋ฉํ ๋ง (2019๋
์๋ฐ๊ธฐ)<br>๋ฐ์ ๊ฒ ๊ฐ์์ ์ฒ์์๋ ์ํ๋ ค๊ณ ํ๋๋ฐ ์น๊ตฌ์ ๊ถ์ ๋ก ์ฐธ๊ฐํ๋ค. ์ฌ๋ฆ๋ฐฉํ์ 2์ฃผ ์ ๋ ๊ณ ๋ฑํ๊ต์ ๋ฐฉ๋ฌธํด์ ํ์ด์ฌ์ ๊ฐ๋ฅด์ณค๋ค.</li><li>ํ๊ต ๊ต๋ด SW/AI ํด์ปคํค (2018๋
ํ๋ฐ๊ธฐ / 2019๋
์๋ฐ๊ธฐ / 2020๋
์๋ฐ๊ธฐ)<br>๋งจ ์ฒ์ ํด์ปคํค์ ์๋ฌด๊ฒ๋ ๋ชจ๋ฅด๋ ์ํ์์ ์ผ์ ๊ณต์ง๋ก ๋จน์ผ๋ฌ ์ฐธ๊ฐํ๊ฑฐ๋ผ ์๋ฌด ์๋์์ด 1์ฐจ์์ ๋ฐ๋ก ํ๋ฝํ๋ค.<br>๋๋จธ์ง ํด์ปคํค์์๋ ์์ ๋ฐ์๋๋ฐ, ๋จผ์ 2019๋
๋ ํด์ปคํค์ ๋น์ ์ธ๊ณต์ง๋ฅ ํ๋ก์ ํธ์์ ์ฌ์ฉํ๋ ๋ชจ๋ธ ๊ทธ๋๋ก ์ฌ์ฉํด๋ ๊ด์ฐฎ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์ด ์ฐธ๊ฐํ๊ณ ์ด ์ข๊ฒ ์์ ์์ํ๋ค.<br>๊ทธ ๋ค์ํด์๋ ์๋ก ํฉ์ด ๋ง์ ์น๊ตฌ๋ค๊ณผ ๊ฐ์ด ํด์ปคํค์ ์ฐธ๊ฐํ์ฌ ์์ํ๋ค.</li><li><a href="https://blog.naver.com/dev_rubykim/222457473353">2019๋
๋ K-SW Purdue Program</a> (2019๋
ํ๋ฐ๊ธฐ)<br>์ ๋ถ ์ง์์ผ๋ก ์ ๊ณต๊ณต๋ถ์ ๋๋ถ์ด ์ธ๊ตญ์ํ์ ํ ์ ์๋ค๋ ๊ฒ์ ๊ฐ๋ช
๋ฐ์ ์ด์ฌํ ์ค๋นํ๋ค. (์๋ ์ธ๊ตญ์์ ์ผํด๋ณด๊ณ ์ ํ๋ ๊ฟ์ ๊ฐ๊ณ ์์๋ค.)<br>๋น์ OPIc ์ฑ์ ์ด IL๊ณผ IM1์ ๋ฐ์ ๋งํผ ๊ทธ๋ฅ ์ข์ง ์์ ์์ด ๋ฉด์ ์ง๋ฌธ ๋ต๋ณ ๋ฆฌ์คํธ๋ฅผ ๋นฝ๋นฝ์ด๋ก 5์ฅ ์ ๋ ์ค๋นํ๋๊ฒ ๊ธฐ์ต๋๋ค.</li><li><a href="https://blog.naver.com/dev_rubykim/222454922801">42SEOUL</a> (2020๋
ํ๋ฐ๊ธฐ)<br>์จ๋ณด๋ฉ ์ ์ฒญ์ 2019๋
11์์ ๋ฐ๋ก ํ๋๋ฐ, ๋น์ K-SW Purdue Program์ผ๋ก ์ธ๊ตญ์ ์์ด ์ผ๋ถ๋ฌ 2๊ธฐ๋ก ์ ์ฒญํ๋ค. ์๋๋ผ๋ฉด 2020๋
3์ ์ฆ์์ ๋ผํผ์ ์ ์งํํด์ผ ํ์ง๋ง, ์ฝ๋ก๋๋ก ์ธํด ์ฐ์ฅ์ด ๋๋ฉด์ 7์๋ถํฐ ๋ผํผ์ ์ ์งํํ๋ค. ์ต์ข
ํฉ๊ฒฉ ์ดํ, 9์๋ถํฐ ๋ณธ๊ฒฉ์ ์ผ๋ก 42SEOUL ๋ณธ๊ณผ์ ์ ํฉ๋ฅํด ํ๋ก์ ํธ๋ฅผ ์งํํ๋ค.</li></ol><p><br><br></p><h2 id="3-๐ธ-์คํ์-๊ฝ-์ธํด์-๋์ -์ ๊ท์ง๊น์ง"><a href="#3-๐ธ-์คํ์-๊ฝ-์ธํด์-๋์ -์ ๊ท์ง๊น์ง" class="headerlink" title="3. ๐ธ ์คํ์ ๊ฝ, ์ธํด์ ๋์ + ์ ๊ท์ง๊น์ง!"></a>3. ๐ธ ์คํ์ ๊ฝ, ์ธํด์ ๋์ + ์ ๊ท์ง๊น์ง!</h2><p>์ด๋ ๊ฒ ๋์ธํ๋๋ค์ ํตํด ์ด๋ ์ ๋ ๊ธฐ์ ์ ์ต๋ํ๋ค. ํ์ง๋ง ํ์๊ณผ ์ง์ฅ์ธ์๊ฒ๋ ์์ฐํ ํฐ ์ฐจ์ด๊ฐ ์๋ค.<br>๊ทธ ์ฐจ์ด๋ฅผ ์ด๋ ์ ๋ ๊ทน๋ณต์ ํด๋์ผ ๋์ค์ ์ทจ์คํ ๋ ๋์์ด ๋ ๊ฒ ๊ฐ์์, ๊ทธ๋ฆฌ๊ณ ์ด๋ค ๋ถ์ผ๋ก ๊ฐ์ง ํ์คํ ์ ํ๊ธฐ์ํด ๊ฒฝํ์ผ์ ์ธํด์ญ์ ๋์ ํ๋ค.</p><p><del>์ฌ์ค๋๋ก ๋งํ๋ฉด ํ๊ต๊ฐ๊ธฐ ์ซ์ด์ ์ธํด ๋์ ํ๋ค. ์ ๋ฐ ์กธ์
์์ผ์ฃผ์ธ์</del></p><p>์ฐธ๊ณ ๋ก ์คํํธ์
์ ๋งจ ์ ์ฒซ ๊ธ์๋ง ์์ฑํ๋ค. ์๋ฌด๋๋ ์ฌ๋์ด ์ ์ ์คํํธ์
ํน์ฑ ์ ํ์ฌ ์ด๋ฆ์ ๊ทธ๋ฅ ์ ์ด๋ฒ๋ฆฌ๋ฉด ์ฌ๋๋ค์ด ๋๊ตฐ์ง ๋์น์ฑ ๊ฒ ๊ฐ๋ค๋ ๋๋์๋ ๋๋์ด๋๊น (๋ ์ ์์ผ๋ฉด ์กฐ์ฉํ ์ด๊ณ ์ถ๋ค)</p><h4 id="Google-Korea-์ธํด-2019๋
-ํ๋ฐ๊ธฐ-๋ถํฉ๊ฒฉ"><a href="#Google-Korea-์ธํด-2019๋
-ํ๋ฐ๊ธฐ-๋ถํฉ๊ฒฉ" class="headerlink" title="Google Korea ์ธํด (2019๋
ํ๋ฐ๊ธฐ): ๋ถํฉ๊ฒฉ"></a>Google Korea ์ธํด (2019๋
ํ๋ฐ๊ธฐ): ๋ถํฉ๊ฒฉ</h4><p>๋น์ K-SW Purdue Program์ผ๋ก ๋ฏธ๊ตญ์ ์์๋๋ฐ, ๊ฒฝํ์ผ์ ๋์ ํด๋ณผ๊น?ํ๋ฉฐ ํ๋๊ฒ ๋ฉด์ ๊น์ง ์ง์ถํด๋ฒ๋ ธ๋ค(โฆ)<br>ํฌ์ง์
์ <code>์๋๋ก์ด๋ ๊ฐ๋ฐ์</code>์๋๋ฐ, ํฐ ์ด์ ๋ ์๊ณ ์ธํด ์ง์ ๋น์ ๋ค์ด๋ฒ BOOSTER๋ก ํ๋ํ๋ฉฐ ๊ณต๋ถํ๋ ์๋๋ก์ด๋๊ฐ ๋ด ์ต์ ๊ธฐ์ ์ด์๊ธฐ ๋๋ฌธ์ด๋ค.</p><p>1์ฐจ ์ฝ๋ฉํ
์คํธ ์ดํ ์๋ฅ๋ฅผ ๊ฐ์ง๊ณ ํฉ๋ถ์ ๊ฐ๋ ธ๋๋ฐ ์ฝํ
๊ฒฐ๊ณผ๊ฐ ๋๋ฆ ์ฒ์ฐธํ์์๋ ์๋ฅ๊ฐ ์ข์์ ๊ทธ๋ฐ๊ฐ ํฉ๊ฒฉํ๋ค.<br>์ฝ๋ฉํ
์คํธ๋ <a href="https://codingcompetitions.withgoogle.com/kickstart">Kick Start</a>์์ ์งํํ๋๋ฐ, ์๊ณ ๋ฆฌ์ฆ ๋ณด๋ค๋ ๋ฌด์ง์ฑ + ๋
ธ๊ฐ๋ค๋ก ๋ฌธ์ ๋ฅผ ํ์๋ค.<br><img src="1.png"></p><p>์ดํ๋ก๋ 1์ฐจ ๋ฉด์ ๋ , ๋ฉด์ ๊ด๋๊ณผ โ์๋
ํ์ธ์โ์ โ์๋ฆฌ ์ ๋ค๋ฆฌ์์ฃ ?โ ์ด ๋ ๋ง๋ ์ดํ ๋ฐ๋ก ๋ฉด์ ์ด ์์๋๋ค.<br>์๋ฌธ์ผ๋ก๋ง ๋ค์๋ ์ธ๊ตญ๊ณ ๋ฉด์ ์ด ์ด๋ฐ๊ฑฐ๊ตฌ๋ ์ฒด๊ฐํ๋ ๊ฒ ๊ฐ๋ค. ๋ฉด์ ๊ด๋์ ์์ข
์ผ๊ด ๋ฉด์ ์ ๊ด๋ จ๋ ์ง๋ฌธ๋ง ๋์ง์๊ณ ๋ด ์คํ, ์ฑ์ ๋ฑ ์ ๋ถ ๊ด์ฌ์ด ์์ผ์
จ๋ค.</p><p>1์ฐจ ๋ฉด์ ์ ๊ฑฐ์ <code>2์ฐจ ์ฝ๋ฉํ
์คํธ</code>์๋ค. ํน์ ํ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ฃผ๋ฉฐ ๊ตฌ๊ธ Docs์ ์ง์ ๊ตฌํํด๋ณด๋ ๊ฒ์ด์๋๋ฐ, ์์งํ ์ด๋ฐ ๋ฌธ์ ๊ฐ ๋์ฌ์ค ๋ชฐ๋๊ณ ๋ฌด์๋ณด๋ค ๋ฉด์ ์ด ์์ด๋ก ์งํ๋๊ธฐ ๋๋ฌธ์ ์ด๋ฒ๋ฒ ํ๋ฉด์ ๋ฉด์ ์ ์ํ๋ค. ๋น์ ์์ด๋ผ๊ณค OPIc IM1์ด ๋ค์ธ, ์์ ๋กญ๊ฒ ์์ด๋ก ์๊ธฐ๋ฅผ ์ ํ ๋ชปํ๋ ์ฌ๋์ด์๋ค. ๊ทธ ๋๋ฌธ์ธ๊ฐ 2์ฐจ์์ ๊ฒฐ๊ตญ ํ๋ฝํ๋ค.</p><p>๊ธฐ์ ๋ฉด์ ์ด ๋๋๊ณ ์ฃผ๋์ด ๊ฐ๋ฐ์๋ก์ ๊ถ๊ธํ ๋ด์ฉ์ด ์์ผ๋ฉด ๋ฌผ์ด๋ณด๋ผ๋ ์๊ธฐ์ ์ด๋ฐ์ ๋ฐ ์๊ธฐ๋ฅผ ํ๋๋ฐ, ์ข์ ๋ง์์ ๋ง์ด ํด์ฃผ์
์ ๋์์ด ๋๋ ๊ฒ ๊ฐ๋ค. ์ฌ๋ด์ผ๋ก ๊ตฌ๊ธ ์ฝ๋ฆฌ์ ์งํ์ ์ด๋์์ค์ด ๊ทธ๋ ๊ฒ ์ข๋ค๋ ์ ๋ณด๋ฅผ ์ป์๋ค.</p><h4 id="Naver-Clova-์ธํด-2019๋
-ํ๋ฐ๊ธฐ-๋ถํฉ๊ฒฉ"><a href="#Naver-Clova-์ธํด-2019๋
-ํ๋ฐ๊ธฐ-๋ถํฉ๊ฒฉ" class="headerlink" title="Naver Clova ์ธํด (2019๋
ํ๋ฐ๊ธฐ): ๋ถํฉ๊ฒฉ"></a>Naver Clova ์ธํด (2019๋
ํ๋ฐ๊ธฐ): ๋ถํฉ๊ฒฉ</h4><p>์ด ๋ํ K-SW Purdue Program์ผ๋ก ๋ฏธ๊ตญ์ ์์ ๋ ๊ฐ์๊ธฐ ์ง์ํ๋ ์ธํด์ญ์ด๋ค.<br>๋น์ ๋ฉํ ๋์ ๋ต๊ณ ์ ํ์๋ค๊ณผ ์์นด๊ณ ๋ก ๊ฐ๋๋ฐ, ๊ต์๋๊ป์ ์นดํก์ผ๋ก ๋ค์ด๋ฒ ํด๋ก๋ฐ ์ธํด์ผ๋ก ์ถ์ฒํด์คํ
๋ ํ ๋ฒ ์ง์ํด๋ณด์ง ์๊ฒ ๋๋ฉฐ ๊ถ์ ๋ฅผ ํ์
จ๋ค.<br>์ข์ ๊ธฐํ์ธ ๊ฒ ๊ฐ์ ๊ธ์์ค๋ฝ์ง๋ง ์๋ฅ์ ํฌํธํด๋ฆฌ์ค๋ฅผ ์ด์ฌํ ์ค๋นํ๋ค. <del>๊ทธ๋ ๊ฒ ์์นด๊ณ ๋ฏธ์ ๊ด ์
๊ตฌ๋ง ๊ตฌ๊ฒฝํ ์ฑ ๊ฑด๋ํธ ์คํ๋ฒ
์ค์์ ์ปดํจํฐ๋ง ๊น์ง๋๋ค.</del></p><p>๋น์ ์ธ๊ณต์ง๋ฅ ๊ด๋ จ ์คํ์ด๋ผ๊ณค ํ๊ต ํ๋ก์ ํธ๊ฐ ๋ค์๊ธฐ์, ์๋ฅ์์๋ถํฐ ๋จ์ด์ก๋ ๊ฒ ๊ฐ๋ค.</p><h4 id="์คํํธ์
-M์ฌ-์ธํด-2020๋
-์๋ฐ๊ธฐ-๋ถํฉ๊ฒฉ"><a href="#์คํํธ์
-M์ฌ-์ธํด-2020๋
-์๋ฐ๊ธฐ-๋ถํฉ๊ฒฉ" class="headerlink" title="์คํํธ์
M์ฌ ์ธํด (2020๋
์๋ฐ๊ธฐ): ๋ถํฉ๊ฒฉ"></a>์คํํธ์
M์ฌ ์ธํด (2020๋
์๋ฐ๊ธฐ): ๋ถํฉ๊ฒฉ</h4><p>๋ญ ๋ฐ๋์ด ๋ถ์๋์ง ๊ฐ์๊ธฐ ์ธ๊ณต์ง๋ฅ์ ๊ฝํ <code>์ธ๊ณต์ง๋ฅ ๊ฐ๋ฐ์</code> ํฌ์ง์
์ผ๋ก ๊ตญ๋ด ์ธ๊ณต์ง๋ฅ ์คํํธ์
์ผ๋ก ์ ๋ช
ํ M์ฌ์ ์ง์ํ๋ค.</p><p>์๊ธฐ๊ฒ๋ ์ฝ๋ฉํ
์คํธ๋ 5๋ฌธ์ ์ค 1๋ฌธ์ (์ฌ์ง์ด ๊ทธ 1๋ฌธ์ ์ ํ
์คํธ ์ผ์ด์ค๋ฅผ ์ ๋ถ ๋ง์ถ์ง ๋ชปํ๋ค)๋ฅผ ๋ง์ท๋๋ฐ, ์๋ฅ์ ํฌํธํด๋ฆฌ์ค๊ฐ ๋๋ฌด ์ ๋์ด์์ด ๊ถ๊ธํ๋ค ํ์
์ ๋ฐ๊ฐ์ ๋ก 1์ฐจ์์ ํฉ๊ฒฉํ๋ค.<br>์ฝ๋ฉํ
์คํธ๋ฅผ ๋ชป ๋ณธ ์ด์ ๊ฐ ์์๋ค. <strong>๋ค์ต์คํธ๋ผ</strong> ๊ฐ์ด ์๊ณ ๋ฆฌ์ฆ ๊ณผ๋ชฉ์ ๋ํ ๊น์ ์ง์์ด ์์ด์ผ ํ ์ ์๋ ๋ฌธ์ ๊ฐ ์ถ์ ๋๋๋ฐ, ๋น์ ์๊ณ ๋ฆฌ์ฆ์ ์์ ๋ฐฐ์ฐ์ง ์์ ์ํ์์ ์ฝ๋ฉํ
์คํธ๋ฅผ ๋ดค์ผ๋ ์ ์๊ฐ ์ฒ์ฐธํ๋ค.</p><p>๋ฉด์ ์์๋ ์ถ๊ฐ์ ์ธ ์๊ณ ๋ฆฌ์ฆ ์ํ์ด ์์๋ค. ํ์ด์ฌ ๊ตฌํ ๋ฌธ์ ์๋๋ฐ ์ ๋ต์ด๊ธด ํ์ง๋ง 10%์ ๋? ๋ถ์กฑํ ๋ต๋ณ์ ๋ด๋์๋ค. ๋ค๋ง ๋ค๋ฅธ ํ์ด์ฌ ๋ฌธ์ ๋ ์๋๋๋ก ์ ํ์๋ค.<br>๋ค์์ผ๋ก๋ ํ๋ก์ ํธ์ ๊ดํ ๋ฉด์ ์ด ์งํ๋๊ณ ์ฐจ๊ทผํ ์ ๋ง๋ฐ์์ณค๋ ๊ฒ์ผ๋ก ๊ธฐ์ตํ๋ค.</p><p>๋ค๋ง ๋ฉด์ ์ ๋ณด์๋ฉด์ ์๊พธ ๊ฑฑ์ ํ์๋๊ฒ ํ๋ ์์ผ์
จ๋๋ฐ, ๋ฐ๋ก ๋ด๊ฐ ๊ทธ ๋น์ 3ํ๋
2ํ๊ธฐ๋ฅผ ์ค๋นํ๊ณ ์์๋ค๋ ๊ฒ์๋ค.<br>๊ทธ ๋๋ฌธ์ ๋ช ๋ฒ ๋ง์ค์ด์๋ ๋ชจ์ต์ ๋ณด์ฌ์ฃผ์๋๋ ๊ฒฐ๊ตญ ์ต์ข
์์ ๋ถํฉ๊ฒฉ์ ๋ฐ์๋ค.</p><h4 id="์คํํธ์
-D์ฌ-์ธํด-2020๋
-์๋ฐ๊ธฐ-ํฉ๊ฒฉ"><a href="#์คํํธ์
-D์ฌ-์ธํด-2020๋
-์๋ฐ๊ธฐ-ํฉ๊ฒฉ" class="headerlink" title="์คํํธ์
D์ฌ ์ธํด (2020๋
์๋ฐ๊ธฐ): ํฉ๊ฒฉ"></a>์คํํธ์
D์ฌ ์ธํด (2020๋
์๋ฐ๊ธฐ): ํฉ๊ฒฉ</h4><p>์ด ํ์ฌ๋ <code>ํ์คํ ์์ง๋์ด</code>๋ก ์ง์ํ๋ค. ์ M์ฌ์ ๋์ผํ๊ฒ <code>์ธ๊ณต์ง๋ฅ ๊ฐ๋ฐ์</code>๋ก ํ์ฌ๋ฅผ ์ง์ํ๊ณ ์ ์ธํฐ๋ท์ ๋ค์ก๋๋ฐ, ์ธ๊ณต์ง๋ฅ ๊ฐ๋ฐ์๋ก 4ํ๋
์ดํ์ ํ์ฌ๋ฅผ ๋ฝ๋ ๊ฒฝ์ฐ๊ฐ ๊ฑฐ์ ์์๋ค.<br>๊ณ ๋ฏผ ๋์ <strong>์ธ๊ณต์ง๋ฅ ํ์ฌ์ ๋ค์ด๊ฐ์ ์ด๊นจ ๋๋จธ๋ก ๋ฐฐ์์ผ๊ฒ ๋ค</strong>๋ผ๋ ๋ฌด๋ํฌ ๋ง์์ผ๋ก ๋ฌด์์ ์ธ๊ณต์ง๋ฅ ๊ด๋ จ ํ์ฌ์ ์๋ฌด ๊ธฐ์ ํฌ์ง์
์ผ๋ก ์ง์ํ๋ค.</p><p>์ ๋จ์ ์๋ ํ์ฌ์ธ๋ฐ, ๋น์ ์ฝ์๊ตญ์ผ๋ก ๋ด์ค๊ฐ ๋๋ฆฌ๋ฌ์์๋ ๋ถ๊ตฌํ๊ณ ์ง์ ๊ธฐ์ฐจํ๊ณ ์ค๋ผ ํ๊ธธ๋ ๊ณ ๋ฏผํ๋ค๊ฐ ๊ฒฐ๊ตญ ๋น๋๋ฉด์ผ๋ก ๋ฉด์ ์ ๋ดค๋ค.<br>Django์์ ์์ ๋์ง 1๋
์ด ๋์ด ์๋ฆฌ๊น๋ฆฌํ๋๋ฐ, ์์ธ๋ก ๋ฉด์ ์ ์ข๊ฒ ๋ดค๋ ๊ฒ ๊ฐ๋ค. ๋ช ๋ฌธ์ ๋ ์ ๋๋ก ๋ต๋ณ์ ๋ชปํ์ง๋ง <strong>์ด๋ฐ๊ฑด ์ธํด์ผ๋ก ๋ค์ด์์ ๋ค์ ๊ณต๋ถํ๋ฉด ๋๋๊ฑฐ๋๊น ๊ฑฑ์ ๋ง์ธ์</strong>๋ผ๋ฉฐ <strong>์ธ์ ์ข๊ณ ์ฐธ ๋ฐ์ผ์๋ค์</strong>๋ผ๋ฉฐ ์์ข
์ผ๊ด ์นญ์ฐฌ๋ง ๋ค์๋ค.<br>์ง๊ธ์ด์ผ ์๊ธฐํ์ง๋ง ์ฌ์ค ์ด ํ์ฌ ๋ฉด์ ์ ํํธ์์๋ค. ์ ๋ถ ์๋งน์ด๊ฐ ๋น ์ง ์ง๋ฌธ๋ค๋ง ํด์๊ธฐ ๋๋ฌธ์ด๋ค.</p><p>์์ ์ ์๋ฏ์ด ํ๊ต๊ฐ๊ธฐ ์ซ์ด์ ์ธํด์ ์ง์ํ๋ํฐ๋ผ ๋งจ ์ฒ์์๋ ์ ์ผํ๊ฒ ํฉ๊ฒฉํ ์ฌ๊ธฐ๋ก ์ธํด์ ๊ฐ๊ณ ์ ํ์ง๋ง, ๋ฐ๋ก ๋ค์ ํ์ ํ ํ์ฌ ๋ํ ํฉ๊ฒฉํด ์ด ํ์ฌ๋ ๊ฒฐ๊ตญ ํจ์คํ๋ค.</p><h4 id="์ค๊ฒฌ๊ธฐ์
-S์ฌ-์ธํด-2020๋
-์๋ฐ๊ธฐ-ํฉ๊ฒฉ"><a href="#์ค๊ฒฌ๊ธฐ์
-S์ฌ-์ธํด-2020๋
-์๋ฐ๊ธฐ-ํฉ๊ฒฉ" class="headerlink" title="์ค๊ฒฌ๊ธฐ์
S์ฌ ์ธํด (2020๋
์๋ฐ๊ธฐ): ํฉ๊ฒฉ"></a>์ค๊ฒฌ๊ธฐ์
S์ฌ ์ธํด (2020๋
์๋ฐ๊ธฐ): ํฉ๊ฒฉ</h4><p>์ต์ข
์ ์ผ๋ก 2020๋
์๋ฐ๊ธฐ์์๋ ์ฌ๊ธฐ์ ์ธํด์ญ์ ์งํํ๋ค. <code>์ธ๊ณต์ง๋ฅ ๊ฐ๋ฐ์</code> ํฌ์ง์
์ ์ธํด์ ๋ฝ๊ธธ๋ ์ง์ํ๊ณ ์ฝ๋ฉํ
์คํธ๋ 5๋ฌธ์ ์ค 4๋ฌธ์ ๋ก ๋ฌด๋ํ๊ฒ ํ์๋ค.</p><p>๊ทธ๋ฐ๋ฐ ๋ฉด์ ์ ๊ฐ๋๋ ์ด๋ฏธ ์ค์ฅ๋๊ป์๋ ๋๋ฅผ ์ธํด์ผ๋ก ๋ด์ ํ์ ์ํ์๋ค. ๋ฉด์ ์ ๋ณด๋ฌ๊ฐ๋๋ฐ ์์ข
์ผ๊ด ์นญ์ฐฌ๋ง ๋ค์๋ค. <strong>3ํ๋
์ธ๋ฐ ์ธ๊ณต์ง๋ฅ์ ํ ์ค ์์์?</strong> <strong>ํฌํธํด๋ฆฌ์ค ๋๋ฌด ์ ๋ง๋ค์๋ค์. 3ํ๋
๋ง์์?</strong> <strong>์ธ์ฌ์ฑ๋ ์ข๊ณ ์ธ์๋ ์ข๊ณ ์์ฃผ ์ข์์. ์ด๋ฒ ์ธํด์ ๊ธฐ๋๋๋๋ฐ์?</strong> ๋ ์์์ ์ง๊ฒฉํ๋ก ์นญ์ฐฌ์ ๋ค์ผ๋ ๋ฏ๊ฐ์ง๋ฝ๊ณ ๊ทธ๋ฅ ๊ทธ ์๋ฆฌ๋ฅผ ๋ฒ์ด๋๊ณ ์ถ๋ค๋ ์๊ฐ๋ง ๋ค์๋ค.</p><p>ํ์ฌ๋ ์์ฑ์ธ์ ๊ด๋ จ ์ธ๊ณต์ง๋ฅ์ ๊ฐ๋ฐํ๋ ๊ณณ์ผ๋ก, ์ธํฐ๋ท์ Open ์์ฑ์ธ์ API๋ฅผ ์ฐพ์ ๋์๋ค๋๋ฉด ์ข
์ข
๋ณผ ์ ์๋ ๊ณณ์ด์๋ค. ์ด ํ์ฌ๊ฐ ์ D์ฌ๋ณด๋ค ๊ท๋ชจ๋ ๋ ํฌ๊ณ , ๋ฌด์๋ณด๋ค ์ธ๊ณต์ง๋ฅ์ ๋ฐฐ์ธ ์ ์๋ค๋ ์๊ฐ์ ์ฌ๊ธฐ๋ฅผ ์ ํํ๋ค.</p><h4 id="์ธ๊ตญ๊ณ-๊ธฐ์
-์ธํด-amp-์ ๊ท์ง-88๊ฐ-1์น-87ํจ-2020๋
-ํ๋ฐ๊ธฐ-2021๋
-ํ๋ฐ๊ธฐ"><a href="#์ธ๊ตญ๊ณ-๊ธฐ์
-์ธํด-amp-์ ๊ท์ง-88๊ฐ-1์น-87ํจ-2020๋
-ํ๋ฐ๊ธฐ-2021๋
-ํ๋ฐ๊ธฐ" class="headerlink" title="์ธ๊ตญ๊ณ ๊ธฐ์
์ธํด & ์ ๊ท์ง 88๊ฐ: 1์น 87ํจ (2020๋
ํ๋ฐ๊ธฐ - 2021๋
ํ๋ฐ๊ธฐ)"></a>์ธ๊ตญ๊ณ ๊ธฐ์
์ธํด & ์ ๊ท์ง 88๊ฐ: 1์น 87ํจ (2020๋
ํ๋ฐ๊ธฐ - 2021๋
ํ๋ฐ๊ธฐ)</h4><p>์ฃผ๋ณ ์ฌ๋๋ค์๊ฒ ๋๋ํ ์๊ธฐํ์ง๋ง, ํด์ธ์์ ๋ฐ๋ก ์ทจ์งํ๊ณ ์ถ๋ค๋ ๋ง์์ ํ๊ต ์กธ์
ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ ์๊ฐ์ด ๋ ๋๋ง๋ค ๊ธฐ์
์ ์ง์ํ๋ค. (๋น์ ๋๋ฌธ์ ์ผ์ฐ ์ง์ํ๋๊ฒ ๋ง๋ค๊ณ ์๊ฐํ๋ค.)</p><p>์๋ ๊ณํ์ <code>ICT ํ๋ก์ ํธ ์ธํด์ญ ํด์ธ๊ณผ์ ํฉ๊ฒฉ</code> -> <code>์ค๋ฆฌ์ฝ๋ฐธ๋ฆฌ ์
์ฑ</code> -> <code>์ ๊ท์ง์ผ๋ก ์ ํ ํ ์๋ฐ๊ธฐ</code>์๋๋ฐ, ๋งจ ์ฒ์์ธ ICT ํ๋ก์ ํธ ์ธํด์ญ ํ๊ต ์ ๋ฐ์์๋ถํฐ ๋ถํฉ๊ฒฉ์ ๋ฐ์๋ฒ๋ ธ๋ค.<br>์์ดํํ๊ฐ ๋ฌธ์ ์ธ ๊ฒ ๊ฐ์ ํ๋ฃจ์ 6์๊ฐ ์ด์์ ํผ์ ์์ด๋ก ๋ ๋ค๋ฉฐ ์ด์ฌํ ์ค๋นํ๋๋, 2021๋
ํ๋ฐ๊ธฐ ๊ณผ์ ์ฐธ์ฌ ๋ํ ๋ฆฌ์คํธ ์ค ์ฌํ ์ค์ธ ํ๊ต๊ฐ ์์ด ๊ฒฐ๊ตญ ์ง์ํ์ง ๋ชปํ๋ค.</p><p>๊ทธ๋๋ ํ ๋ฒ ํดํ์ ํ ํ์ ๋ด๊ฒ๋ 4ํ๋
2ํ๊ธฐ ๊ณผ์ ์ด ๋จ์์์๊ณ , ์์ง ์กธ์
์ ํ์ง ์์์ผ๋ ์ง๊ธ ์ด ์๊ฐ์๋ ๋ด๊ฐ ํ๊ณ ์ถ์๋๋ก ๊ธฐ์
์ ์ง์์ ํด๋ณด์๋ฉฐ ์ฌ๋ฌ ์ธ๊ตญ๊ณ ๊ธฐ์
์ ์ด๋ ฅ์๋ฅผ ๋ฟ๋ ธ๋ค. ํ๋ ๋ง์ด ์ ์ถํด์ ์์ด๋ฒ๋ฆด๊น๋ด Notion์ผ๋ก ๋ฆฌ์คํธ๋ฅผ ์์ฑํ๋ค. ์ข
์ข
๋ฉด์ ์์ ์ง๋ฌธ ๋ฐ ๋ต๋ณ๋ค์ ์ถ๊ฐํ๊ณ ์์ ํ๋ฉฐ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ ธ๋ค.<br><img src="2.png"></p><p>๊ทธ๋ฆฌ๊ณ ๋น์ฐํ๊ฒ ์ง๋ง ๋์์ค๋ ๋ฉ์ผ์ด ์์๋ค. ๊ฐํน ํ ์ฅ์ฉ ๋ ๋ผ์ค๋ฉด ์ ๋ถ <b>Unfortunatelyโฆ</b>๋ก ๋ฉ์ผ์ด ์์๋๋ค.<br>์ด ๋ ์ฏค์๋ ์ธ๊ตญ๊ณ ๊ธฐ์
์ด๋ผ๋ ๋ชฉํ๋ฅผ ๊ฑฐ์ ํฌ๊ธฐํ์๋ค. ์ ์ด์ ์ธ๊ตญ๊ณ ๊ธฐ์
TO๊ฐ ์ ์ผ๋ ๋น์ฐํ๊ฑฐ์ง..๋ผ๋ฉฐ ๋ฉ๋ํ๊ณ ์๋ ์ฐฐ๋, ์ด ์ข๊ฒ ๋ฏธ๊ตญ ์คํํธ์
์ ํ๊ตญ์ง๋ถ์์ ์ธํด์ ๋ฝ๋๋ค๋ ์์์ ๋ค์๋ค.</p><p>์ด๊ฒ ๋ง์ง๋ง์ด๋ค ํ๋ฉด์ ํฌํธํด๋ฆฌ์ค์ ์ด๋ ฅ์๋ฅผ ๋ค์ ์ฌ์ ๋นํ๊ณ , ์ด ์ข๊ฒ ๋ฉด์ ๊น์ง ๋ชจ๋ ํฉ๊ฒฉํ์ฌ ์ธํด์ผ๋ก ์ ๋ฐ๋๋ค.<br>์์ง๋ ์๊ฐํ๋ฉด ์ด์ด ์ ๋ง ์ข์๋ ๊ฒ ๊ฐ๋ค. ํ๋ฃจ ์ ์ ์์ด๋ก 2์๊ฐ 30๋ถ ๋์ ๊ธฐ์ + ์ธ์ฑ ๋ฉด์ ์ ๋ณธ๋ค๊ณ ํต๋ณด๋ฐ์ ๊ฑฐ์ ์ํฌ์๊ธฐ ํ๋๋ฐ, ๋ฉด์ ๊ด๋ค๊ป์ ๋๋ฌด ์ข๊ฒ ๋ด์ฃผ์
จ๋ค.<br><img src="6.png"></p><h4 id="๊ตญ๋ด-๊ธฐ์
-์ ๊ท์ง-12๊ฐ-11์น-1ํจ-2021๋
-์๋ฐ๊ธฐ-2021๋
-ํ๋ฐ๊ธฐ"><a href="#๊ตญ๋ด-๊ธฐ์
-์ ๊ท์ง-12๊ฐ-11์น-1ํจ-2021๋
-์๋ฐ๊ธฐ-2021๋
-ํ๋ฐ๊ธฐ" class="headerlink" title="๊ตญ๋ด ๊ธฐ์
์ ๊ท์ง 12๊ฐ: 11์น 1ํจ (2021๋
์๋ฐ๊ธฐ - 2021๋
ํ๋ฐ๊ธฐ)"></a>๊ตญ๋ด ๊ธฐ์
์ ๊ท์ง 12๊ฐ: 11์น 1ํจ (2021๋
์๋ฐ๊ธฐ - 2021๋
ํ๋ฐ๊ธฐ)</h4><p>๊ตญ๋ด ๊ธฐ์
์์๋ ๋์น์ ๊ฑฐ๋๋ค. ํด์ธ์ ์๋ฐ๋๋ ๊ฒฐ๊ณผ์ ๊ธฐ๋ถ์ด ๋ฐ์ญ๋งน์ญํ๋ค.<br>์ฐธ๊ณ ๋ก 1ํจ๋ <code>๋ค์ด๋ฒ</code>์ธ๋ฐ, ์ฝ๋ฉํ
์คํธ๋ฅผ ํฉ๊ฒฉํ์ง๋ง ๊ณ ๋ฏผ ๋์ ๋ฉด์ ์ ๋ณด์ง ์์์ ๋ถํฉ๊ฒฉ์ผ๋ก ๋ถ๋ฅํ๋ค. ๋ฉด์ ๊น์ง ๋ดค์ผ๋ฉด ์ต์ข
๊ฒฐ๊ณผ๊ฐ ์ด๋ป๊ฒ ๋์์์ง ์ ๋ชจ๋ฅด๊ฒ ๋ค.<br><img src="4.png"></p><p>ํฌํธํด๋ฆฌ์ค๋ฅผ ๋ฏ์ด๊ณ ์น๊ณ github๋ฅผ ์ฆ๊ธฐ์ฐจ๊ฒ ๊พธ๋ฉฐ๋จ๋๋ ๋ชจ๋ ํ์ฌ๋ค์ด ๋๋ฌด ๋ง์์ ๋ ๋ค๋ฉฐ ๋ง์กฑํดํ์
จ๋ค. ๋๋ถ์ ์ฝ๋ฉํ
์คํธ๋ฅผ ๋
ธ๋ต์ผ๋ก ๋ณด๋๋ผ๋ ํฌํธํด๋ฆฌ์ค๋ฅผ ์ด๋ ๊ฒ๊น์ง ์ ๋ง๋ ๋ด๊ฐ ๊ถ๊ธํ๋ค๋ฉฐ ๋ฉด์ ๊น์ง ๊ฐ์ ๋ก ํฉ๊ฒฉ๋๋ ๊ฒฝ์ฐ๋ ํ๋คํ๋ค.</p><p>์ด๋ ๊ฒ ์ ๊ท์ง ํฌ์ง์
์ผ๋ก ๊ธฐ์
์ ํฉ๊ฒฉํ์ง๋ง, ์์ ์ธ๊ตญ๊ณ ๊ธฐ์
์์ ์ธํด์ผ๋ก ํฉ๊ฒฉํ๊ธฐ ๋๋ฌธ์ ์ด ๋ชจ๋ ๊ฒ๋ค์ ํฌ๊ธฐํ๊ณ ์ธ๊ตญ๊ณ ๊ธฐ์
์ธํด์ ์ ํํ๋ค.</p><h4 id="์ต์ข
-๊ธฐ์
-์ ํ-2021๋
-ํ๋ฐ๊ธฐ-์ธํด-์ค์ธ-์ธ๊ตญ๊ณ-์คํํธ์
-S์ฌ๋ก-๊ฒฐ์ "><a href="#์ต์ข
-๊ธฐ์
-์ ํ-2021๋
-ํ๋ฐ๊ธฐ-์ธํด-์ค์ธ-์ธ๊ตญ๊ณ-์คํํธ์
-S์ฌ๋ก-๊ฒฐ์ " class="headerlink" title="์ต์ข
๊ธฐ์
์ ํ (2021๋
ํ๋ฐ๊ธฐ): ์ธํด ์ค์ธ ์ธ๊ตญ๊ณ ์คํํธ์
S์ฌ๋ก ๊ฒฐ์ "></a>์ต์ข
๊ธฐ์
์ ํ (2021๋
ํ๋ฐ๊ธฐ): ์ธํด ์ค์ธ ์ธ๊ตญ๊ณ ์คํํธ์
S์ฌ๋ก ๊ฒฐ์ </h4><p>์ธํด์ญ์ ์งํํ๋ S์ฌ์์ ๋ฐฐ์ธ ์ ์ด ๋ง์๊ณ ๋ชจ๋๊ฐ ์น์ ํ์ผ๋ฉฐ ๋ฌด์๋ณด๋ค ์ธ๊ตญ๊ณ ํ์ฌ ๊ฒฝํ์ ์ค์ ๋ก ํ๋ค๋๊ฒ ๋ด๊ฒ ๋๋ฌด ๊ฟ๋ง๊ฐ์๋ค. ๋ํ ๋ค๋ค ํ๊ตญ์ด ์๋ <strong>์ธ์์ ์๋๋ก ๊ฒฝ์ํ๋ ์ฌ๋</strong>์ธ์ง๋ผ ์์ฒญ๋ ๊ดด๋ฌผ๊ธ ์คํ์ ๊ฐ์ง ์ธ์ฌ๋ค์ด์ด์, ์ฌ๊ธฐ์ ์์ผ๋ฉด ์ฌ๋ฌ๋ชจ๋ก ๋ฐ์ ํ ์ ์๊ฒ ๊ตฌ๋ ์๊ฐํ๋ค.</p><p>๊ทธ๋์ 11์์ ๋ค์ด๋ฒ ๋ฉด์ ์ ๊ณ ๋ฏผํ์ง๋ง, ๊ฒฐ๊ตญ ๋ค์ด๋ฒ๋ฅผ ํฌ๊ธฐํ๊ณ ์ธํด ์ค์ธ S์ฌ๋ฅผ ์ ํํ๋ค. ์ธํด์ญ์ด ๋๋๊ณ 12์ ๋ง์ CEO์ ๊ฐ๋จํ ์จ๋ผ์ธ ๋ฏธํ
(๋ฉด์ )์ ํตํด ์ ๊ท์ง์ ํ์ ๋ฐ์๊ณ , 2022๋
1์๋ถํฐ ์ ๊ท์ง์ผ๋ก ๊ทผ๋ฌดํ๊ธฐ ์์ํ๋ค. ๊ทธ๋ ๊ฒ ๋ํ ์กธ์
1๊ฐ์ ์ ์ ์ทจ๋ฝ๋ฅผ ํด๋ฒ๋ ธ๋ค.</p><p>์ ๋งจ ์ฒ์์ ์คํผ๋ฉ์ผ์ ๋ฐ์์ ๋ <strong>1-year appointment period</strong>๋ผ๊ณ ์ ํ์์ด ์ด๊ฑด ๋ญ๊ฐ ์ถ์๋๋ฐ, ์๊ณ ๋ณด๋ ์ ๊ท์ง์ด ๋ง๊ณ 1๋
๋ง๋ค ์ฐ๋ด ๊ฐฑ์ ํ๋ค๋ ์๋ฏธ์์ ์ด ๋จ์ด๊ฐ ๋ค์ด๊ฐ๋ค๊ณ ํ๋๋ผ.<br><img src="5.png"></p><h4 id="๊ธฐํ-๊ธฐ์
-์ฐพ๊ธฐ-amp-๊ณ ๋ฅด๊ธฐ"><a href="#๊ธฐํ-๊ธฐ์
-์ฐพ๊ธฐ-amp-๊ณ ๋ฅด๊ธฐ" class="headerlink" title="๊ธฐํ: ๊ธฐ์
์ฐพ๊ธฐ & ๊ณ ๋ฅด๊ธฐ"></a>๊ธฐํ: ๊ธฐ์
์ฐพ๊ธฐ & ๊ณ ๋ฅด๊ธฐ</h4><ol><li><p>๊ธฐ์
์ฐพ๊ธฐ</p><ul><li><a href="https://github.com/jojoldu/junior-recruit-scheduler">jojoldu/junior-recruit-scheduler</a>: ์ฃผ๋์ด ๊ฐ๋ฐ์ ์ฑ์ฉ ์ ๋ณด</li><li><a href="https://github.com/milooy/remote-or-flexible-work-company-in-korea">milooy</a>: ํ๊ตญ ์์จ/์๊ฒฉ ์ถํด๊ทผ ํ์ฌ ๋ฆฌ์คํธ</li><li><a href="https://github.com/gcreddy42/hiring2020">gcreddy42/hiring2020</a>: Internship status of companies - COVID-19</li></ul><p>๊ธฐ๋ณธ์ ์ผ๋ก github์ ๊ฒ์์ ํด๋ณด๋ฉด ์ ๋ณด๊ฐ ๋ง์ด ๋์จ๋ค. ๋๊ธฐ์
์ ๋๊ตฌ๋ ๋ค ์ํ
๋ ์ค์๊ธฐ์
์ด๋ (ํนํ) ์คํํธ์
์ ๊ด์ฌ์๋ ์ฌ๋๋ค์ github๋ฅผ ํ์ฉํ๋ ๊ฒ์ ์ถ์ฒํ๋ค.</p></li><li><p>๊ธฐ์
๊ณ ๋ฅด๊ธฐ (feat. ์ข์ ๊ฑฐ๋ฅด๊ธฐ)</p><ul><li><p><strong><code>LinkedIn</code>์ ์ฌ์ฉํ๋ ์ง์์ด ๋ง์ ํ์ฌ๋ก ๊ฐ์</strong><br>์ข์ ๊ธฐ์
๋ค์ ํน์ง์ด <strong>๊ฐ๋ฐ ์ง๊ตฐ์ ๋ํ ์ ํํ ์ง์ ์์ด ๊ณ ๋๋ฆฌ์ง</strong> ์ ํ๋ค๋ ๊ฒ์ธ๋ฐ, ๋ชจ๋ ์ข์๊ฐ ๊ทธ๋ฐ๊ฑด ์๋๊ฒ ์ง๋ง ๋๋ถ๋ถ ๊ตญ๋น์ง์ ์ถ์ ๋ค์ด ๊ณ ์์ง์ ์์ ๊ฒฝ์ฐ ์ด๋ฐ ์ฌํ๊ฐ ์ ๋ฐ์ํ๋ค. ์ข์ ๊ฒฝํ์ด ์๋ ์ง์ธ์๊ฒ ๋ฃ๊ธธ, 1๋
๊ณผ์ ๊ตญ๋น์ง์ ์ถ์ ์์ฌ๊ฐ 4๋
์ ์ปดํจํฐ๊ณตํ๊ณผ ์ถ์ ์ง์ธ์๊ฒ <b>โ์ด๋ ๊ฒ ์ผ์ ๋ชปํ์๋ค๋ ๊ตญ๋น์ง์ ์์
์ข ๋ค์ด๋ณด๋๊ฑฐ ์ด๋์?โ</b>๋ผ๋ฉฐ ํฐ์๋ฆฌ๋ฅผ ์น๊ธฐ๋ ํ๋จ๋ค.</p><p>๊ตญ๋น์ง์์ด๋ผ๋ ๊ธฐ์ด๋ถํฐ ์ ๊ณต๋ถํด์ ์ทจ์งํ๋ฉด ํ ๋ง ์๊ฒ ์ง๋ง, 1๋
์ ๋์ ์ปค๋ฆฌํ๋ผ ๊ฐ์ง๊ณ ๋ CS๊ณต๋ถ๋ฅผ ํ๋ค๊ณ ๋งํ๊ธฐ์ ๋ค์ ๋ฌด๋ฆฌ๊ฐ ์๋ค. ๊ดํ 4๋
์ ๋ํ์ ์ปดํจํฐ๊ณตํ๊ณผ๊ฐ ์์๊น.<br>๊ทธ ์ฌ๋๋ค์ <b>๋๋ ํฌ๋ฃจ๊ฑฐ ํจ๊ณผ์ ๋ฉ์ฒญํจ์ ํผํฌ(์ข๋ฌธ๊ฐ)</b>์ ๋จ๊ณ์ ์๋ค. ์ฆ ์๋ฌด๋ฆฌ ์ด์ฌํ ์ค๋ช
ํด๋ ์์ ์ด ๋ฌด์กฐ๊ฑด ๋ง์ผ๋ฉฐ ๊ฐ๋ฐ์์ ๋ง์ ๋ชป ์์๋ฃ๋ ์ํฉ์ด๋ค.<br><img src="3.png"></p><p>๋ง์ด ๊ธธ์ด์ก๋๋ฐ ์ด์ <code>LinkedIn</code>์ ๋ํ ์ด์ ๋ฅผ ์ค๋ช
ํด๋ณด๊ฒ ๋ค. ๊ฐ๋ฐ์๋ค์ ์ด์ง ๊ณผ์ ์ ๊ฝค ์ฌ๋ฐ๋ค. <strong>์ง์ ๋ค๋ฅธ ํ์ฌ์ ์ด๋ ฅ์๋ฅผ ์ ์ถ</strong>ํ๊ฑฐ๋ <strong>ํค๋ํํฐ๋ค์๊ฒ ์ด์ง ์ ์์ ๋ฐ๊ณ ๋ฐ๋ก ์ฝ๋ฉํ
์คํธ์ ๋ฉด์ ์ ๋ณด๋ ๊ฒฝ์ฐ</strong>๊ฐ ํ๋คํ๋ฐ, ๋๋ถ๋ถ ๋ฅ๋ ฅ์๋ ๊ฒฝ๋ ฅ์ง๊ตฐ์ ํ์๋ก ๋ง์ด ์ด์ง์ ์ ํํ๋ค.</p><p>์ด ๋ ํค๋ํํฐ๋ค์ด ์ฌ์ฉํ๋ ํ๋ซํผ์ด ๋ฌด์์ธ๊ฐ ์์์ผ ํ๋๋ฐ, ๋๋ถ๋ถ์ด <code>LinkedIn</code>์ ์ฌ์ฉํ๋ค. ๊ทธ๋์ ๋ฅ๋ ฅ์๋ ๊ฐ๋ฐ์๋ค์ ๊ธฐ๋ณธ์ ์ผ๋ก <code>LinkedIn</code> ๊ณ์ ์ ๊ฐ๊ณ ์๊ณ , ๊ทธ๋ฐ ์ฌ๋๋ค์ด ๋ง์ ํ์ฌ๋ฅผ ๋ค์ด๊ฐ๋ฉด SW๋ฅผ ์ ๋๋ก ๊ณต๋ถํ ์ฌ๋๋ผ๋ฆฌ ์๋ก ์์ฌ์ํต์ด ์ ๋๊ธฐ ๋๋ฌธ์ ์ข์์ ๋งค์ฐ ๊ฑฐ๋ฆฌ๊ฐ ๋ฉ์ด์ง๋ค.</p></li><li><p><strong>์๊ฐ๋ณด๋ค ๋์์ด ์๋๋ <code>๊ธฐ์
๋ฆฌ๋ทฐ ์ฌ์ดํธ</code></strong><br>๋๋ถ๋ถ ํ์ฌ๋ฅผ ์ง์ํ ๋ ์กํ๋๋, ์ฌ๋์ธ ๋ฑ ๊ธฐ์
๋ฆฌ๋ทฐ๋ฅผ ๋ณด๊ฒ ๋๋ค. ๊ทธ๋ฐ๋ฐ ๋ง์ ๊ธฐ์
์ ์ง์ํด๋ณด๋ ์ด ๋ฆฌ๋ทฐ๋ค์ด ์์งํ ๋์์ด ์๋๋ค.<br>๊ทธ ๋น์ ์ฌ๋๋ค์ด ์ฌ๋ฌ ์ด์ ๋ก ๊ณ ํต์ ๋ฐ์๋ค๊ณ ํ๋๋ผ๋, ๋ง์ ๋ค์ด๊ฐ๋ฉด ์ํฉ์ด ์ด๋ฏธ ๋ค ์ ๋ฆฌ๋์ด ๋งค์ฐ ํธํ๊ฒ ํ์ฌ์ํ์ ํ ์ ์๋ ๊ฒฝ์ฐ๊ฐ ์์๋ค. (์ฃผ๋ณ ์ง์ธ๋ค + ๋ด ๊ฒฝํ๋ด)</p><p>์ด๋ป๊ฒ ์๊ฐํด๋ณด๋ฉด ๋น์ฐํ ์๊ธฐ๋ค. ๊ตณ์ด ๋ฆฌ๋ทฐ ์ฌ์ดํธ์ ๋ค์ด๊ฐ์ ๊ธ์ ๋จ๊ธฐ๋ ์ฌ๋์ด ์์๊น? ์์ฒญ๋ ์ ์ฌ์ฌ์ด๋ ์ฆ์ค์ฌ์ด ์์ง ์์ ์ด์ ๋๋ถ๋ถ ๊ท์ฐฎ๋ค๋ฉฐ ์ฌ์ดํธ ์์ฒด๋ ๋ค์ด๊ฐ์ง ์์ ๊ฒ์ด๋ค. ๋น์ฅ ๋ค์นด๋ผ์ฟ ๋ฐฐ์ ๋ค์ด๊ฐ๋ณด๋ฉด ๋ณ์ ์ด <code>3.8</code> ์ ๋ ๋๋, ์๊ฐ๋ณด๋ค ๊ทธ๋ ๊ฒ ๋์ง ์์ ํ์ ์ ํ์ธํ ์ ์๋ค.</p><p>์ธํฐ๋ทฐ ํ๋ ์์ธ๋ก ๋์์ด ๋์ง ์์๋ค. ๋งค๋
๋ฐ๋๋ ๋ฌธ์ , ๋ฐ๋๋ ๋ฉด์ ๊ด์ผ๋ก ์ ์ค๋ฅ ์ด ์๊ฐ๋ณด๋ค ๋์ง ์์๋ค. ๊ตณ์ด ๋์ค๋ฉด.. ํฌ์ผ๋ชฌ๋นต์์ ํผ์นด์ธ ๊ฑธ๋ฆฌ๋ ํ๋ฅ ๋ก ๊ธฐ์
์ธํฐ๋ทฐ ํ๊ธฐ์ ์๋ ๋ฌธ์ ๊ฐ ๋์๋ ๊ฒ ๊ฐ๋ค.</p></li><li><p><strong>์ ์ฌ์ฑ ์๋ ์ฐ์
๋ถ์ผ ์ ํํ๊ธฐ</strong><br>์
์ฌ๋ฅผ ํ๋ฉด ์ฐ๋ด ํ์์ ํด์ผํ๋๋ฐ ๊ธฐ์
์
์ฅ์์๋ ์ต๋ํ ์ ๊ฒ, ์ ์
์
์ฅ์์๋ ์ต๋ํ ํฌ๊ฒ ์ฐ๋ด ํ์์ ์งํํด์ผ ํ๋ค.</p><p>๋๋ถ๋ถ ํ์ฌ๋ค์ด <b>โ์ฐ๋ฆฌ ํ์ฌ๊ฐ ๋ง์ด ์ด๋ ค์์์, ์ด ์ ๋๋ฉด ๊ฐ๋ฅํ ๊ฒ ๊ฐ์ต๋๋คโ</b>๋ผ๋ ์ผํ ๋นํ ๋ง๋ ์๋๋ ๋ฐฉ์์ผ๋ก ์ฐ๋ด ํ๋ ค์น๊ธฐ๋ฅผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ, ์ฌ์ ์ ์ด๋ฐ ๋ง์ด ๋์ค์ง ์๋๋ก ์ฐจ๋ผ๋ฆฌ <code>์๋ฃ</code>, <code>๊ต์ก</code> ๋ฑ ๋ฏธ๋์ ์ฌ์ฑ์ด ํฐ ๋ถ์ผ๋ฅผ ํ๊ฒ์ผ๋ก ์ฌ์
์ ์ด์ํ๋ ํ์ฌ๋ฅผ ์ ํํ๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ด๋ค.<br>๋ฏธ๋ ์ธ๋ฅ๋ฅผ ์ํ ์ฌ์
์ผ๋ก ๋ํ ์๊ธ์ด๋ ๊ณผ์ ๋ฐ์ค๋๊ฒ ๋ค๋ฅธ ๋ถ์ผ๋ณด๋ค ์ฌ์ด ํธ์ด๊ณ , ๊ทธ๋งํผ ์๋ณธ๊ธ๋ ๋ค๋ฅธ ๋ถ์ผ์ ๋นํด ๋๋ํ๊ธฐ ๋๋ฌธ์ด๋ค.<br>(์ ์ด์ ํ์ฌ ์ฌ์ ์ด ์ด๋ ค์ด๊ฑธ ์ฐ๋ฆฌ๊ฐ ์ ์ดํดํด์ผ ํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ๋ค. ํ์ฌ๊ฐ ์ด๋ ต๋ค? ๊ทธ๊ฑด CEO ์๋ชป์ด๋ค.)</p><p>์ฐธ๊ณ ๋ก ์ด๋ฌํ ๋ถ์ผ๋ฅผ ์ ํํ๋ค๊ณ ํด์ ์ฐ๋ด์ด ๊ทน์ ์ผ๋ก ์ฌ๋ผ๊ฐ๋๊ฑด ์๋๋ค. ์ฐ๋ดํ์์ ๋ง๋นจ์ด๋ค. ๋ง๋นจ๋ก ์๋๋ฐฉ์ด ์ ์ ์ฐจ๋ฆฌ์ง ๋ชปํ๋๋ก ํํํ ํธ๋ก๋ก ํธ์ด๋ฒ๋ฆฌ๋ ๊ฒ์ด๋ค.</p></li></ul></li></ol><p><br><br></p><h2 id="5-๐-์๋ฅ-amp-์ธํฐ๋ทฐ-์ค๋น๋ฒ"><a href="#5-๐-์๋ฅ-amp-์ธํฐ๋ทฐ-์ค๋น๋ฒ" class="headerlink" title="5. ๐ ์๋ฅ & ์ธํฐ๋ทฐ ์ค๋น๋ฒ"></a>5. ๐ ์๋ฅ & ์ธํฐ๋ทฐ ์ค๋น๋ฒ</h2><p>(์์ ์ค. ์ถํ ์
๋ก๋ ์์ )</p><p><br><br></p><h2 id="6-๐-์ต์ข
-์ด๋ ฅ์-x2F-ํฌํธํด๋ฆฌ์ค-x2F-๊ธฐํ-์คํ"><a href="#6-๐-์ต์ข
-์ด๋ ฅ์-x2F-ํฌํธํด๋ฆฌ์ค-x2F-๊ธฐํ-์คํ" class="headerlink" title="6. ๐ ์ต์ข
์ด๋ ฅ์ / ํฌํธํด๋ฆฌ์ค / ๊ธฐํ ์คํ"></a>6. ๐ ์ต์ข
์ด๋ ฅ์ / ํฌํธํด๋ฆฌ์ค / ๊ธฐํ ์คํ</h2><ul><li>(๋งํฌ ์์ ์ค. ์ถํ ์
๋ก๋ ์์ )</li><li>๊ธฐํ ์คํ: OPIc IH (๋ฑ ํ๋..)</li></ul><p><br><br></p><h2 id="7-๐ผ-์ทจ์
-์ดํ๋ก๋"><a href="#7-๐ผ-์ทจ์
-์ดํ๋ก๋" class="headerlink" title="7. ๐ผ ์ทจ์
์ดํ๋ก๋?"></a>7. ๐ผ ์ทจ์
์ดํ๋ก๋?</h2><p>ํ๊ต ๊ณผ์ ๋ก ๋ป๋ป๋๋ ์์ ์ด ๋๋๊ณ , ๋๋ฆ์ ์ธ๊ฐ์ผ๋ก์ ๊ถ๋ฆฌ๋ฅผ ๋๋ฆด ์ ์๊ฒ ๋์๋ค. ์ด์ ํ๋ฃจ์ 3~4์๊ฐ์ ์๊ฒ ๋์๋ค. ๋ ์์ผํ๋๊ฑธ ์๋๋ฐ ๋ชธ๋ฑ์๋ฆฌ๊ฐ ๋๋ฌด ๊ณ ์ํด์ ์ฃผ์ธ ๋ง์ ์๋ฃ๋ ๋ฐํญ์๊ฐ ๋์๋คโฆ ใ
ใ
</p><p>ํ์ฌ ๊ทผ๋ฌด๋ฅผ ๋๋ง์น๋ฉด ๊ทผ๋ฌด ๊ด๋ จ ๊ธฐ์ (AWS, React ๋ฑ)์ด๋ ์์ด๊ณต๋ถ๋ฅผ, ๊ทธ๋ฆฌ๊ณ ๋ถ์
(๋ธ๋ก๊ทธ, ์ ํ๋ธ ๋ฑ)์ ํ๊ณ ์๋ค. ๋ํ ์ง์
์ ๋ฐ๊พธ๊ธฐ ์ํด ์ด์ ๋ ์ด๊ฒ์ ๊ฒ ๊ด์ฌ์๋ ๋ถ์ผ๋ฅผ ํ๋ ์ฉ ๊ฑด๋ค๋ฉด์ ๋ด ์ฌ๋ฅ์ ํ์ธํ๋ ์ค์ด๋ค. <del>ํญ์ ์๊ธฐํ์ง๋ง ์ปดํจํฐ ํ๊ธฐ ์ง์ง ์ซ๋ค ใ
ใ
</del></p><p>์ด ๊ธ์ด ์ทจ์
์ ์ํ๋ ๋๊ตฐ๊ฐ์๊ฒ ๋์์ด ๋๊ธธ ๋ฐ๋ผ๋ฉฐ, ๋ชจ๋๊ฐ ์ํ๋ ์ง์ข
์ผ๋ก ๋น ๋ฅด๊ฒ ํฉ๊ฒฉํ์ผ๋ฉด ์ข๊ฒ ๋ค.</p><p><br><br></p><h2 id="8-๊ฐ์ด-๋ณด๋ฉด-์ข์-์์ค๋ค"><a href="#8-๊ฐ์ด-๋ณด๋ฉด-์ข์-์์ค๋ค" class="headerlink" title="8. ๊ฐ์ด ๋ณด๋ฉด ์ข์ ์์ค๋ค"></a>8. ๊ฐ์ด ๋ณด๋ฉด ์ข์ ์์ค๋ค</h2><ul><li><a href="https://ruby-kim.github.io/2022/05/10/Retrospect/Bachelor/">๋ํ์ ๋ ์์๋ค๋ฉด ์ข์์ SW ํ</a></li><li><a href="https://ruby-kim.github.io/2024/09/12/Retrospect/Portfolio/">๊ฐ๋ฐ์ ํฌํธํด๋ฆฌ์ค, ์ด๋ ๊ฒ ์ค๋นํด๋ณด์</a></li></ul>]]></content>
<categories>
<category> ๐ Retrospect </category>
</categories>
<tags>
<tag> Retrospect </tag>
<tag> Job </tag>
</tags>
</entry>
<entry>
<title>[React.js] React ๋ผ์ดํ ์ฌ์ดํด</title>
<link href="/2022/04/22/Frontend/Reactjs/ReactLifeCycle/"/>
<url>/2022/04/22/Frontend/Reactjs/ReactLifeCycle/</url>
<content type="html"><![CDATA[<h2 id="React-Life-Cycle"><a href="#React-Life-Cycle" class="headerlink" title="React Life Cycle"></a>React Life Cycle</h2><hr><p>Reacts๋ ์ปดํฌ๋ํธ(component) ๊ธฐ๋ฐ์ View๋ฅผ ์ค์ฌ์ผ๋ก ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.<br>๋ฐ๋ผ์ ๊ฐ๊ฐ์ ์ปดํฌ๋ํธ์๋ ๋ผ์ดํ์ฌ์ดํด, ์ฆ ์ปดํฌ๋ํธ์ <code>์๋ช
์ฃผ๊ธฐ</code>๊ฐ ์กด์ฌํ๋๋ฐ, ์ปดํฌ๋ํธ์ ์๋ช
์ ๋ณดํต <strong>ํ์ด์ง์์ ๋ ๋๋ง๋๊ธฐ ์ ์ธ ์ค๋น ๊ณผ์ ์์ ์์ํ์ฌ ํ์ด์ง์์ ์ฌ๋ผ์ง ๋ ๋๋๋ค</strong>.</p><pre class="line-numbers language-javascript"><code class="language-javascript"><span class="token keyword">const</span> App <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">(</span> <span class="token operator"><</span>div<span class="token operator">></span> <span class="token operator"><</span>h1<span class="token operator">></span>Hello World<span class="token operator"><</span><span class="token operator">/</span>h1<span class="token operator">></span> <span class="token operator"><</span><span class="token operator">/</span>div<span class="token operator">></span> <span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token punctuation">;</span>ReactDOM<span class="token punctuation">.</span><span class="token function">render</span><span class="token punctuation">(</span><span class="token operator"><</span>App <span class="token operator">/</span><span class="token operator">></span><span class="token punctuation">,</span> document<span class="token punctuation">.</span><span class="token function">querySelector</span><span class="token punctuation">(</span><span class="token string">"#root"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>์๋์ ์ฌ์ง์ด ๋ฐ๋ก ๋ฆฌ์ํธ ๋ผ์ดํ ์ฌ์ดํด์ ๋ํ๋ธ ๊ฒ์ด๋ค.<br>(์ฌ์ดํธ๋ <a href="https://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/">์ฌ๊ธฐ</a> ์ฐธ๊ณ )<br><img src="1.png"></p><p><br><br></p><h2 id="Mount-์์ฑ๋ -๋"><a href="#Mount-์์ฑ๋ -๋" class="headerlink" title="Mount (์์ฑ๋ ๋)"></a>Mount (์์ฑ๋ ๋)</h2><hr><ol><li><p>constructor</p><ul><li>ํ์ด์ง ๋ก๋ ๋๊ณ ์ปดํฌ๋ํธ๊ฐ ๋ง๋ค์ด์ง ๋ ์ฒ์์ผ๋ก ์คํ๋จ</li><li>์ด๊ธฐ state ์ค์ ์ด ํ์ํ ๋ ์ฌ์ฉ๋จ</li></ul><pre class="line-numbers language-javascript"><code class="language-javascript"><span class="token comment" spellcheck="true">// Class</span><span class="token keyword">class</span> <span class="token class-name">Example</span> <span class="token keyword">extends</span> <span class="token class-name">React<span class="token punctuation">.</span>Component</span> <span class="token punctuation">{</span> <span class="token function">constructor</span><span class="token punctuation">(</span>props<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">super</span><span class="token punctuation">(</span>props<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">this</span><span class="token punctuation">.</span>state <span class="token operator">=</span> <span class="token punctuation">{</span> count<span class="token punctuation">:</span> <span class="token number">0</span> <span class="token punctuation">}</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token comment" spellcheck="true">// Hooks</span><span class="token keyword">const</span> Example <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token punctuation">{</span> <span class="token keyword">const</span> <span class="token punctuation">[</span>count<span class="token punctuation">,</span>setCount<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">useState</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li><li><p>static getDerivedStateFromProps(nextProps, prevState)</p><ul><li>React 16.3๋ฒ์ ์ดํ์ ์๊ธด ๋ฉ์๋</li><li>props๋ก ๋ฐ์ ์จ ๊ฐ์ state์ ๋๊ธฐํ์ํค๋ ์ฉ๋</li><li>์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ, ์
๋ฐ์ดํธ๋ ๋ ํธ์ถ๋จ</li><li>๋ฆฌํดํ์
์ Javascript Object๋ก ์ค์ ํด์ผ ํจ</li><li>๋ฆฌํด๋ Object๋ State์ ๋ฐ์๋จ</li></ul><pre class="line-numbers language-javascript"><code class="language-javascript"><span class="token comment" spellcheck="true">// Class</span><span class="token keyword">class</span> <span class="token class-name">Example</span> <span class="token keyword">extends</span> <span class="token class-name">React<span class="token punctuation">.</span>Component</span> <span class="token punctuation">{</span> <span class="token keyword">static</span> <span class="token function">getDerivedStateFromProps</span><span class="token punctuation">(</span>nextProps<span class="token punctuation">,</span> prevState<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>nextProps<span class="token punctuation">.</span>value <span class="token operator">!==</span> prevState<span class="token punctuation">.</span>value<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> value<span class="token punctuation">:</span> nextProps<span class="token punctuation">.</span>value<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> <span class="token keyword">null</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li><li><p>Render()</p><ul><li>React component์ ์ ์ผํ ํ์ ๋ฉ์๋</li><li>state ๋ณ๊ฒฝ์ด ์์ผ๋ฉด side effect ๋ฐ์</li><li>ํจ์ํ ์ปดํฌ๋ํธ์์๋ render ์ฌ์ฉ ์์ด ๋ ๋๋ง ๊ฐ๋ฅ</li></ul><pre class="line-numbers language-javascript"><code class="language-javascript"><span class="token comment" spellcheck="true">// Class</span><span class="token keyword">class</span> <span class="token class-name">Example</span> <span class="token keyword">extends</span> <span class="token class-name">React<span class="token punctuation">.</span>Component</span> <span class="token punctuation">{</span> <span class="token function">render</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token operator"><</span>div<span class="token operator">></span>์ปดํฌ๋ํธ<span class="token operator"><</span><span class="token operator">/</span>div<span class="token operator">></span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token comment" spellcheck="true">// Hooks</span><span class="token keyword">const</span> example <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token operator"><</span>div<span class="token operator">></span>์ปดํฌ๋ํธ<span class="token operator"><</span><span class="token operator">/</span>div<span class="token operator">></span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li><li><p>componentDidMount()</p><ul><li>์ปดํฌ๋ํธ๊ฐ DOM์ ์ถ๊ฐ ๋ ํ ์คํ</li><li>DOM๊ณผ ์ํธ์์ฉํ๊ฑฐ๋ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ฌ์ฉํ๋ ์ฝ๋๋ค์ ์ฌ๊ธฐ์ ์์ฑ (ajax ๋ฑ)</li><li>ํจ์ํ Hooks์์๋ useEffect๋ฅผ ํ์ฉํ์ฌ ๊ตฌํ<ul><li>useEffect์ [] ์์กด์ฑ ๋ฐฐ์ด์ ์ง์์ผ ๋๊ฐ์ ๋ฉ์๋๋ก ๊ตฌํํ ์ ์์</li></ul></li></ul><pre class="line-numbers language-javascript"><code class="language-javascript"><span class="token comment" spellcheck="true">// Class</span><span class="token keyword">class</span> <span class="token class-name">Example</span> <span class="token keyword">extends</span> <span class="token class-name">React<span class="token punctuation">.</span>Component</span> <span class="token punctuation">{</span> <span class="token function">componentDidMount</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token operator">...</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token comment" spellcheck="true">// Hooks</span><span class="token keyword">const</span> Example <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token punctuation">{</span> <span class="token function">useEffect</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token punctuation">{</span> <span class="token operator">...</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li></ol><p><br><br></p><h2 id="Update-์
๋ฐ์ดํธ-ํ -๋"><a href="#Update-์
๋ฐ์ดํธ-ํ -๋" class="headerlink" title="Update (์
๋ฐ์ดํธ ํ ๋)"></a>Update (์
๋ฐ์ดํธ ํ ๋)</h2><hr><ol><li><p>static getDerivedStateFromProps(nextProps, prevState)</p><ul><li>Mount ๋จ๊ณ์ ๋์ผ</li></ul></li><li><p>shouldComponentUpdate</p><ul><li>๋ฆฌํด ํ์
์ True, False</li><li>๋ฆฌํด๋๋ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ DOM์ ๋ฆฌ ๋ ๋๋ง์ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ </li><li>์ฑ๋ฅ ๊ฐ์ ์ ์ํด ์ฌ์ฉ์ด ๊ฐ๋ฅ</li></ul><pre class="line-numbers language-javascript"><code class="language-javascript"><span class="token comment" spellcheck="true">// Class</span><span class="token keyword">class</span> <span class="token class-name">Example</span> <span class="token keyword">extends</span> <span class="token class-name">React<span class="token punctuation">.</span>Component</span> <span class="token punctuation">{</span> <span class="token function">shouldComponentUpdate</span><span class="token punctuation">(</span>nextProps<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> nextProps<span class="token punctuation">.</span>value <span class="token operator">!==</span> <span class="token keyword">this</span><span class="token punctuation">.</span>props<span class="token punctuation">.</span>value <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token comment" spellcheck="true">// Hooks</span><span class="token keyword">const</span> Example <span class="token operator">=</span> React<span class="token punctuation">.</span><span class="token function">memo</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token punctuation">{</span> <span class="token operator">...</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">(</span>prevProps<span class="token punctuation">,</span> nextProps<span class="token punctuation">)</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token punctuation">{</span> <span class="token keyword">return</span> nextProps<span class="token punctuation">.</span>value <span class="token operator">===</span> prevProps<span class="token punctuation">.</span>value <span class="token punctuation">}</span><span class="token punctuation">)</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li><li><p>Render()</p><ul><li>Mount ๋จ๊ณ์ ๋์ผ</li></ul></li><li><p>getSnapshotBeforeUpdate</p><ul><li>Virtual DOM์ด ์ค์ DOM์ ๋ฐ์๋๊ธฐ ์ง์ ์ ์คํ๋จ</li><li>์ด์ ๊ณผ ํ์ฌ์ props์ state์ ์ ๊ทผ ๊ฐ๋ฅ</li><li>return์ผ๋ก ๋๊ฒจ์ง ๊ฐ์ componentDidUpdate์ 3๋ฒ์งธ ์ธ์๋ก ์ ๋ฌ๋จ</li><li>์ฑํ
ํ๋ฉด์ฒ๋ผ ์คํฌ๋กค ์์น๋ฅผ ๋ฐ๋ก ์ฒ๋ฆฌํ๋ ์์
์ด ํ์ํ UI์์ ์ฃผ๋ก ์ฌ์ฉ</li><li>ํจ์ํ์์๋ ์์ง ์ด ๊ธฐ๋ฅ์ ๋์ฒํ ๋งํ hook์ด ์์</li></ul><pre class="line-numbers language-javascript"><code class="language-javascript"><span class="token keyword">class</span> <span class="token class-name">Example</span> <span class="token keyword">extends</span> <span class="token class-name">React<span class="token punctuation">.</span>Component</span> <span class="token punctuation">{</span> <span class="token function">getSnapshotBeforeUpdate</span><span class="token punctuation">(</span>prevProps<span class="token punctuation">,</span> prevState<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>prevProps<span class="token punctuation">.</span>list<span class="token punctuation">.</span>length <span class="token operator"><</span> <span class="token keyword">this</span><span class="token punctuation">.</span>props<span class="token punctuation">.</span>list<span class="token punctuation">.</span>length<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">const</span> list <span class="token operator">=</span> <span class="token keyword">this</span><span class="token punctuation">.</span>listRef<span class="token punctuation">.</span>current <span class="token keyword">return</span> list<span class="token punctuation">.</span>scrollHeight <span class="token operator">-</span> list<span class="token punctuation">.</span>scrollTop <span class="token punctuation">}</span> <span class="token keyword">return</span> <span class="token keyword">null</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li><li><p>componentDidUpdate</p><ul><li>๋งค ์
๋ฐ์ดํธ๋ง๋ค UI sync์ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋ ์์ฑ</li><li>๋ฆฌ๋๋๋ง์ ์๋ฃ ํ ์คํ: ์
๋ฐ์ดํธ๊ฐ ๋๋ ์งํ์ด๋ฏ๋ก DOM๊ด๋ จ ์ฒ๋ฆฌ๋ฅผ ํด๋ ๋ฌด๋ฐฉ</li></ul><pre class="line-numbers language-javascript"><code class="language-javascript"><span class="token comment" spellcheck="true">// Class</span><span class="token keyword">class</span> <span class="token class-name">Example</span> <span class="token keyword">extends</span> <span class="token class-name">React<span class="token punctuation">.</span>Component</span> <span class="token punctuation">{</span> <span class="token function">componentDidUpdate</span><span class="token punctuation">(</span>prevProps<span class="token punctuation">,</span> prevState<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token operator">...</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token comment" spellcheck="true">// Hooks</span><span class="token keyword">const</span> Example <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token punctuation">{</span> <span class="token function">useEffect</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token punctuation">{</span> <span class="token operator">...</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li></ol><p><br><br></p><h2 id="UnMount-์ ๊ฑฐํ -๋"><a href="#UnMount-์ ๊ฑฐํ -๋" class="headerlink" title="UnMount (์ ๊ฑฐํ ๋)"></a>UnMount (์ ๊ฑฐํ ๋)</h2><hr><ol><li><p>ComponentWillUnMount</p><ul><li>DOM์์ ์ปดํฌ๋ํธ๊ฐ ์ง์์ง๋ ์คํ</li><li>์ปดํฌ๋ํธ์ ๊ด๋ จ๋ ๊ฒ์ ์ ๋ฆฌํ๋๋ฐ ์ฌ์ฉ<br>ex) ๋ก๊ทธ์์์ ์ฃผ ๊ตฌ์ฑ Component๋ฅผ ํด์ ํ๊ธฐ ์ ์ ์ฌ์ฉ์ ์ธ๋ถ์ ๋ณด์ ๋ชจ๋ ์ธ์ฆ ํ ํฐ์ ์ง์ด๋ค๊ฑฐ๋ setInterval์ clearํ๋ ๋ฑ์ ์ฌ์ฉ</li><li>ํจ์์ ์ปดํฌ๋ํธ์์๋ useEffect CleanUp ํจ์๋ก ๊ตฌํ</li></ul><pre class="line-numbers language-javascript"><code class="language-javascript"><span class="token comment" spellcheck="true">// Class</span><span class="token keyword">class</span> <span class="token class-name">Example</span> <span class="token keyword">extends</span> <span class="token class-name">React<span class="token punctuation">.</span>Component</span> <span class="token punctuation">{</span> <span class="token function">coomponentWillUnmount</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token operator">...</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token comment" spellcheck="true">// Hooks</span><span class="token keyword">const</span> Example <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token punctuation">{</span> <span class="token function">useEffect</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token punctuation">{</span> <span class="token operator">...</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li><li><p>componentDidCatch</p><ul><li>์ปดํฌ๋ํธ ๋ ๋๋ง ๋์ค ์๋ฌ๊ฐ ๋ฐ์ํ์ ๋ ์ดํ๋ฆฌ์ผ์ด์
์ ๋ฉ์ถ์ง ์๊ณ ์ค๋ฅ UI๋ฅผ ๋ณด์ฌ์ค</li><li>๊ณง Hooks์ ํด๋น ๋ผ์ดํ ์ฌ์ดํด ๋ฉ์๋ ์ถ๊ฐ ์์ </li></ul><pre class="line-numbers language-javascript"><code class="language-javascript"><span class="token comment" spellcheck="true">// Class</span><span class="token keyword">class</span> <span class="token class-name">Example</span> <span class="token keyword">extends</span> <span class="token class-name">React<span class="token punctuation">.</span>Component</span> <span class="token punctuation">{</span> <span class="token function">componentDidCatch</span><span class="token punctuation">(</span>error<span class="token punctuation">,</span> info<span class="token punctuation">)</span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'Error'</span><span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li></ol>]]></content>
<categories>
<category> โจ Frontend </category>
</categories>
<tags>