ννλ μΈ : νμ κ½μ μ견μ λ§ν΄μ
μ§λμ νμ κ½μ λ―Όμμ μμ±νκ³ μ견μ 곡μ νλ κ°νΈ λ―Όμ κ΄λ¦¬ μλΉμ€ μ λλ€.
κΈ°μ‘΄ λ―Όμ κ΄λ¦¬ μμ€ν μμ μ νμ μΈ λ―Όμ μ‘°ν λ°©μ λ° μ견 곡μ λΆκ° λ¬Έμ λ₯Ό ν΄κ²°ν¨μΌλ‘μ¨ μ£Όλ―Ό μ°Έμ¬λ₯Ό μ₯λ €νκΈ° μν βννλ μΈβ μλΉμ€λ₯Ό μ μν©λλ€.
μλ―Όλ€μ κΈ°μ‘΄μ μ€νλΌμΈ λ―Όμ κ΄λ¦¬ λ°©μμ λνμ¬ κΈ΄ λ―Όμ μ μ μκ°, λΆμΉμ ν μλ, κ·Έλ¦¬κ³ λ³΅μ‘ν μ μ°¨ λ± λ§μ λΆλ§μ κ°μ§κ³ μμμ΅λλ€. λλ¬Έμ λ―Όμ κ΄λ¦¬ μμ€ν μ λμ§νΈνλ ν° λ³νμ νΈλ¦¬λ₯Ό κ°μ Έμμ΅λλ€. μλ₯Ό λ€μ΄ μ¬λλ€μ λ μ΄μ λμ¬λ¬΄μμμ μ€μ μμ λ―Όμμ μ μν νμκ° μμ΄μ‘κ³ , 볡μ‘ν λ―Όμ μ μ μ μ°¨λ κ°μν λμλ κ²μ ν΅ν΄ μ μ μμ΅λλ€. μ΄μ κ°μ μ€μ μμ μ€λ§νΈμλμ μ£Όλ―Όμ°Έμ¬ μ¦λλ₯Ό μν μ¬λ¬κ°μ§ μλλ€μ΄ κ³μν΄μ λͺ¨μλμ΄ μμ΅λλ€. [κ΄λ ¨ λ Όλ¬Έ]
κ·Έ μ€ λνμ μΈ μλ‘ λꡬ κ΄μμμμ μ΄μνλ κ²μν ννμ λ―Όμκ΄λ¦¬ μμ€ν βλλ리μβ κ° μμ΅λλ€. λλ리μλ κΈ°μ‘΄μ λ―Όμ μ μ κ³Όμ μμ 볡μ‘ν μΈμ¦ μ μ°¨λ₯Ό μλ΅νμ¬ μ€μ λ‘ λ§μ μλ―Όλ€μ΄ μ΄μ©νκ³ μμ΅λλ€. νμ§λ§ νμ¬ βλλ리μβ ννμ΄μ§λ λͺ κ°μ§ κ°μ μ μ΄ νμν΄ λ³΄μ λλ€. μ ν¬ νμ΄ λ°κ²¬ν λ¬Έμ λ μλμ κ°μ΅λλ€.
λ―Όμ κ΄λ¦¬ 창ꡬμμλ μ§μμ λ¬Έμ λ₯Ό ν¨κ» μμ±νλ 곡κ°μΈ λ§νΌ μ§μμ£Όλ―Όλ€μ΄ νΈλ¦¬νκ³ μ§κ΄μ μΌλ‘ λ―Όμμ μ‘°νν μ μμ΄μΌ ν©λλ€. νμ§λ§ κΈ°μ‘΄μ μμ€ν μ μΌλΆ λ΅λ³λ λ―Όμλ§μ 곡κ°νκ³ μκ³ λ³λμ μΉ΄ν κ³ λ¦¬κ° μ‘΄μ¬νμ§ μμ νΉμ λ―Όμμ μ‘°ννλ κ²μ΄ μλΉν μ΄λ ΅μ΅λλ€.
νΉν μμΉ μ 보λ μ΄λ―Έμ§κ° ν¬ν¨λ λ―Όμμ κ²½μ° μκ°μ μΌλ‘ νμΈν μ μλ μλ¨μ΄ μ 곡λμ΄μΌ νλλ° νμ¬ βλλ리μβ μμλ μ΄λ₯Ό νμΈν μ μλ κΈ°λ₯μ΄ μμ΅λλ€.
νν°λ§μ κ²½μ°μλ λ¨μ ν μ€νΈ κΈ°λ°μ κ²μμ΄λ§μ μ‘°νν μ μκΈ° λλ¬Έμ λ―Όμλ€μ ꡬλΆνλ κΈ°λ₯μ΄ λΆμ‘±νλ€κ³ λ³Ό μ μμ΅λλ€.
λ°λΌμ ννλ μΈμμλ κΈ°μ‘΄μ λ―Όμ μ‘°ν λ°©μμ κ°μ ν ν¨κ³Όμ μΈ λ―Όμ κ΄λ¦¬ μμ€ν μ μ 곡νκ³ μ ν©λλ€.
λ λ²μ§Έλ‘ λ―Όμμ λν μ§μμ£Όλ―Όλ€μ μ견μ λ°μν μ μλ κΈ°λ₯μ΄ λΆμ¬ν©λλ€.
βλλ리μβ μμλ μΌλΆ λ΅λ³λ λ―Όμλ§μ 곡κ°ν λΏλλ¬ μ€μ λ―Όμμ λν΄μ μ§μ μ£Όλ―Όλ€μ΄ μΌλ§λ 곡κ°νκ³ μλμ§λ₯Ό λνλΌ μ μλ κΈ°λ₯μ΄ λΆμ¬ν©λλ€.
λ―Όμμ κ²½μ° λ³΄ν΅ κ°κ°μΈμ λ¬Έμ 보λ€λ 곡곡μ λ¬Έμ μΈ κ²½μ°κ° λ§μ΅λλ€. κ·Έλ κΈ°μ μ§μ μ£Όλ―Όλ€μ΄ μ΄λ€ λ¬Έμ μ λ 곡κ°νκ³ μλμ§λ₯Ό νμΆν μλ¨μ΄ λΆμ‘±νλ€λ©΄ λ―Όμμ λν μ£Όλ―Ό μ°Έμ¬λκ° λ¨μ΄μ§ κ²μ λλ€.
λ°λΌμ ννλ μΈμμλ μ£Όλ―Όλ€κ³Ό ν¨κ» μ§μ λ¬Έμ λ₯Ό 곡μ νκ³ ν΄κ²°μ± μ μ°Ύμ μ μλ μν΅μ μ₯μ νμ±νκ³ μ ν©λλ€.
μΉ΄ν κ³ λ¦¬λ₯Ό μ ννκ³ μ§λμ νμ μ°μ΄ λ―Όμ μμ±
νμ¬ λ―Όμμ΄ λ°μν μμΉλ₯Ό νμΈνκ³ , μνλ μμΉμ νμ μ°μ΄ λ―Όμ λ°μμ§λ₯Ό νμν μ μμ΅λλ€.
μΉ΄ν κ³ λ¦¬ λ³ λ―Όμ μ μ² νν© μ‘°ν
μ§λμμ λ―Όμ λ€μ λ°μμ§, λ€μ λ°μ μΉ΄ν κ³ λ¦¬ λ±μ λ―Όμ μ μ² νν©μ νλμ νμΈν μ μμ΅λλ€.
곡κ°νλ λ―Όμμ μ’μμ/νλμ/λλΌμμ κ³΅κ° νν
λ€λ₯Έ μ¬λλ€μ΄ μ μν λ―Όμμ νμΈνκ³ κ³΅κ° λ° ν΄κ²°μ± μ ννν μ μμ΅λλ€. μΆνμ λκΈ κΈ°λ₯λ μ λ°μ΄νΈ λ μμ μ λλ€.
SNS νμμ λ―Όμ 리μ€νΈ UI
κΈ°μ‘΄μ λ±λ±ν κ²μν νμμ 리μ€νΈ λμ SNS νμμ λ―Όμ 리μ€νΈλ₯Ό λμ νμ¬ μ μ μΈλμ μ κ·Όμ± λ° μ°Έμ¬λλ₯Ό μ¦λμν΅λλ€.
μ μ¬μ§μ ννλ μΈ μλΉμ€κ° κΆκ·Ήμ μΌλ‘ μ§ν₯νλ λ―Όμ μμ€ν ꡬ쑰μ λλ€. κΈ°μ‘΄μ κ°κ°μΈκ³Ό μ§λ°© μ λΆ κ°μ μν΅ κ΅¬μ‘°μμ μ§μ μλ―Ό κ°μ μ견 κ΅λ₯κ° κ°λ₯ν κ΅¬μ‘°λ‘ λ―Όμ κ΄λ¦¬ μμ€ν μ λ³νμν€κ³ μΆμ΅λλ€.
κ²°κ³Όμ μΌλ‘ μμμ μ μν κΈ°λ₯κ³Ό ν¨κ» μλμ κ°μ μ¬νμ ν¨κ³Όλ₯Ό κΈ°λνκ³ μμ΅λλ€.
-
λ―Όμμ λ°μ μ§μμ μκ°μ μΌλ‘ νμΈν μ μκ³ μΉ΄ν κ³ λ¦¬ λ³ νν°λ§ κΈ°λ₯μ νμ©νμ¬ μ΄μ λ³΄λ€ νΈλ¦¬νκ² μ§μμ λ¬Έμ λ₯Ό νμ ν μ μμ κ²μ λλ€.
-
μ§μ μλ―Ό κ° λ―Όμμ 곡μ νκ³ μ견μ λλμΌλ‘μ¨ μ£Όλ―Ό μ°Έμ¬ νλλ₯Ό λλͺ¨ν μ μκ³ νμ¬ μ΄λ€ λ¬Έμ κ° μ§μ μ£Όλ―Όλ€μ 곡κ°μ μ»κ³ μλμ§ νμ ν μ μμ κ²μ λλ€.
-
μ€λ³΅ λ―Όμ λ°μμ μ€μ¬ μ§μ체μμ μ€λ³΅λ λ―Όμμ λν΄ μΌμΌμ΄ λ΅λ³ ν΄μΌνλ μκ³ λ‘μμ λ μ μμ΅λλ€.
ννλ μΈ μλ²λ νμ¬ GCP(Goole Cloud Platform) μ VM(Virtual Machine) 1λμμ λμμ€μ λλ€.
λ°νμ νκ²½μ λ컀 컨ν μ΄λλ₯Ό ν΅ν΄ ꡬμ±νμμΌλ©° VM μ ν¬κ² Jenkins Container, Spring Boot Container, Redis Container μ μΈ κ°μ§ 컨ν μ΄λκ° λμμ€μ λλ€.
Redis Container μ Spring Boot Container λ νλμ bridge network λ₯Ό 곡μ νκ³ μμΌλ©° μΈλΆ λ€νΈμν¬λ₯Ό ν΅ν΄ Database μ Cloud Storage μ¬μ΄μμ νμν λ°μ΄ν°λ₯Ό κ΅ννκ³ μμ΅λλ€.
λ°°ν¬ κ³Όμ μ κ²½μ° μ½ 5μΌ κ°μ μ§§μ κ°λ° κΈ°κ°μμ λ°°ν¬ κ³Όμ μ λ¨μν νκΈ° μν΄μ Jenkins λ₯Ό νμ©ν μλ λ°°ν¬ νκ²½μ ꡬμΆνμ΅λλ€. κ°λ°μκ° GitHub μ push νλ©΄ Webhook μ μ ν¨μ€μκ² μ λ¬νμ¬ λΉλλ₯Ό λ°μμν€λ λ°©μμΌλ‘ ꡬννμ΅λλ€.
μμ€ν μν€ν μ³λ μ΄λ―Έμ§λ μλμ κ°μ΅λλ€.
μλΉμ€ κΈ°λ₯ μꡬμ¬ν μ€ μΊμ±μ΄ νμν λΆλΆμ΄ λ κ°μ§ μ‘΄μ¬νμ΅λλ€.
- ν λ―Όμ λΉ νλμ 곡κ°μ΄ κ°λ₯ν©λλ€.
λ°μ΄ν°λ² μ΄μ€λ‘ λΆν° λ―Όμμ 곡κ°μ λ¨κΈ΄ μ¬μ©μ λͺ©λ‘μ λΆλ¬μ λλ±μ± λΉκ΅λ₯Ό νλ λ°©μλ μμ΅λλ€. νμ§λ§ λ€λ₯Έ λ°μ΄ν°λ³΄λ€ νΈλν½μ΄ λ§μ κ²μΌλ‘ μμλλ κ³΅κ° κΈ°λ₯μ μΊμ± λ‘μ§μ μΆκ°νμ¬ ν¨μ¨μ μΈ λ°μ΄ν° κ΅ν λ°©μμ ꡬννμ΅λλ€.
Redisμμ μ 곡νλ {ν€ : {νλ : κ°}} ννμ Hashes μλ£κ΅¬μ‘°λ₯Ό νμ©νμ΅λλ€. μ¬μ©μκ° κ³΅κ°μ λλ₯΄λ©΄ {λ―Όμ id : {μ¬μ©μ id : κ³΅κ° type}} λ°μ΄ν°λ₯Ό μΊμ±νμ΅λλ€. μ΄ν λ―Όμ idλ₯Ό ν΅ν΄ κ³΅κ° μ 보λ₯Ό λΆλ¬μ¬ λ λ°μ΄ν°λ² μ΄μ€κ° μλ μΊμμμ μ 보λ₯Ό λ 빨리 μ°Ύμ μ μμ΅λλ€. ν΄λΉ μ λ³΄κ° μΊμμ μ‘΄μ¬νμ§ μλ κ²½μ°μλ λ°μ΄ν°λ² μ΄μ€μμ λ°μ΄ν°λ₯Ό λ‘λ©ν ν μ¬μ©ν©λλ€.
- μμ λ‘κ·ΈμΈ κ³Όμ μμ λ°κΈλ°μ ν ν°μ μλ²μ μ μ₯ν΄μΌν©λλ€.
μμ λ‘κ·ΈμΈμ ν΅ν΄ λ°κΈλ°μ μ¬μ©μ μΈμ¦ ν ν° λ° λ¦¬νλ μ ν ν°μ μλ²μ μ μ₯ν΄μΌλ§ μΆνμ μ¬μ©μκ° μΈμ¦ ν ν°μ μ μΆνμ λ μ¬μ©μ μλ³μ΄ κ°λ₯ν©λλ€. λ°λΌμ μμ κ°μ μꡬμ¬νμ λ§μ‘±μν€κΈ° μν΄ λ κ°μ§ {ν€ : κ°} ννμ λ°μ΄ν°λ₯Ό μΊμ±ν©λλ€.
-
μΈμ¦ν ν° : λ©€λ² μλ³κ°
-
리νλ μν ν° : μΈμ¦ ν ν°
κ°κ°μ λ°μ΄ν°λ μΈμ¦ ν ν°μ μ ν¨κΈ°κ° λμ μλ²μ μ μ₯λλ©° μΊμ±μ΄ λ§λ£λ λ€μλ μ¬μ©μκ° μ μΆν 리νλ μ ν ν°μ μμ μΈμ¦ μλ²μ μ μΆν΄ μΈμ¦ν ν°μ μ¬λ°κΈλ°κ³ λ€μ μλ²μ μΊμ±μ μνν©λλ€.
κ²°κ³Όμ μΌλ‘ μλμ κ°μ ν΄λΌμ΄μΈνΈμ μλ²μ μ¬μ©μ μΈμ¦ ꡬ쑰λ₯Ό κ°μ§λλ€.
κΈ°λ³Έ μλ° μλΈλ¦Ώ μ€νμΈ Wrapper ν΄λμ€λ₯Ό μ¬μ©νμ¬ HTTP Request μ Response λ₯Ό μΆμ νκ³ Spring μμ μ 곡νλ log4j ꡬνμ²΄μΈ logback μ μ¬μ©ν΄μ μ€μκ° λ‘κΉ νκ²½μ ꡬμΆνμ΅λλ€.
Error μ Info λ λ¨κ³λ‘ λ‘κΉ λ 벨μ λλμ΄ νμΌμ κ΄λ¦¬νκ³ νμλ€κ³Ό λΌμ΄λΈ μ½λ©μ νλ©΄μ λ‘κΉ μ 보λ₯Ό νμ©νμ΅λλ€.
λ²μ μ 보λ build.gradle μμ νμΈν μ μμ΅λλ€. μλ² μ€νμ λ§κ² μμ μ΄ νμν©λλ€.
application.yml
gcp-bucket-name: ${bucket_name}
gcp-directory-name: ${storage_directory_root_path}
gcp-storage-url: https://storage.googleapis.com/
kakao:
api-key: ${rest_api_key}
admin-key: ${admin_key}
redirect-url: ${redirect_url}
spring:
datasource:
username: ${db_username}
password: ${db_password}
driver-class-name: ${driver_class}
url: ${db_endpoint}
jpa:
hibernate:
ddl-auto: none
properties:
hibernate:
show_sql: true
format_sql: true
cloud:
gcp:
storage:
credentials:
location: ${storage_credential}
redis:
host: ${redis_host}
port: ${redis_port}
server:
ssl:
key-store: ${keystore_file}
key-store-type: PKCS12
key-store-password: ${keystore_passwd}
springdoc:
swagger-ui:
path: ${swagger_path}
operations-sorter: method
# version: v1
paths-to-match: /api/**Dockerfile
FROM openjdk:11
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
VOLUME /tmp
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]μνν μ€ννκ²½μ μν΄μλ μλμ κ°μ μ°κ²° νκ²½ μ€μ μ΄ νμν©λλ€.
- redis connection
- gcp storage connection
- kakao login connection
- database connection
νλ‘μ νΈ λ£¨νΈ κ²½λ‘μμ μ€ν
1. Docker νκ²½ x
$ ./gradlew clean build -x test
$ cd build/libs
$ java -jar *.jar2. Docker νκ²½
$ ./gradlew clean build -x test
$ docker build -t tag-name:1.0 .
$ docker run -p 8080:8080 -d βname=app-name tag-name:1.0| Name | Major | |
|---|---|---|
| κ³½λμ | λμμΈνκ³Ό | skdud9290@naver.com |
| Name | Major | |
|---|---|---|
| μ΅μ€μ | μ»΄ν¨ν°νλΆ | cdt9473@gmail.com |
| Name | Major | |
|---|---|---|
| λ°μν | μ»΄ν¨ν°νλΆ | sanghyun-dev@naver.com |
| ν©μμ | μ»΄ν¨ν°νλΆ | ayxxng73@gmail.com |










