π¦π» μΈλμ π¨π»βπ¦³μΈλλ₯Ό μ΄μ΄μ£Όλ λ°λ»ν μ ν π
λλ§μ μμ μλλ
- π€Β μλλκ° λ¬΄μμΈκ°μ?
- π§π»βπ»Β μ΄λ€ μλΉμ€μΈκ°μ?
- π¬Β ν΅μ¬ κΈ°λ₯ κ°λ΅ν μ€λͺ
- π‘Β ν΅μ¬ κΈ°λ₯ μμΈ μ€λͺ
- π§βπ» κ΄λ¦¬μ λ° κ°λ°μ νΈμκΈ°λ₯
- π©βπ©βπ§βπ§ νμ ν¨μ¨
- π λλ ν 리 ꡬ쑰
[μ£Όμ: λλ―Έλ°μ΄ν° μ μ λ μΉ΄μΉ΄μ€λ©μμ§κ° μ€μ§ μμ΅λλ€]
λΉλ°λ²νΈ 1234
https://sinitto.site/swagger-ui/index.html
https://sinitto.site/admin/login
μ΄λ©μΌ admin@kakao.com
λΉλ°λ²νΈ admin123
https://join.slack.com/t/sinitto/shared_invite
https://github.com/kakao-tech-campus-2nd-step3/Team8_FE/tree/Evaluation
μλμ λ¨κ³λ₯Ό λ°λΌ νλ‘μ νΈλ₯Ό μ€νν μ μμ΅λλ€.
μ°λΆν¬ κΈ°μ€μΌλ‘ μμ±λμμ΅λλ€.
- Java 21
- Gradle
- Redis
- Git
GitHubμμ νλ‘μ νΈλ₯Ό ν΄λ‘ ν©λλ€
git clone https://github.com/kakao-tech-campus-2nd-step3/Team8_BE.git
cd Team8_BE
application-dev.properties
Β νμΌμ μλμ κ°μ μ€μ μ μΆκ°ν΄μΌ ν©λλ€:
- Kakao API μ€μ : Kakao λ‘κ·ΈμΈ λ° κ²°μ URL κ΄λ ¨ μ 보
- Redis μ€μ : Redis μλ² μ°κ²° μ 보
- MySQL μ€μ : λ°μ΄ν°λ² μ΄μ€ μ°κ²° μ 보
- JWT μ€μ : λΉλ° ν€ λ± μΈμ¦ κ΄λ ¨ μ 보
- SSL μ€μ : μλ² SSL μΈμ¦μ κ²½λ‘ λ° μ€μ
- Slack μ€μ : μλ¦Ό κ΄λ ¨ μ€μ
- Admin μ€μ : μ΄λλ―Ό κ³μ μ€μ
application-dev.properties
Β μμ:
# Kakao API μ€μ
kakao.clientId=YOUR_KAKAO_CLIENT_ID
kakao.devRedirectUri=YOUR_LOCAL_REDIRECT_URI
kakao.redirectUri=YOUR_PROD_REDIRECT_URI
kakao.frontUri=YOUR_FRONT_URI
kakao.Pay-url=YOUR_KAKAO_PAY_URL
# JWT μ€μ
jwt.secret=YOUR_JWT_SECRET_KEY
# Redis μ€μ
spring.data.redis.host=YOUR_REDIS_HOST
spring.data.redis.port=YOUR_REDIS_PORT
spring.data.redis.password=YOUR_REDIS_PASSWORD
# MySQL μ€μ
spring.datasource.url=YOUR_MYSQL_URL
spring.datasource.username=YOUR_DB_USERNAME
spring.datasource.password=YOUR_DB_PASSWORD
spring.jpa.hibernate.ddl-auto=update
# SSL μ€μ
server.ssl.key-store=YOUR_SSL_KEYSTORE_PATH
server.ssl.key-store-password=YOUR_KEYSTORE_PASSWORD
server.ssl.key-store-type=PKCS12
# Slack μ€μ
slack.notice.webhook.url=YOUR_SLACK_WEBHOOK_URL
slack.charge.request.url=YOUR_SLACK_CHARGE_REQUEST_URL
slack.withdraw.request.url=YOUR_SLACK_WITHDRAW_REQUEST_URL
# Admin μ€μ
admin.adminEmail=YOUR_ADMIN_EMAIL
admin.adminPassword=YOUR_ADMIN_PASSWORD
# κΈ°ν μ€μ
kakao.bank-name=YOUR_BANK_NAME
kakao.account-number=YOUR_ACCOUNT_NUMBER
kakao.name=YOUR_KAKAO_NAME
kakao.front-uri-without-https=YOUR_FRONT_URI_WITHOUT_HTTPS
νλ‘μ νΈ μμ‘΄μ±μ μ€μΉν©λλ€.
./gradlew build
Redis μλ²λ₯Ό μ€νν©λλ€.
redis-server
μ ν리μΌμ΄μ μ μ€ννλ λ°©λ²μλ λ κ°μ§κ° μμ΅λλ€.
-
Gradleλ‘ μ ν리μΌμ΄μ μ€ν
./gradlew bootRun
-
JAR νμΌμ μ€ν
./gradlew bootJar java -jar build/libs/Team8_BE-0.0.1-SNAPSHOT.jar
Frontend | Frontend | Frontend |
---|---|---|
κΉκ°λ―Ό | μ μ§μ | μ μ λ |
Backend | Backend | Backend | Backend |
---|---|---|---|
μ μ±ν | μ΄μ§νΈ | μ΄λν | κΉμμ |
Note
λ°±μλ λ΄λΆ μμ€ν¬λ¦½νΈ λͺ¨μ https://curse-plastic-d90.notion.site/3ce05a49e06046469bde14c12b8b9c00
βμλλβλ μ΄λ₯΄μ μ λ»νλ βμλμ΄βμ λΉλ° μΉκ΅¬λ₯Ό λ»νλ βλ§λλβλ₯Ό ν©μΉ λ¨μ΄λ‘, λμ§νΈ μλΉμ€λ₯Ό μ΄μ©νκΈ° μ΄λ €μ΄ μ΄λ₯΄μ λ€κ³Ό λμ§νΈ μλΉμ€λ₯Ό μ΄μ©νλλ° μ΅μν μ μ μΈλλ₯Ό μ΄μ΄μ£ΌκΈ° μν βμλλβλΌλ λͺ μΉμ μ¬μ©ν΄λ³΄μμ΅λλ€.
λν βμλλβλ μΈλ κ°μ μν΅μ κ°μ‘°νλ©°, μλ‘μ νμλ₯Ό μ΄ν΄νκ³ μ§μνλ κ΄κ³λ₯Ό νμ±νκ³ μ νλ μ·¨μ§λ₯Ό λ΄κ³ μμ΅λλ€.
κ³Όκ±°μλ μλμ΄λ€μ΄ μ νλ₯Ό ν΅ν΄ λ°°λ¬ μ£Όλ¬Έμ΄λ μλΉμ€ μ΄μ©μ λΉκ΅μ μ½κ² ν μ μμμ΅λλ€. κ·Έλ¬λ μ€λ§νΈν°μ΄ λ°λ¬ν νμ¬, λλΆλΆμ μλΉμ€κ° μ€λ§νΈν° μ ν리μΌμ΄μ κΈ°λ°μΌλ‘ μ 곡λκ³ μμ΄, μλμ΄λ€μ΄ μ΄λ¬ν λμ§νΈ μλΉμ€λ₯Ό μ΄μ©νλ λ° λ§μ μ΄λ €μμ κ²ͺκ³ μμ΅λλ€.
μ€μ λ‘ μ ν¬ μ‘°μ μ€ ν λΆμ ν μλ²μ§κ»μλ μ€λ§νΈν° μ¬μ©μ μ΄λ €μμ λλΌμ ¨κ³ , μ£Όλ‘ μ‘°μλΆλ€μκ² μ νλ₯Ό νμ¬ λμμ μμ²νμ ¨μ΅λλ€. μ΄λ¬ν λ¬Έμ μ μ λ°νμΌλ‘ μ ν¬λ βμ΄λ₯΄μ λ€μ΄ μμ μ μμ£Ό μ¬μ©νμλ μ νλ₯Ό ν΅ν΄ λμ§νΈ μλΉμ€λ₯Ό μ½κ² μ΄μ©ν μλ μμκΉ?β λΌλ μκ°μ νκ² λμκ³ , μ΄λ₯Ό βμλλβ μλΉμ€μ ν΅μ¬ κΈ°λ₯μΌλ‘ μ리 μ‘κ² λμμ΅λλ€.
μ΄ μλΉμ€λ μ΄λ₯΄μ λ€μ΄ λ³΄λ€ μ½κ² λμ§νΈ μλΉμ€λ₯Ό μ΄μ©ν μ μλλ‘ λλ λμμ, μ μ μΈλκ° κ·Έλ€κ³Ό μν΅νκ³ μ§μν μ μλ κΈ°νλ₯Ό μ 곡νκ³ μ ν©λλ€.
βμλλβλ ν¬κ² λ κ°μ§μ ν΅μ¬ κΈ°λ₯μ΄ μμ΅λλ€.
μ΄λ₯΄μ λ€μ΄ μ ν ν ν΅μΌλ‘ λμ§νΈ μλΉμ€λ₯Ό μ΄μ©ν μ μκ² ν©λλ€.
μ΄ μλΉμ€λ₯Ό μννκ² μ΄μ©ν μ μλλ‘ λ³΄νΈμλ μ¬μ μ μλλ μλΉμ€μ μλμ΄λ₯Ό λ±λ‘νκ³ , μλμ΄κ° μμ²ν λ΄μ©μ΄ λ΄κΈ΄ κ°μ΄λλΌμΈμ μ 곡ν©λλ€.
νμ μ 무 λ±μ νλμΌλ‘ μΈν΄ μλμ΄λΆλ€κ³Ό μ°λ½ν μκ°μ΄ λΆμ‘±ν 보νΈμλ€μ μν μλΉμ€μ λλ€.
보νΈμλ μ¬μ μ μΉμ¬μ΄νΈμ μλΆμ ν μλΉμ€λ₯Ό μ΄μ©ν κΈ°κ°, μκ°λ, μ ν μκ° λ° μ νλ‘ νμΈνμΌλ©΄ νλ λ΄μ©μ μμ±νκ³ , μλλλ ν΄λΉ μμ²μ¬νμ νμΈν ν μλ½ λ²νΌμ λλ¬ μλΆ μ ν μλΉμ€λ₯Ό μννκ² λ©λλ€.
λ‘κ·ΈμΈ
βμΉ΄μΉ΄μ€ν‘ λ‘κ·ΈμΈβ λ²νΌμ λλ¬ λ‘κ·ΈμΈμ μ§νν©λλ€. μ΄μ μ λ‘κ·ΈμΈμ ν μ μ΄ μμ κ²½μ° λ°λ‘ λ‘κ·ΈμΈμ΄ μλ£λλ©°, μ²μ μ΄μ©ν κ²½μ° νμκ°μ μ°½μΌλ‘ μ΄λνκ² λ©λλ€.
νμκ°μ
μ¬μ©μλ κ°μ μ νμΈ βμλλβμ β보νΈμβ μ€ ν κ°μ§ μ νμ μ νν©λλ€.
μ¬κΈ°μ βμλλβλ μλμ΄μ λμ§νΈ μλΉμ€λ₯Ό μννλ μ¬λμ΄λ©°, β보νΈμβλ λμ§νΈ μλΉμ€λ₯Ό νμλ‘ νλ μλμ΄λ₯Ό λ±λ‘νλ μ¬λμ λλ€.
μ¬μ©μλ κ°μ μ νμ μ νν ν μ΄λ¦ λ° μ°λ½μ²λ₯Ό μ λ ₯νκ³ , μλμ μμ½μλ₯Ό μ½μ ν βμμ½μμ λ΄μ©μ λμν©λλ€βλ₯Ό 체ν¬ν νμ βκ°μ νκΈ°β λ²νΌμ λλ¬ νμκ°μ μ μλ£ν©λλ€.
ν¬μΈνΈ μΆ©μ (보νΈμ)
β보νΈμβλ ν¬μΈνΈλ₯Ό μΆ©μ νμ¬ μλμ΄κ° μ 곡λ°λ μλΉμ€μ κ°μ μ 곡ν©λλ€.
βμΆ©μ νκΈ°β λ²νΌμ λλ₯Έ ν, μΆ©μ κΈμ‘μ μ λ ₯νλ©΄ μΆ©μ μμ²μ΄ μλ£λλ©°, μ΄λ¬ν μμ²μ κ΄λ¦¬μμκ² μ λ¬λ©λλ€.
κ·Έ ν μΉ΄μΉ΄μ€ν‘μ βλμκ² λ³΄λΈ λ©μμ§βλ₯Ό νμΈνμ¬ κΈμ‘μ μ κΈν μνκ³μ’μ μ κΈμλͺ μ νμΈνκ³ , ν΄λΉ μμμ λ§μΆμ΄ μ κΈμ μ§νν©λλ€.
κ΄λ¦¬μλ μ κΈ λ΄μμ νμΈν ν ν¬μΈνΈλ₯Ό μ§κΈν©λλ€.
ν¬μΈνΈ μΆκΈ (μλλ)
βμλλβλ μ½λ°± μλΉμ€ λ° μλΆμ ν μλΉμ€λ₯Ό ν΅ν΄ λ°μ ν¬μΈνΈλ₯Ό νκΈμΌλ‘ νμ ν μ μμ΅λλ€.
μ΅μ 5000ν¬μΈνΈ μ΄μμ΄ μμ΄μΌ μΆκΈμ΄ κ°λ₯νλ©°, μΆκΈν ν¬μΈνΈλ₯Ό μ λ ₯ν ν, βμΆκΈ μ μ²β λ²νΌμ λλ¬ μΆκΈ μμ²μ κ΄λ¦¬μμκ² μ μ‘ν©λλ€.
κ΄λ¦¬μλ μ΄λ₯Ό νμΈν ν, λ±λ‘λ κ³μ’λ²νΈλ‘ μμλ£λ₯Ό μ μΈν κΈμ‘μ μ‘κΈν©λλ€.
μλμ΄ λ±λ‘ (보νΈμ)
β보νΈμβλ λμ§νΈ μλΉμ€λ₯Ό μ΄μ©ν μλμ΄λ₯Ό λ±λ‘ν©λλ€. λ§μ΄νμ΄μ§μ βμλμ΄ λ±λ‘νκΈ°βλ²νΌμ λλ¬ μλμ΄λ₯Ό λ±λ‘ν©λλ€.
μλμ΄λ₯Ό λ±λ‘νκΈ° μν΄ μλμ΄μ μ±ν¨ λ° μ νλ²νΈλ₯Ό μ λ ₯ν΄μΌ ν©λλ€.
κ°μ΄λλΌμΈ λ±λ‘ (보νΈμ)
β보νΈμβλ μλμ΄λ₯Ό λ±λ‘ν ν, κ° λͺ©λ‘μ λν κ°μ΄λλΌμΈμ λ±λ‘νμ¬μΌ ν©λλ€.
νμ νΈμΆνκΈ°
, μμ λ°°λ¬ μ£Όλ¬ΈνκΈ°
, λ³μ μ μ λν
,
μ¬ν λ° λ¬Έν μν μμ½ λν
μ λν κ°μ΄λλΌμΈμ μΆκ°ν μ μμΌλ©°, κ°μ΄λλΌμΈ
μ λͺ© λ° κ°μ΄λλΌμΈ λ΄μ©μ μ
λ ₯νμ¬μΌ ν©λλ€.
βμλλβκ° μ΄ λ΄μ©μ νμΈν ν λμ§νΈ μλΉμ€λ₯Ό μννκΈ° λλ¬Έμ, κ°λ₯ν λ΄μ©μ μμΈν μ μ΄μΌ μν ν μλΉμ€ μ§νμ΄ κ°λ₯ν©λλ€.
μ νλ₯Ό ν΅ν λ±λ‘ (μλμ΄)
βμλμ΄βλ λ©μΈ νμ΄μ§μ μ νμλ λ²νΈλ‘ μ νλ₯Ό νμ¬ μ½λ°± μλΉμ€λ₯Ό μμ²ν©λλ€. λ±λ‘μ΄ μ±κ³΅νμ κ²½μ° βκ°μ¬ν©λλ€. μ μλ§ κΈ°λ€λ €μ£ΌμΈμ.β λΌλ κΈ°κ³μμ΄ λ€λ¦¬λ©°, βμλλβκ° μμ²μ μλ½ν λκΉμ§ κΈ°λ€λ¦¬κ³ μμΌλ©΄ λ©λλ€.
μ½λ°± μμ² νμΈ (μλλ)
βμλλβλ μλμ΄κ° μμ²ν μ½λ°± μλΉμ€μ 리μ€νΈλ₯Ό νμΈν μ μμ΅λλ€. μ¬λ¬ μμ²λ€ μ€ νλλ₯Ό μ ννμ¬ μμΈν λ΄μ©μ νμΈν μ μμ΅λλ€.
μ½λ°± μμ² μλ½ & μν (μλλ)
βμλλβλ μλμ΄κ° μμ²ν μ½λ°± μλΉμ€μ 리μ€νΈ μ€ νλλ₯Ό μ ννμ¬ βμμ² μμΈνμ΄μ§βλ‘ μ΄λν μ μμ΅λλ€.
κ° λͺ©λ‘λ§λ€ λ²νΌμ ν΄λ¦νμ¬ μμΈν λ΄μ©μ νμΈν μ μμΌλ©°, λ΄μ©μ νμΈνκ³ μλΉμ€λ₯Ό μνν μ μμ κ²½μ° βμ νκ±ΈκΈ° λ° μλ½νκΈ°β λ²νΌμ ν΄λ¦νμ¬ μλΉμ€λ₯Ό μμν©λλ€.
μ½λ°± μμ² μλ£ λκΈ° (μλλ)
βμλλβκ° βμ νκ±ΈκΈ° λ° μλ½νκΈ°β λ²νΌμ λλ₯΄λ©΄ μλμ βμλμ΄ μ νλ²νΈβκ° λ¨κ²λ©λλ€.
βμλλβλ ν΄λΉ μ νλ²νΈλ‘ μ νλ₯Ό κ±Έμ΄ μλμ΄κ° μ΄λ€ μμ²μ νλμ§ νμΈνκ³ , ν΄λΉ μλΉμ€λ₯Ό μνν©λλ€.
μ΄ λ, κ°μ΄λλΌμΈκ³Ό λ²μ΄λλ λ΄μ©μ λΆννκ±°λ, βμλλβκ° μνν μ μλ λΆνμ ν κ²½μ° βλμ ν¬κΈ°β λ²νΌμ λλ¬ ν΄λΉ μμ²μ κ±°λΆν μ μμ΅λλ€.
μμ²μ μλ£ν ν βλμ μλ£βλ²νΌμ λλ¬ μλ£ λκΈ° μνλ‘ μ νν μ μμ΅λλ€.
μ½λ°± μμ² μλ£ (보νΈμ)
'보νΈμ'λ 'μλλ'κ° μλ£ λ²νΌμ λλ₯Έ ν, μλμ΄μκ² ν΄λΉ μμ²μ΄ μ λλ‘ μλ£λμλμ§ νμΈν©λλ€. κ·Έ λ€μ 'μλΉμ€ μ΄μ©λ΄μ' νλ©΄μμ μλ£ λκΈ° μνμΈ μ½λ°± μλΉμ€λ₯Ό μλ£ μνλ‘ λ³κ²½ν μ μμ΅λλ€.
λ§μ½ 보νΈμκ° μ΄ν λμ μ΄ λ²νΌμ λλ₯΄μ§ μμΌλ©΄, μλΉμ€λ μλμΌλ‘ μλ£ μνλ‘ λ³κ²½λ©λλ€.
μλμ΄ λ±λ‘ (보νΈμ)
β보νΈμβλ λμ§νΈ μλΉμ€λ₯Ό μ΄μ©ν μλμ΄λ₯Ό λ±λ‘ν©λλ€.
λ§μ΄νμ΄μ§μ βμλμ΄ λ±λ‘νκΈ°βλ²νΌμ λλ¬ μλμ΄λ₯Ό λ±λ‘ν©λλ€.
μλμ΄λ₯Ό λ±λ‘νκΈ° μν΄ μλμ΄μ μ±ν¨ λ° μ νλ²νΈλ₯Ό μ λ ₯ν΄μΌ ν©λλ€.
μλΆμ ν μλΉμ€ λ±λ‘ (보νΈμ)
β보νΈμβλ μλΆμ ν μλΉμ€λ₯Ό λ°μ μλμ΄λ₯Ό μ ννκ³ , μλΉμ€ μ΄μ© μκ°λ λ° μ΄μ© μκ°μ μ νν©λλ€.
κ·Έ ν μλΉμ€ μ΄μ© κΈ°κ°μ μ ννκ³ , μλμ βν¬μΈνΈ κ³μ°νκΈ°β λ²νΌμ ν΄λ¦νμ¬ λΉμ©μ νμΈν©λλ€.
κ·Έ ν βμλλβ κ° μλμ΄μ λλ λνμ μ£Όμ λ₯Ό μ λ ₯νκ³ , βμ μ²νκΈ°β λ²νΌμ ν΄λ¦νμ¬ μλΆμ ν μλΉμ€ μ μ²μ μλ£ν©λλ€.
μλΆμ ν μλΉμ€ νμΈ (μλλ)
βμλλβλ βμλΆμ ν μλΉμ€βμμ νμ¬ λκΈ° μ€μΈ μλΆμ ν μλΉμ€ λͺ©λ‘μ νμΈν μ μμ΅λλ€.
μ¬λ¬ λͺ©λ‘λ€ μ€ νλλ₯Ό μ ννμ¬ μλΆμ ν μλΉμ€λ₯Ό μ§νν μκ°λλ₯Ό νμΈνλ©°, μλμ βμλΉμ€ μμΈ νμΈνκΈ°βλ²νΌμ ν΄λ¦νμ¬ μλμ΄μ λ²νΈλ₯Ό νμΈν©λλ€.
μλΆμ ν μλΉμ€ μλ½ & μν (μλλ)
βμλλβλ μλμ΄μ μ νλ²νΈ λ° μμ²μ¬νμ νμΈν ν, βμλΉμ€ μλ½νκΈ°β λ²νΌμ ν΄λ¦νμ¬ μλΆμ ν μλΉμ€λ₯Ό μνν©λλ€.
μλΆμ ν μλΉμ€ μλ£ λκΈ° (μλλ)
βμλλβλ μ§μ λ κΈ°κ° λμ μλΆμ ν μλΉμ€λ₯Ό μννκ³ , μλΉμ€ μνκΈ°κ°μ΄ λλλ λ μ§ μ΄νμ βμλΆμ ν μλΉμ€ λ³΄κ³ μβλ₯Ό μμ±ν μ μμ΅λλ€.
λ³΄κ³ μμλ μλΆμ ν μλΉμ€ κΈ°κ° λμ μλμ΄μ λλμλ λνλ₯Ό μμ±ν΄μΌ νλ©°, λ΄μ©μ μμ±ν ν βλ³΄κ³ μ μ μΆνκΈ°β λ²νΌμ ν΄λ¦νμ¬ λ³΄κ³ μλ₯Ό μ μΆν©λλ€.
μλΆμ ν μλΉμ€ μλ£ (보νΈμ)
β보νΈμβλ βμλΉμ€ μ΄μ©λ΄μβ νμ΄μ§μμ μλ£ λκΈ° μνμΈ μλΆμ ν μλΉμ€λ₯Ό μλ£μνλ‘ λ³κ²½ν μ μμ΅λλ€.
Github Actionμ ν΅ν΄ μλ² μ λ°μ΄νΈ νΈλ¦¬κ±°κ° λ°μνλ©΄, μλ² λ¬΄μ€λ¨λ°°ν¬ μμ€ν¬λ¦½νΈκ° μλνλ©° μ¬λ νμ΄μ§ μλ²-λ‘κ·Έ μ±λμμ λ°±μλ μλ² μ¬λΆν λ‘κ·Έ (νλ¨ 50μ€), 무μ€λ¨ λ°°ν¬ κ΄λ ¨ κ²°κ³Όλ₯Ό μ 곡ν©λλ€.
μ¬λ μ΄λλ§ν¬ : https://join.slack.com/t/sinitto/shared_invite
보νΈμμ μΆ©μ , μλλμ μΆκΈ μμ²μ΄ λ€μ΄μ€λ©΄ κ΄λ¦¬μμ μνν νμΈμ μν΄ μ¬λμ λ©μμ§λ₯Ό μ μ‘νκ³ , λ²νΌμ ν΅ν΄ μ΄λλ―Όνμ΄μ§λ‘ μ μν μ μμ΅λλ€.
μ¬λ μ΄λλ§ν¬ : https://join.slack.com/t/sinitto/shared_invite
κ°λ° κ³Όμ μμμ κ°λ°μλ€μ μ€μ λλ―Έλ°μ΄ν° κΈ°λ° μΉ μ¬μ© λ° ν μ€νΈλ₯Ό μν΄, Server Side Rendering λ°©μμ λλ―Έλ°μ΄ν° λ‘κ·ΈμΈ νμ΄μ§λ₯Ό ꡬννμμ΅λλ€. μλ²μ μ μ₯λ λλ―Έλ°μ΄ν°λ‘λ§ λ‘κ·ΈμΈμ΄ κ°λ₯νλ©°, κ°λ°νκ²½(λ‘컬νκ²½μμ νλ‘ νΈ μλ²κ° μ΄λ €μμ μ) λ° λ°°ν¬μλ²λ‘ λ‘κ·ΈμΈμ΄ κ°λ₯νκ³ , λ‘κ·ΈμΈμ ν΄λΉ λλ―Έλ°μ΄ν° μ μ μ JWT(AccessToken λ° RefreshToken)μ λ°κΈνμ¬ ν¨κ» μ μ‘ν©λλ€
λλ―Έλ°μ΄ν° λ‘κ·ΈμΈ νμ΄μ§ : https://sinitto.site/dummy [λΉλ°λ²νΈ : 1234]
1. Dockerλ₯Ό ν΅ν ν μ€νΈ νκ²½ μΌκ΄μ±
μΌκ΄λ νκ²½: Dockerλ‘ Redisμ MySQLμ 컨ν μ΄λλ‘ κ΄λ¦¬ν΄, λͺ¨λ κ°λ°μμ CI/CD νκ²½μμ λμΌν ν μ€νΈ νκ²½μ 보μ₯νμ΅λλ€.
λΉ λ₯Έ μ΄κΈ°ν: Docker μ΄λ―Έμ§λ₯Ό ν΅ν΄ λ°μ΄ν°λ² μ΄μ€μ μΊμ μλ²λ₯Ό λΉ λ₯΄κ² μ€μ νμ¬, CI/CDμμ μκ°μ μ μ½νλλ‘ μ‘°μΉνμ΅λλ€.
2. μλνλ ν μ€νΈ λ° μ½λ νμ§ κ΄λ¦¬
PR μλ ν μ€νΈ: PR μμ± μ μλμΌλ‘ λͺ¨λ ν μ€νΈκ° μ€νλλ©°, μ½λ λ³κ²½ μ¬νμ λν μ¦κ°μ μΈ κ²μ¦μ΄ κ°λ₯ν©λλ€.
κ²°κ³Ό μλ μ½λ©νΈ: ν μ€νΈ κ²°κ³Όκ° PRμ μλμΌλ‘ μ½λ©νΈλ‘ λ¨κ²¨μ Έ, 리뷰μ΄κ° μ½κ² νμΈν μ μμ΅λλ€.
3. μ€ν¨ν μ½λ λΌμΈ νΌλλ°±
μ¦κ°μ νΌλλ°±: μ€ν¨ν ν μ€νΈμ λν μ½λ λΌμΈμ΄ PRμ νμλμ΄, λΉ λ₯΄κ² λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ΅λλ€.
4. λμ ν μ€νΈ 컀λ²λ¦¬μ§
ν΄λμ€ μ»€λ²λ¦¬μ§ 80%: μ£Όμ λͺ¨λ(callback, guard, review λ±)μμ 100% 컀λ²λ¦¬μ§λ₯Ό λ¬μ±νμ¬, λμ μμ μ±μ ν보νμ΅λλ€.
[ PR μλ ν μ€νΈ μ½λ©νΈ ]
[ ν μ€νΈ Coverage ]
νλ‘ νΈμλ-λ°±μλ κ° νμ κ³Όμ μ€ μ 곡λ apiλ₯Ό μ°κ²°νλ κ³Όμ μμ μν΅μ μ΄λ €μμ΄ μμμ΅λλ€.
νμ κ³Ό λ³νν μ μλ μΉ΄μΉ΄μ€ν ν¬μΊ νΌμ€μ νΉμ± μ μ‘°μλ€λ§λ€ κ°λ°μ μ§ννλ μκ°μ΄ λ¬λΌ μ€μκ°μΌλ‘ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μ΄λ €μ΄ λ¬Έμ μ μ΄ μμμ΅λλ€. λν νλ‘ νΈμλμμ λ°±μλ μλ²λ‘ apiλ₯Ό ν΅ν΄ μμ²μ 보λμ λ, μλ¬κ° λ°μνμ κ²½μ° μμΈν μ€λ₯ λ©μμ§κ° μλ΅μ ν΅ν΄ λνλμ§ μμμΌλ©°, μ€μ μ€λ₯ λ΄μ©μ λ°±μλ μλ²μ κΈ°λ‘λλ λ¬Έμ κ° μμμ΅λλ€.
λν λ°±μλ λ΄λΉ μ‘°μμκ² μ§λ¬Έμ νλλΌλ λ΅λ³μ λ°κΈ° μ κΉμ§λ κ·Έλμ νλ μμ μ μ§ννμ§ λͺ»νλ λ¬Έμ κ° μ겨, μ 체μ μΈ κ°λ° μλκ° λλ €μ§λ λ¬Έμ κ° μμμ΅λλ€.
μ΄λ¬ν λ°©λ²μ μ΄λ»κ² ν΄κ²°ν μ μμκΉ κ³ λ―Όν΄λ³΄λ μ€, κ°μ₯ λ¨Όμ λ μ€λ₯Έ λ°©λ²μ 'μλ¬ μ½λκ° μκΈ°λ©΄ Slackμ μ±λμ μ μ‘μ νλ κ²' μ΄μμ΅λλ€.
λ°±μλ μλ²μμ μλ° νμΌμ μ€νν κ²½μ° nohup λͺ λ ¬μ΄λ₯Ό ν΅ν΄ μ€ννλλ°, μ΄ λ μλ° νμΌμ μ€νν κΈ°λ‘μ΄ out νμ₯μ νμΌμ λ¨κ² λ©λλ€. μ΄ μ€μμ μλ¬κ° λ°μν κ²½μ° 'ERROR' λΌλ λ¨μ΄κ° ν¬ν¨μ΄ λλλ°, μ΄λ¬ν ν¨ν΄μ νμΈνμ¬ 'ERROR'μ΄ ν¬ν¨λ λ¨μ΄κ° out νμ₯μ νμΌμ κΈ°λ‘λλ©΄ Slackμ 'μλ²-λ‘κ·Έ' μ±λμ μ μ‘λλλ‘ νμμ΅λλ€. μ΄λ₯Ό ν΅ν΄ νλ‘ νΈμλ κ°λ°μλΆλ€μ΄ μ΄λ ν μ€λ₯μΈμ§ νμΈν μ μκ² νμμ΅λλ€.
κ·Έλ¬λ ν κ°μ§ λ¬Έμ κ° λ μμμ΅λλ€. κ°λ° μΈμ΄κ° λ€λ₯΄κΈ° λλ¬Έμ νλ‘ νΈμλμ κ²½μ° μλ°μμ λ°μνλ μλ¬μ½λλ₯Ό μ½λλ° μ΄λ €μμ΄ μλ€λ κ²μ΄μμ΅λλ€. μ€μ λ‘ νλ‘ νΈμλ κ°λ°μλΆλ€κ» ν΄λΉ μλ¬μ½λμ λν΄ μ΄ν΄κ° λλμ§ λ¬Όμ΄λ΄€μ λ, μ΄ν΄νκΈ°κ° μ΄λ €μ ChatGPTμ κ°μ LLM λͺ¨λΈμ μλ¬μ½λλ₯Ό 볡μ¬νμ¬ μ§λ¬Έμ νλ€λ λ΅λ³μ λ°μμ΅λλ€.
μ΄λ¬ν λΆνΈν¨μ ν΄κ²°νκΈ° μν΄, νμ¬ λ¬΄λ£λ‘ μ΄μ©ν μ μλ LLM λͺ¨λΈμΈ Upstageμ 'Solar-pro' λͺ¨λΈκ³Ό μ°κ²°μ νμ¬ μ΄λ₯Ό ν΄κ²°νμμ΅λλ€. κΈ°μ‘΄μ μλ¬μ½λλ₯Ό Slackμ λ°λ‘ μ μ‘νλ λμ , ν΄λΉ λ©μμ§λ₯Ό rest μμ²μ ν΅ν΄ LLM λͺ¨λΈμ λ΅λ³μ λ°κ³ , ν΄λΉ λ΅λ³μ ν¬ν¨νμ¬ μλ¬μ½λμ κ°μ΄ 보λ΄λλ‘ λ³κ²½νμμ΅λλ€.
μ΄λ¬ν κ³Όμ μ ν΅νμ¬ κ°λ° κ³Όμ μμμ μν΅μ μ΄λ €μμ ν΄κ²°ν μ μμμ΅λλ€.
μλλ μ€μ κ°λ° κ³Όμ μμ μ¬μ©λ λ΄μμ λλ€. ν΄λΉ λ΄μ©κ³Ό κ΄λ ¨λ μ μ€ν¬λ¦½νΈλ λ°±μλ λ΄λΆ μμ€ν¬λ¦½νΈ λͺ¨μ (https://www.notion.so/3ce05a49e06046469bde14c12b8b9c00) μ€ 'μλ²μλ¬ μλ κ³΅μ§ κ΄λ ¨μ½λ' μμ νμΈν μ μμ΅λλ€.
Team8_BE
βββ src
βββ main
βΒ Β βββ java
βΒ Β βΒ Β βββ com
βΒ Β βΒ Β βββ example
βΒ Β βΒ Β βββ sinitto
βΒ Β βΒ Β βββ auth
βΒ Β βΒ Β βΒ Β βββ controller
βΒ Β βΒ Β βΒ Β βββ dto
βΒ Β βΒ Β βΒ Β βββ entity
βΒ Β βΒ Β βΒ Β βββ repository
βΒ Β βΒ Β βΒ Β βββ service
βΒ Β βΒ Β βββ callback
βΒ Β βΒ Β βΒ Β βββ controller
βΒ Β βΒ Β βΒ Β βββ dto
βΒ Β βΒ Β βΒ Β βββ entity
βΒ Β βΒ Β βΒ Β βββ repository
βΒ Β βΒ Β βΒ Β βββ service
βΒ Β βΒ Β βΒ Β βββ util
βΒ Β βΒ Β βββ common
βΒ Β βΒ Β βΒ Β βββ config
βΒ Β βΒ Β βΒ Β βββ dummy
βΒ Β βΒ Β βΒ Β βββ exception
βΒ Β βΒ Β βΒ Β βββ interceptor
βΒ Β βΒ Β βΒ Β βββ properties
βΒ Β βΒ Β βΒ Β βββ service
βΒ Β βΒ Β βββ guard
βΒ Β βΒ Β βΒ Β βββ controller
βΒ Β βΒ Β βΒ Β βββ dto
βΒ Β βΒ Β βΒ Β βββ repository
βΒ Β βΒ Β βΒ Β βββ service
βΒ Β βΒ Β βββ guardGuideline
βΒ Β βΒ Β βΒ Β βββ controller
βΒ Β βΒ Β βΒ Β βββ dto
βΒ Β βΒ Β βΒ Β βββ entity
βΒ Β βΒ Β βΒ Β βββ repository
βΒ Β βΒ Β βΒ Β βββ service
βΒ Β βΒ Β βββ helloCall
βΒ Β βΒ Β βΒ Β βββ controller
βΒ Β βΒ Β βΒ Β βββ dto
βΒ Β βΒ Β βΒ Β βββ entity
βΒ Β βΒ Β βΒ Β βββ repository
βΒ Β βΒ Β βΒ Β βββ service
βΒ Β βΒ Β βββ member
βΒ Β βΒ Β βΒ Β βββ controller
βΒ Β βΒ Β βΒ Β βββ dto
βΒ Β βΒ Β βΒ Β βββ entity
βΒ Β βΒ Β βΒ Β βββ repository
βΒ Β βΒ Β βΒ Β βββ service
βΒ Β βΒ Β βββ point
βΒ Β βΒ Β βΒ Β βββ controller
βΒ Β βΒ Β βΒ Β βββ dto
βΒ Β βΒ Β βΒ Β βββ entity
βΒ Β βΒ Β βΒ Β βββ repository
βΒ Β βΒ Β βΒ Β βββ service
βΒ Β βΒ Β βββ review
βΒ Β βΒ Β βΒ Β βββ controller
βΒ Β βΒ Β βΒ Β βββ dto
βΒ Β βΒ Β βΒ Β βββ entity
βΒ Β βΒ Β βΒ Β βββ repository
βΒ Β βΒ Β βΒ Β βββ service
βΒ Β βΒ Β βββ sinitto
βΒ Β βΒ Β βββ controller
βΒ Β βΒ Β βββ dto
βΒ Β βΒ Β βββ entity
βΒ Β βΒ Β βββ repository
βΒ Β βΒ Β βββ service
βΒ Β βββ resources
βΒ Β βββ application-dev.properties
βΒ Β βββ application.properties
βΒ Β βββ keystore.p12
βΒ Β βββ static
βΒ Β βΒ Β βββ css
βΒ Β βββ templates
βΒ Β βββ dummy
βΒ Β βββ point
βββ test
βββ java
βββ com
βββ example
βββ sinitto
βββ auth
βΒ Β βββ entity
βΒ Β βββ repository
βΒ Β βββ service
βββ callback
βΒ Β βββ entity
βΒ Β βββ repository
βΒ Β βββ service
βΒ Β βββ util
βββ guard
βΒ Β βββ entity
βΒ Β βββ repository
βΒ Β βββ service
βββ guardGuideline
βΒ Β βββ entity
βΒ Β βββ repository
βΒ Β βββ service
βββ hellocall
βΒ Β βββ entity
βΒ Β βββ repository
βΒ Β βββ service
βββ member
βΒ Β βββ entity
βΒ Β βββ repository
βΒ Β βββ service
βββ point
βΒ Β βββ entity
βΒ Β βββ service
βββ review
βΒ Β βββ entity
βΒ Β βββ service
βββ sinitto
βββ entity
βββ repository
βββ service