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.. ์ด์ 1 ๋ค์