๐ถ๐พ/backend
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOyBqS%2FbtsEvdlZ9Sj%2FkqkIw39KKk3IPTQ3WEPAkK%2Fimg.png)
[pocketBase] pocketBase ์ฌ์ฉ
์ ํ๋ธ ๋ณด๋ค๊ฐ "๋จ ํ๋์ ํ์ผ๋ก ๋ฐฑ์๋ ๊ตฌ์ถ"์ด๋ผ๋ ํ์ดํ๋ก pocketBase์ ๋ํ ๋ด์ฉ์ด ์ฌ๋ผ์์ ๋ณด๋๊น ํฅ๋ฏธ๊ฐ ์๊ฒจ์ ์ง์ ์ฌ์ฉํด๋ณด๊ธฐ๋ก ๊ฒฐ์ ! ํผ์ ๋ฆฌ์กํธ ํ๋ก์ ํธ ๋ง๋ค๋ ์ฌ์ฉํ๊ธฐ ์ฌ์ธ ๊ฒ ๊ฐ์๋ค ์ฌ์ฉ ์ ๋ค์ด๋ก๋ pocketBase Docs์ ๊ฐ์ ์ด์์ฒด์ ์ ๋ง์ถฐ ๋ค์ด๋ก๋ ๋ค์ด๋ฐ์ ํ์ผ์์ ์๋ ๋ช ๋ น์ด ./pocketbase serve ์ค๋ฅ ?! (mac) ๊ทธ๋ฐ๋ฐ.. 'pocketbase'์(๋) Apple์์ ์ ์ฑ ์ํํธ์จ์ด๊ฐ ์๋์ง ํ์ธํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด ์ ์์ต๋๋ค... ํด๊ฒฐ์ ์ํด ์๋ ์ฒ๋ผ ์ค์ ์ ๋ค์ด๊ฐ์ ๊ทธ๋๋ ํ์ฉ์ ํด๋ฆญ ๊ทธ ๋ค์ ๋ค์ ์ณ๋ณด๋ ์ด๋ ๊ฒ ์ ๋ฌ๋ค ๐ฅณ ์ฌ์ฉ admin http://127.0.0.1:8090/_/ ๋ค์ด๊ฐ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ ์ปฌ๋ ์ ์ด ๋ง๋ค์ด์ ธ ์๋ ์ํ์..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDaHbA%2FbtsAnxuIkOq%2FKxnQ6vYKqfTkNcKr5ogDjk%2Fimg.jpg)
[spring] ์ปดํฌ๋ํธ ์ค์บ
์คํ๋ง ๋น์ด ์์ญ, ์๋ฐฑ๊ฐ๊ฐ ๋ ๊ฒฝ์ฐ ์ค์ ์ ๋ณด(Appconfig)์ ์ผ์ผ์ด ๋ฑ๋กํ๊ธฐ ๊ท์ฐฎ์์ง๋ ๋ฌธ์ ๋๋ฌธ์ ์คํ๋ง์์๋ ์ค์ ์ ๋ณด๊ฐ ์์ด๋ ์๋์ผ๋ก ์คํ๋ง ๋น์ ๋ฑ๋กํ๋ ์ปดํฌ๋ํธ ์ค์บ์ด๋ผ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค ! ๊ทธ๋ฆฌ๊ณ ์์กด๊ด๊ณ๋ ์๋์ผ๋ก ์ฃผ์ ํ๋ @Autowired๋ผ๋ ๊ธฐ๋ฅ ๋ํ ์คํ๋ง์์ ์ ๊ณตํ๋ค. ์ปดํฌ๋ํธ ์ค์บ ์ฌ์ฉ ๋ฐฉ๋ฒ @Configuration @ComponentScan public class Appconfig {} @ComponentScan์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๊ธฐ์กด๊ณผ๋ค๋ฅด๊ฒ @Bean์ผ๋ก ํด๋์ค๋ฅผ ๋ฑ๋กํ์ง ์๊ณ ์ค์บ์ ๋์์ด ๋๋ ํด๋์ค์ @Component๋ง ๋ถ์ฌ์ค ๋ค, ์์กด๊ด๊ณ ์ฃผ์ ์ด ํ์ํ ๊ณณ์๋ @Autowired ์ด๋ ธํ ์ด์ ๋ง ๋ถ์ฌ์ฃผ๋ฉด ์คํ๋ง์ ์๋์ผ๋ก ์คํ๋ง ๋น์ ๋ฑ๋กํด์ค๋ค @Component..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmAh3z%2FbtsAonL95Yi%2FCYgLhgH5Z9MjGbxw8kw5G0%2Fimg.jpg)
[spring] ์ฑ๊ธํค ์ปจํ ์ด๋
์ธํ๋ฐ ์คํ๋ง ํต์ฌ์๋ฆฌ ๊ธฐ๋ณธํธ์์ ๋์จ ์ฑ๊ธํค ์ปจํ ์ด๋์ ๋ํด ์ ๋ฆฌํ๋ ค๊ณ ํ๋ค. ํ๊ต์์ ๊ณ ๊ธ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์๊ฐํ๋ฉด์ ๋ค์ด๋ดค๋ ๋์์ธ ํจํด ์ค ์ฑ๊ธํค ํจํด์ ๊ดํ ๋ด์ฉ์ด์๋ค. ? ์น ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ฑ๊ธํค ํจํด์ด ํ์ํ ์ด์ ๋ ๐ ์ฌ๋ฌ ๊ณ ๊ฐ์ด ๋์์ ์์ฒญ ๐ ์ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ง์ฝ ์ฌ๋ฌ ๊ณ ๊ฐ์ด ๋์์ ์์ฒญํ๋ ์ํฉ์์ ์์ฒญ์ ๋ฐ๋ผ ๊ณ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฒ๋๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ์ฌํด์ง๋ค. ๊ทธ๋์ ํด๋น ๊ฐ์ฒด๊ฐ ๋ฑ 1๊ฐ๋ง ์์ฑ๋๊ณ , ๊ทธ ๊ฐ์ฒด๋ฅผ ๊ณต์ ํ ์ ์๋๋ก ์ค๊ณํด์ผํ๋ค. ํ์ง๋ง ์ฑ๊ธํค ํจํด์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ํจํด์ ๊ตฌํํ๋ ์ฝ๋ ์์ฒด๊ฐ ๋ง์ด๋ค์ด๊ฐ๊ฒ ๋๊ณ , ์์กด๊ด๊ณ์ ํด๋ผ์ด์ธํธ๊ฐ ๊ตฌ์ฒด ํด๋์ค์ ์์กด(DIP ์๋ฐ) ํ๊ฒ๋๋ ๋ฑ์ ๋ฌธ์ ๊ฐ ์๋ค. ์คํ๋ง ์ปจํ ์ด๋๋ ์ด๋ฌํ ์ฑ๊ธํค ํจํด์ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๋ฉด์, ๊ฐ์ฒด๊ฐ..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvcqHN%2FbtsAfCLoAoi%2FGPQrkkJcuAY9v8GBG9wV4k%2Fimg.jpg)
[spring] loc, DI, ์ปจํ ์ด๋
์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ์ ์๊ฐํ๋ฉด์ ๋์จ ๊ฐ๋ ์ด๋ค. Appconfig๋ฅผ ๋ง๋ค์ด์ ์ฐ๊ฒฐํด์ฃผ๊ธฐ ์ ์๋ OrderServiceImpl ๊ฐ์ ํด๋ผ์ด์ธํธ ์ฝ๋์ ์ํฅ์ ์ฃผ๋ ์ฝ๋๋ฅผ ์งฐ์๋ค. public class OrderServiceImpl implements OrderService { private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); private final MemberRepository memberRepository = new MemoryMemberRepository(); ... } ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์ง๊ฒ๋๋ฉด ํด๋ผ์ด์ธํธ ์ฝ๋(OrderServiceImpl)์์ DiscountPolicy์ ๊ฐ์ ์ธํฐํ์ด์ค ์ฝ๋ ๋ฟ๋ง ์๋๋ผ ๊ตฌ..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdrYMtf%2FbtsAjTesLUN%2FvIK2pU0mkWAjCrScBCK970%2Fimg.jpg)
[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.*; ..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc6j7We%2FbtsAmD3dSws%2FfV3QZtMK6kKpOCfz9YyRMk%2Fimg.jpg)
[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..