"์ฃผ๋ง๋ด์ง"์ ๋์ผ ๋ผ์ดํ๋ฅผ ๊ฟ๊พธ๊ณ ์คํํ๋ ์ฌ๋๋ค ๊ฐ์ ์ํต์ ๊ณต๊ฐ ๋ถ์กฑ๊ณผ ์ง์ญ ์ฌํ์ ๋น์ง ๋ฌธ์ ํด๊ฒฐ์ ์ํ ํ๋ซํผ์ ๋๋ค.
๋ณธ ํ๋ก์ ํธ๋ฅผ ํตํด ์๋์ ๊ฐ์ ๊ฒฝํ๊ณผ ์ง์์ ์๊ณ ์์ต๋๋ค.
- SpringBoot ์ Kotlin ๊ธฐ๋ฐ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฃผ๊ธฐ ๊ธฐํ๋ถํฐ ๋ฐฐํฌ ๋ฐ ์ด์๊น์ง ๊ฒฝํ
- AWS ํด๋ผ์ฐ๋ ํ๊ฒฝ ๊ธฐ๋ฐ์ CICD ๋ฌด์ค๋จ ๋ฐฐํฌ ์ธํ๋ผ ๊ตฌ์ถ ๊ฒฝํ
- JPA, Hibernate๋ฅผ ์ฌ์ฉํ ๋๋ฉ์ธ ์ค๊ณ ๊ฒฝํ
- MVC ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ ๊ตฌ์ถ
- SSR ๋ฐฉ์์ ๋ฐฑ์คํผ์ค ๊ฐ๋ฐ ๊ฒฝํ
- ์ธ๊ฐ ํ๋ก์ธ์ค๊ฐ ์ ์ฉ๋ ๋น์ฆ๋์ค ๋ก์ง ๊ตฌํ ๊ฒฝํ
- ์ฑ๋ฅ ํฅ์์ ์ํ ๊ณ ๋ฏผ๊ณผ ๋์ ๊ฒฝํ
- Unit Test ์ฝ๋ ์์ฑ์ ํตํ ์์ ์ฑ ํ๋ณด ( 23๋ ๋ 9์ ๊ธฐ์ค 151๊ฐ์ Unit Test ์ฝ๋ ์์ฑ )
์ดํ๋ฆฌ์ผ์ด์ ( Language & Framework & Library )
- Kotlin
- Spring Framework ( Spring Boot 2.7.8, Spring MVC )
- Spring Data JPA, Redis, QueryDsl
- Junit5, AssertJ, Mockito
- Rest Docs
Build Tool
- Gradle( Kotlin )
Database
- MySQL
- Redis
์ธํ๋ผ( with CICD )
- AWS Route 53
- AWS EC2
- Nginx, AWS S3, AWS CodeDeploy(Agent)
- AWS RDS
- Git, Github Actions
- CloudWatch, Slack
- Jacoco, SonarCloud
- Docker
- Lambda
WEB for back-office
- Javascript
- HTML/CSS
- Thymeleaf
- Bootstrap 5
WEB for tech-blog
- Typescript
- HTML/CSS
- Vue3
- Vuex
- Vue-Router
- Bootstrap 5
- Axios
- npm
- Toast-ui for vue
๊ทธ์ธ ์ฃผ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- JWT
- Bucket4j
- Cache
- Coolsms
- Jasypt
์ ์ฒด ๋ฌธ์
์ฃผ๋ง๋ด์ง ์๋น์ค
- ์ฌ์ฉ์ API ๋ช ์ธ์
- ๊ฒ์๊ธ API ๋ช ์ธ์
- ๋๊ธ API ๋ช ์ธ์
- JWT ์์ธ์ฒ๋ฆฌ
- ์ปค๋ฎค๋ํฐ ๊ฒ์๊ธ ์ข์์ API ๋ช ์ธ์
- ๋น์ง ๊ฒ์๊ธ API ๋ช ์ธ์
- ๋น์ง ๊ฒ์๊ธ ์คํฌ๋ฉ API ๋ช ์ธ์
- ์๋ฆผ API ๋ช ์ธ์
ํ ํฌ๋ธ๋ก๊ทธ ์๋น์ค
- ๋ ์ฝ๋ API ๋ช ์ธ์
- ๋ ์ฝ๋ ์นดํ ๊ณ ๋ฆฌ API ๋ช ์ธ์
- ๋ ์ฝ๋ ๋๊ธ API ๋ช ์ธ์
- ๋ ์ฝ๋ ๋ฆฌ๋ทฐ API ๋ช ์ธ์
๊ณตํต ๋ฌธ์
๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ์ผ๋ก ์ธํ swap์ผ๋ก ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ค์
ํ๋ฆฌํฐ์ด ํ๊ฒฝ์์ EC2 ์๋ฒ๋ฅผ ์ด์ํ๋ฉด์ CD๋ฅผ ํตํด ๋ฐฐํฌํ๋ฉด ์๋ฒ๊ฐ ์ฃฝ๋ ์ด์๊ฐ ๋ฐ์ํ์ต๋๋ค. swap์ ํตํด ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ค์ ์ ํตํด ํด๋น ์ด์๋ฅผ ํด๊ฒฐํ์์ต๋๋ค. ์๋ฒ๋ฅผ ์ฆ์คํ๋ ๊ฒ ๋์ ๊ฐ์ฉ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋๋ฆฐ ์ด์ ๋ ๋น์ฉ ๋ฐ์ ๊ตฌ๊ฐ์ ์ต์ํํ๊ธฐ ์ํจ์ ๋๋ค.
์ฌ์ฉ์ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ๋ฅผ ์ํ ์ํธํ ์ฒ๋ฆฌ
ํ์๊ฐ์ ๊ณผ ๋ก๊ทธ์ธ/๋ก๊ทธ์์ ๊ด๋ จ ๊ธฐ๋ฅ ๊ตฌํ ์ดํ, ๋ฐฐํฌ๋ ์ฌ์ดํธ๋ฅผ ํตํด QA๋ฅผ ํ๋ฉด์ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ์ ๋ํ ๊ฑฑ์ ์ด ๋ค์์ต๋๋ค.
์ค์ ์ฌ์ฉ์๊ฐ ์ ์ํด์ ํ์๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์ณ ์ฌ์ดํธ์ ์ ๊ณตํ๋ ์ ๋ณด์ ๋ํด ์ 3์๋ก๋ถํฐ ๋ณดํธํ๋ ๊ฒ์ ๋น์ฐํ์ง๋ง, ์ด๋ฅผ ์ด์ํ๋ ๊ด๋ฆฌ์๋ค๋ก๋ถํฐ๋ ๋ณดํธ๋์ด์ผ ํ๋ค๊ณ ์๊ฐํ์ต๋๋ค.
๋ฐ๋ผ์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์์ฑ/์์ /์กฐํ ์, ์ํธํ์ ๋ณตํธํ ์ฒ๋ฆฌ๋ฅผ ๊ฑฐ์น๋๋ก ๋ฆฌํํ ๋งํ์์ต๋๋ค. DB์ ์ฝ์๋ก ์ ๊ทผํ์ฌ select ์ฟผ๋ฆฌ๋ฅผ ํตํด ์กฐํํ๋๋ผ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ ์ํธํ ์ฒ๋ฆฌ๋ ์ํ๋ก ์กฐํ๋ฉ๋๋ค. ์๋ณตํธํ๋ Converter์ AES ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ์ฌ ๊ตฌํํ์์ต๋๋ค.
๋ฆฌํํ ๋ง ๊ณผ์ ์ ์ ์ ํ ์ด๋ธ ์ํธํ์์ ์์ธํ ํ์ธํ ์ ์์ต๋๋ค.
์ฌ์ฉ์ ํํด ์ดํ์ ์ฒ๋ฆฌ
์ฌ์ฉ์๋ก๋ถํฐ ์ป๋ ๋ฐ์ดํฐ๋ก ์ด์๋๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๊ฐ ํํด๋ฅผ ํ๋๋ผ๋ ๊ฐ์ธ์ ๋ณด๋ฅผ ์ ์ธํ ๋ฐ์ดํฐ๋ ๋ณด์ ํ๊ณ ์๊ธฐ๋ก ํ์์ต๋๋ค. ์ด๋ฅผ ์ํด ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ delete ํ๋ ๊ฒ์ด ์๋ "" ๊ณต๋ฐฑ ๋ฌธ์๋ฅผ ๋ฃ์ด ์ฌ์ฉ์ ํ ์ด๋ธ๊ณผ Cascade๊ฐ ๊ฑธ๋ฆฐ ๋ค๋ฅธ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด์กดํ ์ ์๋๋ก ๋ฆฌํํ ๋งํ์์ต๋๋ค.
๋ฆฌํํ ๋ง ๊ณผ์ ์ ์ ์ ํํด ์ฒ๋ฆฌ์์ ์์ธํ ํ์ธํ ์ ์์ต๋๋ค.
๋ฆฌํ๋ ์ ํ ํฐ ์ ์ฅ๋ฐฉ์์ ๋ณ๊ฒฝ
๊ธฐ๋ฅ ๊ฐ๋ฐ ์ค์ JWT ํ ํฐ ํํ์ Access-token๊ณผ Refresh-token์ Frontend์์ ํด๋ผ์ด์ธํธ์ localstorage์ ๊ด๋ฆฌํ์ต๋๋ค. Server์์๋ Redis ์๋ฒ์ Refresh-token์ ์ ์ฅํ์ฌ ๊ด๋ฆฌํ์ต๋๋ค.
์ ํจ๊ธฐ๊ฐ์ด ๊ธด Refresh-token์ด localstorage์ ์ ์ฅ๋๋ฉด XSS ๊ณต๊ฒฉ ๋ฑ์ผ๋ก ํ์ทจ ๋นํ ์ํ์ด ์๋ค๊ณ ํ๋จํ์ฌ Cookie์ ๋ด์ ์ ์ฅํ๋ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝํ์์ต๋๋ค.
๋ฆฌํํ ๋ง ๊ณผ์ ์ ๋ฆฌํ๋ ์ ํ ํฐ ์ ์ฅ๋ฐฉ์ ๋ณ๊ฒฝ์์ ์์ธํ ํ์ธํ ์ ์์ต๋๋ค.
ํ ํฌ ๋ธ๋ก๊ทธ ์๋น์ค ๊ธฐํ/๊ฐ๋ฐ
ํ ์ค๋๋ฆฌ์์ ์ฃผ๋ง๋ด์ง ์๋น์ค ๊ฐ๋ฐ์ ์ํด ๊ฑฐ์ณ์จ ์ง๋ ์ฌ์ ๊ณผ ๋ง์ฃผํ๋ ์ด์ ๋ฐ ํ๊ณ ์ ๋ํด ์ฌ์ฉ์๋ค๊ณผ ๊ณต์ ํ๊ณ ์ off the record๋ก ์์ํ๊ฒ ๋ ์๋น์ค์ ๋๋ค. ํด๋น ์๋น์ค๋ ์๋ฒ ํํธ ๋ด๋ถ์์ ์์ฒด์ ์ผ๋ก ๊ธฐํ/๋์์ธ/๊ฐ๋ฐ ํ๋ ๊ฒ์ด๋ฉฐ, ๋ณธ ์๋น์ค์ ๊ณต์ฉ์ผ๋ก ์ฌ์ฉํ๋ API๊ฐ ์๊ธฐ์ ํด๋น ๋ ํฌ์งํ ๋ฆฌ์์ ์ถ๊ฐ ํ์ฅ์ผ๋ก ๊ฐ๋ฐ์ ์งํํ์์ต๋๋ค. ํ๋ก ํธ์๋ ์์ ๋ด์ฉ์ back-office ์์ ํ์ธํ ์ ์์ต๋๋ค.
ํ ํฌ ๋ธ๋ก๊ทธ ๋ฐ๋ก๊ฐ๊ธฐ ์์ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
๐๐ป ํ ํฌ ๋ธ๋ก๊ทธ ํ๋ก์ธ์ค ์ ์
์ปค๋ฎค๋ํฐ ๊ฒ์ํ์์ ํ์ด์ง ๋ฐ์ดํฐ ์บ์ฑ์ผ๋ก ์กฐํ ์ฑ๋ฅ ํฅ์
๋ ๋์ค๋ฅผ ์ด์ฉํด ์ปค๋ฎค๋ํฐ ๊ฒ์ํ์์ ํ์ด์ง ๋ฐ์ดํฐ๋ฅผ ์บ์ฑํ์ฌ ์กฐํ ์ฑ๋ฅ์ ํฅ์ ์์ผฐ์ต๋๋ค. ๋ฐ์ดํฐ์ ์์ ํน์ ์ญ์ ๋ฐ์์ด ์บ์ฑ ๋ด์ฉ๋ ํจ๊ป ๋ณ๊ฒฝ๋๋๋ก ํ์์ผ๋ฉฐ, 3์๊ฐ์ ์ ํจ์๊ฐ์ ๊ฑธ์ด๋์์ต๋๋ค.
๋น์ง ๊ฑฐ๋ ์๋น์ค ๋ก ์นญ์ ์ํ ์ฌ์ฉ์ ํ์ ์ถ๊ฐ, ๊ณต์ธ์ค๊ฐ์ฌ
๋น์ง ๊ฑฐ๋ ์๋น์ค๋ ์ง์ญ ์ฌํ์ ๋น์ง ๋ฌธ์ ํด๊ฒฐ์ ์ํ ๊ฒ์ ๋๋ค. ๋น์ง ๋งค๋ฌผ์ ๋ํ ์ ๋ขฐ์ฑ์ ๋์ด๊ณ ์ ๊ณต์ธ์ค๊ฐ์ฌ ์ฌ์ฉ์๋ฅผ ์ถ๊ฐํ์ฌ ๋น์ง ๋งค๋ฌผ์ ๋ณธ ์๋น์ค๋ฅผ ํตํด ํ๋ณดํ๊ณ ๊ฑฐ๋๋ก ์ด์ด์ง๋๋ก ํฉ๋๋ค. ์ผ๋ฐ ์ฌ์ฉ์ ์ญ์ ๋น์ง ๋งค๋ฌผ์ ๋ฑ๋กํ ์ ์์ง๋ง, ๊ด๋ฆฌ์์๊ฒ ์ฐ์ ์ ์ผ๋ก ์น์ธ์ด ๋์ด์ผ ํฉ๋๋ค.
๋น์ง ๊ฒ์๊ธ ๊ธ์์ ์ ํ, ์ ํจ์ฑ๊ฒ์ฌ๋ฅผ ์ํ Validator ์ปค์คํฐ๋ง์ด์ง
์ปค๋ฎค๋ํฐ ๊ฒ์๊ธ๊ณผ ๋ฌ๋ฆฌ ๋น์ง ๊ฒ์๊ธ์ 10,000์์ ๊ธ์ ์ ์ ํ์ด ์์ต๋๋ค. ๊ฒ์๊ธ ๋ด์ฉ์๋ ์์ํ ๊ธ์๋ง์ด ์๋ ๊ฒ์ด ์๋ ์ด๋ฏธ์ง ์ฃผ์, HTML ํ๊ทธ ๋ฑ ๋ถ๊ฐ์ ์์๋ค์ด ํฌํจ๋ฉ๋๋ค. ์ด๋ฌํ ์์๋ค์ ํ์ฑํ๋ฉด์ ์ ์ธ์ํค๊ณ ์์ํ ๋ด์ฉ์ ๋ํ ๊ธ์ ๊ธธ์ด๋ฅผ ํ์ธํ๊ธฐ ์ํด CodeValid ์ด๋ ธํ ์ด์ ์ ๋ง๋ค๊ณ ๋ณ๋์ validator๋ฅผ ๊ตฌํํ์์ต๋๋ค.
SSR ๋ฐฉ์์ ๋ฐฑ์คํผ์ค ๊ฐ๋ฐ
์ฃผ๋ง๋ด์ง์ ์ด์ํ๋ ๊ด๋ฆฌ์๋ง์ด ์ ์ํ ์ ์๋ ๋ฐฑ์คํผ์ค๋ฅผ SSR ๋ฐฉ์์ผ๋ก ๊ตฌํํ์์ต๋๋ค.
SSR ๋ฐฉ์์ ์ ํํ ์ด์ ๋ ์ ํ๋ ์ ๊ทผ์์ ์ ์ ์์ ํธ๋ํฝ์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ ๋ฆฌ์์ค๋ฅผ ์ต์ํํ๊ธฐ ์ํจ์ด์์ต๋๋ค.
๋ฐฑ์คํผ์ค์์์ ํต์ฌ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ฌ์ฉ์ ์ฐ๋ น๋๋ณ ๋น์จ, ์ฌ์ฉ์ ๊ฐ์ ๊ฒฝ๋ก ์๊ฐํ
- ๊ฒ์๊ธ ์๋จ ๊ณ ์ ๋ฐ ๊ณ ์ ํด์
- ๊ฒ์๊ธ ์๊ตฌ์ญ์
- ๊ณต์ธ์ค๊ฐ์ฌ ํ์ ๊ฐ์ ์น์ธ/๋ฐ๋ ค
- ์ผ๋ฐ ์ฌ์ฉ์์ ๋น์ง ๋งค๋ฌผ ๋ฑ๋ก ๊ฒ์๊ธ ์น์ธ/๋ฐ๋ ค
- ์ ๊ณ ์ฒ๋ฆฌ๋ ๊ฒ์๊ธ ๊ด๋ฆฌ
๊ด๋ฆฌ์ ๊ณ์ ์ผ๋ก์ ๋ก๊ทธ์ธ์ Session ๋ฐฉ์์ ์ ์ฉํ์์ผ๋ฉฐ, interceptor๋ฅผ ํตํด ๋ก๊ทธ์ธ์ด ํ์ํ ํ์ด์ง์ ๋ก๊ทธ์ธ ์์ด ์ ๊ทผํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๊ฒ ํ์์ต๋๋ค.
ํ์๊ฐ์ ์, ์ฌ์ฉ์๋ก๋ถํฐ ์ป์ ๋ฐ์ดํฐ์ ๋ํ ํต๊ณ์ ์๋ฃ๋ฅผ ํ์ธํ๊ธฐ ์ํด ์ฐ๋ น๋์ ๊ฐ์ ๊ฒฝ๋ก ๋ฐ์ดํฐ๋ฅผ ์๊ฐํํ์ฌ ์กฐํํ ์ ์๋๋ก ํ์์ต๋๋ค.
ํ๋ณด ๊ฒ์ํ์ ์ผ๋ฐ ์ฌ์ฉ์์ ์์ฒญ์ผ๋ก ๊ด๋ฆฌ์๊ฐ ๊ฒ์๊ธ์ ์๋จ์ ๊ณ ์ ํ ์ ์์ต๋๋ค. ํ ๋ฒ์ ์ต๋ 10๊ฐ์ ๊ฒ์๊ธ์ ๊ณ ์ /๊ณ ์ ํด์ ํ ์ ์์ผ๋ฉฐ ์ด๋ ์์ ๊ด๋ฆฌ์ ํ์ด์ง ํ๋ฉด์ ํด๋นํฉ๋๋ค.
์ผ๋ฐ ์ฌ์ฉ์๊ฐ ์ ๊ทผํ ์ ์๋ ํ์ด์ง์์์ ๊ฒ์๊ธ ์ญ์ ๋ Soft delete ๋ฐฉ์์ผ๋ก DB์์ ์๊ตฌ์ ์ผ๋ก ์ญ์ ๋์ง ์์ต๋๋ค. DB์์ ์๊ตฌ ์ญ์ ๋ ๊ด๋ฆฌ์๋ง์ด ํ ์ ์์ผ๋ฉฐ ์ด๋ฅผ ์ํด ๊ด๋ฆฌ์ ํ์ด์ง์์ ๊ฒ์๊ธ ์๊ตฌ ์ญ์ ๊ธฐ๋ฅ์ ๊ตฌํํ์์ต๋๋ค.
์ฃผ๋ง์ง ์๋น์ค์๋ ๊ด๋ฆฌ์, ์ผ๋ฐ ์ฌ์ฉ์, ๊ณต์ธ์ค๊ฐ์ฌ ์ ์ ๊ฐ ์กด์ฌํ๋ฉฐ, ๊ด๋ฆฌ์๋ ๊ณต์ธ์ค๊ฐ์ฌ์ ํ์๊ฐ์ ์น์ธ/๋ฐ๋ ค ์ฒ๋ฆฌ๋ฅผ ํตํด ๊ด๋ฆฌํฉ๋๋ค.
๊ณต์ธ์ค๊ฐ์ฌ์ ๋ฌ๋ฆฌ ์ผ๋ฐ ์ฌ์ฉ์๋ ๋น์ง ๋งค๋ฌผ์ ๋ฑ๋กํ ์, ๊ด๋ฆฌ์์ ์น์ธ์ด ํ์ํฉ๋๋ค. ์ด๋ ์ฌ์ดํธ์์ ์ด์ํ๋ ๋น์ง ๊ฑฐ๋ ์ค๊ฐ ์๋น์ค์ ์ ๋ขฐ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํ ์ฃผ๋ง๋ด์ง ๋ง์ ํ๋ก์ธ์ค์ ๋๋ค.
๊ณต์ธ์ค๊ฐ์ฌ ํน์ ์ผ๋ฐ ์ฌ์ฉ์๊ฐ ์ ๋ก๋ํ ๋น์ง ๊ฒ์๊ธ์ด ํ์ ๊ฒ์๊ธ์ด๊ฑฐ๋ ์์ ์ ๋ชฉ์ ์ผ๋ก ์๋ชป๋ ์ ๋ณด๋ฅผ ๊ธฐ์ฌํ ๊ฒฝ์ฐ ์ ์ ๋ค๋ก๋ถํฐ ์ ๊ณ ๋ฅผ ๋ฐ์ผ๋ฉฐ ์ด๋ฌํ ๊ฒ์๊ธ์ ์ญ์ ์ฒ๋ฆฌ๋ฅผ ํฉ๋๋ค.
๋ค์์ ๋ฌต๋ฌตํ ์ญํ ํ๋ ๊ด๋ฆฌ์ ํ์ด์ง
๋ ์ง์์ ์ผ๋ก ์ ๋ฐ์ดํธ ์ค์ ๋๋ค.
๋ก์ปฌ ๋ก๊ทธ์ธ
๋ก์ปฌ ๋ก๊ทธ์ธ ๊ตฌํ์ ์ํด Spring Security๊ฐ ์๋ ArgumentResolver์ AOP๋ฅผ ์ปค์คํฐ๋ง์ด์งํ์ฌ ๊ตฌํํ์์ต๋๋ค.
@Auth ์ด๋ ธํ ์ด์ ์ผ๋ก ์ปจํธ๋กค๋ฌ ๋ฉ์๋๊ฐ ์คํ๋๊ธฐ ์ ์ HTTP Request Authorization Header์ ๋ด๊ธด JWT ํ ํฐ์ ๋ํด ๊ฒ์ฆํฉ๋๋ค.
@AuthUser ์ด๋ ธํ ์ด์ ์ผ๋ก @Auth ์ด๋ ธํ ์ด์ ์ผ๋ก ๊ฒ์ฆ๋ ํ ํฐ ๊ฐ์ ๋ด๊ธด ์ฌ์ฉ์์ ์์ด๋๋ก User๋ฅผ ์ฐพ์ ํ, ๋ฐํ๋ ๊ฐ์ ์ปจํธ๋กค๋ฌ ๋ฉ์๋์ Argument๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ก์ปฌ ๋ก๊ทธ์ธ ๊ตฌํ ๊ณผ์ ์ Spring Security ์์ด ์ธ์ฆ์ธ๊ฐ ๊ตฌํํ๊ธฐ์์ ํ์ธํ ์ ์์ต๋๋ค.
์ฌ์ฉ์ ๊ถํ ( ์ธ๊ฐ ํ๋ก์ธ์ค ์ฒ๋ฆฌ )
๋ก์ปฌ ๋ก๊ทธ์ธ์ ํตํด ํ์๊ฐ์ ์ ํ๋ ์ฌ์ฉ์๋ ์ผ๋ฐ ์ฌ์ฉ์์ ๊ถํ์ ๊ฐ์ง๋ฉฐ, ๊ด๋ฆฌ์ ๊ถํ์ ๊ฐ๋ ์ฌ์ฉ์๋ ๋ด๋ถ์ ์ผ๋ก Authority๋ฅผ ADMIN์ผ๋ก ๋ถ์ฌํ๊ณ ์์ต๋๋ค.
์ผ๋ฐ ์ฌ์ฉ์๋ ๊ฒ์๊ธ ์กฐํ/์์ /์ญ์ /์์ฑ ๋ฐ ๋๊ธ ์์ฑ/์์ /์ญ์ , ์ข์์ ๋ฑ์ ๊ธฐ๋ฅ์ ์ํํ ์ ์์ต๋๋ค.
๊ด๋ฆฌ์๋ ์๊ฐ ํ์ด์ง ๋ด ํ๊ธฐ/ํธ๋ ๋ ๊ฒ์๊ธ ์์ฑ/์์ /์ญ์ ๊ถํ์ ๊ฐ์ง๋ฉฐ, ์ด๋ ์ผ๋ฐ ์ฌ์ฉ์์๊ฒ ๋ ธ์ถ๋์ง ์๋ ๊ธฐ๋ฅ์ ๋๋ค.
๊ด๋ฆฌ์๋ ์ผ๋ฐ ์ฌ์ฉ์์ ์ ์์ฑ ๊ฒ์๊ธ ๋ฐ ๋๊ธ์ ๋ํด ์๊ตฌ ์ญ์ ๊ถํ์ ๊ฐ๊ณ ์์ต๋๋ค.
React-Quill ๊ธฐ๋ฐ ๊ฒ์๊ธ ์์ฑ
๊ธ ์์ฑ ์, ์๋ ์ฌ์ง๊ณผ ๊ฐ์ด ์ฌ์ฉ์๊ฐ ์์ ๋กญ๊ฒ ๊พธ๋ฐ ์ ์๋ ์๋ํฐ ํ์์ ์ง์ํฉ๋๋ค.
๋ํ ์ธ๋ค์ผ ์ด๋ฏธ์ง์ ๊ฒ์๊ธ ๋ด์ฉ์ ํฌํจ๋๋ ์ด๋ฏธ์ง์ ๋ํด์๋ Frontend ์ธก์์ AWS S3๋ก ์ง์ ์ ๋ก๋ ์ฒ๋ฆฌํฉ๋๋ค.
์ด๋ฏธ์ง ์ ๋ก๋ ํ url ์ฃผ์์ ๋ํด์ Server๋ก ๊ฒ์๊ธ ๋ด์ฉ๊ณผ ํจ๊ป ์ ๋ฌํ์ฌ DB์์ ์ด๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
ํธ๋ฌ๋ธ ์ํ
(2023.04.17)
๊ฒ์๊ธ ํ
์ด๋ธ ๋ฐ์ดํฐ ์ต๋ ํฌ๊ธฐ ์ด๊ณผ ์ด์๊ฐ ๋ฐ์ํ์ต๋๋ค.
Board(Id, CreatedAt, UpdatedAt, Category, Code, Content, Fixed, FixedAt, ImageUrls, PrefixCategory, Title, UseYn, UserId )
๊ฒ์๊ธ ํ ์ด๋ธ์ ์์ ๊ฐ์ ๊ตฌ์กฐ๋ก ์ค๊ณ ๋์ด ์์์ผ๋ฉฐ, Code ์ปฌ๋ผ์ Frontend ์ธก์์ ๋์ด์ค๋ HTML ํ๊ทธ๊ฐ ํฌํจ๋ ๋ฐ์ดํฐ์ ๋๋ค.
๊ฒ์๊ธ ๊ฒ์ ์, ๊ฒ์๊ธ์ ์ ๋ชฉ๊ณผ ๋ด์ฉ์ ๋ํด ๊ฒ์์ด ๊ฐ๋ฅํด์ผ ํ๊ธฐ์ ๊ฒ์๊ธ ๋ฐ์ดํฐ๊ฐ insert ๋๊ธฐ ์ด์ ์ Code ๋ฐ์ดํฐ๋ก๋ถํฐ HTML ํ๊ทธ๋ฅผ ํ์ฑํด์ ์์ํ ๊ฐ๋ง ๊ฐ๋ Content ๋ฐ์ดํฐ๋ฅผ ๋ณ๋์ ์ปฌ๋ผ์ผ๋ก ์ ์ฅํ์ฌ ๊ด๋ฆฌํฉ๋๋ค.
๊ฒ์๊ธ ํ ์ด๋ธ ๋ด์ ์ด๋ฏธ ๋ง์ ์ปฌ๋ผ์ด ์กด์ฌํ๊ณ , ์ฌ์ฉ์๊ฐ ์์ฑํ๋ ๊ฒ์๊ธ์ ๊ธ์์ ์ ํ์ด ์๊ธฐ ๋๋ฌธ์ Code์ Content ๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ ํ๋์ Row๊ฐ ๊ฐ์ง ์ ์๋ ๋ฒ์๋ฅผ ๋์ด์๋ฉด์ insert ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํ ์ด๋ธ์ ๋ถ๋ฆฌํ์ฌ board์ board_code๋ฅผ One-To-One์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค.
Code ์ปฌ๋ผ์ TEXT ํ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ ๋ฐ ๊ด๋ฆฌํฉ๋๋ค.
ํด๋น ์ด์์ ๋ฐ์ ๊ณผ์ ๋ฐ ํด๊ฒฐ ๊ณผ์ ์ ๊ฒ์๊ธ ํ ์ด๋ธ ๋ฐ์ดํฐ ํฌ๊ธฐ ์ด๊ณผ๋ก ์ธํ ํ ์ด๋ธ ๋ถ๋ฆฌ ์์ ์์ ์์ธํ ํ์ธํ ์ ์์ต๋๋ค.
Soft Delete ๋ฐฉ์์ ๊ฒ์๊ธ ์ญ์
์ฌ์ฉ์๋ก๋ถํฐ ์ป๋ ๋ฐ์ดํฐ๋ฅผ ์ค์ฌ์ผ๋ก ์ด์๋๋ ์๋น์ค์ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ๊ฐ ๊ณง ์์ฐ์ ๋๋ค. ๋ฐ์ดํฐ๊ฐ ๋์ ๋์ด ๊ทธ ์์์ ์ ์๋ฏธํ ์ธ์ฌ์ดํธ๋ฅผ ์ป์ ์ ์๊ณ , ์ด๊ฒ์ด ์ ๊ท ๊ธฐ๋ฅ์ด์ ์๋น์ค๋ก ๋ฐ์ ๋ ์ ์์ต๋๋ค.
๊ธฐํ์ ์๊ตฌ์ฌํญ ๋ณ๊ฒฝ์ผ๋ก ์ญ์ ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๋ ธ์ถํด์ผ ํ๋ ์๊ธฐ์น ๋ชปํ ์ํฉ์ ๋์ํ๊ธฐ ์ํด Soft Delete ๋ฐฉ์์ ์ ์ฉํ๊ธฐ๋ก ํ์์ต๋๋ค.
์ด๋ฅผ ์ํด ๊ฒ์๊ธ ํ ์ด๋ธ ๋ด์ UseYn ์ปฌ๋ผ์ ๋์ด ์ผ๋ฐ ์ฌ์ฉ์๊ฐ ๊ฒ์๊ธ์ ์ญ์ ํ ๊ฒฝ์ฐ์๋ ์กฐํ๋์ง ์๊ณ , ๊ด๋ฆฌ์ ํ์ด์ง์์ ๊ด๋ฆฌ์๊ฐ ์ญ์ ํ๋ ๊ฒฝ์ฐ์๋ ์๊ตฌ ์ญ์ ํฉ๋๋ค.
soft delete ์ ์ฉ ๊ณผ์ ์ Soft Delete ๋ฐฉ์ ์ ์ฉ์์ ์์ธํ ํ์ธํ ์ ์์ต๋๋ค.
-
์๋น - Jasypt ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ YML ํ์ผ ์ํธํํ๊ธฐ
-
์๋น - Github Actions์ SonarCloud ์ฌ์ฉ ์ค ํธ๋ฌ๋ธ ์ํ ์ ๋ฆฌ
-
์๋น - Validator ์ปค์คํฐ๋ง์ด์งํ์ฌ ๊ธ์์ ์ ํจ์ฑ ๊ฒ์ฌํ๊ธฐ
-
์๋น - ๊ฐ์ฒด์งํฅ์ ์ฝ๋ ์์ฑ์ ์ํ ์๋ฒ ๋๋ ๋ฐฉ์ ์ ์ฉํ๊ธฐ
Name | ์ด์๋น | ์คํ๋ฏผ | ๋ฌธ๋ฏผํ |
---|---|---|---|
Profile | |||
Role | Team Leader Back-end, DevOps |
Back-end, DevOps |
Back-end , DevOps |
Part | ํ๋ก์ ํธ ์ธํ
์ปค๋ฎค๋ํฐ API ๋น์ง ๊ฑฐ๋ API ํ ํฌ ๋ธ๋ก๊ทธ ํ๋ก ํธ์๋ 100% ๊ฐ๋ฐ ์ ์ฒด ์๋น์ค ์ ์ง๋ณด์ ๋ฐ ๊ด๋ฆฌ์ํ์ด์ง ์ผ๋ถ ๊ธฐ๋ฅ ๊ฐ๋ฐ |
์ธํ๋ผ ์ธํ
๊ด๋ฆฌ์ํ์ด์ง(SSR) 100% ๊ฐ๋ฐ ์ฑ๋ฅ ๊ฐ์ (์บ์ฑ, ๋์ ์ฟผ๋ฆฌ ๋ฆฌํํ ๋ง) |
์ฌ์ฉ์ API ๋ง์ดํ์ด์ง API DDoS ๋ฐฉ์ง ์ฒ๋ฆฌ ํ ํฌ ๋ธ๋ก๊ทธ API 100% ๊ฐ๋ฐ |
GitHub | @dldmsql | @YoonTaeMinnnn | @MoonMinHyuk1 |