π
μΊ‘μ€ν€ λμμΈ κ²½μ§ λν μμ μμ (2025.12) π
π
μ‘Έμ
νλ‘μ νΈ ν¬μ€ν° μΈμ
μ°μμ μμ (2025.12) π
π οΈ Backend κΈ°μ μ€ν
κ΅¬μ± μμ
μ¬μ© κΈ°μ
νλ μμν¬
Spring Boot, Spring Security, Spring Web, Spring Data JPA
μΈμ¦
OAuth 2.0
μλ² / λ°°ν¬
AWS EC2, Docker
νμΌ μ μ₯μ
AWS S3
ποΈ λ°μ΄ν°λ² μ΄μ€
κ΅¬μ± μμ
μ¬μ© κΈ°μ
RDBMS
MySQL
μΊμ / μΈμ
μ μ₯μ
Redis
π οΈ νλ‘μ νΈ Convention
λλ ν 리 ꡬ쑰 μ λ΅
controller
dto
μ μ ν©ν 리 λ©μλλ‘ entity β dto
entity
repository
service
config : security, aws λ± μ€μ μ 보
entity : κ³΅ν΅ μν°ν° (μ: BaseTimeEntity)
payload : μλ΅ κ΄λ ¨ ꡬ쑰
validation : 컀μ€ν
μ ν¨μ± κ²μ¦
git clone https://github.com/DropThe8bit/EverTale_BE.git
cd evertale_be
2. Environment Variables μμ±
application.yml νμΌμ μμ±νκ³ λ€μ νκ²½λ³μλ€μ μ
λ ₯ν©λλ€.
DB_URL=
DB_USER=
DB_PASSWORD=
SPRING_SERVER_SERVLET_CONTEXT_PATH=
AWS_ACCESS_KEY=
AWS_SECRET_ACCESS_KEY=
AWS_S3_BUCKET=
CLIENT_ID=
CLIENT_SECRET=
REDIRECT_URI=
SECRET_KEY=
AI_BASE_URL=
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: ${DB_URL}
username: ${DB_USER}
password: ${DB_PASSWORD}
jpa:
hibernate:
ddl-auto: update
show-sql: true
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL8Dialect
format_sql: true
use_sql_comments: true
jdbc:
time_zone: Asia/Seoul
data:
redis:
host: localhost
port: 6379
servlet:
multipart:
enabled: true
max-file-size: 10MB
max-request-size: 20MB
server:
servlet:
context-path: ${SPRING_SERVER_SERVLET_CONTEXT_PATH}
springdoc:
swagger-ui:
path: /swagger
groups-order: DESC
tags-sorter: alpha
operations-sorter: method
cloud:
aws:
s3:
bucket: ${AWS_S3_BUCKET}
region:
static: ap-northeast-2
credentials:
accessKey: ${AWS_ACCESS_KEY}
secretKey: ${AWS_SECRET_ACCESS_KEY}
jwt:
secret-key: ${SECRET_KEY}
naver:
client-id: ${CLIENT_ID}
client-secret: ${CLIENT_SECRET}
redirect-uri: ${REDIRECT_URI}
ai:
base-url: ${AI_BASE_URL}
νλ‘μ νΈ μλ¨ Run 'EverTale'μ ν΄λ¦νμ¬ μ΄ν리μΌμ΄μ
μ μ€νν©λλ€.