๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

study

(5)
Kotlin youtube ์š”์•ฝ์ธ๋“ฏํ•œ ๊ฐ์ƒ๋ฌธ ์Šคํ”„๋ง์บ ํ”„ 2018 [TrackB Session2] : ์ฟ ํŒก Kotlin Backend ์ ์šฉ๊ธฐ ์ฝ”ํ‹€๋ฆฐ์˜ ์ข‹์€์  ์ž๋ฐ”์™€ ํ˜ธํ™˜์„ฑ 100% (@JvmXXX์–ด๋…ธํ…Œ์ด์…˜ ์‚ฌ์šฉ์‹œ) Familiar Syntax Smart Casts(’is,’as’) ํƒ€์ž…์„ ์ค„์—ฌ ์“ธ ์ˆ˜ ์žˆ๋‹ค. is / !is if instanse of as / as? ? ๊ฐ€ ๋ถ™์œผ๋ฉด nullable Data Class copy ๋ผ๋Š” ํ•จ์ˆ˜ ์ฝ”ํ‹€๋ฆฐ์—์„œ๋Š” immutable ์ด ๊ธฐ๋ณธ์ด๋‹ค. ํƒ€์ž…๋„ ์ค„๊ณ  ์ฝ๊ธฐ๋„ ํŽธํ•˜๋‹ค. Default Argument String Templates fun read(b: ByteArray, offset:Int = 0, length:Int = b.size) { TODO("Not Imlemented") } val s = "abc" val..
@Transactional(readOnly=true) @Transaction(read only=true) ๋ฅผ ์™œ ์“ธ๊นŒ? ๋จผ์ €, ํŠธ๋žœ์žญ์…˜์ด ํ•„์š”ํ•œ ์ด์œ  ์–ด๋–ค ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ƒํ™ฉ์—์„œ ์˜ˆ์™ธ, ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ถ€์ •ํ•ฉ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ ์›์ƒ ๋ณต๊ตฌ๋ฅผ ํ•ด์•ผํ•œ๋‹ค. ์ด ๋•Œ ๋ฐ์ดํ„ฐ ์›์ƒ๋ณต๊ตฌ๋ฅผ ์œ„ํ•ด ํŠธ๋žœ์žญ์…˜์ด ํ•„์š”ํ•˜๋‹ค. ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋Š” ์ˆ˜ํ–‰ ๋‚ด์—ญ์„ ๋กœ๊ทธ์— ์ €์žฅํ•ด ๋‘๋Š”๋ฐ, ์ด๋ฅผ ์ด์šฉํ•ด ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•œ๋‹ค. DB์— ๋ฐ˜์˜๋œ ๋‚ด์šฉ์„ ์žฌ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•œ Redo log ์ˆ˜ํ–‰์„ ์‹คํŒจํ•ด ์ด์ „์˜ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฌ๋Š” Undo log readOnly=true ์„ค์ •์‹œ Application ์ธก๋ฉด DataSourceTranscationManager.java SET TRANSACTION READ ONLY ๋Š” Oracle, MySQL, Postres์—์„œ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์—์„œ๋„ ์ ์šฉํ•˜..
[Java] ์•„์ดํ…œ 5 ์ž์›์„ ์ง์ ‘ ๋ช…์‹œํ•˜์ง€ ๋ง๊ณ  ์˜์กด ๊ฐ์ฒด ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๋ผ ํด๋ž˜์Šค๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ํ•˜๋‚˜ ์ด์ƒ์˜ ์ž์›์— ์˜์กดํ•˜๊ณ , ๊ทธ ์ž์›์ด ํด๋ž˜์Šค ๋™์ž‘์— ์˜ํ–ฅ์„ ์ค€๋‹ค๋ฉด ์‹ฑ๊ธ€ํ„ด(Singleton) ๊ณผ, ์ •์  ์œ ํ‹ธ๋ฆฌํ‹ฐ(static util class)๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. // ์ •์  ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์ž˜๋ชป ์‚ฌ์šฉํ•œ ์˜ˆ - ์œ ์—ฐํ•˜์ง€ ์•Š๊ณ  ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์–ด๋ ต๋‹ค public class SpellChecker{ private static final Lexicon dictionary = ...; // ์‚ฌ์ „์— ์˜์กด private SpellChecker() {} // ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐฉ์ง€ public static boolean isValid(String word){...} public static List suggestions(String typo){...} } // ์‹ฑ๊ธ€ํ„ด์„ ์ž˜๋ชป ์‚ฌ์šฉํ•œ ์˜ˆ - ์œ ์—ฐํ•˜์ง€ ์•Š..
[spring boot] mock test ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” TDD ๋ฅผ ์ œ๋Œ€๋กœ ์•Œ๊ณ , ์ ์šฉํ•˜๊ณ  ์‹ถ์–ด์„œ ์ •๋ฆฌํ–ˆ๋‹ค :) TDD ์ ์šฉ๊ธฐ : www.notion.so/Shop-api-1-49b80401badf4488b993460357b351a2 @SpringBootTest SpringBootApplication์„ ์ฐพ์•„ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ๋นˆ์„ ์ƒ์„ฑํ•˜๊ณ  @MockBean ์œผ๋กœ ์ •์˜๋œ ๋นˆ์„ ์ฐพ์•„ ๊ต์ฒด @RunWith(SpringRunner.class)์™€ ๊ฐ™์ด ์จ์•ผํ•œ๋‹ค SpringBootTest.WebEnvironment.MOCK → ๋‚ด์žฅ ํ†ฐ์บฃ ์‚ฌ์šฉ X RANDOM_PORT, DEFINED_PORT → ๋‚ด์žฅ ํ†ฐ์บฃ ์‚ฌ์šฉ WebTestClient webflux ๋””ํŽœ๋˜์‹œ ์ถ”๊ฐ€ํ•ด์•ผํ•œ๋‹ค. restTemplate ๋ณด๋‹ค API ๊ฐ€๋…์„ฑ์ด ์ข‹๋‹ค. non-blocking ๊ธฐ๋ฐ˜ ํด..
[spring boot] swagger ์ ์šฉ gradle ๋”๋ณด๊ธฐ compile group: 'io.springfox', name: 'springfox-swagger2', version: '2.9.2' compile group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.9.2' SwaggerConfig ๋”๋ณด๊ธฐ @Configuration @EnableSwagger2 public class SwaggerConfig { @Bean // Docket : Swagger ์„ค์ •์˜ ํ•ต์‹ฌ์ด ๋˜๋Š” Bean public Docket docket() { return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.b..