๋ฆฌ์คํธ
-
[IT ์ ๋ณด] SSO - Single Sign-On
SSO - Single Sign-On Web ๋ก๊ทธ์ธ ์ธ์ฆ๋ฐฉ์ ์ค์ ํ๋์ด๋ฉฐ, ํ ๋ฒ์ ๋ก๊ทธ์ธ์ผ๋ก ๋ค์ํ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ฌ ๋ก๊ทธ์ธ ์์ด ์ด์ฉํ ์ ์๋ ํตํฉ์ธ์ฆ์ ์๋ฏธํ๋ค. ์ด ๋ก๊ทธ์ธ ์ธ์ฆ๋ฐฉ์์ ์ด๋ฏธ ์ฐ๋ฆฌ๊ฐ ์ค์ํ์์ ๊ต์ฅํ ๋ง์ด ์ ํ๊ณ ์๋ ๋ก๊ทธ์ธ ๋ฐฉ์์ด๋ค. - SSO์ ํ์์ฑ ์ค์ํ์์์ ์๋ฅผ ๋ค์ด๋ณด์. ๋๋ ์นด์นด์คํก, ํ์ด์ค๋ถ, ๋ทํ๋ฆญ์ค ์ธ๊ฐ์ง ์ดํ๋ฆฌ์ผ์ด์ ์ ์ฃผ๋ก ์ด์ฉํ๊ณ ์๋ค. ์ด ์ธ ๊ฐ์ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ด์ฉํ๊ธฐ ์ํด์ ๊ฐ๊ฐ์ ๊ณ์ ์ด ํ์ํ๋ฉฐ ์ฌ์ฉํ ๋ ๋ก๊ทธ์ธ์ ์๊ตฌํ๋ค. ๊ฐ๊ฐ์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๊ฐ๊ฐ์ ๊ณ์ ์ผ๋ก ํด๋นํ๋ ์ดํ๋ฆฌ์ผ์ด์ ์๋ง ๋ก๊ทธ์ธํ ์ ์๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ๋ ๋ฆฝ๋ ์ดํ๋ฆฌ์ผ์ด์ ์ด ์๋ ํ๋์ ํ์ฌ์์ ์ ๊ณตํ๋ ์๋น์ค๋ฅผ ์ด์ฉํ๋ค๋ฉด ๊ตณ์ด ํ๋์ ํ์ฌ์์ ์ฌ์ฉ์ ์ ..
-
[Java] Serialization - serialVersionUID
Serialization - serialVersionUID JAVA์์ ์์ฑํ ํน์ ๊ฐ์ฒด๋ฅผ ํ์ผ๋ก ์ ์ฅํ๊ธฐ ์ํด ์ฝ๋๋ฅผ ์์ฑํ์ฌ ์ ์ฅํ๊ณ ์ฝ์ด์ค๋ ๋ก์ง์ ๊ตฌํํ๋๋ฐ ์ปดํ์ผํ ๋ ์๋์ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ์์ ์๋ฌ๊ฐ ๋ฐ์ํ ์ด์ ๋ฅผ ์ฐพ๋ค ๋ณด๋ ๊ฐ์ฒด๋ฅผ ํ์ผ, ๋ฉ๋ชจ๋ฆฌ, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์ ์ฅํ๋ ๊ณผ์ ์๋ ์ง๋ ฌํ(Serialization)๊ฐ ํ์ํ๋ค๊ณ ํ๋ค. - ์ง๋ ฌํ(Serialization)๋ ๋ฌด์์ธ๊ฐ? ๊ทธ๋ ๋ค๋ฉด ์ง๋ ฌํ(Serialization)๋ ๋ฌด์์ธ๊ฐ? ์์์ ์ค๋ช ํ ๊ฒ๊ณผ ๊ฐ์ด ์๋ฐ(JAVA)์์๋ ์ง๋ ฌํ(Serialization)๋ ์ด๋ค ๊ฐ์ฒด๋ฅผ ํ์ผ, ๋ฉ๋ชจ๋ฆฌ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ์ผ๋ก ์ ์ฅํ ๋ ํด๋น ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํธ ๋ฐฐ์ด๋ก ๋ณํ์์ผ ์ ์ฅ์ํจ๋ค๊ณ ํ๋ค. ์ด๋ ๊ฒ ์ ์ฅ๋ ๊ฒ์ ๋ค์ ๊ฐ์ฒด๋ก ๋๋๋ฆฌ๋ ๊ฒ์ ์ญ์ง๋ ฌํ(..
-
[Tomcat] Unsupported major.minor version 51.0
์๋ฌ๋ก๊ทธ - ์ฃผ์ ์๋ฌ ๋ฌธ๊ตฌ org.apache.catalina.core.StandardWrapperValve invoke .... Insupported major.minor version 51.0 .... - ๊ฐ๋ฐํ๊ฒฝ JDK : jdk1.6.0_45 WAS : tomcat 7.0.82 ๋ฐ์์์ธ ๋ก์ปฌ์์ ํ๋ก์ ํธ ์ธํ ํ ๊ฐ๋ํ ๋ ๋ฐ์ํ๋๋ฐ ๊ตฌ๊ธ๋ง์ ํ๋ฉฐ ์ฐพ์๋ณด๋ Java์ ์ปดํ์ผ ๋ฒ์ ๊ณผ ์คํ ๋ฒ์ ์ด ๋ฌ๋ผ์ ๋ฐ์ํ๋ ์๋ฌ๋ผ๊ณ ํ๋ค. ์ฆ, ์ปดํ์ผ ๋ฒ์ ๋ณด๋ค ์ดํ ๋ฒ์ ์์ ์คํ๋์์ ๋ ๋ฐ์ํ๋ ์๋ฌ์ด๋ค. - ๋ฐ์ CASE 1. Tomcat6์์ JDK 1.7๋ก ์ปดํ์ผ๋ ํ๋ก์ ํธ๋ฅผ ์คํํ๋ ๊ฒฝ์ฐ 2. JDK 1.7๋ก ์ปดํ์ผํ๊ณ JDK 1.6 ๋ฒ์ ์ด ๊ธฐ๋ณธ์ธ ๋๋ PC์์ ์คํํ์ ๊ฒฝ์ฐ ์์ 2๊ฐ์ง ์ด์ ์ธ ์ค..
-
[Django] django-crontab ์ค์ผ์ค๋ฌ ์์ฑ
๐ Crontab crontab์ Linux ์ด์์ฒด์ ์์ ์๊ฐ ๊ธฐ๋ฐ ์ก ์ค์ผ์ค๋ฌ์ด๋ค. ์ฆ, ์ํ๋ ์๊ฐ์ ์ํ๋ ์์ ์ ์ํํ ์ ์๊ฒ ํด์ฃผ๋ ์์ ์ค์ผ์ค๋ฌ๋ผ๊ณ ๋ณด๋ฉด ๋๋ค. ์๋ฅผ ๋ค์ด ์ฅ๊ณ ์์ ๋ก๊ทธ์ธ์ ํ์ ๋, session์ผ๋ก ๊ตฌํ๋ ๋ก๊ทธ์ธ์ด๋ผ๋ฉด django-session์ session์ ๋ณด๊ฐ ์ ์ฅ๋์๋ค๊ฐ ๋ก๊ทธ์์ํ๋ฉด ์ญ์ ๊ฐ ๋๋ค. ํ์ง๋ง ๋ธ๋ผ์ฐ์ ๊ฐ ๋ซํ๊ฑฐ๋ ๋ง๋ฃ์๊ฐ์ด ์ง๋๊ฒ ๋๋ฉด session์ ๋ณด๋ ์ ์ง๋๋ฉฐ ๋ก๊ทธ์์ ์ฒ๋ฆฌ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ๊ณ์๋๋ ๋ก๊ทธ์ธ ๋ง์์ง๋ฉด ๋ถํ์ํ session ๋ฐ์ดํฐ๊ฐ ์์ฌ ์๋ฆฌ๋ฅผ ์ฐจ์งํ๊ฒ ๋๋ค. ์ด๋ ํน์ ์๊ฐ์ด ๋๋ฉด ๋ง๋ฃ๊ฐ ๋ session์ ๋ณด๋ฅผ ์ญ์ ํด ์คฌ์ผ๋ฉด ์ข๊ฒ ๋ค. ์์ ๊ธฐ๋ฅ์ ๋์ ํด์ฃผ๋ ๊ฒ์ด ๋ฐ๋ก crontab!!์ด๋ค. ๐ฑ django-crontab ์ค์น ๋จผ์ ๋ค์..
-
[Python] ํ์ด์ฌ ์ค๋ฒ๋ผ์ด๋ฉ๊ณผ ์ค๋ฒ๋ก๋ฉ
๐ ํ์ด์ฌ์์์ ๋คํ์ฑ Java ์ธ์ด์ ๋คํ์ฑ์ ๋ค๋ฃจ๋ฉด์ ์ค๋ฒ๋ผ์ด๋ฉ๊ณผ ์ค๋ฒ๋ก๋ฉ์ ๋ํด ์์๋ณด์๋ค. ๊ทธ๋ ๋ค๋ฉด Python์์๋ ์ธ์ด์ ๋คํ์ฑ์ด ์๋์ง ์ดํด๋ณด๋ ค๊ณ ํ๋ค. Java ์ค๋ฒ๋ผ์ด๋ฉ๊ณผ ์ค๋ฒ๋ก๋ฉ [Java] Java ๋คํ์ฑ๊ณผ ์ค๋ฒ๋ก๋ฉ, ์ค๋ฒ๋ผ์ด๋ฉ ๐ Java ๋คํ์ฑ โ๏ธ ๋คํ์ฑ ์ด๋ ํ๋์ ํจ์, ํด๋์ค๊ฐ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ๋์ํ๋ ๊ฒ์ ๋งํ๋ค. Java์์๋ ์ฃผ๋ก ์ค๋ฒ๋ก๋ฉ(Overloading)๊ณผ ์ค๋ฒ๋ผ์ด๋ฉ(Overriding) ์ ํตํด์ ๋คํ์ฑ์ ์ง์ํ๋ค. ๐ฑ ์ค geminihoroscope.tistory.com ๐ฑ ์ค๋ฒ๋ก๋ฉ(Overloading) โ๏ธ ํ์ด์ฌ์์๋ ์ค๋ฒ๋ก๋ฉ์ ์ ์์ผ๋ก ์ง์ํ์ง ์๋๋ค๊ณ ํ๋ค. ํ์ง๋ง ๊ตฌํ์ ๊ฐ๋ฅํ์ง๋ง ์ค๋ฒ๋ก๋ฉ์ ๋จ๋ฐํ๋ฉด ์ฝ๋๊ฐ ๋ณต์กํด์ง๋ค. โ๏ธ ํ์ด์ฌ์์๋ ์ฐ์ฐ์ ์ค..
-
[Java] Java ๋คํ์ฑ๊ณผ ์ค๋ฒ๋ก๋ฉ, ์ค๋ฒ๋ผ์ด๋ฉ
๐ Java ๋คํ์ฑ โ๏ธ ๋คํ์ฑ ์ด๋ ํ๋์ ํจ์, ํด๋์ค๊ฐ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ๋์ํ๋ ๊ฒ์ ๋งํ๋ค. Java์์๋ ์ฃผ๋ก ์ค๋ฒ๋ก๋ฉ(Overloading)๊ณผ ์ค๋ฒ๋ผ์ด๋ฉ(Overriding) ์ ํตํด์ ๋คํ์ฑ์ ์ง์ํ๋ค. ๐ฑ ์ค๋ฒ๋ก๋ฉ(Overloading) : ํ์ฅ โ๏ธ ํจ์๊ฐ ์ฌ๋ฌ ๊ฐ์ ๋์ผํ ์ด๋ฆ์ ๊ฐ์ง๋ฉฐ ๋งค๊ฐ๋ณ์์ ์ ํ๊ณผ ๊ฐ์ ๊ฐ ๋ค๋ฅด๊ฒ ์ค์ ๋์ด ์ฌ์ฉํ๋ ๊ฒ์ ์๋ฏธํ๋ค. โ๏ธ ์ค๋ฒ๋ก๋ฉ์ ํจ์ ์ค๋ฒ๋ก๋ฉ ๊ณผ ์์ฑ์ ์ค๋ฒ๋ก๋ฉ ์ด ์์ผ๋ฉฐ ์ค์ ์ ์ฉ๋๋ ๊ฒ์ ๊ฐ๋ค. ๊ฐ์ ์ด๋ฆ์ ํจ์๋ฅผ ์ฌ๋ฌ ๊ฐ ์ ์ํ๊ณ , ๋งค๊ฐ๋ณ์์ ์ ํ๊ณผ ๊ฐ์๋ฅผ ๋ค๋ฅด๊ฒ ํ์ฌ ๋ค์ํ ์ ํ์ ํธ์ถ์ ์๋ตํ ์ ์๊ฒ ํ๋ ๋ฐฉ์์ด๋ค.(์ผ๋ฐ์ ์ผ๋ก ํ๋์ ํด๋์ค ์์ ๋์ผํ ์ด๋ฆ์ ํจ์๋ฅผ ์์ฑํ๊ฒ ๋๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.) โค ์ค๋ฒ๋ก๋ฉ ์์ public cl..
-
[Java] ๋งฅ๋ถ์์ Java ํ๊ฒฝ์ธํ (VSCODE)
โ๏ธ Windows์์ ์๋ฐ๋ฅผ ์ฌ์ฉํ๋ ์ ์ฅ์์, M1 ๋งฅ๋ถ์์ Java๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ๋ ์ด๋ป๊ฒ ํ๊ฒฝ์ธํ ์ ํด์ผํ๋์ง ๋ง๋งํ๊ธธ๋ ์ด๋ฒ ๊ธฐํ์ ์ค์นํ๊ณ ์ ๋ฆฌํ๋ ค๊ณ ํ๋ค. ๐บ homebrew ์ค์น [macOS] M1 Mac ์ brew ์ค์นํ๋ ๋ฐฉ๋ฒ! ์ต๊ทผ! ์์ดํจ๋ ๊ฐ๊ฒฉ์ฌํ๋ฅผ ๋ณด๊ณ ๋งฅ๋ถํ๋ก 2017 ์ดํ 5๋ ๋ง์ ์ฟ ํก์์ M1 Max ๋งฅ๋ถํ๋ก 16์ธ์น๋ฅผ ๊ตฌ๋งคํ์์ต๋๋ค. ์๋ก ๊ตฌ๋งค๋ฅผ ํ์์ผ๋ ๊ฐ๋ฐํ๊ฒฝ์ ์ธํ ํ๊ธฐ ์ํ์ฌ ๊ฐ์ฅ ๋จผ์ ! brew ๋ฅผ ์ค์นํด์ฃผ์ somjang.tistory.com โ๏ธ homebrew๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์น๋์ด ์๋ ํ๋ก๊ทธ๋จ์ด ์๋๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ๊ธฐ ์ํด์ ๋จผ์ ์ค์น๋ฅผ ์งํํ์. brew update ์ Error ๋ฐ์(Ventura ์ ๋ฐ์ดํธ ์ดํ) [macOS] brew update ..
-
[๋ฅ๋ฌ๋] ๋ฅ๋ฌ๋์ด๋?
๐ ํ์ด์ฌ์ผ๋ก ๊ตฌํํ๋ ๋จธ์ ๋ฌ๋ / ๋ฅ๋ฌ๋ ์์๋ณด๊ธฐ โ๏ธ ์ด์ ์๋ ํซ์ด์๊ฐ ๋๊ณ ์๋ ์ธ๊ณต์ง๋ฅ ๋ถ์ผ์ธ ๋จธ์ ๋ฌ๋ ๊ณผ ๋ฅ๋ฌ๋ ์ ๋ํต์ ๊ณต๋ถํด๋ณด๋ ค๊ณ ํ๋ค. โ๏ธ ๋จธ์ ๋ฌ๋ ๊ณผ ๋ฅ๋ฌ๋ ์ ๊ตฌ๊ธ ํ ์ํ๋ก์ฐ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๊ณ ๋น ๋ฅด๊ฒ ๊ฐ๋ฐํ ์ ์์ง๋ง ์ด ๋จธ์ ๋ฌ๋๊ณผ ๋ฅ๋ฌ๋์ ๋ด๋ถ ๊ตฌ์กฐ๊ฐ ๋ธ๋๋ฐ์ค๋ก ์ ๊ณต๋๊ธฐ ๋๋ฌธ์ ์ด๋ป๊ฒ ๋์๋๋์ง, ๋๋ ์ฝ๋๋ก ์ด๋ป๊ฒ ๊ตฌํ๋๋์ง ์ ์ ์๋ค๋ ๋จ์ ์ด ์๋ค. โ๏ธ ๊ทธ๋์ ์ ํ๋ธ ๋ฐ์ฑํธ๋์ ๋จธ์ ๋ฌ๋ / ๋ฅ๋ฌ๋ ๊ฐ์๋ฅผ ๋ค์ผ๋ฉฐ ํ์ด์ฌ์ผ๋ก ์ด๋ป๊ฒ ์๋๋๋ฉฐ ์ฝ๋๋ก๋ ์ด๋ป๊ฒ ๊ตฌํ์ด ๋๋์ง ์์๋ณด๋ ค๊ณ ํ๋ค. ๋จธ์ ๋ฌ๋ ๊ฐ์ ๐ฑ 4์ฐจ ์ฐ์ ํ๋ช ๋ฐฐ๊ฒฝ โ๏ธ ํ์์ ๋ฐ๋ผ ์ ์๋ ์กฐ๊ธ์ฉ ๋ค๋ฅด์ง๋ง, ๋์ฒด๋ก 4์ฐจ ์ฐ์ ํ๋ช ์ ๋ชจ๋ ๊ฒ์ด ์ฐ๊ฒฐ๋์ด(Connectivity) ์๋ ํ๊ฒฝ์์ ์ธ๊ณต์ง๋ฅ(Ar..
-
[Docker] docker-compose๋ฅผ ์ด์ฉํ ํ๋ก์ ํธ ๋ฐฐํฌ
โ๏ธ EC2์๋ฒ์์ ์ผ๋ฐ์ ์ธ Django๋ฅผ ์ด์ฉํ ์๋ฒ ๋ฐฐํฌ ์์ ๋ ๋์์ด ๋ง์ด ๋์๋ค. โ๏ธ ์์ฆ ์ถ์ธ๋ก DepOps์์ ์ด์ฉ๋๋ MSAํํ์ ์๋ฒ ๋ฐฐํฌ ๋ฐฉ์์ ๊ธฐ๋ณธ์ด ๋๋ Docker ๋ฐฐํฌ ๋ฐฉ์์ ์ตํ๊ธฐ ์ํด docker-compose๋ก ํ๋ก์ ํธ๋ฅผ ๋ฐฐํฌํด ๋ณด๋ ค๊ณ ํ๋ค. ๐ EC2 1. ๊นํ๋ธ repo ์๋ฒ๋ก ์ด๋ โค ํ๋ก์ ํธ ํด๋ ์์ฑ $ mkdir workspace โ๏ธ ํ๋ก์ ํธ ์์ ๋ฌผ์ด ๋ค์ด๊ฐ ํด๋๋ฅผ ์์ฑํ๋ค. โค Git repo ๋ฐ๊ธฐ $ git clone -b โ๏ธ ํ์ฌ main ๋ ํฌ์งํฐ๋ฆฌ๋ ์ต์ ์ํ๊ฐ ์๋๊ธฐ ๋๋ฌธ์ develop ๋ ํฌ์งํฐ๋ฆฌ๋ฅผ clone ๋ฐ๋๋ก ํ์. 2. ์๋ฒ์์ ์ฌ์ฉ๋ ํจํค์ง update ๋ฐ ์ค์น โค ์ฌ์ฉ ๊ฐ๋ฅํ ํจํค์ง ๋ฐ ๋ฒ์ ์ ๋ณด ์ ๋ฐ์ดํธ $ sudo apt update..
-
[ISSUE] Tag ํฌํจ๋ Site ๋ชจ๋ธ์ serialize ์ฒ๋ฆฌ
[22.11.27] ๐ ๊ตฌํํ๊ณ ์ ํ๋ ํ๋ฉด 1. ์ด์ ๊ฐ๋ฐ ๋จ๊ณ์์ ์ฌ์ดํธ๋ฅผ ๋ฑ๋กํ์ฌ ํด๋น ์ฌ์ดํธ์ Tag๋ฅผ Many-to-Many๊ด๊ณ๋ก ๋ฑ๋กํ๋ ์งํ 2. ์ด์ ํ๊ทธ๊ฐ ๋ฑ๋ก๋ ์ฌ์ดํธ๋ฅผ ์ต์ ์์ผ๋ก 4~6๊ฐ ์กฐํ ํ ๋ฑ๋ก๋ ๋ชจ๋ ํ๊ทธ๋ฅผ ์กฐํํ์ฌ ํ๋จ์ Tag buttonํํ๋ก ๋์ ์ผ๋ก ๋ฟ๋ ค์ฃผ๋ ์์ ์ ์งํํ ๊ฒ์ด๋ค. 3. ์์ ๊ฐ์ด ์งํํ๊ธฐ ์ํด์ Siteํญ๋ชฉ์ ์กฐํํ ๋ฟ ์๋๋ผ Many-to-Many๊ด๊ณ๋ก ๋ฑ๋ก๋ ํ๊ทธ๋ ์กฐํ๋ฅผ ํด์ผํ๊ธฐ ๋๋ฌธ์ Serializer ์์ ์ ์งํํ๊ฒ ๋์๋ค. ๋ฌผ๋ก api 2๊ฐ๋ฅผ ์์ฒญํ์ฌ ๊ฐ๊ฐ ์ฌ์ดํธ ๋ฐ์ดํฐ, ํ๊ทธ ๋ฐ์ดํฐ ์กฐํํ ์๋ ์์ง๋ง 2๋ฒ์ ์์ฒญํ๋ค๋ ๊ฒ ์์ฒด๊ฐ ๋นํจ์จ์ ์ด๋ฉฐ drf์ ์กด์ฌํ๋ serialize๋ฅผ ํ์ฉํ์ง ๋ชปํ๋ค๊ณ ํ๋จ 1. views.py > TagsA..
-
[ISSUE] ManytoMany ๊ด๊ณ๋ฅผ ๊ฐ์ง ๋ ๋ชจ๋ธ Bulk Create ์์
[22.11.26] ๐ ManytoMany ๊ด๊ณ๋ฅผ ๊ฐ์ง ๋ ๋ชจ๋ธ Bulk Create ์์ โ๏ธ ํ์ฌ ์์ ๊ฐ์ด ๋ฑ๋ก๋ ํญ๋ชฉ์ ๋ํด ํ๊ทธ๋ฅผ ์ถ๊ฐํ๋ ๊ธฐ๋ฅ์ ๊ฐ๋ฐ ๊ตฌํ ์ค์ด๋ค. ๋ฑ๋ก๋ ํญ๋ชฉ์ Scrap Parsing์ ํตํด ํน์ ์ฌ์ดํธ์ ๊ด๋ จํ url, ์ธ๋ค์ผ, ์ ๋ชฉ ๋ฑ์ ์ ์ฅํ์ฌ ์ ๊ทผํ ์ ์๊ฒ ๊ตฌํํ ํํฉ ํ๋ฉด์ด๋ค. ํน์ ์ฌ์ดํธ๋ฅผ ์ ํํ์ฌ bulk(๋ค์ค)๋ก ํ๊ทธ๋ฅผ ๋ฑ๋กํ ์ ์๊ฒ ์คํฌ๋ฆฝํธ ๊ตฌํ ์ ํํ ๊ฐ Site์ Tag Model์ด ManytoMany ๊ด๊ณ๋ก ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง 1. ๋ชจ๋ธ ์ฝ๋ ๐ Tag Model class Site(models.Model): """ ํญ๋ชฉ์ ๊ดํ ๋ฐ์ดํฐ ๋ชจ๋ธ """ title = models.CharField(verbose_name='ํ์ดํ', max_length=100)..
-
[ISSUE]decorator๋ฅผ ์ด์ฉํ ์ค๋ณต์์ ์ ์ฒ๋ฆฌ
[22.11.26] ๐ ์ค๋ณต๋๋ฉฐ ๊ฐ ํจ์์ ์ฌ์ ์ ์ฒ๋ฆฌ๋๋ ์์ decorator ๐ SiteBulkAPIView - ๋ฒํฌ ์ฆ๊ฒจ์ฐพ๊ธฐ, ์ญ์ class SiteBulkAPIView(APIView): """ ๋ฒํฌ ํญ๋ชฉ ์ฆ๊ฒจ์ฐพ๊ธฐ, ์ญ์ api """ def get_list(self): pk_ids: list = self.request.data.get('pk_ids') return get_list_or_404(Site, id__in=pk_ids) def validate_ids(self): pk_ids: list = self.request.data.get('pk_ids') for id in pk_ids: get_object_or_404(Site,id=id) return self.get_list() def put(..
-
[ISSUE] 2์ข ๋ฐ์ดํฐ ๋ฐ์์ค๋ api๋ฅผ restfulํ๊ฒ ๋ณ๊ฒฝ ์์
[22.11.29] 2์ข ๋ฅ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋ api, restfulํ๊ฒ ๋ณ๊ฒฝ ์์ ๐ many-to-many serialize โ๏ธ many-to-many ๊ด๊ณ๊ฐ ์กด์ฌํ๋ Model Site, Tag์ ๋ฐ์ดํฐ๋ฅผ ํ๋์ api๋ฅผ ์์ฒญํด์ ๋์์ ๋ฐ์์ค๋๋ก serialize์ models, view์ชฝ ์์ ์ ์งํํ์๋ค. serializers.py **class TagSerializer(ModelSerializer): name = serializers.CharField(max_length=20, allow_blank=False, trim_whitespace=True) class Meta: model = Tag fields = ['id', 'name']** class SiteSerializer(ModelSeri..
-
[ISSUE] signup AbstractBaseUser class
[22.11.24] Signup-AbstractBaseUser โ๏ธ Django์์ ์ ๊ณตํ๊ณ ์๋ ์ ๊ณตํ๋ auth-user๋ฅผ ์ฌ์ฉํ๋ฉด ํ์๊ฐ์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก secret key๋ฅผ ์ด์ฉํ์ฌ password๋ฅผ ์ํธํ, ๋ก๊ทธ์ธ ์ session์ ์ด์ฉํ ์ธ์ฆ ์ธ๊ฐ๋ฅผ ์์ฝ๊ฒ ์ด์ฉํ ์ ์๋ค. โ๏ธ ํ์ง๋ง ํ์ฌ ์งํํ๊ณ ์๋ ํ๋ก์ ํธ๋ auth-user๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ค๋ฅธ user๋ชจ๋ธ์ ์์ฑํ์ฌ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ ์ ์๊ฒ ๋ฐ๋ก ๋ถ๋ฆฌํ์๋ค. โ๏ธ Simple-JWT๋ฅผ ์ด์ฉํ ์์ ์ด๋ผ session์ ์ด์ฉํ ๋ํ ์ธ์ฆ ์ธ๊ฐ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ , User์ ํ์ํ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ custom ํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ ๊ณตํด ์ฃผ๋ auth-user๋ฅผ ์ฌ์ฉํ์ง ์์๋ค. ๐ User ๐ User Model class Us..
-
[ISSUE] APIView๋ก bulk update ๊ตฌํ
[22.11.23] APIView bulk update ๊ตฌํ โ๏ธ ์ฌ์ฉ์๊ฐ ๋น๋ฒํ๊ฒ ์ฐพ์๊ฐ๋ ์ฌ์ดํธ๋ฅผ ๋ถ๋งํฌ์ฒ๋ผ ์ ์ฅํ์ฌ ์ ์ฅํ ํญ๋ชฉ๋ค์ ๋ํด ์ฆ๊ฒจ์ฐพ๊ธฐ๋ก ๋ฑ๋กํ์ฌ ๋ถ๋ฅํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ ์๋ค. ๐ ๊ตฌํ ํ๋ฉด โ๏ธ ์์ ์ด๋ฏธ์ง์ ๊ฐ์ด ์ฌ์ฉ์๊ฐ ๋ฑ๋กํ ํญ๋ชฉ์ ์ ํํ ์ ์๊ณ , ์ ํํ ํญ๋ชฉ๋ค์ bulk(๋ค์ค)์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ ๊ธฐ๋ฅ์ด๋ค. ์๋จ Toolbar์์ "๋ฒํฌ"๋ฒํผ ์ ํ์ผ๋ก ๋ฑ๋ก๋ ์ฌ์ดํธ๋ฅผ ์ ํ์ด ๊ฐ๋ฅํ๊ฒ javascript๋ก ๋์ ๊ตฌํ ํญ๋ชฉ์ ์ ํํ ๋๋ง๋ค ์ฝ๋์ ์ ์ธ๋์ด ์๋ ์ ์ญ๋ณ์ selected_articles์ ํด๋น ํญ๋ชฉ์ ๋ํ ์๋ณ์(id)๊ฐ์ ์์์ฃผ๋ฉฐ ๋ฒํฌ ์ด๋ฒคํธ๋ฅผ ์๋ํ๊ธฐ ์ํ ์ ์์ ์ ์งํํ๋ค. ๐ ํด๋ผ์ด์ธํธ javascript function favoriteBulkSelectedSite..
-
[ISSUE] Asynchronous processing ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฐฉ์
โ๏ธ ์๋ฐ์คํฌ๋ฆฝํธ์์ fetch ํจ์๋ฅผ ์ด์ฉํด์ ์๋ฒ์ ํต์ ์ ํ๊ฒ ํด๋ผ์ด์ธํธ๋จ์ ๊ฐ๋ฐํ๊ณ ์๋ค. ๐ fetch() ํจ์ ๋น๋๊ธฐ์ฒ๋ฆฌ๋ก ์ธํ ๋ฌธ์ ๋ฐ์ ๐ ๋ฌธ์ ์ ์ฝ๋ function deleteBulkSelectedSite(){ /* bulk ์ญ์ ์ด๋ฒคํธ */ if (selected_articles.length > 0){ if(confirm('์ ํํ ํญ๋ชฉ์ ์ญ์ ํ์๊ฒ ์ต๋๊น?')){ let data = setFechData("DELETE", {pk_ids: selected_articles, user: 'User Id'}) fetch(`/api/sites/bulk`, data) .then(response => { let status = response.status if (status == 200) alert..
-
[ISSUE] gernerics view, DestroyAPIView ์ ์ฉ
[22.11.20] Try to apply generics DestroyAPIView Generics View๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ด์ โ๏ธ DRF๋ก ์๋ฒ๋จ์ rest_framework๊ฐ ์ง์ํด์ฃผ๋ generics View๋ฅผ ์ฌ์ฉํ์ง ์๊ณ APIView๋ง์ ์ด์ฉํ์ฌ ํ๋ก์ ํธ๋ฅผ ์งํํ๊ธฐ๋ก ๊ฒฐ์ ํ์๋ค. โ๏ธ ๊ทธ๋ ๊ฒ ๊ฒฐ์ ํ ์ด์ ๋ generics ํ View๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง๊ณ ๊ฐ๋ฐํ๊ธฐ ํธ๋ฆฌํด์ง๊ธด ํ์ง๋ง ํ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ ๊ทธ๋ ๊ฒ ๊ฐ๊ฒฐํด์ง๊ณ ์๋๋๋ ๋ก์ง์ ํ์ ํ์ง ์๊ณ ๋ฌด๋ถ๋ณํ๊ฒ ์ฌ์ฉํ๋ ๊ฒ์ ์ฐ๋ คํ์ฌ ์ฒ์์๋ ์์ ๋กญ๊ฒ customizing์ด ๊ฐ๋ฅํ APIView๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค. APIView๋ก ์์ฑ๋ Bulk Delete โ๏ธ ํญ๋ชฉ์ ๋ค์ค์ผ๋ก ์ญ์ ํ๊ธฐ ์ํ ๊ธฐ๋ฅ ๊ฐ๋ฐ์ ์ํด ํด๋ผ์ด์ธํธ ๋จ์์ ..
-
[Python] format(์ฒ๋จ์ ์ฝค๋ง ์ฝ์ ํ๊ธฐ)
โ๏ธ ์ซ์๊ฐ ์ฒ, ๋ง ๋จ์ ์ด์์ผ๋ก ์ปค์ง๋ฉด ํ ๋ฒ์ ๋ช์๋ฆฌ ์์ธ์ง ์ฝ๊ธฐ๊ฐ ์ด๋ ต๋ค. 123958674 โ๏ธ ์ซ์์ ์๋ฆฟ ์๋ฅผ ์ฝ์ด ์ฒ์๋ฆฌ ๋ง๋ค ","๋ฅผ ์ฐ์ด์ฃผ๋ ๋ก์ง์ ๋ฃ์ด Python์ ํจ์๋ก ๋ง๋ค ์ ์๊ฒ ์ง๋ง, Python์์๋ format์ด๋ผ๋ ํจ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์ด์ฉํ์ฌ ์ฒ์๋ฆฌ ๋ง๋ค ","๋ฅผ ์ฝ์ ํ์ฌ ๋ณด์. price = 123958674 print(format(price, ',d')) print(format(price, ',f')) โ๏ธ format() ํจ์์ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ","๋ฅผ ์ฝ์ ํ ๊ฐ, ๋ ๋ฒ์งธ ์ธ์๋ก๋ "d" ๋๋ "f"๋ฅผ ๋ฃ์ด์ค๋ค. format(price, ',d'): ์ ์ํ์ผ๋ก format(price, ',f'): ์ค์ํ์ผ๋ก โค format() ์ฒ๋จ์ ์ฝ์ print(form..
-
[Django] ๋ค์ํ ํ ํ๋ฆฟ ํ๊ทธ
๊ฒ์ํ๊ณผ ํ์ด์ง์ ๊ตฌํํ๋ฉฐ ํ ํ๋ฆฟ ํ๊ทธ๋ฅผ ์ฌ์ฉํ์๋ค. โ๏ธ {% csrf_token %}: ์๋ฒ์ api ํต์ ์ ํ์ํ ํฌ๋ก์ค ์ฌ์ดํธ ์์ฒญ ์์กฐ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ํ๊ทธ โ๏ธ {% if %}{% else %}: ์กฐ๊ฑด์ ์ด์ฉํ์ฌ html์์ python ๋ฌธ๋ฒ ์ฌ์ฉ ๊ฐ๋ฅ โ๏ธ {% for item in items %}: for ๋ฃจํ๋ฅผ ์ด์ฉํ์ฌ html์์ python ๋ฌธ๋ฒ ์ฌ์ฉ ๊ฐ๋ฅ ๐ ์์ฐจ์ ์ถ๋ ฅ cycle โ๏ธ ๊ฒ์ํ์ ๊ตฌํํ๋ฉด์ ๋ถํธ์คํธ๋ฉ์ผ๋ก ๋์์ธ์ ์ ํ๊ณ , ์ง์์ ํ์ ๋ผ์ธ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์์ ๋ค๋ฅด๊ฒ ์ฃผ์๋ค. ์์ด๋ ์ ์ ์ด๋ฆ ์ด๋ฉ์ผ ๊ฐ์ ์ผ ํ์ดํ๋ ๊ฐ๊ฒฉ {% for user in users %} {{ user.id }} {{ user.username }} {{ user.email }} {{ u..
-
[Django] django-seed๋ฅผ ์ด์ฉํ ๋ฐ์ดํฐ ๋ง๋ค๊ธฐ
์ฅ๊ณ ๊ฒ์ํ์ ๊ตฌํํ๊ธฐ ์ํด django-seed๋ฅผ ์ด์ฉํ์ฌ ์์์ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์ด๋ณด์๋ค. ํ์ง๋ง ๋ฌด์์ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ ์ด๋ฒ์๋ ์ฝ๋๋ฅผ ์์ฑํ์ฌ ๋ด๊ฐ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์์ฑํด๋ณด๋ ค๊ณ ํ๋ค. โค ๋๋ฌ๋ณด๊ธฐ : Django ๊ฒ์ํ ๐ seed๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ ์์ฑํ๊ธฐ 1. django-seed ์ค์น $ pip3 install django-seed $ pip3 install psycopg2 $ pip3 freeze > requirements.txt โ๏ธ ๋จผ์ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ ์ ์๊ฒ ๋์์ฃผ๋ seed๋ฅผ ์ค์นํ์. ๐ ๋ฌด์์ ๋ฐ์ดํฐ ์์ฑ ๋ฐฉ๋ฒ $ python3 manage.py seed shortener --number=30 โ๏ธ ์ฝ๋ ์์ฑ ์์ด seed๋ง ์ฌ์ฉํ์ฌ app์ ์์ฑ๋ ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๋ฌด์์..
- ๋ฐฉ๋ฌธ์์
- Best Story
์ ์ฒด ๋ฐฉ๋ฌธ์
์ค๋ ๋ฐฉ๋ฌธ์
์ด์ ๋ฐฉ๋ฌธ์