| ์ด์ฉํ | ๋จ์คํ | ์ ์ฐฝ๋ฏผ |
|---|---|---|
![]() |
![]() |
![]() |
| @Dradradre | @yunhyungNAM | @thereisname |
| ๐ท๏ธ Category | ๐ Technologies |
|---|---|
| ๐ Frameworks | |
| ๐๏ธ Databases | |
| ๐ Security | |
| โ๏ธ Cloud Services | |
| ๐ ๏ธ Utilities | |
| ๐งช Testing | |
| ๐๏ธ Build Tools |
REQUESTEDโPENDINGโSTOREDโCOMPLETED์ํ ํ๋ฆ ๊ด๋ฆฌ- ๊ฐ ์ํ ๋ณ๊ฒฝ ์ ๊ด๋ จ ๋น์ฌ์๋ค์๊ฒ ์ค์๊ฐ ์๋ฆผ ์ ์ก
- ๋งค์นญ ์ทจ์ ๋ฐ ๊ฑฐ์ ์๋๋ฆฌ์ค ์ฒ๋ฆฌ
- ์๋ฃ๋ Matching ๊ฑด์ ๋ํ History ๊ด๋ฆฌ
@CheckPermission์ปค์คํ ์ด๋ ธํ ์ด์ ๊ตฌํ- Spring AOP๋ฅผ ํ์ฉํ์ฌ ๋ฉ์๋ ๋ ๋ฒจ์์ ์ฌ์ฉ์ ๊ถํ ๊ฒ์ฆ
- ๊ฒ์คํธ/ํธ์คํธ ์ญํ ๋ณ ์ ๊ทผ ์ ์ด ๊ตฌํ
- SSE(Server-Sent Events) ๊ธฐ๋ฐ ์ค์๊ฐ ์๋ฆผ
- ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก์ ๋จ๋ฐฉํฅ ์ค์๊ฐ ํต์ ๊ตฌํ
ConcurrentHashMap์ ์ฌ์ฉํ ์ฌ์ฉ์๋ณSseEmitter๊ด๋ฆฌ- ์๋ฆผ ์ค์ผ์ค๋ฌ๋ฅผ ๋์ ํ์ฌ ๋งค์ผ ์์ ๋ง๋ค ์คํ๋๋ ๋ฐฐ์น ์์ ๊ตฌํ
- BaseResponse ํจํด ๊ตฌํ
- ์ผ๊ด๋ API ์๋ต ๊ตฌ์กฐ
- ์ฑ๊ณต/์คํจ ์ฌ๋ถ ํ์คํ
- HTTP ์ํ ์ฝ๋ ๋ฐ ๋ฉ์์ง ํตํฉ ๊ด๋ฆฌ
- ์๋ฒ์ ํด๋ผ์ด์ธํธ ๋๋ฉ์ธ์ ๋์ผํ๊ฒ ์ค์ ํ์ฌ ์ฟ ํค ์ ์ก ๋ฌธ์ ํด๊ฒฐ
- GitHub Actions๋ฅผ ํ์ฉํ์ฌ ํ๋ก ํธ์๋ ๋น๋ ๋ฐ ๋ฐฐํฌ ์๋ํ
- React ์ ์ ํ์ผ์ Nginx๋ฅผ ํตํด ์๋นํ์ฌ SPA ํ๊ฒฝ ์ต์ ํ
- ๋ชจ๋ API ์์ฒญ์
/api์ ๋์ฌ๋ฅผ ์ถ๊ฐํ์ฌ ์ ์ ํ์ผ๊ณผ ๊ตฌ๋ถ
- JavaMailSender๋ฅผ ํ์ฉํ์ฌ ํ์๊ฐ์ ํ ์ด๋ฉ์ผ ์ธ์ฆ ์ฒ๋ฆฌ
@Scheduled๋ฅผ ์ฌ์ฉํด ์์ ๋ง๋ค ์ด๋ฉ์ผ ๋ฏธ์ธ์ฆ ์ฌ์ฉ์ ์ญ์ - BCryptPasswordEncoder๋ฅผ ์ฌ์ฉํ ๋น๋ฐ๋ฒํธ ์ํธํ ๋ฐ ์ ์ฅ
- JWT(JSON Web Token) ๊ธฐ๋ฐ ์ธ์ฆ ์์คํ ๊ตฌํ
- ๋ก๊ทธ์ธ ์ฑ๊ณต ์ ์ฟ ํค์ SameSite=Lax, Secure, HttpOnly ์ค์
- Custom LoginFilter๋ฅผ ํตํ ๋ค์ํ ๋ก๊ทธ์ธ ์คํจ ์กฐ๊ฑด ์ฒ๋ฆฌ
- Refresh Token์ ์ฌ์ฉํ ํ ํฐ ์ฌ๋ฐ๊ธ ๊ธฐ๋ฅ ๊ตฌํ
- Access Token์ ๋ธ๋๋ฆฌ์คํธ(HashSet)๋ก ๊ด๋ฆฌํ์ฌ ์ฆ์ ๋ฌดํจํ ์ฒ๋ฆฌ
- BlackList ๋ Access Token์ ์ค์ผ์ค๋ฌ ์์ ์ ํตํด ์ฃผ๊ธฐ์ ์ผ๋ก ์ญ์
- 6์๋ฆฌ ๋์ ์์ฑ ํ ์คํ๋ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํ์ฌ ์ฌ์ฉ์ ์ด๋ฉ์ผ๋ก ์ ์ก
- ConcurrentHashMap ํ์ฉ Java In-Memory ๋์์ฝ๋ ์ ์ฅ ๋ฐ ๊ฒ์ฆ
- ์ ์ก ์คํจ ์ ์์ธ ์ฒ๋ฆฌ ๋ฐ ์ฌ์๋ ๋ก์ง ๊ตฌํ
- ๋๋ก๋ช /์ง๋ฒ ์ฃผ์ ๊ธฐ๋ฐ์ผ๋ก ์นด์นด์ค ์ง๋ API๋ฅผ ํ์ฉํ์ฌ ์๊ฒฝ๋ ๋ฐ์ดํฐ ์์ง
- ์ขํ ์ ๋ณด ์์งํ์ฌ ๊ฑฐ๋ฆฌ ๊ณ์ฐ ์ํ ์ ๋ณด ์ ๊ณต
- ๋งค์นญ ํญ๋ชฉ
STORED์ํ์ expiry_date์ Java LocalDate ๋น๊ตํ์ฌ ๋ฐ๋ฉ 3์ผ ์ดํ ํญ๋ชฉ ์ถ์ถ - ๋งค์นญ ํญ๋ชฉ
REQUESTEDPENDINGSTORED์ํ ๊ฐ ๊ฐ์๋ฅผ ์ถ์ถ ๋ฐ ๋ฐํ
- ๊ด๋ฆฌ์์๊ฒ ์ ๋ฌ ๊ฐ๋ฅํ ๋ฌธ์ํ๊ธฐ ๊ธฐ๋ฅ ๊ตฌํ
- GUEST ์ ์ ์ ๊ด๊ณ์ฑ ์๋ product ๋ฑ๋ก ๊ธฐ๋ฅ ๊ตฌํ
- ์ฅ์ ๋ฑ๋ก ๋ฐ ์์ ๊ธฐ๋ฅ ๊ตฌํ (๋ค์ค ์ด๋ฏธ์ง ์ฒ๋ฆฌ ๋ฐ ์ด๋ฏธ์ง URL ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฅ ํฌํจ)
- ํน์ ๋ฌผํ์ ์ ํฉํ ์ฅ์ ๋ฆฌ์คํธ ์กฐํ ๊ธฐ๋ฅ ๊ฐ๋ฐ (๋งค์นญ ๋ก์ง ์ค๊ณ ๋ฐ ๊ฑฐ๋ฆฌ ๊ณ์ฐ ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ)
- ์ฅ์ ์์ ์ ์ด๋ฏธ์ง ์ญ์ ๋ฐ ์ถ๊ฐ ๋ก์ง ์ต์ ํ
- ๊ฑฐ๋ฆฌ ๊ณ์ฐ ๋ก์ง ๋ฐ์ฌ๋ฆผ ์ฒ๋ฆฌ ๋ฐ ์ ์ ๋จ์ ๋ฐํ
- ์ชฝ์ง ์ ์ก ๋ฐ ์์ ๋ก์ง ๊ฐ๋ฐ
- ์ฝ์ง ์์ ์ชฝ์ง ๊ฐ์ ์ค์๊ฐ ์กฐํ ๊ธฐ๋ฅ ๊ตฌํ
PENDING,STORED์ํ ์ฌ์ฉ์์๊ฒ๋ง ์ชฝ์ง ์ ์ก ๊ฐ๋ฅํ๋๋ก ๊ถํ ๋ก์ง ์ค๊ณ- ๋ฐ์ ๋ฐ ์์ ๋์ ์ฌ์ฉ์ ๋ฆฌ์คํธ ๋์ ์กฐํ
- N+1 ๋ฌธ์ ํด๊ฒฐ์ ์ํ JPQL ์ต์ ํ ๋ฐ ํจ์จ์ ๋ฐ์ดํฐ ์กฐํ ๊ตฌํ
- AWS S3๋ฅผ ํ์ฉํ ์ด๋ฏธ์ง ๋ฑ๋ก, ์์ , ์ญ์ ๋ก์ง ๊ฐ๋ฐ
- ๋ค์ค ํ์ผ ์ ๋ก๋ ๋ฐ ์ญ์ ์ต์ ํ
- ์ฅ์ ์์ ์ ๊ธฐ์กด ์ด๋ฏธ์ง ์ ์ง ๋ฐ ์ ๊ท ์ด๋ฏธ์ง ์ถ๊ฐ ์ฒ๋ฆฌ ๋ก์ง ๊ตฌํ
- ์ด๋ฏธ์ง ํ์ฅ์ ์ ํ (JPEG, PNG)
- ๋น์ฉ ํจ์จ์ฑ์ ๊ณ ๋ คํ ๋ค์ค ํ์ผ ์ญ์ ๋ก์ง ์ค๊ณ
- ์ฅ์ ์์ ์ ๋ณ๊ฒฝ๋ ์ด๋ฏธ์ง๋ง S3์ ๋ฐ์ํ๋ ๋ก์ง ๊ตฌํ
- ์๋๋ฐฐํฌ๋ฅผ ํตํ ๋ฐฐํฌํ๊ฒฝ ๊ตฌ์ฑ ํ ์คํธ ์งํ
- GitHub Actions๋ฅผ ์ฌ์ฉํ CI/CD ์๋ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ ๊ตฌ์ถ
- Docker Compose ๊ธฐ๋ฐ ์ปจํ ์ด๋ ๋ฐฐํฌ ํ๊ฒฝ ์ค๊ณ
- AWS VPC, EC2, RDS๋ฅผ ํ์ฉํ ๋ฐฐํฌ ํ๊ฒฝ ๊ตฌ์ถ
- Public/Private Subnet์ ํตํ ๋คํธ์ํฌ ๋ถ๋ฆฌ ๋ฐ ๋ณด์ ๊ทธ๋ฃน ์ค์ ์ต์ ํ
- Docker Hub์ ์ฐ๋ํด ์๋ํ๋ ์ด๋ฏธ์ง ๋น๋ ๋ฐ ํธ์ ํ๋ก์ธ์ค ๊ตฌํ
- EC2 ์์์ Docker Compose๋ฅผ ํ์ฉํ ์ปจํ ์ด๋ ์คํ ๋ฐ ๊ด๋ฆฌ
- Nginx๋ฅผ ์ค์ ํ์ฌ ๋ฆฌ๋ฒ์ค ํ๋ก์ ๊ตฌ์ฑ
- HTTPS ์ค์ ์ผ๋ก ๋ณด์ ๊ฐํ



