๋ฌธ์ ์ํฉ์ ๊ฐ๋จํ๊ฒ ๋ํ๋ด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.. TestEntity @Getter @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity public class TestEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "test_id") private Long id; private String name; } TestRepository public interface TestRepository extends JpaRepository { } TestService @Service @RequiredArgsConstructor @Transactional pu..
๐๏ธ Spring
์ค๋์ Redis๋ฅผ ์ฌ์ฉํด์ ์บ์๋ฅผ ์ ์ฉํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ์ฌ์ค ์ด๋ฒ์ด Redis๋ฅผ ์ฒ์ ์ฌ์ฉํ๋ ๊ฑฐ๋ผ... ์ด์ง์ ๊ณต๋ถ์ฉ์ผ๋ก ์์ฑํ๊ฑฐ๋ผ ๋ง์ด ์ด์ํ ์๋ ์์ต๋๋ค. ์ถ๊ฐ๋ก... ์ง๊ธ ๋ ๋์ค๋ฅผ ์ด๊ณณ์ ๊ณณ์ ์ ์ฉํด ๋ณด๋ ค ํ์์ผ๋.. ์ ๊ฐ ์ฝ๋๋ฅผ ๋๋ฌด ์๋ง์ผ๋ก ์ง์ ๊ทธ๋ฐ์ง... ์ ์ฉํ๋ ค๋ฉด ๋ฌด์ธ๊ฐ ๋๋์ ์ธ ์์ ์์
์ด ํ์ํด ๋ณด์ด๋๊ตฐ์... ๊ทธ๋์ ์ผ๋จ์... ๋ค.. ๋ญ ๋ก๊ทธ์ธ ์์๋ง ์ ์ฉํ๋๋ก ํด๋ณด์์ต๋๋ค..^^ ๊ฒ๋ค๊ฐ ํ
์คํธ์ฝ๋๋... ์บ์๋ฅผ ์ ์ฉํ๋ ์๊ฐ ๋ฉธ๋งํด ๋ฒ๋ ธ๋๋ฐ, ํ
์คํธ ํ๊ฒฝ์์ ๋ ๋์ค๋ฅผ ์ ์ฉํ์ง ์์ผ๋ ค๊ณ ์จ๊ฐ ๋ฐฉ๋ฒ์ ๋ค ์จ๋ดค์ผ๋ ์คํจํ์ต๋๋ค... ํน์ ์ฌ๊ธฐ์ ์ ์ ๊ฐ์ด ๋ ๋์ค๋ก ์บ์ ์์ฑํ๋ ๊ฒ์ ๋ฐ๋ผํ์ ๋ค๋ฉด... ํ
์คํธ์ฝ๋ ๋๋ฆด ๋๋ ๋นผ๊ณ ๋๋ฆฌ๋ ๊ฒ์ผ๋ก...ใ
ใ
ใ
๋์ค์ ๊ผญ ๊ณ ์ณ๋ณด๊ฒ ์ต๋๋ค..ใ
..
์ด์ ๊น์ง์ ์์ธ ์ฒ๋ฆฌ ํฌ์คํ
์์๋ API ๋ฐฉ์์ด ์๋ ๊ธฐ๋ณธ์ ์ธ ํ๋ฉด์ ๋ฐํํ๋ ๋ฐฉ์์ ์์ธ ์ฒ๋ฆฌ๋ฅผ ๋ค๋ฃจ์๋ค. ๊ทธ๋ฌ๋ API ํต์ ์์ ์์ธ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ, ํ๋ฉด์ ๋ฐํํ๋ ๊ฒ์ ์๋ฌด๋ฐ ์ธ๋ชจ๊ฐ ์๋ค. ๋ฐ๋ผ์ API ํต์ ์์ ์์ธ๊ฐ ๋ฐ์ํ์ ๊ฒฝ์ฐ์๋ ์ด๋ค ์์ผ๋ก ์์ธ ๋ฉ์ธ์ง๋ฅผ ๋ฐํํ ๊ฒ์ธ์ง๋ฅผ ์ ํ๊ณ , ๊ทธ์ ๋ง๊ฒ json์ผ๋ก ์์ธ ๋ฉ์ธ์ง๋ฅผ ๋ฐํํด ์ฃผ์ด์ผ ํ๋ค. ์คํ๋ง ๋ถํธ๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ณธ ์์ธ ์ฒ๋ฆฌ ์คํ๋ง ๋ถํธ๋ BasicErrorController๋ฅผ ํตํด ๊ธฐ๋ณธ์ ์ธ ์์ธ์ฒ๋ฆฌ๋ฅผ ์ํํ๋ค๊ณ ํ์๋ค. API ์์ธ ๋ํ ์ด๊ณณ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฒ๋ฆฌํด ์ฃผ๋๋ฐ, ๋ฐํํด์ฃผ๋ json์ ๋ค์๊ณผ ๊ฐ์ ํ์์ด๋ค. Accept ํค๋๊ฐ application/json์ธ ๊ฒฝ์ฐ { "timestamp": "2022-01-07T13:17:21..
์ด์ฐ ๋๊ฒ ์ค๋๋ง์ ๊ธ ์ฐ๋ค์..ใ
ใ
AOP ๊ณต๋ถํ๋ค๊ฐ ๋ฆ์์ต๋๋ค... ์๋ง ์ด๋ฒ ํฌ์คํ
์ดํ๋ก ํ๋์ ํฌ์คํ
์ ๋ชป ํ ๊ฑฐ ๊ฐ๋ค์... ํ๊ต๋ ๋ณตํํ๊ณ , ํ์ฅ์ด ๋๋ฒ๋ ค์ ์ข ์ด๊ฒ์ ๊ฒ ๋ฐ์ฉ๋๋ค.. ๊ทธ๋ฆฌ๊ณ ํ ๋น์ ์คํ๋ง๋ ์ฝ๊ณ , ์ด๊ฒ์ ๊ฒ ๊ณต๋ถํ ๊ฒ ๋ง์์์..ใ
ใ
์ค๋์ AOP๋ฅผ ์ ์ฉํ์ฌ Controller, Service, Repository ๊ณ์ธต์ ๋ํด ๋ฉ์๋๊ฐ ์ํ๋๋ฉด ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ๊ณ , ์ด๋ฅผ ํ์ผ๋ก ์ ์ฅํ๋๋ก ๋ฐ๊ฟ๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด์ํ๊ฒฝ๋ณ ๋ก๊ทธ ์์ค์ ๋ค๋ฅด๊ฒ ๋จ๊ธฐ๋ ๊ฒ๋ ํด๋ณด๊ฒ ์ต๋๋ค! ์ํ๋ฆฌํฐ๋ฅผ ์ด์ฉํ JSON ๋ฐ์ดํฐ๋ก ๋ก๊ทธ์ธ (์๋ฃ) JWT๋ฅผ ์ด์ฉํ ์ธ์ฆ (์๋ฃ) ๋๋ฉ์ธ, ํ
์ด๋ธ ์ค๊ณ, ์ํฐํฐ ์์ฑ (์๋ฃ) ๋๊ธ ์ญ์ ๋ก์ง ๊ตฌํ (์๋ฃ) ํ์๊ฐ์
+ ์ ๋ณด์์ ๋ฑ ํ์ ์๋น์ค ๊ตฌํ (์๋ฃ) ๊ฒ์ํ ์..
ํก๋จ ๊ด์ฌ์ฌ (cross-cutting concerns) ์ ํ๋ฆฌ์ผ์ด์
์ ๊ธฐ๋ฅ์ ํต์ฌ ๊ธฐ๋ฅ๊ณผ ๋ถ๊ฐ ๊ธฐ๋ฅ์ผ๋ก ๋๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ํ ์๋งค ์ ํ๋ฆฌ์์
์ ๊ฒฝ์ฐ ์ํ๋ฅผ ์๋งคํ๋ ๊ฒ์ด ํต์ฌ ๋ก์ง์ด๊ณ , ์ด๋ฌํ ํต์ฌ ๊ธฐ๋ฅ์ ๋ณด์กฐํ๊ธฐ ์ํด ๋ก๊ทธ๋ฅผ ๋จ๊ธด๋ค๋์ง ํ๋ ๊ธฐ๋ฅ๋ค์ ๋ถ๊ฐ ๊ธฐ๋ฅ์
๋๋ค. ํต์ฌ ๊ธฐ๋ฅ๊ณผ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ๊ฐ์ด ์ฌ์ฉ๋์ง๋ง, ํ๋์ ์ฝ๋ ์์์ ํต์ฌ ๊ธฐ๋ฅ๊ณผ ๋ถ๊ฐ ๊ธฐ๋ฅ์ด ๋ชจ๋ ๋ค์ด๊ฐ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ๋ค๋ฉด ํต์ฌ ๊ธฐ๋ฅ์ ์ง์คํ๊ธฐ ์ด๋ ค์ ์ง ๊ฒ์
๋๋ค. ๋ํ ๋๋ถ๋ถ์ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ํ๋์ ํต์ฌ ๊ธฐ๋ฅ์ ๋ถ๋ ๊ฒ์ด ์๋๋ผ ์ฌ๋ฌ๊ฐ์ ํต์ฌ ๊ธฐ๋ฅ์ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ์ค๋ณต๋๋ ์ฝ๋๋ ๋ง์์ง๋๋ค. ์ด๋ ๊ฒ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ๋์ผํ๊ฒ ์ฌ์ฉ๋๋ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ํก๋จ ๊ด์ฌ์ฌ(cross-cutting concerns)๋ผ๊ณ ํฉ๋๋ค. ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ ..
์ด๋ฒ์๋ ๋๊ธ์ ์ ์ฅ, ์์ ,์ญ์ ํ๋ ์ปจํธ๋กค๋ฌ๋ฅผ ๋ง๋ค์ด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ์ด๊ฒ๋ง ๋ง๋ค๋ฉด ๊ทธ๋๋ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ์ ๊ฐ์ง ๊ฒ์ํ ์๋น์ค๋ฅผ ์์ฑํ๋ค์. ์ํ๋ฆฌํฐ๋ฅผ ์ด์ฉํ JSON ๋ฐ์ดํฐ๋ก ๋ก๊ทธ์ธ (์๋ฃ) JWT๋ฅผ ์ด์ฉํ ์ธ์ฆ (์๋ฃ) ๋๋ฉ์ธ, ํ
์ด๋ธ ์ค๊ณ, ์ํฐํฐ ์์ฑ (์๋ฃ) ๋๊ธ ์ญ์ ๋ก์ง ๊ตฌํ (์๋ฃ) ํ์๊ฐ์
+ ์ ๋ณด์์ ๋ฑ ํ์ ์๋น์ค ๊ตฌํ (์๋ฃ) ๊ฒ์ํ ์๋น์ค ๊ตฌํ (์งํ ์ค) ๋๊ธ ์๋น์ค ๊ตฌํ (1๋๊ธ -> *(๋ฌดํ) ๋๋๊ธ ๊ตฌ์กฐ) (์๋ฃ) ์์ธ ์ฒ๋ฆฌ (์๋ฃ) ์์ธ ๋ฉ์ธ์ง ๊ตญ์ ํ ์นดํ
๊ณ ๋ฆฌ๋ณ ๊ฒ์ํ ๋ถ๋ฅ ๊ฒ์๊ธ ํ์ด์ง (์๋ฃ) ๋์ ์ธ ๊ฒ์ ์กฐ๊ฑด์ ์ฌ์ฉํ ๊ฒ์ (์๋ฃ) ์ฌ์ฉ์ ๊ฐ ์ชฝ์ง ๊ธฐ๋ฅ ๋ฌดํ ์ชฝ์ง ์คํฌ๋กค ๊ฒ์๋ฌผ & ๋๊ธ์ ๋ํ ์๋ ์ชฝ์ง์ ๋ํ ์๋ ์ ์ํ ์ฌ์ฉ์ ๊ฐ ์ค์๊ฐ ์ฑํ
ํ์๊ฐ์
์ ..
์ ๋ฒ ํฌ์คํ
์ ์ด์ด์ ์ด๋ฒ์๋ QueryDSL์ ์ฌ์ฉํด์ ๊ฒ์ํ ๊ฒ์(์กฐ๊ฑด์ ๋ฐ๋ฅธ ๋์ ๊ฒ์), ํ์ด์ง ๊ธฐ๋ฅ์ ๊ตฌํํ์ฌ ๊ธฐ๋ณธ์ ์ธ ๊ฒ์ํ์ ์์ฑ์์ผ ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค! ์ํ๋ฆฌํฐ๋ฅผ ์ด์ฉํ JSON ๋ฐ์ดํฐ๋ก ๋ก๊ทธ์ธ (์๋ฃ) JWT๋ฅผ ์ด์ฉํ ์ธ์ฆ (์๋ฃ) ๋๋ฉ์ธ, ํ
์ด๋ธ ์ค๊ณ, ์ํฐํฐ ์์ฑ (์๋ฃ) ๋๊ธ ์ญ์ ๋ก์ง ๊ตฌํ (์๋ฃ) ํ์๊ฐ์
+ ์ ๋ณด์์ ๋ฑ ํ์ ์๋น์ค ๊ตฌํ (์๋ฃ) ๊ฒ์ํ ์๋น์ค ๊ตฌํ (์งํ ์ค) ๋๊ธ ์๋น์ค ๊ตฌํ (1๋๊ธ -> *(๋ฌดํ) ๋๋๊ธ ๊ตฌ์กฐ) (์๋ฃ) ์์ธ ์ฒ๋ฆฌ (์๋ฃ) ์์ธ ๋ฉ์ธ์ง ๊ตญ์ ํ ์นดํ
๊ณ ๋ฆฌ๋ณ ๊ฒ์ํ ๋ถ๋ฅ ๊ฒ์๊ธ ํ์ด์ง (์งํ ์ค) ๋์ ์ธ ๊ฒ์ ์กฐ๊ฑด์ ์ฌ์ฉํ ๊ฒ์ (์งํ ์ค) ์ฌ์ฉ์ ๊ฐ ์ชฝ์ง ๊ธฐ๋ฅ ๋ฌดํ ์ชฝ์ง ์คํฌ๋กค ๊ฒ์๋ฌผ & ๋๊ธ์ ๋ํ ์๋ ์ชฝ์ง์ ๋ํ ์๋ ์ ์ํ ์ฌ์ฉ์ ๊ฐ ..
์ค๋๋ง์ ๊ธ์ ์ฐ๋ ๊ฑฐ ๊ฐ๋ค์.. ๋ฆฌ๋
์ค๋ ๋ญ ์ด๊ฒ์ ๊ฒ ๊ณต๋ถํ๋ค๊ณ ๋ฐ๋ป์...ใ
ใ
์ค๋์ QueryDSL์ ์ฌ์ฉํด์ ๊ฒ์ํ ๊ฒ์(์กฐ๊ฑด์ ๋ฐ๋ฅธ ๋์ ๊ฒ์), ํ์ด์ง, ์กฐํ ๊ธฐ๋ฅ์ ๊ตฌํํ์ฌ ๊ธฐ๋ณธ์ ์ธ ๊ฒ์ํ์ ์์ฑ์์ผ ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค! ์ํ๋ฆฌํฐ๋ฅผ ์ด์ฉํ JSON ๋ฐ์ดํฐ๋ก ๋ก๊ทธ์ธ (์๋ฃ) JWT๋ฅผ ์ด์ฉํ ์ธ์ฆ (์๋ฃ) ๋๋ฉ์ธ, ํ
์ด๋ธ ์ค๊ณ, ์ํฐํฐ ์์ฑ (์๋ฃ) ๋๊ธ ์ญ์ ๋ก์ง ๊ตฌํ (์๋ฃ) ํ์๊ฐ์
+ ์ ๋ณด์์ ๋ฑ ํ์ ์๋น์ค ๊ตฌํ (์๋ฃ) ๊ฒ์ํ ์๋น์ค ๊ตฌํ (์งํ ์ค) ๋๊ธ ์๋น์ค ๊ตฌํ (1๋๊ธ -> *(๋ฌดํ) ๋๋๊ธ ๊ตฌ์กฐ) (์๋ฃ) ์์ธ ์ฒ๋ฆฌ (์๋ฃ) ์์ธ ๋ฉ์ธ์ง ๊ตญ์ ํ ์นดํ
๊ณ ๋ฆฌ๋ณ ๊ฒ์ํ ๋ถ๋ฅ ๊ฒ์๊ธ ํ์ด์ง (์งํ ์ค) ๋์ ์ธ ๊ฒ์ ์กฐ๊ฑด์ ์ฌ์ฉํ ๊ฒ์ (์งํ ์ค) ์ฌ์ฉ์ ๊ฐ ์ชฝ์ง ๊ธฐ๋ฅ ๋ฌดํ ์ชฝ์ง ์คํฌ๋กค..