๐[ํฌํฌ์ฒด์ธ ์๊ฐ ๋ฐ ์์ฐ ์์]๐
https://youtu.be/9AmmoUADeQM
- ์๋น์ค ์๊ฐ
- ๊ธฐ์ ์คํ
- ๊ฐ๋ฐ ํ๊ฒฝ
- ํ๋ก์ ํธ ์งํ
- ํ๋ก์ ํธ ์ฐ์ถ๋ฌผ
- ํ์ ์๊ฐ
- ํ์ค ์๊ฐ :
๋ธ๋ก์ฒด์ธ
์ ํ์ฉํ ๋๋ฌผ ์๋ฃ ๊ธฐ๋ก ๊ด๋ฆฌ ๋ฐ ๊ถ๋ฆฌ ๋ณดํธ ํ๋ซํผ - ์๋น์ค ๋ช
: ํฌํฌ์ฒด์ธ
- For Paw Chain, ๋ฐ๋ฐ๋ฅ์ ๊ฐ์ง ๋๋ฌผ๋ค์ ์ํ ๋ธ๋ก์ฒด์ธ ๊ธฐ๋ฐ ์๋น์ค๋ผ๋ ์๋ฏธ
1) ํํ๋ฒ์ ๋ฒ์ ์ผ๋ก ์ง๋ฃ๊ธฐ๋ก์ ๋ฐ๊ธํ ์๋ฌด๊ฐ ์์
2) ์ ๊ธฐ๋๋ฌผ์ด ๊ณผ๊ฑฐ์ ์ด๋ค ์น๋ฃ๋ฅผ ๋ฐ์๋์ง ์ ์ ์์
3) ์ฃผ์ธ์ด ๋ฐ๋ ค๋๋ฌผ์ ์ง๋ฃ๊ธฐ๋ก์ ์ ์ ์์
4) ๋๋ฌผ๋ฑ๋ก์ (์ธ์์นฉ)์ ์๋ฌดํ
5) ์ค๋ณต ์น๋ฃ๋ก ์ธํ ์ ๊ธฐ๋๋ฌผ ๋๋ฌผ๊ถ ์นจํด
6) ์๋ฃ์ฌ๊ณ ๋ฐ์ ์ ์์ธ ํ์ ๋ถ๊ฐ๋ฅ
7) ๋ณ์ ์ด๋ ์ ๋ถํ์ํ ๊ฒ์ฌ ํ์
๋๋ฌผ๊ถ ๋ณด์ฅ
์ ํฉํ ์น๋ฃ๋ฅผ ๋ฐ๊ธฐ ์ด๋ ค์ด ์ ๊ธฐ๋๋ฌผ์ ์ํด ๊ฑด๊ฐ ์ํ๋ฅผ ๋น ๋ฅด๊ณ ์ ํํ๊ฒ ํ์ ํ์ฌ ๋๋ฌผ๊ถ์ ๋ณด์ฅ๋๋ฌผ๋ณดํธ์์ ํธ์์ฑ ์ฆ์ง
๋ณ์์ ๊ฐ์ง ์์๋ ๋ชจ๋ ๋ณดํธ์๊ฐ ๋ฐ๋ ค๋๋ฌผ์ ์ง๋ฃ ๊ธฐ๋ก์ ํ์ธํ ์ ์๋ ํธ์์ฑ ์ ๊ณต
๋ณ์์ ์ฎ๊ธธ ์ ์ด์ ์ ์ง๋ฃ๊ธฐ๋ก ํ์ธ ๊ฐ๋ฅํฌ๋ช ํ ์๋ฃ๊ธฐ๋ก
๋๋ฌผ์ ์๋ฃ ๊ธฐ๋ก ํฌ๋ช ์ฑ์ ๋ณด์ฅํ์ฌ ๋๋ฌผ๋ณ์์ ์ํ ํผํด๋ฅผ ์ค์ด๊ณ , ์ ์/๋ถ์ ์ ๊ฑฐ์ง ๊ฑด๊ฐ์ํ๋ก ์ธํ ํ์๋ฅ ์ ์ค์
๋๋ฌผ๋ณดํธ์
- ๋ฐ๋ฃ ๋๋ฌผ์ ์๋ฃ ๊ธฐ๋ก ํ์ ๊ฐ๋ฅ
- ์๋ฃ ์ฌ๊ณ ์ธ์ง ๊ฐ๋ฅ
- ๋ฐ๋ ค ๋๋ฌผ์ ์์ด๋ฒ๋ฆฐ ๊ฒฝ์ฐ, ์์ ์ ์ ๋ณด ๊ณต๊ฐ ๊ฐ๋ฅ
์์ฌ
- ๋ค๋ฅธ ๋ณ์์์ ์น๋ฃํ ๋๋ฌผ์ด๋ ์ ๊ธฐ ๋๋ฌผ์ ์๋ฃ ๊ธฐ๋ก ํ์ ๊ฐ๋ฅ
- ์ฑ์คํ ์๋ฃ ๊ธฐ๋ก์ ๋ฑ๋กํ ๊ฒฝ์ฐ, ๊ณ ๊ฐ์ผ๋ก๋ถํฐ ์ ๋ขฐ์ฑ ์ฆ๊ฐ
๋๋ฌผ
- ์ ๊ธฐ ๋๋ฌผ์ ์ฌ๊ฒ์ฌ ๋ฐฉ์ง ๋ฐ ์ ํฉํ ์น๋ฃ ๊ฐ๋ฅ
- ์ธ์์นฉ ์ฌ์ฉ๋ฅ ์ฆ๊ฐ
- ๋๋ฌผ์ ์ ๊ธฐ ๋น์จ ๊ฐ์
์
์ ์
- ์๋ฐฉ ์ ์ข ๋ฑ ์ฌ๊ธฐ ๋ฐฉ์ง
- ์ ๊ธฐ ๋๋ฌผ์ ์ ์ ์ฅ๋ ค
- ํซ์ต ์ด์ฉ๋ฅ ๊ฐ์
- ๋ณ๋ ํ์๊ฐ์ ์์ด ์นด์นด์ค ๊ณ์ ์ ํตํด ๋ก๊ทธ์ธํ ์ ์๋ค.
- ์ดํ ๋ฉ์ธํ์ด์ง๋ก ์ด๋ํ๋ค.
- ๋ฉ์ธํ์ด์ง์์๋ ๋๋ฌผ๋ฑ๋ก๋ฒํธ๋ฅผ ์ ๋ ฅํจ์ผ๋ก์จ ๋๋ฌผ ์ ๋ณด์ ์๋ฃ๋ด์ญ์ ์กฐํํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
- ํ๋ฉด์ ์๋ก ์คํฌ๋กค ์,
๋์ ๋ฐ๋ ค๋๋ฌผ
๋ชฉ๋ก์ ๋ณผ ์ ์๋ค.๋์ ๋ฐ๋ ค๋๋ฌผ
๋ชฉ๋ก์๋ ๋ด๊ฐ ์ง์ ํค์ฐ๋ ๋๋ฌผ ๋๋, ์๋ฃ๋ด์ญ์ ์ด๋ํ ์ ์๋ ๊ถํ์ ๋ถ์ฌ๋ฐ์ ๋๋ฌผ์ด ํฌํจ๋๋ค.- ์ ๋ถ api๋ฅผ ์ด์ฉํด ํด๋น ๋๋ฌผ์ ๊ธฐ๋ณธ ์ ๋ณด๋ฅผ ๊ฐ์ด ์กฐํํ๋ค.
- ์๋ฃ๋ด์ญ ์ด๋ ๊ถํ์ด ์๋ ์ ์ ๋ผ๋ฉด, ์๋ฃ๋ด์ญ ๋์ ์ ๊ธฐ๋๋ฌผ ๋ถ์ ๊ด๊ณ ๋ฅผ ๋ณด์ฌ์ค๋ค.
- ์๋ฃ๋ด์ญ ์ด๋ ๊ถํ์ด ์๋ ์ ์ ๋ผ๋ฉด, ์๋ฃ๋ด์ญ ๋ชฉ๋ก์ ํ์ธํ ์ ์๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก๋ ์์ฌ ๋๋ ํด๋น ๋๋ฌผ์ ์ฃผ์ธ๋ง์ด ๋๋ฌผ ์๋ฃ ๊ธฐ๋ก์ ์ด๋ํ ์ ์๋ค.
- ํ์ง๋ง ํด๋น ๋๋ฌผ์ ์ฃผ์ธ์ด ๋ค๋ฅธ ์ฌ๋์๊ฒ๋ ์๋ฃ ๊ธฐ๋ก์ ๋ณด์ฌ์ฃผ๊ณ ์ถ์ ๊ฒฝ์ฐ, ์ด๋ ๊ถํ์ ๋ถ์ฌํ ์ ์๋ค.
- ์ด๋ ๊ถํ์ ๋ค์ ๋บ์ ์๋ ์๋ค.
- ํค์ฐ๋ ์ ์ ๋๋ฌผ์ ๋ค๋ฅธ ์ฌ๋์๊ฒ ๋ถ์ ๋ณด๋ผ ๊ฒฝ์ฐ, ๋ถ์ํ๊ธฐ ๋ฒํผ์ ๋๋ฌ ์ฃผ์ธ์ ๋ณ๊ฒฝํ ์ ์๋ค.
- ํด๋น ๋๋ฌผ์ ์ฃผ์ธ์ด๋ผ๋ฉด, ๋๋ฌผ์ ์ถ๊ฐ์ ์ธ ์ ๋ณด๋ฅผ ์ง์ ์ ๋ ฅํ ์ ์๋ค.
- ์์ฌ์ด๊ฑฐ๋, ํด๋น ๋๋ฌผ์ ์ฃผ์ธ์ด๊ฑฐ๋, ๊ทธ ๋ฐ์ ์ด๋ ๊ถํ์ ๋ฐ๋ก ๋ถ์ฌ๋ฐ์ ์ฌ๋์ด๋ผ๋ฉด, ํด๋น ๋๋ฌผ์ ์๋ฃ ๊ธฐ๋ก๋ค์ ์กฐํํ ์ ์๋ค.
- ๋๋ฌผ๋ง๋ค 1๊ฐ์ ์ปจํธ๋ํธ๊ฐ ๋ธ๋ก์ฒด์ธ ๋คํธ์ํฌ์ ๋ฐฐํฌ๋๋ค.
- ์๋ฃ ๊ธฐ๋ก์ ํด๋น ๋๋ฌผ์ ์ปจํธ๋ํธ์ ์ ์ฅ๋๋ค.
- ์ปจํธ๋ํธ์ ๋ฐฐํฌ ๋ฐ ์กฐํ, ์์ฑ์ ๋ชจ๋ Web3j๋ฅผ ํตํด ์ด๋ฃจ์ด์ง๋ค.
- 10์๋ฆฌ๊ฐ ๋๋ ๊ธด ๋๋ฌผ๋ฑ๋ก๋ฒํธ๋ฅผ ๋งค๋ฒ ๊ธฐ์ตํ๊ธฐ ์ด๋ ค์ด ์ฌ์ฉ์๋ค์ ์ํด, QR ์ด๋ฏธ์ง๋ฅผ ์ ๊ณตํ๋ค.
- QR ์ด๋ฏธ์ง๋ ํด๋ํฐ ๊ฐค๋ฌ๋ฆฌ์ ์ ์ฅํ ์ ์๋ค.
- ๋ณธ์ธ์ด ์์ฌ์์ ์ธ์ฆํ๋ฉด, ์์์ฌ๋ก์ ๋๋ฌผ์ ์๋ฃ๋ด์ญ์ ์์ฑํ ์ ์๋ ๊ถํ์ด ๋ถ์ฌ๋๋ค.
- ๋ณธ์ธ์ด ์์ฌ์์ ์ธ์ฆํ๋ ๋ฐฉ๋ฒ์ ๋ณด๊ฑด๋ณต์ง๋ถ์ ์๋ฃ์ธ๋ฉดํ์ ๋ณด์กฐํ api๋ฅผ ์ด์ฉํ๋ค.
- ๊ธฐ๋ฅ: ์ง๊ฐ ์์ฑ, ์ปจํธ๋ํธ ๋ฐฐํฌ, ํธ๋์ญ์ ์ ์ก
- ๊ตฌํ: EC2 ์๋ฒ์์ geth๋ฅผ ์ด์ฉํ์ฌ gensis.json์ผ๋ก ์ด๊ธฐํํ๋ ๋ฐฉ์์ผ๋ก ๊ฐ๋ฅํ ๋คํธ์ํฌ ๊ตฌ์ฑ
- ๊ธฐ๋ฅ: ์ด๋ฏธ์ง๋ฅผ ๋ถ์ฐ ๋คํธ์ํฌ์ ์ ์ฅํ๊ณ , ๋ฐํํ๋ ํด์ฌ๊ฐ์ ์ด์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์กฐํ
- EC2 ์๋ฒ์ ์กด์ฌํ๋ Docker ์์ kudo ipfs ์คํ
- ์ธ์ ์ด๋์๋ ์๋ฃ๊ธฐ๋ก์ ํ์ธํ ์ ์๋๋ก ๋ชจ๋ฐ์ผ ํ๊ฒฝ์์์ ์๋น์ค ์ ํ
- ํธํ๊ฒ ๋ฑ๋ก๋ฒํธ๋ฅผ ๊ณต์ ํ๊ธฐ ์ํด QR ๊ธฐ๋ฅ์ ์ ๊ณต
- Server:
AWS EC2
- Ubuntu:
20.04
- Docker:
23.0.2
- Nginx:
1.18.0
- Redis:
7.0.10
- MariaDB:
10.3.38
- OpenJDK:
11
- Build Tool:
Gradle
- Spring Framework:
2.7.9
- Spring Dependency-management:
1.0.15.RELEASE
- Kotlin:
1.8.0
- Java:
11
- Compile SDK:
33
- Room Runtime:
2.3.0
- Palette:
1.0.0
- navigation-safe-args-gradle-plugin:
2.5.3
- retrofit :
2.6.4
- QR:
3.4.1
- glide:
4.12.0
- room-runtime:
2.3.0
- kakao.sdk: '2.13.0'
- Geth:
1.11.5
- web3j:
4.9.7
- Solidity:
latest
- InteliJ:
2022.3
- Android Studio:
2022.1
- Emulator:
Pixel 2 XL
- ํ์ ๊ด๋ฆฌ:
GitLab
- ์ด์ ๊ด๋ฆฌ:
JIRA
- ์ปค๋ฎค๋์ผ์ด์
:
Notion
- ํ์ผ ์ ์ฅ:
Spring Cloud GCP Storage
- UI/UX ๋์์ธ:
Figma
์๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ํ๋ก์ ํธ๋ฅผ ์คํํ ์ ์์ต๋๋ค.
- Github์ Repository๋ฅผ cloneํฉ๋๋ค.
$ git clone [์ฐ๋ฆฌ ์ฃผ์]
- APK ํ์ผ ์์ฑ์ ์ฐธ๊ณ ํ์ฌ android ํด๋๋ฅผ APK๋ก ์์ฑํ์ฌ ์๋๋ก์ด๋ ํ๊ฒฝ์ ์ค์นํฉ๋๋ค.
- Android Studio์
Build > Generate Signed Bundle / APK ...
๋ฅผ ์ ํํฉ๋๋ค. - Create new๋ฅผ ์ ํํฉ๋๋ค.
- Key Store Path๋ฅผ ์ค์ ํฉ๋๋ค.
Alias: ๊ธฐ๋ณธ
Password: (6์) / Confirm
Certificate: ์ฑ์ ๋ํ ๋ฉํ ๋ฐ์ดํฐ ๋ฃ๊ธฐ
- release ์ ํํฉ๋๋ค.
- ์นด์นด์ค ๋ก๊ทธ์ธ ๊ด๋ จ ๋ด์ฉ์ ์ค์ ํฉ๋๋ค.
- openssl๋ก release key์ debug key๋ฅผ ๋ชจ๋ ๋ฐ๊ธ ๋ฐ์ ํ ์นด์นด์ค ๋๋ฒจ๋กํผ์ ๋ฑ๋กํฉ๋๋ค.
- ์ฐธ๊ณ : https://ranseo.tistory.com/m/386
- err_unknown_url_scheme ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ AndroidManifest.xml์์ Native app key๋ฅผ ๋ฃ๊ณ ์๋์ ์ค์ ์ ์ถ๊ฐํฉ๋๋ค.
<activity
android:name="com.kakao.sdk.auth.AuthCodeHandlerActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Redirect URI: "kakao${NATIVE_APP_KEY}://oauth" -->
<data android:host="oauth"
android:scheme="kakaoa๋ณธ์ธ์นด์นด์คnative key" />
</intent-filter>
</activity>
- AWS EC2 ์ค์ ์ ์ฐธ๊ณ ํ์ฌ AWS EC2์ ์ ์ํฉ๋๋ค.
- Jenkins ์ค์ ์ ์ฐธ๊ณ ํ์ฌ Back-end ์ด๋ฏธ์ง๋ฅผ ์์ฑํฉ๋๋ค.
- IPFS Image๋ฅผ ์ค์นํ๊ณ ์คํํฉ๋๋ค.
- ๋คํธ์ํฌ ์ค์ ์ ์ฐธ๊ณ ํ์ฌ ๋ธ๋ก์ฒด์ธ private ๋คํธ์ํฌ๋ฅผ ๊ตฌ์ถํ๊ณ ์คํํฉ๋๋ค.
- ์ ์ฅ์ ์ค์ ์ ์ฐธ๊ณ ํ์ฌ MariaDB, Redis, GCP๋ฅผ ์ค์นํ๊ณ ์๋ฒ ์ฃผ์์ ์ฐ๊ฒฐํฉ๋๋ค.
- ์ฒจ๋ถํ ๋คํ ๋ฐ์ดํฐ ํ์ผ์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์์ฑํฉ๋๋ค.
- ์ค์นํ APK๋ฅผ ์คํํฉ๋๋ค.
remote host: j8a207.p.ssafy.io
username: ubuntu
.pem: ์ฒจ๋ถ ํ์ผ
- Repository URL์ ํตํด Git ํ๋ก์ ํธ๋ฅผ ์ฐ๊ฒฐํฉ๋๋ค.
- Git์ WebHook ์ค์ ์ ํตํด release branch์ push event๋ฅผ ๊ฐ์งํ๋ฉด ์๋์ผ๋ก ํ๋ก์ ํธ๋ฅผ ๋ฐฐํฌํ๋๋ก ์ค์ ํฉ๋๋ค.
- Shell Script๋ฅผ Jenkins์ Build Steps์ Executeํ์ฌ ์๋์ผ๋ก ๋น๋ํ๋๋ก ์ค์ ํฉ๋๋ค.
cd backend/
chmod +x ./gradlew
./gradlew clean build
- Shell Script๋ฅผ Jenkins์ Build Steps์ Executeํ์ฌ Docker Image๋ฅผ ์๋์ผ๋ก ์์ฑํ๋๋ก ์ค์ ํฉ๋๋ค.
docker build -t backend ./backend
if (docker ps | grep backend) then docker stop backend; fi
docker run -d --rm --name backend --network my-network -p 8080:8080 backend
docker image prune -f
- ํ๋ก์ ํธ ๋ด๋ถ์ Dockerfile์ ์์ฑํฉ๋๋ค.
# open jdk java 11 ๋ฒ์ ํ๊ฒฝ
FROM openjdk:11-jdk
# gradle ๋น๋ ์ jar ํ์ผ ์์ฑ ๊ฒฝ๋ก
ARG JAR_FILE=./build/libs/*.jar
# JAR_FILE์ ๋ฉ์ธ ๋๋ ํ ๋ฆฌ์ ๋ณต์ฌ
COPY ${JAR_FILE} app.jar
# 8080 port Open
EXPOSE 8080
# ์์คํ
์ง์
์
ENTRYPOINT ["java","-jar","app.jar"]
- IPFS Docker Image๋ฅผ ์ค์นํฉ๋๋ค.
docker pull ipfs/go-ipfs
- Run ๋ช ๋ น์ด๋ฅผ ํตํด IPFS Image๋ฅผ ์คํํฉ๋๋ค.
docker run \
-d \
--restart always \
--name ipfs-node \
-v /data/ipfs:/data/ipfs \
-v /data/ipfs-staging:/staging \
-p 8001:8080 \
-p 4001:4001 \
-p 5001:5001 \
--network my-network \
ipfs/go-ipfs:latest \
docker exec ipfs-node ipfs config Addresses.API 127.0.0.1/8001
- Geth๋ฅผ ์ค์นํฉ๋๋ค.
sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get install
- ๋ธ๋ก์ฒด์ธ ๋คํธ์ํฌ ํด๋๋ฅผ ์์ฑ ํ ์ด๋ํฉ๋๋ค.
mkdir eth
cd eth
- ether๋ฅผ ์ฑ๊ตดํ ๊ณ์ ์ ์์ฑํฉ๋๋ค.
geth --datadir . account new
- genesis.json ํ์ผ์ ์์ฑํฉ๋๋ค.
{
"config": {
"chainId": 7167,
"homesteadBlock": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0
},
"difficulty": "0x10",
"coinbase": "์ง๊ฐ์ฃผ์",
"gasLimit": "9999999",
"alloc": {},
"extraData": "",
"nonce": "0xdeadbeefdeadbeef",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": "0x00"
}
- ๋คํธ์ํฌ๋ฅผ ์ด๊ธฐํํฉ๋๋ค.
geth --datadir . init genesis.json
- ์ด๊ธฐํํ ๋คํธ์ํฌ๋ฅผ ์คํํฉ๋๋ค.
geth --datadir . --port 30303 --http --http.addr "0.0.0.0" --http.port 8545 --http.corsdomain "*" --networkid 7167 --http.api "admin,db,eth,debug,miner,net,shh,txpool,personal,web3" --unlock 0 --allow-insecure-unlock --mine --miner.threads 1 --miner.etherbase "์ง๊ฐ์ฃผ์" console 2>>./geth.log
- application.properties์ ๊ตฌ์ถํ ๋คํธ์ํฌ๋ฅผ ์ค์ ํฉ๋๋ค.
web3.network.address=[blockchain private network address]
web3.network.chainId=[blockchain private network chain id]
web3.walletPrivateKey=[private key of server's wallet]
- AWS EC2 ํ๊ฒฝ์ MariaDB๋ฅผ ์ค์นํ๊ณ MariaDB์ root ๊ณ์ ์ผ๋ก ํ๋ก์ ํธ์ DB๋ฅผ ์์ฑํฉ๋๋ค. ํ์์ ๋ฐ๋ผ ํ๋ก์ ํธ๋ง์ ๊ณ์ ์ ์์ฑํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
$ sudo apt=get install mariadb-server
$ sudo systemctl start mariadb
$ sudo systemctl status mariadb
$ sudo mysql -u root
MariaDB [mysql]> CREATE DB [DB ์ด๋ฆ]
- application.properties์ DB ์ฃผ์๋ฅผ MariaDB๊ฐ ์ค์น๋ AWS EC2๋ก, JPA ์ค์ ์ create๋ก ๋ณ๊ฒฝํ๊ณ ํ๋ก์ ํธ๋ฅผ ์คํํฉ๋๋ค.
spring.datasource.url=jdbc:mariadb://[DB ์ฃผ์]/[DB ์ด๋ฆ]
spring.datasource.username=[DB ๊ณ์ ์ด๋ฆ]
spring.datasource.password=[DB ๊ณ์ ๋น๋ฐ๋ฒํธ]
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.jpa.hibernate.ddl-auto=create
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
- application.properties์ JPA ์ค์ ์ update๋ก ๋ณ๊ฒฝํ๊ณ ์ฒจ๋ถํ ๋คํ๋ฐ์ดํฐ sql์ ์คํํฉ๋๋ค.
spring.jpa.hibernate.ddl-auto=update
- AWS EC2 ํ๊ฒฝ์ Redis๋ฅผ ์ค์นํ๊ณ ๋น๋ฐ๋ฒํธ๋ฅผ ์ค์ ํฉ๋๋ค.
$ sudo apt-get install redis-server
$ sudo vi /etc/redis/redis.conf
bind 0.0.0.0
daemonize yes // default == no
logfile /var/log/redis_6379.log
dir /var/redis/6379
$ sudo service redis-server start
$ redis-cli
redis 127.0.0.1:6379> CONFIG SET requirepass "๋น๋ฐ๋ฒํธ"
redis 127.0.0.1:6379> AUTH "๋น๋ฐ๋ฒํธ"
$ sudo systemctl restart mariadb
- application.properties์ Redis ์ฃผ์๋ฅผ Redis๊ฐ ์ค์น๋ ์ฃผ์๋ก, ๋น๋ฐ๋ฒํธ๋ฅผ ์ง์ ์ค์ ํ ๋น๋ฐ๋ฒํธ๋ก ๋ณ๊ฒฝํฉ๋๋ค.
spring.redis.host=[Redis ์ค์ ์ฃผ์]
spring.redis.port=[Redis ์ค์ ํฌํธ]
spring.redis.password=[Redis ์ค์ ๋น๋ฐ๋ฒํธ]
- GCP ๊ณต์ ์ฌ์ดํธ์์ ํ๋ก์ ํธ์ ์ฌ์ฉํ Storage๋ฅผ ์์ฑํ๊ณ , Storage์ ์ ๋ณด๋ฅผ json ํ์ผ์ ํตํด ํ๋ก์ ํธ์ ์ค์ ํฉ๋๋ค.
spring.cloud.gcp.credentials.location=classpath:[json ํ์ผ ์์น]
spring.cloud.gcp.storage.project-id=[GCP ์ค์ ID]
spring.cloud.gcp.storage.bucket=bucket-img-id=[GCP ์ค์ ID]
{
"type": "service_account",
"project_id": "project_id",
"private_key_id": private_key_id",
"private_key": "private_key",
"client_email": "client_email",
"client_id": "client_id",
"auth_uri": "auth_uri",
"token_uri": "token_uri",
"auth_provider_x509_cert_url": "auth_provider_x509_cert_url",
"client_x509_cert_url": "client_x509_cert_url"
}
2023.02.20(์) ~ 2023.04.07(๊ธ) (47์ผ๊ฐ ์งํ)
SSAFY 8๊ธฐ 2ํ๊ธฐ ํนํ ํ๋ก์ ํธ
๋งค์ฃผ ์์์ผ ์ค์ ํ์์์ ์ฐจ์ฃผ์ ์งํ๋์ด์ผ ํ ๊ฒ๋ค์ ์ ๋ฆฌํ๊ณ ๋ฐฑ๋ก๊ทธ์ ๋ฑ๋กํ์ต๋๋ค. ๊ธ์ฃผ์ ์๋ฃํ์ง ๋ชปํ ์ด์๋, ์์ผ๋ก ์งํํ ์ด์๋ค์ ์ถ๊ฐํ์ต๋๋ค.
์ํฝ(epic)
์ ๊ตฌํํ๊ณ ์ ํ๋ ๊ธฐ๋ฅ์ ๊ธฐ์ค์ผ๋ก ๊ตฌ์ฑํ์์ต๋๋ค. (์: ๊ถํ ๊ด๋ฆฌ, ๋ธ๋ก์ฒด์ธ ๋ฑ)
์ค์ง์ ์ธ ์์
๊ฒฐ๊ณผ๋ฌผ์ด ๋์ค๋ ์
๋ฌด๋ ์์
(task)
์ผ๋ก, ๊ทธ๋ ์ง ์์ ์
๋ฌด๋ ์คํ ๋ฆฌ(story)
๋ก ํ ๋นํ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก ๋ด๋น์์ ์คํ ๋ฆฌ ํฌ์ธํธ ์ค์ , ํ์ฑ ์คํ๋ฆฐํธ์์ ํ์ฌ ์ ๋ฌด์ ์งํ์ ๋ฐ๋ผ ํ ์ผ, ์งํ์ค, ์๋ฃ ์ค์๊ฐ์ผ๋ก ๋ฐ์ํ๋ ๊ฒ์ ๊ฐ์ฅ ์ค์ํ๊ฒ ์๊ฐํ์ต๋๋ค.
ํ์๋ค์ด ๋ชจ๋ ๊ณต์ ํด์ผํ ์๋ฃ ๋ฐ ๋งํฌ๋ฅผ ๋ ธ์ ์ ์ ๋ฆฌํ์ต๋๋ค. API ์ค๊ณ, ERD, ์ปจ๋ฒค์ ์ ๊ฐ์ด ์ฌ๋ฌ๋ฒ ๋ค์ ๋ด์ผํ๊ณ ์ค์ํ ์ ๋ณด๋ค์ ๊ณต์ ํ์์ต๋๋ค.
๋ฌ๋ ฅ์ ๋ง๋ค์ด ํ์ฉํจ์ผ๋ก์จ ์ค์ํ ์ผ์ ์ ์์ง ์๊ณ ์ฑ๊ธธ์ ์๊ฒ๋ ํ์์ต๋๋ค.