diff --git a/README.korean.md b/README.korean.md index 4264b7df..2afc8a1c 100644 --- a/README.korean.md +++ b/README.korean.md @@ -52,7 +52,7 @@ **Otherwise:** When developers who code new features struggle to realize the impact of their change and fear to break other dependant components - deployments become slower and more risky. It's also considered harder to scale-out when all the business units are not separated -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: structure by components**](/sections/projectstructre/breakintcomponents.korean.md) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: structure by components**](/sections/projectstructre/breakintcomponents.korean.md)

@@ -62,7 +62,7 @@ **Otherwise:** App that mixes web objects with other layers can not be accessed by testing code, CRON jobs and other non-Express callers -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: layer your app**](/sections/projectstructre/createlayers.korean.md) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: layer your app**](/sections/projectstructre/createlayers.korean.md)

@@ -72,7 +72,7 @@ **Otherwise:** You'll have to invent your own deployment and dependency wheel -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: Structure by feature**](/sections/projectstructre/wraputilities.korean.md) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: Structure by feature**](/sections/projectstructre/wraputilities.korean.md)

@@ -82,7 +82,7 @@ **Otherwise:** Your API will be accessible for testing via HTTP calls only (slower and much harder to generate coverage reports). It probably won't be a big pleasure to maintain hundreds of lines of code in a single file -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: separate Express 'app' and 'server'**](/sections/projectstructre/separateexpress.korean.md) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: separate Express 'app' and 'server'**](/sections/projectstructre/separateexpress.korean.md)

@@ -92,7 +92,7 @@ **Otherwise:** Failing to satisfy any of the config requirements will simply bog down the development or devops team. Probably both -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: configuration best practices**](/sections/projectstructre/configguide.korean.md) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: configuration best practices**](/sections/projectstructre/configguide.korean.md)


@@ -106,7 +106,7 @@ **Otherwise:** Node.js callback style, function(err, response), is a promising way to un-maintainable code due to the mix of error handling with casual code, excessive nesting and awkward coding patterns -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: avoiding callbacks**](/sections/errorhandling/asyncerrorhandling.korean.md) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: avoiding callbacks**](/sections/errorhandling/asyncerrorhandling.korean.md)

@@ -116,7 +116,7 @@ **Otherwise:** When invoking some component, being uncertain which type of errors come in return โ€“ it makes proper error handling much harder. Even worse, using custom types to describe errors might lead to loss of critical error information like the stack trace! -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: using the built-in error object**](/sections/errorhandling/useonlythebuiltinerror.korean.md) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: using the built-in error object**](/sections/errorhandling/useonlythebuiltinerror.korean.md)

@@ -126,7 +126,7 @@ **Otherwise:** You may always restart the application when an error appears, but why let ~5000 online users down because of a minor, predicted, operational error? the opposite is also not ideal โ€“ keeping the application up when an unknown issue (programmer error) occurred might lead to an unpredicted behavior. Differentiating the two allows acting tactfully and applying a balanced approach based on the given context -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: operational vs programmer error**](/sections/errorhandling/operationalvsprogrammererror.korean.md) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: operational vs programmer error**](/sections/errorhandling/operationalvsprogrammererror.korean.md)

@@ -136,7 +136,7 @@ **Otherwise:** Not handling errors within a single place will lead to code duplication and probably to improperly handled errors -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: handling errors in a centralized place**](/sections/errorhandling/centralizedhandling.korean.md) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: handling errors in a centralized place**](/sections/errorhandling/centralizedhandling.korean.md)

@@ -146,7 +146,7 @@ **Otherwise:** An API client might decide to crash and restart only because he received back an error he couldnโ€™t understand. Note: the caller of your API might be you (very typical in a microservice environment) -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: documenting errors in Swagger**](/sections/errorhandling/documentingusingswagger.korean.md) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: documenting errors in Swagger**](/sections/errorhandling/documentingusingswagger.korean.md)

@@ -156,7 +156,7 @@ **Otherwise:** When an unfamiliar exception is caught, some object might be in a faulty state (e.g an event emitter which is used globally and not firing events anymore due to some internal failure) and all future requests might fail or behave crazily -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: shutting the process**](/sections/errorhandling/shuttingtheprocess.korean.md) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: shutting the process**](/sections/errorhandling/shuttingtheprocess.korean.md)

@@ -166,7 +166,7 @@ **Otherwise:** Skimming through console.logs or manually through messy text file without querying tools or a decent log viewer might keep you busy at work until late -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: using a mature logger**](/sections/errorhandling/usematurelogger.korean.md) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: using a mature logger**](/sections/errorhandling/usematurelogger.korean.md)

@@ -176,7 +176,7 @@ **Otherwise:** Without testing, whether automatically or manually, you canโ€™t rely on our code to return the right errors. Without meaningful errors โ€“ thereโ€™s no error handling -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: testing error flows**](/sections/errorhandling/testingerrorflows.korean.md) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: testing error flows**](/sections/errorhandling/testingerrorflows.korean.md)

@@ -186,7 +186,7 @@ **Otherwise:** You might spend great effort on measuring API performance and downtimes, probably youโ€™ll never be aware which are your slowest code parts under real-world scenario and how these affect the UX -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: using APM products**](/sections/errorhandling/apmproducts.korean.md) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: using APM products**](/sections/errorhandling/apmproducts.korean.md)

@@ -196,7 +196,7 @@ **Otherwise:** Your errors will get swallowed and leave no trace. Nothing to worry about -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: catching unhandled promise rejection**](/sections/errorhandling/catchunhandledpromiserejection.korean.md) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: catching unhandled promise rejection**](/sections/errorhandling/catchunhandledpromiserejection.korean.md)

@@ -206,7 +206,7 @@ **Otherwise:** Consider this โ€“ your function expects a numeric argument โ€œDiscountโ€ which the caller forgets to pass, later on, your code checks if Discount!=0 (amount of allowed discount is greater than zero), then it will allow the user to enjoy a discount. OMG, what a nasty bug. Can you see it? -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: failing fast**](/sections/errorhandling/failfast.korean.md) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: failing fast**](/sections/errorhandling/failfast.korean.md)


@@ -251,7 +251,7 @@ function someFunction() **Otherwise:** Deferring from this best practice might lead to unexpected results, as seen in the StackOverflow thread below: -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€:** "Why does a results vary based on curly brace placement?" (Stackoverflow)](https://stackoverflow.com/questions/3641519/why-does-a-results-vary-based-on-curly-brace-placement) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ:** "Why does a results vary based on curly brace placement?" (Stackoverflow)](https://stackoverflow.com/questions/3641519/why-does-a-results-vary-based-on-curly-brace-placement)

@@ -301,7 +301,7 @@ function doSomething() {} **Otherwise:** Debugging becomes way more cumbersome when following a variable that frequently changes -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: JavaScript ES6+: var, let, or const?** ](https://medium.com/javascript-scene/javascript-es6-var-let-or-const-ba58b8dcde75) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: JavaScript ES6+: var, let, or const?** ](https://medium.com/javascript-scene/javascript-es6-var-let-or-const-ba58b8dcde75)

@@ -369,7 +369,7 @@ All statements above will return false if used with `===` **Otherwise:** Handling async errors in callback style is probably the fastest way to hell - this style forces to check errors all over, deal with awkward code nesting and make it difficult to reason about the code flow -๐Ÿ”—[**์ž์„ธํžˆ ๋ณด๊ฐ€:** Guide to async await 1.0](https://github.com/yortus/asyncawait) +๐Ÿ”—[**์ž์„ธํžˆ ๋ณด๊ธฐ:** Guide to async await 1.0](https://github.com/yortus/asyncawait)

@@ -409,7 +409,7 @@ All statements above will return false if used with `===` **Otherwise:** Choosing some niche vendor might get you blocked once you need some advanced customization. On the other hand, going with Jenkins might burn precious time on infrastructure setup -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: Choosing CI platform**](/sections/testingandquality/citools.korean.md) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: Choosing CI platform**](/sections/testingandquality/citools.korean.md)

@@ -463,7 +463,7 @@ All statements above will return false if used with `===` **Otherwise:** Failure === disappointed customers. Simple -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: Monitoring!**](/sections/production/monitoring.korean.md) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: Monitoring!**](/sections/production/monitoring.korean.md)

@@ -473,7 +473,7 @@ All statements above will return false if used with `===` **Otherwise:** You end-up with a black box that is hard to reason about, then you start re-writing all logging statements to add additional information -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: Increase transparency using smart logging**](/sections/production/smartlogging.korean.md) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: Increase transparency using smart logging**](/sections/production/smartlogging.korean.md)

@@ -483,7 +483,7 @@ All statements above will return false if used with `===` **Otherwise:** Your poor single thread will stay busy doing infrastructural tasks instead of dealing with your application core and performance will degrade accordingly -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: Delegate anything possible (e.g. gzip, SSL) to a reverse proxy**](/sections/production/delegatetoproxy.korean.md) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: Delegate anything possible (e.g. gzip, SSL) to a reverse proxy**](/sections/production/delegatetoproxy.korean.md)

@@ -493,7 +493,7 @@ All statements above will return false if used with `===` **Otherwise:** QA will thoroughly test the code and approve a version that will behave differently at production. Even worse, different servers at the same production cluster might run different code -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: Lock dependencies**](/sections/production/lockdependencies.korean.md) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: Lock dependencies**](/sections/production/lockdependencies.korean.md)

@@ -503,7 +503,7 @@ All statements above will return false if used with `===` **Otherwise:** Running dozens of instances without a clear strategy and too many tools together (cluster management, docker, PM2) might lead to a DevOps chaos -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: Guard process uptime using the right tool**](/sections/production/guardprocess.korean.md) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: Guard process uptime using the right tool**](/sections/production/guardprocess.korean.md)

@@ -513,7 +513,7 @@ All statements above will return false if used with `===` **Otherwise:** Your app will likely utilize only 25% of its available resources(!) or even less. Note that a typical server has 4 CPU cores or more, naive deployment of Node.js utilizes only 1 (even using PaaS services like AWS beanstalk!) -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: Utilize all CPU cores**](/sections/production/utilizecpu.korean.md) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: Utilize all CPU cores**](/sections/production/utilizecpu.korean.md)

@@ -523,7 +523,7 @@ All statements above will return false if used with `===` **Otherwise:** Youโ€™ll find that youโ€™re performing many โ€œdiagnostic deploysโ€ โ€“ shipping code to production only to extract some information for diagnostic purposes -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: Create a โ€˜maintenance endpointโ€™**](/sections/production/createmaintenanceendpoint.korean.md) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: Create a โ€˜maintenance endpointโ€™**](/sections/production/createmaintenanceendpoint.korean.md)

@@ -533,7 +533,7 @@ All statements above will return false if used with `===` **Otherwise:** You might spend great effort on measuring API performance and downtimes, probably youโ€™ll never be aware which is your slowest code parts under real-world scenario and how these affects the UX -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: Discover errors and downtime using APM products**](/sections/production/apmproducts.korean.md) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: Discover errors and downtime using APM products**](/sections/production/apmproducts.korean.md)

@@ -543,7 +543,7 @@ All statements above will return false if used with `===` **Otherwise:** A world champion IT/DevOps guy wonโ€™t save a system that is badly written -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: Make your code production-ready**](/sections/production/productoncode.korean.md) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: Make your code production-ready**](/sections/production/productoncode.korean.md)

@@ -553,7 +553,7 @@ All statements above will return false if used with `===` **Otherwise:** Your process memory might leak a hundred megabytes a day like how it happened at [Walmart](https://www.joyent.com/blog/walmart-node-js-memory-leak) -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: Measure and guard the memory usage**](/sections/production/measurememory.korean.md) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: Measure and guard the memory usage**](/sections/production/measurememory.korean.md)

@@ -563,7 +563,7 @@ All statements above will return false if used with `===` **Otherwise:** Your single Node thread will be busy streaming hundreds of html/images/angular/react files instead of allocating all its resources for the task it was born for โ€“ serving dynamic content -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: Get your frontend assets out of Node**](/sections/production/frontendout.korean.md) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: Get your frontend assets out of Node**](/sections/production/frontendout.korean.md)

@@ -573,7 +573,7 @@ All statements above will return false if used with `===` **Otherwise:** Failure at a given server will result in application downtime instead of just killing a faulty machine. Moreover, scaling-out elasticity will get more challenging due to the reliance on a specific server -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: Be stateless, kill your Servers almost every day**](/sections/production/bestateless.korean.md) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: Be stateless, kill your Servers almost every day**](/sections/production/bestateless.korean.md)

@@ -583,7 +583,7 @@ All statements above will return false if used with `===` **Otherwise:** Otherwise: Keeping your code clean from vulnerabilities without dedicated tools will require to constantly follow online publications about new threats. Quite tedious -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: Use tools that automatically detect vulnerabilities**](/sections/production/detectvulnerabilities.korean.md) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: Use tools that automatically detect vulnerabilities**](/sections/production/detectvulnerabilities.korean.md)

@@ -593,7 +593,7 @@ All statements above will return false if used with `===` **Otherwise:** Looking at a production error log without the context โ€“ what happened before โ€“ makes it much harder and slower to reason about the issue -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: Assign โ€˜TransactionIdโ€™ to each log statement**](/sections/production/assigntransactionid.korean.md) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: Assign โ€˜TransactionIdโ€™ to each log statement**](/sections/production/assigntransactionid.korean.md)

@@ -603,7 +603,7 @@ All statements above will return false if used with `===` **Otherwise:** Omitting this simple property might greatly degrade performance. For example, when using Express for server-side rendering omitting `NODE_ENV` makes the slower by a factor of three! -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: Set NODE_ENV=production**](/sections/production/setnodeenv.korean.md) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: Set NODE_ENV=production**](/sections/production/setnodeenv.korean.md)

@@ -621,7 +621,7 @@ All statements above will return false if used with `===` **Otherwise:** Newly discovered bugs or vulnerabilities could be used to exploit an application running in production, and your application may become unsupported by various modules and harder to maintain -๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ฐ€: Use an LTS release of Node.js**](/sections/production/LTSrelease.korean.md) +๐Ÿ”— [**์ž์„ธํžˆ ๋ณด๊ธฐ: Use an LTS release of Node.js**](/sections/production/LTSrelease.korean.md)