Charming-Tech
ì¸ê¸° ê¸
-
[íê³ ] ì¸íë©ì í´ì¬íë©°.
[íê³ ] ì¸íë©ì í´ì¬íë©°.
2022.07.29ì¸íë©ì í´ì¬íë©° í¼ìë§ì ìê°ì 주ì 리주ì 리 ì ì´ë³´ë ¤ í©ëë¤. ê·¸ë¥ ìê°ëë ê²ë¤ë§, 기ìµíê³ ì¶ì ê²ë¤ë§ ì íìì íë¥ ì´ êµì¥í í½ëë¤. ì°ë¤ë³´ë 꽤ë 긴 ê¸ì´ ëììµëë¤. ê°ë¨íê² ìì½íìë©´ ì¸íë©ì ì¥ì ì ì±ì¥í ì ìë íì¬ë¼ë ê²ì´ê³ ë¨ì ì ì ìì£¼ë¡ ìì¬ ìì í ê² ìë¤ë ê²ì ëë¤. 2022ë 첫 íê³ ë¡ í´ì¬ íê³ ë¥¼ ì°ë ì 를 ë³´ë©° ë§ìê» ë¹ìì´ì£¼ì길 ë°ëëë¤. ì¸íë© ë©´ì ì ë ìµì´ë¡ ì¸íë©ìì FE, BE ë©´ì ì ë ë¤ ë³¸ ì¬ëì ëë¤. ê·¸ ì´ì¼ê¸°ë¥¼ ì ê¹ í´ë리ìë©´.. 1ì°¨ 기ì ë©´ì ì ë³´ë¬ ë©´ì ì¥ ìë´ë¥¼ ë°ìì 기ë¤ë¦¬ë ì¤ ë©´ì ê´ ì¸ë¶ì´ ë¤ì´ì¤ì ¨ìµëë¤. ë¤ë¤ ë무 ì¸ìì´ ì¢ëêµ°ì. ííí¸í¸ ìì¼ë©´ì ë©´ì ì ìì´ì¤ ë¸ë ì´í¹ ìê°ì ë³´ë´ë ì¤ ëê° ìê·¸ë 거리기 ììíìµëë¤. ë©´ì ê´ : 구.. -
Kotest를 íì©í´ Spring Bootìì í ì¤í¸ì½ë ìì±í기
Kotest를 íì©í´ Spring Bootìì í ì¤í¸ì½ë ìì±í기
2023.01.29Kotlin + Spring Boot íë¡ì í¸ìì í ì¤í¸ì½ë를 Junitì¼ë¡ ìì±í기ë ì½ì§ ììµëë¤. Kotlin 컨벤ì ì 무ìíê³ Annotation ë¡ì¹ í ì± í ì¤í¸ì½ë를 ìì±íë¤ë©´ ë¶ë ¸ì ì°¬ Jetbrains IntelliJê° ê°ì기 ì»´íì¼ì íì§ ìì ìë ììµëë¤. ê·¸ëì íìë¶í° Kotlinì ìí´ ê°ë°ë í ì¤í¸ íë ììí¬ë¡ Kotlin ìµì 문ë²ì ë° ë¹ ë¥´ê² ì§ìíê³ ìë Kotestì í¨ê» í ì¤í¸ì½ë를 ìì±íë¤ë©´ ì ì§ë³´ì측면ììë í¨ì¬ ë í¨ê³¼ì ì¼ ê²ì ëë¤. í ì¤í¸ ì¤ë¹ Kotestì Spring Boot Test를 ì¬ì©í기 ìí´ ìì¡´ì±ì ìëì ê°ì´ ì¶ê°í©ëë¤. (ìëì H2 DB를 ì´ì©í´ í ì¤í¸ë¥¼ ìíí ìì ì¼ë¡ h2 ìì¡´ì±ë ì¶ê°í©ëë¤.) testImplementation("com... -
[Kotlin] Scope í¨ì (let, run, with, apply, also)
[Kotlin] Scope í¨ì (let, run, with, apply, also)
2022.03.27Scope í¨ì ì½í린 íì¤ ë¼ì´ë¸ë¬ë¦¬ë ê°ì²´ì 컨í ì¤í¸ ë´ìì ì½ë ë¸ë(ìµëª í¨ì)ì ì¤íí기 ìí 목ì ì ê°ì§ ì¬ë¬ê°ì§ í¨ì를 ì ê³µí©ëë¤. ì´ë° í¨ìë¤ì ëë¤ìì¼ë¡ í¸ì¶ í ì ìê³ , ì´ë ììë¡ ë²ì(scope)를 íì±í©ëë¤. í´ë¹ ë²ì ë´ììë ê°ì²´ì ì´ë¦ì´ ìì´ë ê°ì²´ì ì ê·¼í ì ììµëë¤. ì´ë¬í í¨ì를 Scope funtionsë¼ê³ í©ëë¤. ì¤ì½í í¨ìì ì¢ ë¥ë ìëì ê°ìµëë¤. let run with apply also 기본ì ì¼ë¡, ì´ í¨ìë¤ì ëì¼í ìí ì ìíí©ëë¤. ë¤ë¥¸ì ì´ ìë¤ë©´, scope ë´ìì ê°ì²´ë¥¼ ì´ë¤ ë°©ìì¼ë¡ í¸ì¶íëì§, ë¦¬í´ ê°ì ì´ë»ê² ì²ë¦¬íëì§ì ëë¤. ìëë Person classê° ìì ë scope functionì ì¬ì©ë²ì ëë¤. Person.kt data cl.. -
[node.js] DI(ìì¡´ì± ì£¼ì ) 구íí기
[node.js] DI(ìì¡´ì± ì£¼ì ) 구íí기
2021.08.20DI (Dependency Injection) ìì¡´ì± ì£¼ì (DI)ë ì ìë ¤ì§ ê¸°ì ì´ë¤. IoC 컨í ì´ë를 ì´ì©í DIë ì¬ë¬ 모ëì íì¥ì±ê³¼ ë 립ì±ì í° ëìì ì¤ë¤. í¹í Springìì Java Beanì ì´ì©íì¬ DI를 구ííë ê²ì´ êµë´ìì ê°ì¥ ì ëª íë¤ê³ ìê°íë¤. íì§ë§ Node.jsìì DIë ê·¸ë ê² íë°íê² ì°ì´ê³ ìì§ ìë ê² ê°ë¤. ìëíë©´ requireë¡ ëª¨ëì ë°ë¡ ë¶ë¬ì¤ë©´ ë기 ë문ì êµ³ì´ íìì±ì 못 ëë¼ê¸° ë문ì´ë¤. íì§ë§ ì´ë²ì ê³µë¶ë¥¼ íë©´ì nodeììë DI를 í´ì¼ íë ì´ì 를 ìê² ëì´ì ìì ì½ëì í¨ê» ì¤ëª íê³ ì íë¤. DIì í ì¤í¸ ì½ë ìì¡´ì± ì£¼ì ì íëì í¨í´ì´ë¤. ë§ì½ ìì¡´ëë í´ëì¤ë¥¼ 매ê°ë³ìë¡ ì ë¬í´ì¤ë¤ë©´, 모ë ììì í´ëì¤ë¥¼ ë¶ë¬ì¤ê±°ë ìë¡ ë§ëë ê².. -
[node.js] ê²¬ê³ í node.js íë¡ì í¸ ì¤ê³í기 (ë²ì)
[node.js] ê²¬ê³ í node.js íë¡ì í¸ ì¤ê³í기 (ë²ì)
2021.08.09본 í¬ì¤í¸ë Sam Quinnì âBulletproof node.js project architectureâ ê¸ì ë²ìí ê²ì ëë¤. í¼ì 보기 ë무 ìê¹ì´ ê¸ì´ê¸°ì ë²ìíì¬ ê³µì í©ëë¤. Introduction Express.jsë node.js REST API를 ë§ëëë° ì¢ì íë ììí¬ì§ë§, ì´ë»ê² node.js íë¡ì í¸ êµ¬ì¡°ë¥¼ ì¡ìì¼ í ì§ ìë ¤ì£¼ì§ ììµëë¤. ì°ìµê² ë¤ë¦´ ìë ìì§ë§, ì´ê±´ ë§¤ì° í° ë¬¸ì ì ëë¤. ì¬ë°ë¥¸ node.js íë¡ì í¸ êµ¬ì¡°ë ì½ëì ì¤ë³µì í¼í´ ì£¼ê³ ìì ì±ì ëì¬ì£¼ë©°, ë¹ì ì ìë¹ì¤ë¥¼ íì¥íëë° ëìì´ ë ê²ì ëë¤. ì´ í¬ì¤í¸ë ë¤ë ê°ì ë¶ì¡±íë ì¤ê³ì ëì í¨í´, ê·¸ë¦¬ê³ ììì´ ë§ì ì½ë 리í©í°ë§ ê²½íì íµí´ ì°ì¸ íëì 리ìì¹ì ëë¤. 목차 í´ë 구조 3 ê³ì¸µ ì¤ê³ (3 Lay.. -
[javascript] ì½ì¤í/ë©ëª¨ë¦¬í 구조, ë°ì´í° ì ì¥/참조 ì리
[javascript] ì½ì¤í/ë©ëª¨ë¦¬í 구조, ë°ì´í° ì ì¥/참조 ì리
2021.08.27ì½ ì¤í, ë©ëª¨ë¦¬ íì´ë? ìë°ì¤í¬ë¦½í¸ ìì§ì Memory Heap ê³¼ Call Stack ì¼ë¡ 구ì±ëì´ ììµëë¤. ê°ì¥ ì ëª í ê²ì´ 구ê¸ì V8 Engineì ëë¤. ìë°ì¤í¬ë¦½í¸ë ë¨ì¼ ì¤ë ë (sigle thread) íë¡ê·¸ëë° ì¸ì´ì¸ë°, ì´ ì미ë Call Stackì´ íë ë¼ë ì´ì¼ê¸°ì ëë¤. ì¦ ë©í°ê° ëì§ ìê³ , íëì© íëì© ì²ë¦¬íë¤ë ì미ì ëë¤. ì½ ì¤í(Call Stack) ìì íì (ì«ì ë±) ë°ì´í°ê° ì ì¥ëë¤. ì¤í ì½í ì¤í¸(Execution Context)를 íµí´ 1) ë³ì ìë³ì(ì´ë¦) ì ì¥, 2) ì¤ì½í ì²´ì¸ ë° this ê´ë¦¬, 3) ì½ë ì¤í ìì ê´ë¦¬ ë±ì ìí. *ì¤í 컨í ì¤í¸ì ìì¸ êµ¬ì¡° ë° ì리ë ì´ ê¸ì ë²ì를 ëì´ê°ë¯ë¡ ë¤ë£¨ì§ ììµëë¤. ë©ëª¨ë¦¬ í(Memory Heap).. -
[NestJS] JWT ë¡ê·¸ì¸ 구í ìì (bcrypt, passport, JWT, cookie)
[NestJS] JWT ë¡ê·¸ì¸ 구í ìì (bcrypt, passport, JWT, cookie)
2021.12.29ì¬ì©ì ì¸ì¦/ì¸ê°ë 모ë ì¹ ì í리ì¼ì´ì ìì ê°ì¥ ì¤ìí ë¶ë¶ì ëë¤. ì´ì í¬ì¤í¸ììë Node.js를 ì´ì©íì¬ JWTë¡ê·¸ì¸ì 구ííìµëë¤. [node.js] JWT 구í ìì Intro ì¹ / ì± ê°ë°ì íë©´ ë¡ê·¸ì¸ ê³¼ì ìì ë°ëì ë§ëê² ëë ê°ë ì´ ì¿ í¤-ì¸ì ì´ë¤. ìµê·¼ ë¤ì´ IT ì¸íë¼ êµ¬ì±ìë ë§ì ë³íê° ìê²¼ë¤. ì¹ ê¸°ë°ì ìë¹ì¤ë¤ì ì¹ê³¼ ì±ì í¨ê» ìë¹ì¤í charming-kyu.tistory.com ì´ë²ìë NPM ë¼ì´ë¸ë¬ë¦¬ìì ê°ì¥ ë§ì´ ì¬ì©ëë Passport를 ì´ì©íì¬ NestJS ì í리ì¼ì´ì ì ë¡ê·¸ì¸ì 구íí´ë³´ê² ìµëë¤. ëí í´ì±(Hashing)ì íµí´ ì¬ì©ì를 ë±ë¡íê³ ë¹ë°ë²í¸ë¥¼ ìì íê² ìí¸ííì¬ ë³´í¸íê² ìµëë¤. User Entity ì¸ì¦ì ê³ ë ¤í ë ê°ì¥ 먼ì í´ì¼ í ì¼ì ì¬.. -
[Kotlin] Scope í¨ì (let, run, with, apply, also)
[Kotlin] Scope í¨ì (let, run, with, apply, also)
2022.03.27Scope í¨ì ì½í린 íì¤ ë¼ì´ë¸ë¬ë¦¬ë ê°ì²´ì 컨í ì¤í¸ ë´ìì ì½ë ë¸ë(ìµëª í¨ì)ì ì¤íí기 ìí 목ì ì ê°ì§ ì¬ë¬ê°ì§ í¨ì를 ì ê³µí©ëë¤. ì´ë° í¨ìë¤ì ëë¤ìì¼ë¡ í¸ì¶ í ì ìê³ , ì´ë ììë¡ ë²ì(scope)를 íì±í©ëë¤. í´ë¹ ë²ì ë´ììë ê°ì²´ì ì´ë¦ì´ ìì´ë ê°ì²´ì ì ê·¼í ì ììµëë¤. ì´ë¬í í¨ì를 Scope funtionsë¼ê³ í©ëë¤. ì¤ì½í í¨ìì ì¢ ë¥ë ìëì ê°ìµëë¤. let run with apply also 기본ì ì¼ë¡, ì´ í¨ìë¤ì ëì¼í ìí ì ìíí©ëë¤. ë¤ë¥¸ì ì´ ìë¤ë©´, scope ë´ìì ê°ì²´ë¥¼ ì´ë¤ ë°©ìì¼ë¡ í¸ì¶íëì§, ë¦¬í´ ê°ì ì´ë»ê² ì²ë¦¬íëì§ì ëë¤. ìëë Person classê° ìì ë scope functionì ì¬ì©ë²ì ëë¤. Person.kt data cl..
ìµì ê¸
-
[mysql] 미ì¬ì© ì¸ë±ì¤ íì¸í기
[mysql] 미ì¬ì© ì¸ë±ì¤ íì¸í기
2024.10.13performance_schema ì¤ì MySQLììë performance_schemaì table_io_waits_summary_by_index_usage í ì´ë¸ì íµí´Â ì¸ë±ì¤ì ì¬ì©Â ë¹ë를 모ëí°ë§í  ì ììµëë¤. ì´Â í ì´ë¸ì ê°Â í ì´ë¸ì ê°Â ì¸ë±ì¤ì ëí I/O íëì ìì§íë©°, ì´ë¥¼Â íµí´Â ì¬ì©ëì§Â ìë ì¸ë±ì¤ë¥¼Â íì í  ì ììµëë¤. ì¸ë±ì¤Â I/O íëì íì¸íë ¤ë©´Â ë¨¼ì  performance_schema 기ë¥ì´Â íì±íëì´Â ìì´ì¼Â í©ëë¤. MySQL 8.0ììë 기본ì ì¼ë¡Â íì±íëì´Â ìì§ë§, ë¹íì±íëì´Â ìë¤ë©´Â MySQL ì¤ì  íì¼ìì ë¤ì ì¤ì ì ì¶ê°í´ì¼Â í©ëë¤.[mysqld]performance_schema=ONperformance_schema ìµì ì´ íì±íë ì´íë¶í° ì¸ë±ì¤ ì¬ì©ëì´ ì¹´ì´í ë기 .. -
Apache Kafka 기본 ê°ë
Apache Kafka 기본 ê°ë
2024.07.22Apache Kafkaë íì¬ ì¹´íì¹´ë Apache Software Foundationìì ì¤í ìì¤ë¡ ê´ë¦¬íë ë¶ì° ì´ë²¤í¸ ì¤í¸ë¦¬ë° íë«í¼ì ëë¤. 2011ë ë§í¬ëì¸ììë ìë§ì ì¬ì©ì íë ë¡ê·¸ì ìì¤í ì´ë²¤í¸ë¥¼ ì¤ìê°ì¼ë¡ ì²ë¦¬íë ê³¼ì ìì ë§ì ì´ë ¤ìì 겪ììµëë¤. ë¹ì ë§í¬ëì¸Â ê°ë°ì(Jay Kreps, Neha Narkhede, Jun Rao)ë 카í카를 ê°ë°íê² ëììµëë¤. ì°¸ê³ ë¡ 'Kafka'ë¼ë ì´ë¦ì íëì¸ ì¹´íì¹´ì ìì¤ìì ìê°ì ë°ì ë¶ì¬ì§ ì´ë¦ì ëë¤.ë¹ì ë§í¬ëì¸ì ì´ë²¤í¸ë¥¼ ë³´ë´ë 쪽(íë¡ëì)ê³¼ ë°ë 쪽(컨ì머)ì´ ê°ê° ì¬ë¬ ê° ì¡´ì¬íìµëë¤. ê° íë¡ëìì 컨ìë¨¸ê° ìë¡ ì§ì ì°ê²°ëì´ì¼ íê³ ë°ë¼ì ìë¡ì´ ìì°ìë ìë¹ìê° ì¶ê°ë ëë§ë¤ 모ë 기존 ìì¤í ê³¼ ìë¡ ì°ê²°í´ì¼ í´ì ì°ê²°.. -
[kotlin] withTimeout ì¬ì©ì suspend/non-suspend í¨ì ëì ì°¨ì´
[kotlin] withTimeout ì¬ì©ì suspend/non-suspend í¨ì ëì ì°¨ì´
2024.07.14delay()ì½í린ì delay í¨ìë ì½ë£¨í´ì ì§ì°ìí¤ë í¨ìì ëë¤. ì´ë ì¤ë ë를 ì°¨ë¨íì§ ìê³ ì½ë£¨í´ì´ ì¼ì ìê° ëì ë기íëë¡ í©ëë¤.fun main() = runBlocking { println("Start") delay(1000L) println("End")}ì ì½ëìì delay(1000L)ì 1ì´Â ëì ì½ë£¨í´ì ì§ì°ìí¤ê³ , 그 ì´íì "End"를 ì¶ë ¥í©ëë¤.delay() í¨ìë suspend í¨ìë¡, ë´ë¶ì ì¼ë¡ ì½ë£¨í´ì ì¼ì ì¤ë¨(pause)ìí¤ê³ , ì§ì ë ìê°ì´ 경과í íì ì½ë£¨í´ì ì¬ê°í©ëë¤. withTimeoutwithTimeout í¨ìë 주ì´ì§ ìê° ë´ì ìë£ëì§ ìë ìì ì ì·¨ìíë í¨ìì ëë¤. withTimeout ë¸ë¡ ë´ìì ìì ì´ ì§ì ë ìê° ë´ì ìë£ëì§ .. -
[ì½ë£¨í´] ë³ë ¬ì±(Parallelism)ê³¼ ì°ìì±(Concurrency) ìì
[ì½ë£¨í´] ë³ë ¬ì±(Parallelism)ê³¼ ì°ìì±(Concurrency) ìì
2023.08.28í ë´ìì ì½ë£¨í´ ë³ë ¬ì²ë¦¬ì ê´ë ¨íì¬ ì½ë리뷰 ì¤ íìê° ì±í¬ê° ë§ì§ ìë ê² ê°ì ì 리í ê¸ì ëë¤. ì°ìì±(Concurrency) 1ë² suspend fun main() = coroutineScope { async { someService.callAPI1() }.await() async { someService.callAPI2() }.await() } ì ì½ëë ë API í¸ì¶ì´ ìì°¨ì ì¼ë¡ ì´ë£¨ì´ì§ëë¤. 첫 ë²ì§¸ async ë¸ë¡ì callAPI1()를 í¸ì¶íê³ , ê·¸ 결과를 기ë¤ë¦° í, ë ë²ì§¸ async ë¸ë¡ì´ ììë©ëë¤. ì´ ë°©ìì ë ë²ì§¸ API í¸ì¶ì´ 첫 ë²ì§¸ API í¸ì¶ì ê²°ê³¼ì ìì¡´ì ì¸ ê²½ì° ëë ìì°¨ì ì¤íì´ íìí ê²½ì°ì ì¬ì©í기 ì í©í©ëë¤. 2ë² suspend fun main() = co.. -
SpringBoot 모ëí°ë§ í기 (feat. Grafana, Prometheus)
SpringBoot 모ëí°ë§ í기 (feat. Grafana, Prometheus)
2023.03.06ì í리ì¼ì´ì ì ë©í¸ë¦ê³¼ ìí를 모ëí°ë§íë ê²ì ì±ë¥ì ê°ì íê³ , ì±ì ë ëì ë°©ìì¼ë¡ ê´ë¦¬íê³ , ìµì íëì§ ìì ëìì ë°ê²¬íë ë° ëìì´ ë©ëë¤. ë§ì ë§ì´í¬ë¡ìë¹ì¤ë¡ 구ì±ë ìì¤í ì ì ì§ ê´ë¦¬íë ¤ë©´ ê° ìë¹ì¤ë¥¼ 모ëí°ë§íë ê²ì´ ì¤ìí©ëë¤. ì í리ì¼ì´ì ì ë©í¸ë¦ì ë ¸ì¶íë Micrometer, ë©í¸ë¦ ë°ì´í°ë¥¼ ì ì¥íë Prometheus, ë°ì´í°ë¥¼ ê·¸ëíë¡ ìê°ííë Grafana를 ì¬ì©íì¬ Spring Boot ì¹ ì í리ì¼ì´ì ì ë¡ì»¬ìì 모ëí°ë§íê³ ì í©ëë¤. Grafana를 ì¬ì©íë ¤ë©´ 먼ì Spring Actuator를 ì´ì©í´ íì¬ ì í리ì¼ì´ì ì ìí를 HTTP APIë¡ ìëµí ì ìê² ì¤ì í©ëë¤. Prometheus를 ì´ì©íì¬ Spring Actuatorìì ì ê³µíë ë©í¸ë¦ ë°ì´í°ë¥¼ ìì§í©ë.. -
Kotest를 íì©í´ Spring Bootìì í ì¤í¸ì½ë ìì±í기
Kotest를 íì©í´ Spring Bootìì í ì¤í¸ì½ë ìì±í기
2023.01.29Kotlin + Spring Boot íë¡ì í¸ìì í ì¤í¸ì½ë를 Junitì¼ë¡ ìì±í기ë ì½ì§ ììµëë¤. Kotlin 컨벤ì ì 무ìíê³ Annotation ë¡ì¹ í ì± í ì¤í¸ì½ë를 ìì±íë¤ë©´ ë¶ë ¸ì ì°¬ Jetbrains IntelliJê° ê°ì기 ì»´íì¼ì íì§ ìì ìë ììµëë¤. ê·¸ëì íìë¶í° Kotlinì ìí´ ê°ë°ë í ì¤í¸ íë ììí¬ë¡ Kotlin ìµì 문ë²ì ë° ë¹ ë¥´ê² ì§ìíê³ ìë Kotestì í¨ê» í ì¤í¸ì½ë를 ìì±íë¤ë©´ ì ì§ë³´ì측면ììë í¨ì¬ ë í¨ê³¼ì ì¼ ê²ì ëë¤. í ì¤í¸ ì¤ë¹ Kotestì Spring Boot Test를 ì¬ì©í기 ìí´ ìì¡´ì±ì ìëì ê°ì´ ì¶ê°í©ëë¤. (ìëì H2 DB를 ì´ì©í´ í ì¤í¸ë¥¼ ìíí ìì ì¼ë¡ h2 ìì¡´ì±ë ì¶ê°í©ëë¤.) testImplementation("com...