1. ๋ฐฐ๊ฒฝ : ์ ์ฐํ๊ฒ ๋ถ์ฐ๋ฝ ํค ๊ฐ ์ค์ ํ๊ธฐ
๊ฐ ์ข์ ์ ์ ์ํฉ์ ๊ฒฝํฉ ์ํฉ์ ํด๊ฒฐํ๊ธฐ ์ํด Redisson library ๋ฅผ ํ์ฉํด ๋ถ์ฐ๋ฝ์ ์ ์ฉํ๋ ๋ฐฉ์์ ์ ํํ๋ค. ๊ธฐ์กด์ setnx, setex ๋ช ๋ น์ด ๊ธฐ๋ฐ์ lecttuce library ๋ setnx, setex ๋ช ๋ น์ด ๊ธฐ๋ฐ์ ์คํ๋ฝ์ผ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ ๋ฝ ํด์ฒด, ์์ฒญ ๊ณผ์ ์์ Redis ์ ๋ถํ๊ฐ ์ฆ๊ฐํ ์ ์๋ค. ๋ฐ๋ฉด Redisson ์ pub/sub ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๊ธฐ ํ์ฌ ๊ตฌ๋ ๋ง ํ๊ณ ์๋ค๋ฉด ๋ฝ์ ํด์ ํ๋ค๋ ์ ํธ๋ง ๋ฐ๊ณ ๋ฝ ์๋๋ฅผ ํ๋ํ ์ ์์ด ์๋์ ์ผ๋ก Redis์ ๋ถํ๋ฅผ ๊ฐ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ถ์ฐ๋ฝ ๋ก์ง์ ์คํ๋ง ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํํ๊ธฐ ์ํด @DistributedLock ์ปค์คํ ์ด๋ ธํ ์ด์ ์ ์กฐ์ธ ํฌ์ธํธ์ผ๋ก ์ค์ ํด ๋ถ์ฐ๋ฝ ์์คํํธ๋ฅผ ๊ตฌํํ๋ค. ์ข์์ ํค ๊ฐ์ ์๊ณ์ด ๊ธฐ๋ฐ์ UUID version7 ์ ์ฌ์ฉํ๊ณ ์์ด ๋ถ์ฐ๋ฝ์ ํค ๊ฐ์ผ๋ก ํ์ฉํ๊ณ , ๋ฉ์๋ ์๊ท๋จผํธ๋ฅผ ํตํด ์ ๋ฌ๋ฐ๊ธฐ ๋๋ฌธ์ ์๊ท๋จผํธ ๊ฐ์ ํ์ฑํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ค.

2. ๋ฌธ์ : ์กฐ์ธํฌ์ธํธ ํ๋ผ๋ฏธํฐ ๊ฐ์ด null ์ด ๋ฐํ๋๋ค?
Spel(Spring Expression Language) ์ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋๋ก ๊ตฌ์ฑํ๋๋ฐ joinPoint ์์ ๋ฉ์๋ ์๊ท๋จผํธ๋ฅผ ์ฃผ์ ํ๋ ๊ณผ์ ์์ ๊ณ์ํด์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. joinpoint.getSigniture() ๋ถ๋ถ์ ๋๋ฒ๊น ํด๋ณด๋ ํ๋ผ๋ฏธํฐ ์ด๋ฆ์ด ์ ๋ฌ๋์ง ์๊ณ null ์ ๋ฐํํ๋ค. Spring 5 ๋ฒ์ ์์๋ (Spring Boot 2.x) ๋ฐ์ํ์ง ์์๋ ๋ฌธ์ ๊ฐ Spring6 ๋ฒ์ ์์ ๋ฐ์ํด ๋นํฉํ์ง๋ง ์์ธ์ ์ฐพ์๋ณด์๋ค. ์์ธ์ ๋ฒ์ ์ ์ ๋ฐ๋ฅธ ํ๋ผ๋ฏธํฐ ์ด๋ฆ ๊ด๋ฆฌ ๋ฒ์๊ฐ ๋ณ๊ฒฝ๋ ์ด์ ์๋ค.



3. ์์ธ : Spring 6.1 ๋ถํฐ Parameter Name Retention ๋ณ๊ฒฝ๋๋ค.
Spring 6.1 ๋ฒ์ ๋ถํฐ ๋ ์ด์ ๋ฐ์ดํธ์ฝ๋๋ฅผ ํ์ฑํ์ฌ ๋งค๊ฐ๋ณ์ ์ด๋ฆ์ ์ถ๋ก ํ๋ ค๊ณ ์๋ํ์ง ์๋๋ค.
์ด์ ๋ฒ์ ์ Spring ์ LocalVariableTableParameterNameDiscover ์ด๋ผ๋ ๊ตฌํ์ฒด์์ ์ปดํ์ผ๋ .class ํ์ผ์ LocalVariableTable ๋ผ๋ ๊ณต๊ฐ์์ ๋ฉ์๋ ํ๋ผ๋ฏธํฐ ์ด๋ฆ์ ์กฐํํ๋ค.
ํ์ง๋ง, Spring 6.1 ๋ฒ์ ๋ถํฐ StandardReflectionParameterNameDiscoverer ์ผ๋ก JDK ์ Reflection ๊ธฐ๋ฅ์ ํ์ฉํด ๋ฉ์๋ ํ๋ผ๋ฏธํฐ ์ด๋ฆ์ ์กฐํํ๋ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ๋์ด ์ปดํ์ผ๋ฌ์ `-parameter` ํ๋๊ทธ์ ์์กดํ๋ค.

4. ํด๊ฒฐ : -parameters ์ปดํ์ผ ์ต์ ์ถ๊ฐํ๊ธฐ
(1) Gradle ํ๊ฒฝ์์ -parameters ์ปดํ์ผ ์ต์ ์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ
Gradle ์ ๊ธฐ๋ฐ์ผ๋ก ์คํ๋ง ํ๋ก์ ํธ๋ฅผ ๋น๋ํ๋ ๊ฒฝ์ฐ์๋ ์๋ฐ ์ปดํ์ผ ์์ ์ -parameters ๋ฅผ ์ถ๊ฐํด ํด๊ฒฐํ ์ ์๋ค. ์๋์ ๊ฐ์ด ์ปดํ์ผ ์๊ท๋จผํธ๋ฅผ ์ถ๊ฐํ๋ฉด ํ๋ก์ ํธ ๋น๋ ์์ `-parameters` ์ต์ ์ ์ถ๊ฐํ์ฌ ๋น๋ํ๋ฏ๋ก ํ๋ผ๋ฏธํฐ๊ฐ ์ฃผ์ ๋์ง ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
tasks.withType<JavaCompile>(){
options.compilerArgs.add("-parameters")
}
(2) Intellij ์์ ์ค์ ํ๋ ๋ฐฉ๋ฒ
์์น : Settings > Build, Execution, Deployment > Compiler > Java Compiler > Additional command line parameters
์์ ๊ฐ์ ์์น์ ์ ์ํ์ฌ `-parameters` ์ต์ ์ ์ค์ ํ๊ณ rebuild (cmd + shift + F9) ํ ๊ฒฝ์ฐ, ํด๋น ์ปดํ์ผ๋ฌ ์ต์ ์ ์ถ๊ฐํ ์ ์๋ค.

