- 2023.07.15 AWS ํ๋ฆฌํฐ์ด ์ง์ ์ข ๋ฃ๋ก ์ธํด ๋ฐฐํฌ๊ฐ ์ข ๋ฃ๋์์ต๋๋ค.
ํผ์ ์ฝ๋ฉํ๋๋ผ ์ง์น์์ง๋ ์์ผ์ ๊ฐ์?
๋ค์ํ ์ฌ๋๋ค๊ณผ ํจ๊ป ์ฝ๋ฉํ๋ฉด์ ๊ต๋ฅํด๋ณด์ธ์!
- ๊ฐ์
- ๊ฐ๋ฐ ํ๊ฒฝ
- ์ฌ์ฉ ๊ธฐ์
- ์ํคํ ์ฒ
- E-R ๋ค์ด์ด๊ทธ๋จ
- Api ๋ช ์ธ์
- ๋ฆด๋ฆฌ์ฆ ๋ ธํธ
- ํ๋ก์ ํธ ๋ชฉ์
- ํ๋ฉด ๊ตฌ์ฑ
- ํต์ฌ ๊ธฐ๋ฅ
- CI/CD
- ๋๋ฉ์ธ https ์ ์ฉ
MoCo๋ ์คํฐ๋๋ฅผ ์ํ ๊ฒ์ํ ์น ์ ํ๋ฆฌ์ผ์ด์
์ผ๋ก ๋งํฌ๋ค์ด ์๋ํฐ๋ฅผ ์ด์ฉํ ๊ฒ์ํ์
๋๋ค.
์ผ๋ฐ์ ์ธ ์๋ฒ - ํด๋ผ์ด์ธํธ ๊ตฌ์กฐ์ ์ํคํ
์ฒ์ ์ผ๋ถ ์ปจํ
์ธ ๋ฅผ ์ด๋๋ฆฌ์ ๋คํธ์ํฌ์ ์ฐ๋ํ์์ต๋๋ค.
- MacOS M1
- IntelliJ
- Visual Studio Code
- GitHub
- Docker
- DBeaver
๋ฐฑ์๋
- Java 11
- SpringBoot 2.7.2
- Spring Security5
- Spring Data JPA
- QueryDsl 5.0.0
- Lombok
ํ๋ก ํธ์๋
- Html5/css3
- Javascript
- Thymeleaf
- Bootstrap 5
๋น๋ ํด
- Gradle 7.5
๋ฐ์ดํฐ๋ฒ ์ด์ค
- Mysql
์ธํ๋ผ
- AWS EC2
- AWS S3
- AWS Route53
- AWS RDS
- AWS ALB
- Github Actions
- Docker
- DockerHub
๋ธ๋ก์ฒด์ธ
- goerli network
- solidity
- Meta Mask
๋ผ์ด๋ธ๋ฌ๋ฆฌ
- web3.js
- openzeppelin-ERC20
- tippy.js
- toastui-editor
- tagify
- xeicon
- fabric
- copy-down
- kakaoMaps Api
- java smtp
2022-10-26 MoCo v1.1.0 ๋ฆด๋ฆฌ์ฆ ๋ณด๊ธฐ
2022-11-01 MoCo v1.2.0 ๋ฆด๋ฆฌ์ฆ ๋ณด๊ธฐ
๐ ๋ก๊ทธ์ธํ๋ฉด ์ง์ ์ ์๋์ผ๋ก ๋ก๊ทธ์ธ์ฐฝ ์ ๋๋ฉ์ด์ ์ด ์๋ํฉ๋๋ค. - ๋ก๊ทธ์ธ ์ ๊ทผ์ฑ์ ๋์์ต๋๋ค.
2022-11-07 MoCo v1.3.0 ๋ฆด๋ฆฌ์ฆ ๋ณด๊ธฐ
๐ NginX์ ๋์ ํ์ฌ ๋ฌด์ค๋จ ๋ฐฐํฌ ํ๊ฒฝ์ผ๋ก ์ ๋ฐ์ดํธ ํ์์ต๋๋ค.
2023-03-22 MoCo v2.0.0 ๋ฆด๋ฆฌ์ฆ ๋ณด๊ธฐ
๐ Native Query -> QueryDsl ๋ง์ด๊ทธ๋ ์ด์ ํ์์ต๋๋ค.
๐ ์ฟผ๋ฆฌ ์ต์ ํ๋ฅผ ์ํด ERD ๊ตฌ์กฐ๋ฅผ ๋ฐ์ ๊ทํ ํ์์ต๋๋ค.
์ค์๋น์ค๊ฐ ๊ฐ๋ฅํ ์น ์ ํ๋ฆฌ์ผ์ด์
๊ตฌ์ถ์ ์ค์ ์ผ๋ก ๋ฐฐํฌ์ ์ค๊ณ, ๊ธฐ์ ์ ๊ณ ๋ฏผ์ ๊ฒฝํํด ๋ณด๋ ๊ฒ์ ๋ชฉํ๋ก ์์ํ์ต๋๋ค.
๋ธ๋ก์ฒด์ธ ๋คํธ์ํฌ ์ฐ๋์ ํตํด Web3 ์๋น์ค๋ฅผ ๊ตฌํํด ๋ณด๋ฉด์ Dapp ๊ฐ๋ฐ์ ์ ๋ฐ์ ์ธ ์ง์์ ์์ผ๋ ค๊ณ ํ์ต๋๋ค.
| ์ฒซ ํ์ด์ง | ๋ฉ์ธ ํ์ด์ง | ๋ก๊ทธ์ธ | ํ์๊ฐ์ |
| ๊ธ์์ฑ ํ์ด์ง | ๊ฒ์๊ธ ๋ณด๊ธฐ | ์ถ์์ฒดํฌ ๋ณด์ | ์ค์ ํ์ด์ง |
| ๋ํธ๋งต ํ์ด์ง | ๋ ๊ตฌ๋งค ๋ชจ๋ฌ์ฐฝ | ๊ตฌ๋งค๋ ๋ ํ์ |
- ์์
๋ก๊ทธ์ธ
- ์์
๋ก๊ทธ์ธ ๊ตฌํ์ ์ํด ์คํ๋ง ์ํ๋ฆฌํฐ์, OAuth2 ์ธ์ฆ๋ฐฉ์์ ์ฌ์ฉํ์ผ๋ฉฐ, ์์ธ์ค ํ ํฐ์ผ๋ก ๋ฐ์์ค๋ ์ ์ ์ ๋ณด๋ฅผ ์ปค์คํ
ํ์ฌ ์ฌ์ฉํ๊ธฐ ์ํด Oauth2UserService ์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ์ CustomOauth2UserService ํด๋์ค๋ฅผ ๊ตฌํํ์์ต๋๋ค.
CustomOauth2UserService
- ์์
๋ก๊ทธ์ธ ๊ตฌํ์ ์ํด ์คํ๋ง ์ํ๋ฆฌํฐ์, OAuth2 ์ธ์ฆ๋ฐฉ์์ ์ฌ์ฉํ์ผ๋ฉฐ, ์์ธ์ค ํ ํฐ์ผ๋ก ๋ฐ์์ค๋ ์ ์ ์ ๋ณด๋ฅผ ์ปค์คํ
ํ์ฌ ์ฌ์ฉํ๊ธฐ ์ํด Oauth2UserService ์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ์ CustomOauth2UserService ํด๋์ค๋ฅผ ๊ตฌํํ์์ต๋๋ค.
- ์ผ๋ฐ ๋ก๊ทธ์ธ
- ์์ฒด ๋ก๊ทธ์ธ ๋ฐฉ์์ผ๋ก๋ ํ์๊ฐ์ ์ ์ ๋ ฅํ ๋น๋ฐ๋ฒํธ๋ฅผ ํด์ ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ์ฌ ๋์จ ํด์๊ฐ์ DB์ ์ ์ฅํฉ๋๋ค.
- ๋ก๊ทธ์ธ์ ์ฌ์ฉํ ํด์ ์๊ณ ๋ฆฌ์ฆ์ ์ฐพ์ ๋น๋ฐ๋ฒํธ์ ์ ํฉ์ฑ์ ๊ฒ์ฆํฉ๋๋ค.
UserService
โโ์ด๋ฏธ์ง ์ ์ฅ
- ๊ฒ์๊ธ ์์ฑ์ NHN์์ ๊ฐ๋ฐํ ์คํ์์ค๋ก, ๋งํฌ๋ค์ด๊ณผ ์์ง์ ๋ฐฉ์์ ์ง์ํ๋ ์์ฐ์ฑ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ์ต๋๋ค.
- ๊ฒ์๊ธ ์์ฑ์ ์ด๋ฏธ์ง ์ฝ์ ์ base64ํ์์ ๋จ์ ์ ๋ณด์ํ hooks ์ต์ ์ ์ฌ์ฉํ์ต๋๋ค.
- ์ด๋ฏธ์ง์ base64 ์ธ์ฝ๋ฉ์ ๋จ์ ์ ํด์๋์ ๋ฐ๋ผ ๊ธ์์๊ฐ ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฌ๋ผ๊ฐ๊ธฐ ๋๋ฌธ์ DB์ ์ฅ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
- ๋ฐ๋ผ์ ์ด๋ฏธ์ง์ ์ ์ฅ๋ ์ฃผ์๊ฐ์ธ url์ ์ ์ฅํ๋๋ก ํ์ต๋๋ค.
- ์ด๋ฏธ์ง ์ฝ์ ์ hooks ์ต์ ์ผ๋ก blob ๊ฐ์ฒด๋ฅผ ์ธํฐ์ ํฐํฉ๋๋ค.
- Ajax๋ก blob ๊ฐ์ฒด๋ฅผ ๋ฐฑ์๋ ์๋ฒ๋ก ์ ์ฅ ์์ฒญ์ ๋ณด๋ ๋๋ค.
- ๋ฐฑ์๋ ์๋ฒ์์ blob ๊ฐ์ฒด๋ฅผ multipart๋ก ๋ฐ์ aws s3 ๋ฒํท์ ์ ์ฅ ์์ฒญ์ ๋ณด๋ ๋๋ค.
- ์ ์ฅ์ ์ฑ๊ณต์ ์ ๋ก๋๋ url์ ๋ฐํํฉ๋๋ค.
โโ๊ธ์์ฑ
- Toast Ui editor๋ก ์์ฑํ ๋งํฌ๋ค์ด ๋ฌธ๋ฒ์ html ๋ก ํ์ฑํ์ฌ ์ ์ฅํ์์ต๋๋ค.
- ๊ฒ์๊ธ ์ ์ฅ์ ๊ฐ ํญ๋ชฉ์ ๋ํ ์ ํจ์ฑ์ ๊ฒ์ฌํฉ๋๋ค. ์๋ฌ ๋ฐ์์ ์์ฑํ๋ ๋ด์ฉ๋ค์ ์ ์งํ๋ฉด์ ์๋ฌ ๋ด์ฉ๋ํ ๋ฐํํ๋๋ก ํ์ต๋๋ค.
- tagify ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ ํ๊ทธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ํ๊ทธ๋ค์ Json ํฌ๋งท์ผ๋ก ๋ฐ์์ค๋ฉฐ ArrayList ์๋ฃ๊ตฌ์กฐ๋ก ํ์ฑํ์ฌ ํ๊ฐ์ ํ๊ทธ๋น ํ๊ฐ์ ์ปฌ๋ผ์ผ๋ก DB์ ์ ์ฅํฉ๋๋ค.
โโ๊ธ ์์
- ๊ฒ์๊ธ ๋ณธ๋ฌธ์ ๋ด์ฉ์ DB์ ์ ์ฅ์ ๋งํฌ๋ค์ด์ผ๋ก ์ ์ฅํด์ผ ํ ์ง, Htmlํ๊ทธ๋ก ๋ณํํ ์ ์ฅํด์ผ ํ ์ง ๊ณ ๋ฏผ์ด ๋ง์์ต๋๋ค. ํด๋น ์ด์๋ ์๋ ๋งํฌ์์ ํ์ธํ์ค์ ์์ต๋๋ค.
- ๊ฒ์๊ธ ์์ ์ ๋น๋ฒํ๊ฒ ๋ฐ์ํ๋ ์์ ์ด ์๋๊ธฐ ๋๋ฌธ์ html ํ๊ทธ๋ก ์ ์ฅํ ๊ฒ์๊ธ ์์ ์์ ๋งํฌ๋ค์ด ๋ฌธ๋ฒ์ผ๋ก ํ์ฑํ๋๋ก ๊ตฌํํ์์ต๋๋ค.
- ํ๊ทธ ์์ ์ ์ญ์ ๋ ํ๊ทธ, ์ถ๊ฐ๋ ํ๊ทธ๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด hashSet ์๋ฃ๊ตฌ์กฐ์ ์ฐจ์งํฉ์ ๊ตฌํ ์ ์๋ removeAll() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์์ต๋๋ค.
โโ๊ธ ์ญ์
โโ๊ฒ์๊ธ ์ฝ๊ธฐ
๋๋๊ธ์ ๊ฒฝ์ฐ ์ํฐํฐ ๊ตฌ์กฐ์์์ ์ ํ์กฐ์ธ์ ์ฐธ์กฐํ์ฌ ๊ณ์ธต์ ๊ฐ์ง๋๋ก ๊ตฌํํ์ต๋๋ค.
๋ก๊ทธ์ธ, ํ์๊ฐ์
์ ์๋ฌ๊ฐ ๋๋๊ฒฝ์ฐ ์ด๋ฅผ ์ฒ๋ฆฌํ๊ธฐ์ํด ์ปค์คํ
ํด๋์ค๋ฅผ ๊ตฌํํ์ผ๋ฉฐ,
๋ก๊ทธ์ธ ๊ด๋ จ ์๋ฌ์ ํ์๊ฐ์
์ ์๋ฌ์ ๋ง๊ฒ ์ฒ๋ฆฌํ์์ต๋๋ค.
๋ฐ์ํ ์๋ฌ๋ค์ ์ถ์ ์ด ๊ฐ๋ฅํ๋๋ก Log๋ฅผ ๋จ๊ฒจ CloudWatch ๋ชจ๋ํฐ๋ง ์์คํ
์ ์ด์ฉํ์ฌ ์ค์๊ฐ์ผ๋ก ํ์ธ ๊ฐ๋ฅํ๋๋ก ์ฒ๋ฆฌํ์ต๋๋ค.
-
QueryDsl๋ฅผ ์ฌ์ฉํ์ฌ ํ์ด์ง์ ๊ตฌํํ์์ต๋๋ค.
- ๋ฐํ์ ํ๊ฒฝ์์ ๋ฐ์ํ ์ ์๋ ์ฟผ๋ฆฌ ์ค๋ฅ ๋ฐฉ์ง์, SQL ์ํฐํจํด์ธ ์๋ธ์ฟผ๋ฆฌ ์ฌ์ฉ์ ์ง์ํ๊ธฐ ์ํด ๊ธฐ์กด์ Native Query ๋ฅผ QueryDsl๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ์์ต๋๋ค.
- ๊ธฐ์กด์ Native Query
- QueryDsl
-
ajax๋ฅผ ์ด์ฉํ ๋ฌดํ์คํฌ๋กค
- ํธํ ์คํฌ๋กค๋ง์ผ๋ก ์ฝํ ์ธ ๊ฐ ๋ก๋๋๋ ๋ฐฉ์์ผ๋ก ํนํ ๋ชจ๋ฐ์ผ ํ๊ฒฝ์์ ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ฃผ๋ฉฐ,์ฝํ ์ธ ์ ๋ ธ์ถ์ ์ฝ๊ฒ ์ ํ ์ ์๋๋ก ์ผ๋ฐ์ ์ธ ํ์ด์ง๋ค์ด์ ์ ๋๊ณ ๋ฌดํ์คํฌ๋กค์ ๊ตฌํํ์ต๋๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌดํ์คํฌ๋กค
-
์คํฌ๋กค ์์น์ ๋ฐ์ดํฐ ์ ์ง
- ๋ฌดํ ์คํฌ๋กค์ ๋จ์ ์ธ ๋ ๋๋ง๋ ๊ฒ์๊ธ๋ค๊ณผ ์คํฌ๋กค๋ง ํ๋ ์์น๋ก ๋์์ฌ์ ์๋๋ก ์ธ์ ์คํ ๋ฆฌ์ง๋ฅผ ์ด์ฉํ์์ต๋๋ค.
- ๊ฒ์๊ธ ๋ฆฌ์คํธํ์ด์ง๋ฅผ ๋ฒ์ด๋ ๋ ์ธ์ ์คํ ๋ฆฌ์ง์ ์คํฌ๋กค์ ์์น์ ๋ ๋๋ง ์ ๋ณด๋ฅผ ์ ์ฅํ ํด๋น ํ์ด์ง์ ๋์์์๋ ์ธ์ ์คํ ๋ฆฌ์ง์ ์ ์ฅ๋ ๊ฐ์ ๋ ๋๋งํ๋ฉฐ ์ด์ ์คํฌ๋กค์ ์์น๋ก ์ด๋ํ๋๋ก ๊ตฌํํ์ต๋๋ค.
- ๋ ๋๋ง, ์คํฌ๋กค ์์น๊ธฐ์ตํ๊ธฐ
- ๋ํธ๋งต์์ ๊ตฌ๋งค๋ ๋ ์ ํ์ํด ๋๋๋ง์ ํ ์ ์๋๋ก ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๊ตฌํํ์์ต๋๋ค.
-
openzeppelin ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉํ ์ ์๋ ERC-20 ๊ธฐ๋ฐ ํ ํฐ์ ๋ง๋ค์์ต๋๋ค.
-
Web3.js ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ ๋ฐฐํฌํ ์ปจํธ๋ํธ๋ฅผ ํธ์ถํ์ฌ ํ ํฐ์ ๋ฐ์ ์ ์์ต๋๋ค.
- ๋ํธ๋ก ๊ตฌ์ฑ๋ ๋ ์ ํ ํฐ์ผ๋ก ๊ตฌ๋งคํ ์ ์์ต๋๋ค. ๋ํธ๋ ์ง์ญ๋ณ๋ก ๊ฐ๊ฒฉ์ด ๋ค๋ฅด๋ฉฐ ์ค์์ ์์นํ ์๋ก ๋น์ธ์ง๋๋ค.
- ๊ตฌ๋งค ๊ณผ์ ์ ๊ตฌ๋งค ํจ์๋ฅผ ํธ์ถํ ํด๋น ํธ๋์ญ์ ์ด ์ํ๊ฐ pendding -> success ๋ ๋๊น์ง 1์ด๋ง๋ค ๊ฐ์งํ๋๋ก ๊ตฌํํ์ต๋๋ค.
- ์ถ์์ฒดํฌ ๋ณด์, ๊ฐ์ ์ ๋ณด์ ๋ชจ๋ฌ์ฐฝ์ ํตํด ๋ชจ๊ฐ์ฝ์ธ์ ๋ฉํ๋ง์คํฌ์ ์ถ๊ฐํ ์ ์๋๋ก ๊ตฌํํ์ต๋๋ค.
๋ฐ๋ณต์ ์ธ ํ๋ก์ธ์ค๋ฅผ ์ค์ด๊ณ ์ ์ง๋ณด์์ ํธ๋ฆฌํจ์ ์ํด ์ง์์ ํตํฉ๊ณผ ์ง์์ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถํ์์ต๋๋ค.
๊น ํ๋ธ์ก์ ์ด master ๋ธ๋์น๋ก push๋ code๋ฅผ ๊ฐ์งํ์ฌ ์์ฑํ ์คํฌ๋ฆฝํธ ์ค์ ํ์ผ์ ๋ฐ๋ผ jar ํ์ผ๋ก ๋น๋ํ ๋์ปค ์ด๋ฏธ์งํ ์ํต๋๋ค.
๋์ปค ์ด๋ฏธ์งํ๋ ๋์ปคํ์ผ์ ๋์ปค ์ด๋ฏธ์ง ์ ์ฅ์์ธ ๋์ปค ํ๋ธ๋ก push ๋ฉ๋๋ค.
push๊ฐ ์๋ฃ๋๋ฉด ec2 ์ธ์คํด์ค๊ฐ ํด๋น ๋์ปค ํ์ผ์ pull ํ๊ฒ ๋๋ฉฐ ์คํ์ค์ด์๋ ์คํ๋ง๋ถํธ ๋์ปคํ์ผ์ ์ ์ง -> ์ปจํ ์ด๋ ์ญ์ -> ์๋ก ๋ด๋ ค๋ฐ์ ๋์ปคํ์ผ ์คํ ์์ผ๋ก ์์ ์ ์งํํฉ๋๋ค.
nginx๋ฅผ ๋์ ํ์ฌ ๋ฌด์ค๋จ ๋ฐฐํฌ ํ๊ฒฝ์ ๊ตฌํํ์์ต๋๋ค.
- ์๋ก์ด ๋ฒ์ ์ ์ ํ๋ฆฌ์ผ์ด์
์ด ๋ฐฐํฌ๋๋ฉด ์ฌ์ฉํ์ง ์๋ ํฌํธ๋ฅผ ํ์ธํ์ฌ docker๋ก ๊ตฌ๋์ํต๋๋ค.
- ex) 8080ํฌํธ๊ฐ ์ฌ์ฉ์ค์ด๋ฉด 8081 / 8081๋ฒ ํฌํธ๊ฐ ์ฌ์ฉ์ค์ด๋ฉด 8080์ผ๋ก ๊ตฌ๋์ํต๋๋ค.
- ๊ตฌ๋๋ ์ฑ์ health ๋ฅผ ์ฒดํฌํ์ฌ ์๋ฒ์ ์ํ๋ฅผ ํ์ธํฉ๋๋ค.
- ์ ์ ๋ฐฐํฌ๊ฐ ํ์ธ๋๋ฉด nginx์ ๋ฆฌ๋ฒ์ค ํ๋ก์ ๋์์ ์ ๊ท ๋ฒ์ ์ ์ฑ์ ํฌํธ๋ก ๋ณ๊ฒฝํฉ๋๋ค.
- ์ฌ์ฉ์ค์ด๋ ์ปจํ ์ด๋์ ์ด๋ฏธ์ง๋ฅผ ์ญ์ ํ์ฌ ์๋ฒ ๊ต์ฒด๋ฅผ ๋ง๋ฌด๋ฆฌ ํฉ๋๋ค.
๋ธ๋ผ์ฐ์ ์ ์์ ํ ์ ์๊ณผ , ๋ธ๋ผ์ฐ์ ์ฌ์ด์ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ์๋๋ฅผ ๋๋นํด aws ACM์ธ์ฆ์๋ฅผ ๋ฐ์ SSL ์ ์ ์ฉํ์์ต๋๋ค. ๊ฐ๋น์์์ ๊ตฌ๋งคํ ๋๋ฉ์ธ๊ณผ aws Route53์ ์ด์ฉํด ๋๋ฉ์ธ์ ์ฐ๊ฒฐํ์์ต๋๋ค.