๋ฝ(Lock)์ ์ฌ๋ฌ ์ค๋ ๋๋ ํธ๋์ญ์ ์ด ๋์์ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ๊ฒฝ์ฐ ๋ฐ์ํ ์ ์๋ ๋์์ฑ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๋ ๋ฉ์ปค๋์ฆ์ด๋ค. ๋ฝ์ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ ์ค์ํ ๋ฐฉ๋ฒ์ด๋ฉฐ, ํธ๋์ญ์ ์ ์ถฉ๋์ ๋ฐฉ์งํ๊ฑฐ๋ ํด๊ฒฐํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.๋น๊ด์ ๋ฝ (Pessimistic Lock)
์ด์ ์ Entity๋จ์์ ์ง์ ๋ฒ์ญ๊ฐ๊ณผ ๋งคํํ๋ ๊ฒ์ ๋ํด,์ํฐํฐ๋ง๋ค Translatable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ , ๋ฒ์ญ ํ๋๋ฅผ ๊ด๋ฆฌํ๋ ์ฝ๋๊ฐ ๋ฐ๋ณต๋๊ณ , ํ๋๊ฐ ์ถ๊ฐ๋ ๋๋ง๋ค TranslatableField๋ฅผ ํจ๊ป ์ถ๊ฐํด์ฃผ์ด์ผ ํ๋ค๋ ๋ถ๋ถ์ ๋ํด ๋ฒ๊ฑฐ๋ก์์ ๋๊ผ์ต๋๋ค
ํ์ฌ ์งํ์ค์ธ ๊ณต๋ชจ์ ํ๋ก์ ํธ๋ ์ธ๊ตญ์ธ์ ํ๊ตญ ๊ด๊ด ํ์ฑํ๋ฅผ ๋๊ณ ์ ํ๋ ์ดํ๋ก, ์๋น์ค ๋ด ๋ค๊ตญ์ด ์ง์์ด ์๊ตฌ๋๋ค. ํ๋ก ํธ์์ ๋ฐ์์ค๋ ๋ฐ์ดํฐ๋ฅผ ๋ฒ์ญ์ฒ๋ฆฌ๋ฅผ ํ๊ธฐ์๋ ๋ฒ์ญ ์ฑ๋ฅ์ด ์ฉ ์ข์ง ์์ผ๋ฉฐ, ๊ทธ๋งํผ ์ฑ๋ฅ์ด ๋จ์ด์ง ์ ์๊ธฐ์ ์๊ฐํ์ง ์์๋ค. ํนํ ์๋น์ค ํน์ฑ ์
ํก๋จ ๊ด์ฌ์ฌ(Cross-Cutting Concerns)๋ฅผ ๋ชจ๋ํํ๊ธฐ ์ํ ๊ธฐ์ ์ฌ๊ธฐ์ ํก๋จ ๊ด์ฌ์ฌ๋, ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง๊ณผ๋ ๋ณ๊ฐ๋ก ์ฌ๋ฌ ๋ชจ๋์ ๊ณตํต์ ์ผ๋ก ์ ์ฉ๋๋ ๊ธฐ๋ฅ์ ์๋ฏธํฉ๋๋ค!๋ก๊น , ํธ๋์ญ์ ๊ด๋ฆฌ, ๋ณด์, ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ๋ฑ์ ์ผ๋ฐ์ ์ผ๋ก ์ ์ฉ๋ฉ๋๋ค.
๋ณดํต Redis๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๊ธฐ ๊ฒ์์ด ๋ญํน์ ๊ตฌํํ ๋, Sorted Set์ ์ฌ์ฉํ๊ณค ํ๋ค.Redis Sorted Set์ key ํ๋์ ์ฌ๋ฌ๊ฐ์ score์ member๋ก ๊ตฌ์ฑ๋๋๋ฐ, ์ด๋ member๊ฐ์ ์ค๋ณต๋์ง ์์ผ๋ฉฐ score๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋๋ค.๋ณดํต mem
์์ ๊ฐ์ด @OneToMany ๊ด๊ณ๋ก ์ค์ ๋ files๊ธฐ์กด ์ฝ๋๋ฅผ ๋จ์ํํด๋ณด์๋คDelete๊ฐ ์ ๋๋ก ์๋ํ์ง ์๋ ์ด์ ๋ ๋๋ฌด๋ ๋น์ฐํ๊ณ ๊ฐ๋จํ๋ค(1) post ๊ฐ์ฒด๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ์ ธ์จ ํ (2) File ์ํฐํฐ๋ฅผ ์ญ์ ํ๊ฒ ๋๋ฉด ๋ถ๋ช ์ ์์ ์ผ๋ก ์ญ์ ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ง
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๋ ฌ๋ฌธ์ ์คํํ ๋ ์ ๋ ฌ์ด ๋๋ ๋ฏ ํ๋ฉด์ ์๋๋ ํ์์ด ๋ํ๋๋ค๋ฉด, collation ์ต์ ์ ํ์ธํ์ORDER BY ์ด COLLATE "C" ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.์ฌ๊ธฐ์ "C"๋ C ์ธ์ด์ ๋ฐ์ดํธ ์์๋ฅผ ์ฌ์ฉํ๋ฉฐ, ์ด๋ ์ฃผ์ด์ง ๋ฌธ์์ด์ ๋ฐ์ดํธ ๋จ์๋ก ๋น๊ตํ
์คํ๋ง๋ถํธ ๋ด์์ Database๋ฅผ ๊ตฌ์ฑํ ๋ ๋ณดํต application.yml์์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ๋ค.๋๋ถ๋ถ์ ์์ ํ๋ก์ ํธ์์๋ ์ด๋ ๊ฒ ๋จ์ผ DB๋ก ๊ตฌ์ฑ๋์ง๋ง, ์ฌ๋ฌ ๊ฐ์ DB๋ก ๋๋์ด ๊ด๋ฆฌํ๊ฑฐ๋ ์ธ๋ถ DB๋ฅผ ์ฐธ์กฐํด์ผ ํ ๊ฒฝ์ฐ ๋ค์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์ฑ์ด ํ์ํ๋ค.๋
์ ๋ก๋์ค..IntelliJ์ Generate Javadoc ๊ธฐ๋ฅ์ ํตํด ๋ฌธ์ํ๋ฅผ ์งํํ๋ ๋์ค ์ด๋ฐ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.์ ๋ง ๋จ์ํ ๋ฌธ์ ์๋ค. ํ์ผ ๊ฒฝ๋ก ์ค ์ธ์ฝ๋ฉ์ด ์๋๋ ๋ฌธ์์ด์ด ํฌํจ๋์ด ์์ ๊ฒฝ์ฐ ๋ฐ์ํ๋ค.์์ด, ์ซ์์ ํ์ฉ๋๋ '\_'๋ฑ์ ํน์๋ฌธ์๋ฅผ ์ ์ธํ๊ณ ํ๊ธ
์นํ์ด์ง ๋ด์ ์๋ํฐ๋ฅผ ์ฝ๊ฒ ์๋ฒ ๋ฉ ํ ์ ์๋ Quill.js๋ ์ ๋ง ๊ฐํธํ๊ฒ ์ฌ์ฉํ ์ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ์ฉ ํด์ด๋ค. https://quilljs.com/docs/quickstart/ ๊ณต์๋ฌธ์์๋ ๊ต์ฅํ ๊น๋ํ๊ฒ ์ ๋ฆฌ๊ฐ ๋์ด์์ง๋ง, ์ฌ์ง ์ ๋ก๋ ๋ฑ์ ํ์ฒ๋ฆฌ๊ฐ ํ์ํ
local๊ณผ Httpํ๊ฒฝ์์ ์ ๋์๊ฐ๋ Kakao OAuth2๊ฐ ๋ก๋๋ฐธ๋ฐ์๋ฅผ ํตํด HTTPS๋ก ๋น๋ํ๋๋ authorizationrequestnot_found ์ค๋ฅ๊ฐ ๋ํ๋ฌ๋ค. ์ฒ์์ redirect url ๋ฌธ์ ์ธ ์ค ์์์ผ๋, ๋๋ฒ๊น ํด๋ณธ ๊ฒฐ๊ณผ Spring Secu
Env : Superset 2.0.1๊ณต์๋ฌธ์์ ๋์์๋ ๊ฒ์ฒ๋ผ, ๊ธฐ์กด์ config.py๊ฐ importํ ์๋ก์ด ์ค์ ํ์ผ๋ก superset_config.py๋ฅผ ์์ฑํ์๋ค.๋์ฌ๋ณด๋๋ฅผ ๊ณต์ ํ ๋ url parameter๋ฅผ ๋ฐ์์์ ์กฐ๊ฑด๋ฌธ์ผ๋ก ์ฃผ๊ธฐ ์ํด, ์ค์ ์ ๋ฐ๊พธ์ด์ฃผ์ด์ผ
EC2 ์ธ์คํด์ค ๋ด์์ Nginx์ Tomcat๋ฅผ ์ฐ๋ํด์, Nginx๋ ์น ์๋ฒ๋ก์ ์ ์ ์ธ ์ฝํ ์ธ ๋ฅผ ์ฒ๋ฆฌํ๊ณ , Tomcat์ Java ๊ธฐ๋ฐ์ ๋์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒ๋ฆฌํ๋๋ก ํฉ๋๋ค.jdk / openjdk version "17.0.7" 2023-04-18 LTSN
ํ์ฌ ์งํ์ค์ธ ํ๋ก์ ํธ์ ๋ก๊ทธ๋ฅผ ์ด๋ป๊ฒ ๋ชจ๋ํฐ๋งํ ์ง ๊ณ ๋ฏผํ๋ค๊ฐ, ์ด์ ๋ถํฐ ์ฌ์ฉํ๊ณ ์ถ์๋ ELK ์คํ์ ์ ์ฉํด๋ณด๊ธฐ๋ก ํ๋ค.ELK๋ฅผ ํ๋์ฉ ์ธํ ํ๊ธฐ์๋ ์๋นํ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆด ๋ฏ ํ์ฌ, Docker & Docker Compose๋ฅผ ์ฌ์ฉํด์ ์ฝ๊ฒ ๊ตฌ์ฑํ ์ ์๋ ์ปจํ ์ด๋
Roy๊ฐ ๋ฐํํ Rest API๋ ์์ฆ ์๋์์๋ ์ ์ง์ผ์ง๊ณ ์์ง ์์ ๊ฒ ๊ฐ๋ค.Rest ์ํคํ ์ฒ๋ฅผ ์ง์ง๋ก ์ค์ํ API๋ Restful API๋ผ๊ณ ํต์นญํ๋ ๊ฒ ๊ฐ์๋ฐ, ์ ๋ชจ๋ฅด๋ ์ํ์์ ๋ ๊ฐ๋ ์ ๋ชจ๋ ์ ํ ์ฌ๋๋ค์ ์๋นํ ํท๊ฐ๋ฆด ์๋ ์๋ค๊ณ ์๊ฐ์ด ๋ ๋ค. ์ฌ๊ธฐ์
์คํ๋ง ์ํ๋ฆฌํฐ์์๋ ๋ค์ํ ํจ์ค์๋ ์ํธํ ๋ฐฉ์์ ์ฌ์ฉํ ์ ์๋๋ฐ,๊ทธ ์ค ๊ฐ์ฅ ๋์ค์ ์ผ๋ก ์ฌ์ฉ๋๋ BCryptPasswordEncoder ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ฉํ๋ ค๊ณ ํ๋ค.ํ์ง๋ง ํ ์คํธ๋ฅผ ํ๋ ์ค, ํจ์ค์๋ ์ํธํ ๊ณผ์ ์์ ๋ฌธ์ ๊ฐ ์๋ ๊ฒ์ ๋ฐ๊ฒฌํ๋ค.์ฐ๋ฆฌ ์๋น์ค์์ ๋น๋ฐ
์์ ๊ฐ์ด ์ฌ์ฉ์ ์ธ์ฆ ์ ๊ณ์ ์ด ์กด์ฌํ์ง ์์ผ๋ฉด UsernameNotFoundException, ๋จ์ ๋น๋ฐ๋ฒํธ ์ค๋ฅ๋ฉด BadCredentialsException e๊ฐ ๋จ๊ฒ ํด๋จ๋ค.ํ์ง๋ง, ํ ์คํธ์ฝ๋๋ฅผ ๋๋ ค๋ณธ ๊ฒฐ๊ณผ ์์ด๋๊ฐ ์์ด๋, ๋น๋ฐ๋ฒํธ๊ฐ ํ๋ ค๋ ํญ์ BadCred
Spring Security์ Configure method๋ฅผ ์๋์ ๊ฐ์ด ์์ฑํ์ผ๋, .antMatchers("/api/login", "/api/signup", "/resources/\*\*").permitAll() ์ค์ ์ ํ์์๋ ๋ถ๊ตฌํ๊ณ ๋ก๊ทธ์ธ์ ์๋ํ ๋๋ง๋ค ๊ณ์
์ํ๋ฐ์ ์ฑ์ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๋ ๊ฒ์ ์๋ฏธํจ (์๋ฆผ)๋ฐฐํฐ๋ฆฌ ์ํ๊ฐ ์๋ ๋ถ๋ถ์ ์ํ๋ฐ๋ผ๊ณ ํ๋ฉฐ, ์ด๋ ์ผ์ข ์ ์์คํ ์ฐฝ์ด๋ค. ์์คํ ์ฝ์ด ์ ๋ณด๋ฅผ ๋ฟ๋ฆฌ๊ธฐ ์ํ ์ฐฝ์กํฐ๋นํฐ๊ฐ ์ ์ด ๋ถ๊ฐ๋ฅ, ์กํฐ๋นํฐ์ ์์ญ์ด ์๋์ง์ ์ ์ด๋ ๋ถ๊ฐ๋ฅํ๋, ์์คํ ์ ์๋ขฐ๋ฅผ ํด์ ์์คํ ์์ ๊ด๋ฆฌํ๊ณ
๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ค๋ ์๊ฐ ์ํ๋๋ ์ ๋ฌด๋ฅผ ๋ด๋นํ๊ธฐ ์ํ ์ปดํฌ๋ํธ!ํ๋ฉด ์ถ๋ ฅ ๋ฅ๋ ฅ์ ์์! (only background) , ๋ค๋ง ํ๋ฉด ๋ฐ์์ฑ์ ์์ ์๊ฑฐ๋ ๋๋ฌผ๊ฒ ๋ฐ์ํ๋ ์ ๋ฌด์ฌ์ผํจ (activity๋ ๋ฐ์์ฑ ์์!) // ํ๋ฉด์ ๋ค๋ฅธ ์ฑ์ด ์ฌ์ฉ๋๋ค๊ณ ํด๋ ๊ณ์ ์ฒ๋ฆฌ