Walkerholic์ ์์ฐ์ ์ํ ํ๋ ์ ๋ชฉํ๋ก ๋ง๋ค์ด์ง ์ฑ์
๋๋ค.
์ต๊ทผ ๊ธ๊ฒฉํ ๊ธฐํ๋ณํ ๋ฑ ์ธ๊ณ ์ํ ์์ธ์ผ๋ก ๋ฝํ์ง๋ ํ๊ฒฝ๋ฌธ์ ์ '์์ ํ๋์ด๋ผ๋ ๊ธฐ์ฌํ๊ณ ์ง๊ตฌ์ ํจ๊ป ๋์๊ฐ์'๋ผ๋ ์ฃผ์ ๋ก ๋ง๋ค์ด์ก์ต๋๋ค.
ํ๊ฒฝ๊ณผ ๊ด๋ จ๋ ํ๋(ํ๋ก๊น
, ์ผํ์ฉํ ์ฌ์ฉํ์ง ์๊ธฐ, ๋์ค๊ตํต ์ฌ์ฉํ๊ธฐ ๋ฑ)์ ๊ธฐ๋กํ๊ณ ๋ ๋ฒจ์ ๋์ผ ์ ์์ต๋๋ค.
์์ฐ ๋ณดํธ์ ๊ดํ ๊ฒ์๋ฌผ์ ์ฌ๋ฆฌ๊ณ ๋ค๋ฅธ ์ฌ๋์ ์ต๊ทผ ๊ฒ์๋ฌผ์ ํ์ธํ๊ณ ํ๋ก์ฐํ ์ ์์ต๋๋ค.
์นํ๊ฒฝ์ ์ธ ์ ํ์ ๋ง๋๋ ํ๋งค์๋ค์ ์ํ์ ๋ฑ๋กํ๊ณ ํ์๋ค์๊ฒ ํ๋งคํ ์ ์์ต๋๋ค.
-
-
ํ๋ก์ ํธ๋จ์๊ฐ ๋ณต์กํด์ง์ ๋ฐ๋ผ ์ ์ง๋ณด์์ฑ์ ๋๋ฆฌ๊ธฐ ์ํ ์ฝ๋ ๋ฆฌํฉํ ๋ง์ด ์๊ตฌ๋์ด์ก์ต๋๋ค.
-
๊ตฌํ๋ ์ฝ๋๋ฅผ ๊ฐ์ฒด์งํฅ ์ฝ๋์ ํน์ง์ธ ๋คํ์ฑ์ ํ์ฉํ์ฌ ๊ฐ์ฒด์ ํ์ฅ์ฑ์ ๋ํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ก์ ํธ ์๋ฃ ํ 2021๋ 12์๋ถํฐ ๊พธ์คํ ๋ฆฌํฉํ ๋ง์ ์งํํ์์ต๋๋ค. static์ ์ฌ์ฉ์ง์, Wrapperํด๋์ค์ ํ์ฉ, ๋๋ฉ์ธ์ผ๋ก ๋น์ง๋์ค๋ก์ง ์ด๋, ์ธ๋ฑ์ค ์ค๊ณ๋ฅผ ํตํ ๋ถํ์ํ ์์ฒญ ์ญ์ ๋ฑ์ ๋ฐฉ๋ฒ์ ํตํด ์ฝ๋๋ฅผ ๊ฐ์ ํ๊ณ ์ ํ์์ต๋๋ค. ๋ฆฌํฉํ ๋ง ํ์ธํ๊ธฐ
-
-
-
๋๊ตฌ๋ ํ๋ก์ ํธ๋ฅผ ํ์ธํ ์ ์๋๋ก ์จ๋ผ์ธ ์์ ๋ฐฐํฌํ๋ ๊ฒ์ด ํ์ํ์์ผ๋ ์ธ๋ถ๋ก๋ถํฐ ์๋ฒ ๋ฐ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ๋ ๊ฒ ๋ํ ์๊ตฌ๋์ด์ก์ต๋๋ค.
-
๋ณด์์ ์ํด Bastion ์๋ฒ๋ฅผ ๋๋๋ก ํ๊ณ ์ด๋ฅผ ํตํด ์ ๊ทผํ๋ ์น์๋ฒ๋ฅผ ์ํ ์๋น์ค๋ง, ๊ฐ์ธ์ ๋ณด๋ฅผ ๋ค๋ฃจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ด๋ถ๋ง์ผ๋ก ๊ตฌ์ฑํ์์ต๋๋ค. AWS EC2๋ฅผ ์ด์ฉํ์ฌ ๋ง์ ๋ฐฐํฌํ์ฌ ๋๋ฉ์ธ์ ์ด์ฉํ ์ฌ์ดํธ ์ ์์ด ๊ฐ๋ฅํ๋๋ก ๊ตฌํํ์์ต๋๋ค.๋ง ๊ตฌ์ฑ ๋ฐ ๋ฐฐํฌ ํ์ธํ๊ธฐ
-
-
-
ํ๋ก๊ทธ๋จ์ ๋ฐฐํฌํ๊ณ ์ฑ๋ฅ์ ์ธก์ ํ ๊ฒฐ๊ณผ ์ฑ๋ฅ ์ ์๋ 76์ ์ผ๋ก ๋ค๋ฅธ ๊ฒฝ์ ์น์ฌ์ดํธ(๋ค์ด๋ฒ ๋ธ๋ก๊ทธ, ๋ค์ด๋ฒ ์ผํ, ํฐ์คํ ๋ฆฌ)์ ํ๊ท ๊ฒฐ๊ณผ ๊ฐ์ธ 79์ ๋ณด๋ค ๋ฎ์ ์ ์๋ก ์ฑ๋ฅ์ ๊ฐ์ ์ด ์๊ตฌ๋์์ต๋๋ค.
-
ํ๋ก ํธ์๋ ๋ถ๋ถ์์๋ ProgressiveImages๋ฅผ ์ด์ฉํ์ฌ FirstView ์๊ฐ์ ์ค์ฌ๋ณด๊ณ ์ ํ์๊ณ , ์๋ฒ์์๋ Redis์บ์ ๋ฐ ์ธ๋ถ API์ ๋ํด ๋น๋๊ธฐ๋ฅผ ์ ์ฉํ๋๋ก ํ์์ต๋๋ค. ๋ฆฌ๋ฒ์ค ํ๋ก์๋ฅผ ์ด์ฉํ์ฌ http2์ ์ด์ฉํ ๋ณด์์ฑ ํฅ์, gzip ์์ถ ๋ฐ ์บ์ฑ์ ํ์ฉ, ๋ถํ๋ถ์ฐ์ ํตํด ์น์ ๊ฐ์ํ๊ณ ์ ํ์์ต๋๋ค. ๋ํ DB์ replication์ ์ด์ฉํ์ฌ DB๋ก์ ์์ฒญ์ GET์ slaveDB๋ก ๊ทธ์ธ์ ์์ฒญ์ Master DB๋ก ๋ณด๋ด๋๋กํ์ฌ DB๋ถํ๋ฅผ ์ค์ผ ์ ์๋๋ก ํ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ฑ๋ฅ์ ์(76 -> 89), FirstByte( 1.239S -> 1.062S), FirstView(19.320S -> 5.492S), FCP(3.557S -> 2.555S), SI(7.766S -> 5.009S), LCP(9.887S -> 5.595S), TotalByte(9,153KB -> 1,824KB)์ ์ฑ๋ฅ ๊ฐ์ ์ ์ด๋ค๋ผ ์ ์์์ต๋๋ค. ์ฑ๋ฅ๊ฐ์ ํ์ธํ๊ธฐ
-
-
-
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์คํค๋ง๋ ๋ฐ์ดํฐ์ ์์ ์ฌํญ์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ ๋งค๋ฒ ๊ธฐ์กด ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ ์ํ์ฌ ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ์ ํด์ฃผ์ด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ๋ฐ์ํ์์ต๋๋ค.
-
Flyway๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ ์คํค๋ง์ ๋ณ๊ฒฝ์ด๋ ฅ์ ๋จ๊ธฐ๋๋ก ํ์ฌ ๋ฐ์ดํฐ ์คํค๋ง์ ๋ฒ์ ๊ด๋ฆฌ๊ฐ ์ฉ์ดํ๋๋ก ๋ฐ์ํ์์ต๋๋ค.
-
-
-
๊ธฐ์กด์ ์์ฑํ๋ ํ ์คํธ ์ฝ๋๋ ํ ์คํธ์ ์์กด๊ด๊ณ๋ฅผ ๊ทธ๋๋ก ๊ฐ์ ธ์ ์งํํ์๊ธฐ ๋๋ฌธ์ ๋จ์ํ ์คํธ๊ฐ ์๋ ํตํฉํ ์คํธ์ ๋ฐฉ์์ผ๋ก ํ ์คํธ๊ฐ ๊ตฌํ๋์์ต๋๋ค. ๊ฐ๊ฐ์ ํ ์คํธ ๊ตฌ์ฑ ์ต์ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ์ถ๊ฐ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ์ ์์ฑ์ด ์๋์ ํ์ ์์ธ์ผ๋ก ์์ฉํ์์ต๋๋ค.
-
Mock๊ฐ์ฒด๋ฅผ ํ์ฉํ์ฌ ๋จ์ํ ์คํธ๋ฅผ ๊ตฌํํ์์ต๋๋ค. ๋ํ ์์ฑ๋น์ฉ์ด ๋น์ผ Mock๊ฐ์ฒด์ ์ค๋ณต ์์ฑ์ผ๋ก ์ธํด ํ ์คํธ ์คํ ์๋์ ์ ํ ์์ธ์ผ๋ก ์์ฉํ์ง ์๋๋ก ๊ณตํต์ ์ผ๋ก ํ ์คํธ ์ต์ ์ ๊ตฌํํ๋ ์ถ์ํด๋์ค๋ฅผ ์ด์ฉํด ์ค๋ณต์ ์ธ Mock๊ฐ์ฒด์ ์์ฑ์ด ์ด๋ฃจ์ง์ง ์๊ณ ๊ธฐ์กด Mock๊ฐ์ฒด๋ฅผ ํ์ฉํ๋๋ก ๋ณ๊ฒฝํ์์ต๋๋ค.ํ ์คํธ ์ฝ๋ ๋ฆฌํฉํ ๋ง ํ์ธํ๊ธฐ
-
-
-
ํ๋ก์ ํธ์ ํฌ๊ธฐ๊ฐ ์ปค์ง์ ๋ฐ๋ผ ์์ฑํ ์ฝ๋์ API๋ฅผ ๋ฌธ์ํํ์ฌ ์ ๋ฆฌํ๋ ์์ ์ด ํ์ํ์์ต๋๋ค.
-
API๋ฅผ ๋ฌธ์ํ ํ๊ธฐ์ํด Spring Rest Docs๋ฅผ ์ฌ์ฉํ๋๋ก ํ์์ต๋๋ค. spring-restdocs-asciidoctor์ ํตํด ์์ฑ๋ snippets์ ์ด์ฉํด ๋ฌธ์๋ฅผ ๋ง๋ค์ด๋ด๋ API ๋ฌธ์ํ๋ฅผ ํตํด API๋ฅผ ์ ๋ฆฌํ์ฌ ๊ฐ๊ฐ์ API์ ๋ํ์ฌ Request, Response๋ฅผ ํ์ธํ ์ ์๋๋ก ๊ตฌํํ์์ต๋๋ค. API ๋ฌธ์ ํ์ธํ๊ธฐ
-
-
-
ํ๋ก๊ทธ๋จ์ด ์ํ๋ ์๋๋ฆฌ์ค๋๋ก ์๋ํ๋์ง ํ์ธ๋๋ ๊ฒ์ด ์๊ตฌ๋์์ต๋๋ค.
-
๊ฐ์ฒด๋ณ๋ก ์ธ์ํ ์คํธ๋ฅผ ํตํ์ฌ ๊ฐ์ฒด๊ฐ ์ํ๋ ์๋๋ฆฌ์ค๋๋ก ์๋ต์ ํ๋์ง ํ์ธํ๊ณ ์ฌ์ ๋ถ์ ๋ชฉ์ ์ ๋ถํฉํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ด๋๋ก ๊ตฌํํ์์ต๋๋ค. ๋ํ ์ธ์ํ ์คํธ๋ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ค์ ๋ถ๋ถ ๋ฐ ๋ก์ง ๋ถ๋ถ์ AcceptanceTest๋ผ๋ ์ถ์ ํด๋์ค์ ํจ๊ผ ๊ตฌํํ์ฌ ์ด๋ฅผ ํ์ฉํ์ฌ ๋ฐ๋ณต ๋ถ๋ถ์ด ๋ฐ์ํ์ง ์๋๋ก ํ์์ต๋๋ค.
-
-
-
์ฌ์ฉ์์ ํธ๋ฆฌ์ฑ์ ์ํ์ฌ ๊ตฌ๊ธ, ๋ค์ด๋ฒ, ์นด์นด์ค์ ์์ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๋ง๋ค๊ณ ์ ํ์์ต๋๋ค.
-
Spring Security OAuth๋ฅผ ํตํ์ฌ Rest API๋ฅผ ์ด์ฉํ ์์ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ด ๊ฐ๋ฅํ๋๋ก ๊ตฌํํ์์ต๋๋ค. WebSecurityConfig์์ OauthLogin์ URI์ค์ ์ ํด์ฃผ๊ณ ์ค์ ๋ ์ฃผ์๋ก OAuth2UserRequestํ์ ์ ์ธ์ฆ ์์ฒญ์ด ๋ค์ด์ค๋ฉด CustomOAuth2UserService์์ ์์ ํ์ ๋ณ๋ก ์ค์ ํด๋์ OAuth2UserInfo๋ฅผ ํตํด ์ ๋ณด๋ฅผ ๋ฐ์์จ ๋ค, ํ์ ๋ฑ๋ก ํน์ ์ ๋ฐ์ดํธ๊ฐ ๊ฐ๋ฅํ๋๋ก ์ค์ ํ์์ต๋๋ค. ์ธ์ฆ์ ์ฑ๊ณตํ๋ค๋ฉด OAuth2SuccessHandler๋ฅผ ํตํด ๋ฑ๋ก๋ ํ์์ ํ ํฐ์ HttpCookieOAuth2AuthorizationRequestRepository๋ฅผ ์ด์ฉํด ๋ค์ด์จ ์ฃผ์์ ํ ํฐ์ ํจ๊ป ๋๋๋ ค ์ฃผ๋๋ก ํ๊ณ , ์คํจํ๋ค๋ฉด OAUth2AuthenticationFailureHandler๋ฅผ ํตํด error ์์ธ๊ณผ ํจ๊ป ์ด์ ์ฃผ์๋ก ๋๋๋ ค ๋ณด๋ด์ฃผ์์ต๋๋ค.
-
-
-
๊ธฐ์กด์๋ Crud repository๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํ์ง๋ง, ์ข ๋ ํธ๋ฆฌํ๊ฒ ์ธํฐํ์ด์ค ์์ฑ๋ง์ผ๋ก๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋๋ก ์ฒ๋ฆฌํ๊ณ ์ถ์์ต๋๋ค.
-
SpringData JPA๋ ๊ฐ๋ฐ์ ์ธํฐํ์ด์ค๋ง ์์ฑํ๋ฉด ์คํ ์์ ์ ๊ตฌํ ๊ฐ์ฒด๋ฅผ ๋์ ์ผ๋ก ์ฃผ์ ํด์ฃผ๊ธฐ ๋๋ฌธ์(๋ฐํ์ ์๋ฌ ๋ฐฉ์ง), ์ด๋ฅผ ์ด์ฉํ์ฌ ๋ฑ๋ก๋ column๋ช ์ ์ด์ฉํ ์ธํฐํ์ด์ค ์์ฑ๋ง์ผ๋ก๋ ์ฟผ๋ฆฌ๋ฉ์๋๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋๋ก ํธ๋ฆฌํ๊ฒ repository๊ณ์ธต์ ์์ฑํ ์ ์์์ต๋๋ค.
-
-
-
์ฌ์ฉ์๊ฐ ๋ฑ๋กํ๋ ค๋ ์ด๋ฏธ์ง๋ฅผ MultipartFileํ์ ์ผ๋ก ์๋ฒ์ธก์์ ๋ฐ์ ํ์ผ์ ๋ณด๊ดํ ๋, ์ ๋ก๋ ์์ด ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์ ๋ก๋ ํด๋์ ๊ฐ์ ๋ก์ปฌ ์ ์ฅ์๊ฐ ์๋ ์๊ฒฉ์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ์ ๋ก๋ํ๋ ๊ฒ์ด ์๊ตฌ๋์์ต๋๋ค.
-
AWS S3๋ฅผ ์ด์ฉํ์ฌ ๋ฒํท์ ์์ฑํ๊ณ AmazonS3Utils์ ๋ง๋ค์ด amazonS3Client๋ฅผ ์ด์ฉํ ์๊ฒฉ์ผ๋ก์ ํ์ผ์ ๋ก๋, ํ์ผ ์ญ์ , ํด๋ ์ญ์ ๋ฑ์ ๊ธฐ๋ฅ์ ๊ตฌํํ์์ต๋๋ค.
-
-
-
๊ตฌ๋งค์๊ฐ ์ฃผ๋ฌธ์ ์๋ฃํ ๋ค, ๊ตฌ๋งค์์๊ฒ ์ด๋ฉ์ผ์ ๋ฐ์กํ๋๋ก ์๋ฒ์ธก์์ ๋ฉ์ผ๋ฐ์ก์ด ์ด๋ฃจ์ด์ง๋๋ก ํ๊ณ ์ ํ์์ต๋๋ค.
-
smtp์ค์ ์ ๋ค์ด๋ฒ ๋ฉ์ผ host๋ฅผ ์ด์ฉํ์ฌ JavaMailSender(spring-boot-starter-mail)์ ์ด์ฉํด SimpleMailMessageํ์ ์ ๋ฉ์ผ์ด ์ ์ก๋๋๋ก ์ค์ ํ์์ต๋๋ค.
-
-
-
ํ๋ก์ ํธ ์งํ์์ ๊ฒ์๋ฌผ ์ด๋ฏธ์ง ์ํฐํฐ๋ฅผ ์ญ์ ํ๊ธฐ ์ํ์ฌ JPA repository๋ฅผ ์ด์ฉํ ์ธํฐํ์ด์ค ๋ช ์ ์์ฑํ์์ผ๋ ์คํ์ด ๋์ง ์์์ต๋๋ค. ์ด๋ @Transactional ์ด๋ ธํ ์ด์ ์ด ๋ถ์ด์๋ JPA Repository ๋ชฉ๋ก ์์ deleteBy ํํ๊ฐ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ด์์ต๋๋ค. (EntityManager opne -> SELECT ์ฟผ๋ฆฌ ์คํ -> EntityManager closed -> DELETE ์ฟผ๋ฆฌ ์์ธ ๋ฐ์ ์์ผ๋ก ์งํ๋์์ต๋๋ค.)
-
ํด๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ์ฌ์ฉํ๊ณ ์ ํ๋ deleteBy์ธํฐํ์ด์ค ๋ช ์ @Transactional ์ด๋ ธํ ์ด์ ์ ์ถ๊ฐํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์์ต๋๋ค.
-
-
-
์ฐ๊ด๊ด๊ณ์ ๋ฐ์ดํฐ๋ฅผ DTO๋ฅผ ํตํด์ ๋ณด๋ด๊ณ ์ ํ ๋, ์ฐ๊ด๊ด๊ณ์ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋๋ก ๋ณด๋ด๋ ค๊ณ ํ๋ฉด ์๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ์ ๋ฐ์ดํฐ๊ฐ ๊ณ์ํด์ ์๋ก๋ฅผ ๋ถ๋ฅด๋ฉฐ ์ํ ์ฐธ์กฐ๊ฐ ๋ฐ์ํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ ๋์์ต๋๋ค.
-
ํด๋น๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ํด๋น DTO์์ ์์ฑ์๋ฅผ ๊ฐ์ง ์๋ก์ด ํด๋์ค๋ฅผ ๋ง๋ค์ด์ค ํ ์ฐ๊ด๊ด๊ณ์ ๋ฐ์ดํฐ ์ ๋ณด ์ค ๋ณด๋ด์ผํ๋ ์ ํ๋ถ๋ถ๋ง(์ฐ๊ด๊ด๊ณ๋ถ๋ถ ์ ์ธ) ์์ฑ์๋ฅผ ์ด์ฉํด ๋ฃ๋๋ก ์ค์ ํ์ฌ ์ฐธ์กฐ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ์ ์๋๋ก ํ์์ต๋๋ค.
-
-
ํ๋ก์ ํธ๋ StpringBoot(์๋ฐ๊ธฐ๋ฐ์ ํ๋ ์์ํฌ), React(์๋ฐ์คํฌ๋ฆฝํธ๊ธฐ๋ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ), MySQL(๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค)์ ์ด์ฉํ์ฌ ๊ตฌํ๋์ด์ก์ผ๋ฉฐ react๋ฅผ ์ด์ฉํ ํ๋ก ํธ์๋๋ฅผ ๋ง๋ค๊ณ SpringBoot๋ฅผ ์ด์ฉํ ์๋ฒ ๊ตฌ์ถ ํ MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํตํ์ฌ ์ ์ ํ ์ ๋ณด๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด์ด๋๋ก ์ค์ ํ์์ต๋๋ค.
-
Model, View, Controller ์ ํจํด์ ํตํด ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ก๋ถํฐ ๋ก์ง์ ๋ถ๋ฆฌํ์ฌ ์ฝ๋์ ์ ์ง๋ณด์์ ์ฉ์ดํ๋๋ก ์ค์ ํ์์ต๋๋ค.
-
์ฌ์ฉ์ ์ธ์ฆ ๋ฐฉ๋ฒ์ผ๋ก๋ ๋ณ๋์ ์ ์ฅ์๋ฅผ ํ์ํ์ง ์๋ JWTํ ํฐ์ ์ด์ฉํ์ฌ ์ธ์ฆ, ๋ฐ๊ธ์ ๊ณผ์ ์ ๊ฑฐ์ณ ์ด๋ฃจ์ด์ง๋๋ก ์ค์ ํ์์ผ๋ฉฐ, ์ธ์ฆ๋ ์ฌ์ฉ์์ ๊ถํ ๋ถ์ฌ(์ธ๊ฐ)๋ ํ๋ก ํธ์๋๋ Custom Router, ๋ฐฑ์๋๋ Spring Security(springboot-starter-security)๋ฅผ ์ด์ฉํด ์ฌ์ฉ์์ ์ญํ (ROLE)์ ๋ฐ๋ผ์ ๋ฐ์ดํฐ ์ ๊ทผ ๊ฐ๋ฅ์ฌ๋ถ๋ฅผ ๋ค๋ฅด๊ฒ ์ค์ ํ์์ต๋๋ค.
-
FIRST(Fast, Independent, Repeatable, Self Validating, Timely), given-when-then ๊ท์น์ ๋ถํฉํ๋๋ก Repository๊ณ์ธต๊ณผ Service๊ณ์ธต์ ๋จ์ํ ์คํธ๋ฅผ ํตํด ์์ ์ ์ธ ์ฑ ๊ฐ๋ฐ์ ์งํํ๊ณ ์ ํ์์ต๋๋ค.
-
ํ๋ฒ์ ๋ฐฉ๋ํ ์์ ๋ฐ์ดํฐ๋ฅผ ํ๋ฒ์ ์๊ตฌํ๋ ๊ฒ(์๋ฒ ๋ถํ)์ ๋ฐฉ์งํ๊ธฐ ์ํด์ repository์์ countQuery๋ฅผ ์ด์ฉํ์ฌ pagination๊ธฐ๋ฅ์ ๊ตฌํํ์์ต๋๋ค. Sort๊ธฐ๋ฅ์ @Query ์ด๋ ธํ ์ด์ ์์ ORDER BY๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ Pageable์ ์์ฑ์์ Sort.by๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ๊ธฐ์ค์ ์ ํด ์ ๋ ฌ๋ ๋ฐ์ดํฐ๋ฅผ ์์๋๋ก ๊ฐ์ ธ์ค๋๋ก ์ค์ ํค ์ํ๋ ์์๋๋ก ๋ฐ์ดํฐ๋ฅผ ํ์ธํ ์ ์๋๋ก ํ์์ต๋๋ค.
-
frontend-maven-plugins๋ฅผ ์ด์ฉํ์ฌ ์คํ๋ง๋ถํธ์ ๋ฆฌ์กํธ๋ฅผ ๋์์ ์คํ์ํค๋ .jarํ์ผ์ ์์ฑํ ๋ค AWS EC2๋ฅผ ํตํ ๋ฐฐํฌ๋ฅผ ๊ตฌํํ์์ต๋๋ค.
-
Pagination๊ธฐ๋ฅ๊ณผ ํจ๊ป ๊ฒ์๋ฌผ ๋ชฉ๋ก ๋ถ๋ถ(PostThumb)์์๋ Intersection Observer์ useRef๋ฅผ ์ด์ฉํ ๋ฌดํ์คํฌ๋กค ๊ธฐ๋ฅ์ ๊ตฌํํ์์ต๋๋ค. ์ผ์ ๋ถ๋ถ์ด ํ๋ฉด์ ๋์ฌ ๋๋ง๋ค ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋๋ก ์ค์ ํ์์ต๋๋ค.
-
๋ฆฌ๋์ค๋ฅผ ํตํ์ฌ View์์๋ action๋ง์ ์คํ์ํค๋ฉด ์ด ์ก์ ์ dispatcher๋ฅผ ํตํด์๋ง ๋ฐ์ดํฐ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋๋ก ์ค์ ํด์ฃผ์์ต๋๋ค. ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๋ store๋ฅผ ํตํด์ View๋ก ์ ๋ฌ์ด ๋๋๋ก ํ์ฌ ๋จ๋ฐฉํฅ์ ๋ฐ์ดํฐ ํ๋ฆ์ด ์ด๋ฃจ์ด์ง๋๋ก ์ค์ ํ์์ต๋๋ค. ๋ํ Constant๋ฅผ ์ง์ ํ์ฌ ๊ฐ๊ฐ์ ์ก์ ์ ์์ฒญ, ์ฑ๊ณต, ์คํจ์ ๊ฒฝ์ฐ๋ฅผ ์์๋ณด๊ธฐ ์ฝ๊ฒ ์ ์ํ์๊ณ ๊ฐ๊ฐ์ ์ก์ ์ ๋ชจ๋ ์ ์ฅ๋์ด ์ด๋ป๊ฒ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์๋์ง ํ์ธํ ์ ์์์ต๋๋ค.
-
์๋น์๊ฐ ๋ฌผํ๊ตฌ๋งค๊ฐ ๊ฐ๋ฅํ๋๋ก ํ๊ธฐ ์ํด 'react-paypal-button-v2'์ Paypal๋ฒํผ์ ์ด์ฉํ์ฌ ํ์ดํ์ ํตํ ์ค์ ๊ตฌ๋งค๊ฐ ๊ฐ๋ฅํ๋๋ก ์ค์ ํ์์ต๋๋ค.
-
๊ธฐ์กด์ ๊ท๊ฒฉํ ๋์ด์๋ ๊ทธ๋ฆฌ๋ ํ์์ด ์๋ ๋ฒฝ๋์ค ๋ ์ด์์ ํ์ ์ผ๋ก ๊ฒ์๋ฌผ ๋ชฉ๋ก(PostThumb)๋ฅผ ๊ตฌํํ์์ต๋๋ค.

























