Animated Hello Kitty Wink

๐Ÿถ๐Ÿพ/backend

    [pocketBase] pocketBase ์‚ฌ์šฉ

    ์œ ํŠœ๋ธŒ ๋ณด๋‹ค๊ฐ€ "๋‹จ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ๋ฐฑ์—”๋“œ ๊ตฌ์ถ•"์ด๋ผ๋Š” ํƒ€์ดํ‹€๋กœ pocketBase์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด ์˜ฌ๋ผ์™€์„œ ๋ณด๋‹ˆ๊นŒ ํฅ๋ฏธ๊ฐ€ ์ƒ๊ฒจ์„œ ์ง์ ‘ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ๋กœ ๊ฒฐ์ • ! ํ˜ผ์ž ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šธ ๊ฒƒ ๊ฐ™์•˜๋‹ค ์‚ฌ์šฉ ์ „ ๋‹ค์šด๋กœ๋“œ pocketBase Docs์— ๊ฐ€์„œ ์šด์˜์ฒด์ œ์— ๋งž์ถฐ ๋‹ค์šด๋กœ๋“œ ๋‹ค์šด๋ฐ›์€ ํŒŒ์ผ์—์„œ ์•„๋ž˜ ๋ช…๋ น์–ด ./pocketbase serve ์˜ค๋ฅ˜ ?! (mac) ๊ทธ๋Ÿฐ๋ฐ.. 'pocketbase'์€(๋Š”) Apple์—์„œ ์•…์„ฑ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์—ด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค... ํ•ด๊ฒฐ์„ ์œ„ํ•ด ์•„๋ž˜ ์ฒ˜๋Ÿผ ์„ค์ •์— ๋“ค์–ด๊ฐ€์„œ ๊ทธ๋ž˜๋„ ํ—ˆ์šฉ์„ ํด๋ฆญ ๊ทธ ๋’ค์— ๋‹ค์‹œ ์ณ๋ณด๋‹ˆ ์ด๋ ‡๊ฒŒ ์ž˜ ๋œฌ๋‹ค ๐Ÿฅณ ์‚ฌ์šฉ admin http://127.0.0.1:8090/_/ ๋“ค์–ด๊ฐ€๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ์œ ์ € ์ปฌ๋ ‰์…˜์ด ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š” ์ƒํƒœ์—..

    [spring] ์ปดํฌ๋„ŒํŠธ ์Šค์บ”

    ์Šคํ”„๋ง ๋นˆ์ด ์ˆ˜์‹ญ, ์ˆ˜๋ฐฑ๊ฐœ๊ฐ€ ๋  ๊ฒฝ์šฐ ์„ค์ • ์ •๋ณด(Appconfig)์— ์ผ์ผ์ด ๋“ฑ๋กํ•˜๊ธฐ ๊ท€์ฐฎ์•„์ง€๋Š” ๋ฌธ์ œ๋•Œ๋ฌธ์— ์Šคํ”„๋ง์—์„œ๋Š” ์„ค์ • ์ •๋ณด๊ฐ€ ์—†์–ด๋„ ์ž๋™์œผ๋กœ ์Šคํ”„๋ง ๋นˆ์„ ๋“ฑ๋กํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์ด๋ผ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค ! ๊ทธ๋ฆฌ๊ณ  ์˜์กด๊ด€๊ณ„๋„ ์ž๋™์œผ๋กœ ์ฃผ์ž…ํ•˜๋Š” @Autowired๋ผ๋Š” ๊ธฐ๋Šฅ ๋˜ํ•œ ์Šคํ”„๋ง์—์„œ ์ œ๊ณตํ•œ๋‹ค. ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ์‚ฌ์šฉ ๋ฐฉ๋ฒ• @Configuration @ComponentScan public class Appconfig {} @ComponentScan์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๊ธฐ์กด๊ณผ๋‹ค๋ฅด๊ฒŒ @Bean์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ๋“ฑ๋กํ•˜์ง€ ์•Š๊ณ  ์Šค์บ”์˜ ๋Œ€์ƒ์ด ๋˜๋Š” ํด๋ž˜์Šค์— @Component๋งŒ ๋ถ™์—ฌ์ค€ ๋’ค, ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด ํ•„์š”ํ•œ ๊ณณ์—๋Š” @Autowired ์–ด๋…ธํ…Œ์ด์…˜๋งŒ ๋ถ™์—ฌ์ฃผ๋ฉด ์Šคํ”„๋ง์€ ์ž๋™์œผ๋กœ ์Šคํ”„๋ง ๋นˆ์„ ๋“ฑ๋กํ•ด์ค€๋‹ค @Component..

    [spring] ์‹ฑ๊ธ€ํ†ค ์ปจํ…Œ์ด๋„ˆ

    ์ธํ”„๋Ÿฐ ์Šคํ”„๋ง ํ•ต์‹ฌ์›๋ฆฌ ๊ธฐ๋ณธํŽธ์—์„œ ๋‚˜์˜จ ์‹ฑ๊ธ€ํ†ค ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜๋ ค๊ณ ํ•œ๋‹ค. ํ•™๊ต์—์„œ ๊ณ ๊ธ‰ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ˆ˜๊ฐ•ํ•˜๋ฉด์„œ ๋“ค์–ด๋ดค๋˜ ๋””์ž์ธ ํŒจํ„ด ์ค‘ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์— ๊ด€ํ•œ ๋‚ด์šฉ์ด์˜€๋‹ค. ? ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์ด ํ•„์š”ํ•œ ์ด์œ ๋Š” ๐ŸŒŸ ์—ฌ๋Ÿฌ ๊ณ ๊ฐ์ด ๋™์‹œ์— ์š”์ฒญ ๐ŸŒŸ ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋งŒ์•ฝ ์—ฌ๋Ÿฌ ๊ณ ๊ฐ์ด ๋™์‹œ์— ์š”์ฒญํ•˜๋Š” ์ƒํ™ฉ์—์„œ ์š”์ฒญ์— ๋”ฐ๋ผ ๊ณ„์† ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ์‹ฌํ•ด์ง„๋‹ค. ๊ทธ๋ž˜์„œ ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ ๋”ฑ 1๊ฐœ๋งŒ ์ƒ์„ฑ๋˜๊ณ , ๊ทธ ๊ฐ์ฒด๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•ด์•ผํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ํŒจํ„ด์„ ๊ตฌํ˜„ํ•˜๋Š” ์ฝ”๋“œ ์ž์ฒด๊ฐ€ ๋งŽ์ด๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๊ณ , ์˜์กด๊ด€๊ณ„์ƒ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ตฌ์ฒด ํด๋ž˜์Šค์— ์˜์กด(DIP ์œ„๋ฐ˜) ํ•˜๊ฒŒ๋˜๋Š” ๋“ฑ์˜ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์ด๋Ÿฌํ•œ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์˜ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๋ฉด์„œ, ๊ฐ์ฒด๊ฐ€..

    [spring] loc, DI, ์ปจํ…Œ์ด๋„ˆ

    ์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ์„ ์ˆ˜๊ฐ•ํ•˜๋ฉด์„œ ๋‚˜์˜จ ๊ฐœ๋…์ด๋‹ค. Appconfig๋ฅผ ๋งŒ๋“ค์–ด์„œ ์—ฐ๊ฒฐํ•ด์ฃผ๊ธฐ ์ „์—๋Š” OrderServiceImpl ๊ฐ™์€ ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ์ฝ”๋“œ๋ฅผ ์งฐ์—ˆ๋‹ค. public class OrderServiceImpl implements OrderService { private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); private final MemberRepository memberRepository = new MemoryMemberRepository(); ... } ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์งœ๊ฒŒ๋˜๋ฉด ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ(OrderServiceImpl)์—์„œ DiscountPolicy์™€ ๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค ์ฝ”๋“œ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ตฌ..

    [spring] Test ์ฝ”๋“œ - assertThat

    ์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ์„ ๋“ค์œผ๋ฉด์„œ ๋‚˜์˜จ assertThat ! Test ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ, system.out.print()์œผ๋กœ ์ถœ๋ ฅํ•˜์ง€ ์•Š๊ณ  ์†Œ์Šค์ฝ”๋“œ์˜ ํŠน์ • ๋ชจ๋“ˆ์ด ์ •ํ™•ํžˆ ๋™์ž‘ํ•˜๋Š”์ง€ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. AssertJ๋ž€ ์ž๋ฐ” Juit ํ…Œ์ŠคํŠธ์ฝ”๋“œ์— ์‚ฌ์šฉ๋˜์–ด, ํ…Œ์ŠคํŠธ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ํŽธ์˜์„ฑ์„ ๋†’์—ฌ์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. AssertJ์—์„œ ๋ชจ๋“  ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋Š” assertThat() ์œผ๋กœ ์‹œ์ž‘ํ•œ๋‹ค. ๊ฐ•์˜์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•˜์˜€๋‹ค. import org.assertj.core.api.Assertions; Assertions.assertThat(ํ…Œ์ŠคํŠธ ํƒ€๊ฒŸ).isEqualTo(๊ธฐ๋Œ€๋˜๋Š” ๊ฐ’); ์ข€ ๋” ๊ฐ€๋…์„ฑ(?)์„ ๋†’์ด๋ ค๋ฉด import static org.assertj.core.api.Assertions.*; ..

    [django] ์ดˆ๊ธฐ project ์ƒ์„ฑ ๋ฐ ์‹คํ–‰

    1. ๊ฐ€์ƒํ™˜๊ฒฝ ๋งŒ๋“ค๊ธฐ python3 -m venv venv 2. ๊ฐ€์ƒํ™˜๊ฒฝ ์‹คํ–‰ source venv/bin/activate +) dectivate : ๊ฐ€์ƒํ™˜๊ฒฝ ๋„๊ธฐ 3. pip์„ค์น˜ pip install django โœ”๏ธ django rest framework ์‚ฌ์šฉํ• ๊ฑฐ๋ผ๋ฏ„ pip install djangorestframework โœ”๏ธ pip freeze > requirements.txt ํ†ตํ•ด์„œ ์„ค์น˜ํ•œ๊ฑฐ requirements.txt ํด๋”๋กœ ๋“ค๊ฐ ์ดํ›„ ํ˜‘์—… ํ•˜๋Š” ์‚ฌ๋žŒ pip install -r requirements.txt ์ด๋ ‡๊ฒŒ ์„ค์น˜ํ•˜๋ฉด ๊ฐ™์€ ๋ฒ„์ „์œผ๋กœ ์„ค์น˜ ๊ฐ€๋Šฅ 4. ์žฅ๊ณ  ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ django-admin startproject config . 5. ์„œ๋ฒ„ ๊ฐ€๋™ python manage.py runser..