Skip to content

[์ฝ์„๊ฑฐ๋ฆฌ๐Ÿ“š] ๋„์„œ๊ด€ ์ •๋ณด๋‚˜๋ฃจ Open API ๊ธฐ๋ฐ˜ iOS ๋…์„œ ํ”Œ๋žซํผ ์•ฑ ์„œ๋ฒ„ ์ฝ”๋“œ

Notifications You must be signed in to change notification settings

BOOK-TALK/Readables-Server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

ย  ์ฝ์„๊ฑฐ๋ฆฌ

Hits


Download


Introduction

์ฝ์„๊ฑฐ๋ฆฌ๋Š” ๋„์„œ๊ด€ ์ •๋ณด๋‚˜๋ฃจ์—์„œ ์ œ๊ณตํ•˜๋Š” Open API๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ๋…์„œ ์ทจํ–ฅ์— ๋งž๋Š” ๋„์„œ๋ฅผ ์ถ”์ฒœํ•˜๊ณ , ์ „๊ตญ ๋„์„œ๊ด€์˜ ๋„์„œ๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” iOS ๋…์„œ ํ”Œ๋žซํผ ์•ฑ์ž…๋‹ˆ๋‹ค. ์ด์™€ ํ•จ๊ป˜, ์˜คํ”ˆํ†ก ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž ๊ฐ„์˜ ์ž์œ ๋กœ์šด ์˜๊ฒฌ ๊ต๋ฅ˜๋ฅผ ์ง€์›ํ•˜๋ฉฐ, ๋…์„œ ๋ชฉํ‘œ ์„ค์ • ๋ฐ ๊ณต์œ  ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“ ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„

  • ๊ธฐ๋Šฅ ๊ตฌํ˜„
    • 2024.07.18. ~ 2024.08.30.
  • ์œ ์ง€ ๋ณด์ˆ˜ ๋ฐ ์—…๋ฐ์ดํŠธ
    • 2024.09.01. ~ ์ง„ํ–‰ ์ค‘

๐Ÿ“ ๋น„๊ณ 

  • ใ€Œ2024 ๋„์„œ๊ด€ ๋ฐ์ดํ„ฐ ํ™œ์šฉ ๊ณต๋ชจ์ „ใ€ (๊ตญ๋ฆฝ์ค‘์•™๋„์„œ๊ด€ ์ฃผ๊ด€) - ์„œ๋น„์Šค ์•„์ด๋””์–ด ๋ถ€๋ฌธ ์ถœํ’ˆ์ž‘

Team

ํŒ€ ์ด์Œ

๐Ÿ“ชTeam contact: [email protected]

iOS Developer iOS Developer Server Developer Server Developer
@minnnidev @rafa-e1 @chanwoo7 @hyeesw

Server Developers

์ด์ฐฌ์šฐ ๊น€ํ˜œ์€

๐Ÿ“ ๋งก์€ ๋ถ€๋ถ„๋“ค

  • ์ด์ฐฌ์šฐ

    • JWT Access Token, Refresh Token ๊ธฐ๋ฐ˜ ํšŒ์› ์ธ์ฆ ๋ฐ Redis๋ฅผ ํ™œ์šฉํ•œ ํ† ํฐ ์žฌ๋ฐœ๊ธ‰ ์„œ๋น„์Šค ๊ตฌํ˜„
    • Spring Data JPA, Spring Security๋ฅผ ํ™œ์šฉํ•œ ํšŒ์› ์ •๋ณด ๊ด€๋ฆฌ ์„œ๋น„์Šค ๊ตฌํ˜„
    • OIDC(OpenID Connect)๋ฅผ ํ™œ์šฉํ•œ ID Token ๊ธฐ๋ฐ˜ ์นด์นด์˜ค, Apple ๋กœ๊ทธ์ธ ๊ตฌํ˜„
    • ์ปค์Šคํ…€ ํŽ˜์ด์ง€๋„ค์ด์…˜ ๋กœ์ง ๊ตฌํ˜„ ๋ฐ Open API ๊ธฐ๋ฐ˜ ์žฅ๋ฅด ๋„์„œ ์กฐํšŒ API, ๋„์„œ๊ด€ ๊ฒ€์ƒ‰ ๋ฐ ์ €์žฅ API ๊ตฌํ˜„
    • ๋ชฉํ‘œ CRUD API ๋ฐ ๋ชฉํ‘œ ๊ธฐ๋ก ์ถ”๊ฐ€ API ๊ตฌํ˜„
    • ๋„๋ฉ”์ธ ๊ด€๋ฆฌ ๋ฐ SSL ์ธ์ฆ์„œ ์ ์šฉ
  • ๊น€ํ˜œ์€

    • AWS EC2 ์„œ๋ฒ„ ๋ฐฐํฌ ๋ฐ Docker, Github-Actions, Portainer๋ฅผ ํ™œ์šฉํ•ด ์„œ๋ฒ„ ๋ฐฐํฌ ์ž๋™ํ™”
    • ์ •๋ณด๋‚˜๋ฃจ Open API ํ†ต์‹  ๋กœ์ง ๋ฐ JSON ํŒŒ์‹ฑ ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์ถ•
    • Open API ๊ธฐ๋ฐ˜ ์ปค์Šคํ…€ ์ธ๊ธฐ๋Œ€์ถœ๋„์„œ, ์ฑ… ๊ฒ€์ƒ‰, ์ฑ… ์ƒ์„ธ, ๋„์„œ๊ด€ ์ฑ… ๋Œ€์ถœ ์—ฌ๋ถ€ API ๊ตฌํ˜„
    • STOMP ํ”„๋กœํ† ์ฝœ ๊ธฐ๋ฐ˜ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๊ตฌํ˜„ (์˜คํ”ˆํ†ก)

System Architecture

์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

CI/CD ์•„ํ‚คํ…์ฒ˜

ERD


Features

์ด ๋ฌธ๋‹จ์˜ ๋‚ด์šฉ์€ Readables-iOS(ํ”„๋ก ํŠธ์—”๋“œ) ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ README์—์„œ ๋ฐœ์ทŒํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

1. ํšŒ์›๊ฐ€์ž… ๋ฐ ๋กœ๊ทธ์ธ

  • ์œ ์ €๋Š” ์• ํ”Œ ๋กœ๊ทธ์ธ, ์นด์นด์˜ค ๋กœ๊ทธ์ธ ์ด 2๊ฐœ์˜ ์†Œ์…œ ๋กœ๊ทธ์ธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ž…๋ ฅ ํผ์—์„œ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํšŒ์› ๊ฐ€์ž…์ด ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค. (๋‹‰๋„ค์ž„๋งŒ ํ•„์ˆ˜ ์ž…๋ ฅ)

  • ํ•œ๋ฒˆ ๋กœ๊ทธ์ธ์„ ํ•˜๋ฉด ์ž๋™ ๋กœ๊ทธ์ธ์ด ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค.

    ์• ํ”Œ ๋กœ๊ทธ์ธ ์นด์นด์˜ค ๋กœ๊ทธ์ธ ์ •๋ณด ๋“ฑ๋ก

2. ๋งž์ถคํ˜• ๋„์„œ ์ถ”์ฒœ

  • ํ™ˆํ™”๋ฉด์—์„œ ์œ ์ €๋Š” ์ง€๋‚œ๋‹ฌ ์ธ๊ธฐ ํ‚ค์›Œ๋“œ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ด๋ฒˆ์ฃผ ์ธ๊ธฐ ๋„์„œ, ์œ ์ € ๋‚˜์ด๋Œ€์—์„œ ์ธ๊ธฐ ์žˆ๋Š” ๋„์„œ, ๋Œ€์ถœ ๊ธ‰์ƒ์Šน ๋„์„œ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ •๋ณด ๋“ฑ๋ก ์‹œ ๋‚˜์ด๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด, ์ „์ฒด ๋‚˜์ด๋Œ€์— ์ธ๊ธฐ ์žˆ๋Š” ๋„์„œ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

    ๊ธฐ๋ณธ ํ™ˆํ™”๋ฉด1 ๊ธฐ๋ณธ ํ™ˆํ™”๋ฉด2 ๋‚˜์ด๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์•˜์„ ๋•Œ

3. ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰

  • ์ฑ… ์ด๋ฆ„ ๋˜๋Š” ์ž‘๊ฐ€ ์ด๋ฆ„์œผ๋กœ ๊ฒ€์ƒ‰์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ‚ค์›Œ๋“œ ํ† ๊ธ€์„ ์ผœ์„œ ์ •๋ณด๋‚˜๋ฃจ์—์„œ ์ œ๊ณตํ•˜๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์ผ๋ฐ˜ ๊ฒ€์ƒ‰ ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰

4. ๋‚ด ๋„์„œ๊ด€ ๋“ฑ๋ก

  • ๋„์„œ๊ด€ ๋ชฉ๋ก์„ ๊ฒ€์ƒ‰ํ•˜์—ฌ ๋‚˜๋งŒ์˜ ๋„์„œ๊ด€์„ ์ตœ๋Œ€ 3๊ฐœ๊นŒ์ง€ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ง€์—ญ - ์„ธ๋ถ€ ์ง€์—ญ์„ ๋‚˜๋ˆ„์–ด ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๊ณ , ์ถ”๊ฐ€, ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • ๋‚ด ๋„์„œ๊ด€ ๋“ฑ๋ก์€ ์ถ”ํ›„ ๋‚˜์˜ฌ ๋„์„œ ์ƒ์„ธ ์ •๋ณด์—์„œ ๋„์„œ ๋Œ€์ถœ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ผ ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

    ๋‚ด ๋„์„œ๊ด€ ๊ด€๋ฆฌ ๋‚ด ๋„์„œ๊ด€ ์‚ญ์ œ ๋„์„œ๊ด€ ๋“ฑ๋ก

5. ๋ชฉํ‘œ

  • ๋„์„œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ํ•ด๋‹น ๋„์„œ์— ๋Œ€ํ•œ ๋ชฉํ‘œ๋ฅผ ์„ธ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ๋„์„œ์˜ ์ตœ์ข… ํŽ˜์ด์ง€ ์ˆ˜๋ฅผ ์ž…๋ ฅํ•œ ๋’ค, ํ•˜๋ฃจ์— ์ฝ์€ ์–‘์„ ๊ธฐ๋กํ•˜๋ฉด ์ฝ์„๊ฑฐ๋ฆฌ์—์„œ ์ฐจํŠธ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • ๋ชฉํ‘œ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์™„๋ฃŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ๋ชฉํ‘œ ์ถ”๊ฐ€ ๋ชฉํ‘œ ํƒญ ๋ชฉํ‘œ ๊ธฐ๋ก

6. ์˜คํ”ˆํ†ก ์ปค๋ฎค๋‹ˆํ‹ฐ

  • ๊ด€์‹ฌ์žˆ๋Š” ๋„์„œ์— ๋Œ€ํ•ด ์ž์œ ๋กญ๊ฒŒ ์˜คํ”ˆํ†ก์—์„œ ๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ฑ„ํŒ… ์‚ฌ์ด๋“œ ๋ฉ”๋‰ด์—์„œ ํ•ด๋‹น ๋„์„œ์˜ ๋ชฉํ‘œ๋ฅผ ์ง„ํ–‰ ์ค‘์ธ ์‚ฌ๋žŒ, ์™„๋ฃŒํ•œ ์‚ฌ๋žŒ์„ ํ™•์ธํ•˜์—ฌ ๊ฐ™์ด ์ฑ… ์ฝ๋Š” ๋ถ„์œ„๊ธฐ๋ฅผ ๋งŒ๋“ค๊ณ ์ž ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • ํ•ด๋‹น ๋„์„œ์— ๋Œ€ํ•œ ๋‚˜์˜ ๋ชฉํ‘œ ์ง„ํ–‰ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋ชฉํ‘œ ์ง„ํ–‰๋„์™€ ๋ชฉํ‘œ ์ถ”๊ฐ€๊ฐ€ ๋‚˜ํƒ€๋‚˜๋„๋ก ์ฒ˜๋ฆฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

    ์˜คํ”ˆํ†ก ์ง„์ž… ์ฑ„ํŒ… ์ฑ„ํŒ… ์‚ฌ์ด๋“œ ๋ฉ”๋‰ด1 ์ฑ„ํŒ… ์‚ฌ์ด๋“œ ๋ฉ”๋‰ด2

7. ์žฅ๋ฅด๋ณ„ ๊ฒ€์ƒ‰

  • ์นดํ…Œ๊ณ ๋ฆฌ ํƒญ์—์„œ๋Š” ๋Œ€์ฃผ์ œ๋ฅผ ์„ ํƒํ•˜์—ฌ, ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด๋ฒˆ์ฃผ ์ธ๊ธฐ ๋„์„œ์™€ ์‹ ์ž‘ ๋„์„œ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ฐ ๋Œ€์ฃผ์ œ์— ๋Œ€ํ•œ ์†Œ์ฃผ์ œ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ธ๊ธฐ ๋„์„œ์™€ ์‹ ์ž‘ ๋„์„œ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ „์ฒด๋ณด๊ธฐ๋ฅผ ํ†ตํ•ด ๊ฐ ์†Œ์ฃผ์ œ์— ๋Œ€ํ•œ ์ผ์ฃผ์ผ ์ธ๊ธฐ์ˆœ, ํ•œ๋‹ฌ ์ธ๊ธฐ์ˆœ, ์‹ ์ž‘์ˆœ, ๋žœ๋ค์ˆœ ํ•„ํ„ฐ๋กœ ๋„์„œ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์นดํ…Œ๊ณ ๋ฆฌ ์ง„์ž… ์ธ๊ธฐ ๋„์„œ, ์‹ ์ž‘ ๋„์„œ ์†Œ์ฃผ์ œ ์„ ํƒ ํ•„ํ„ฐ ์ด์šฉํ•œ ์ „์ฒด ๋ณด๊ธฐ

8. ๋„์„œ ์ƒ์„ธ ์ •๋ณด ์กฐํšŒ

  • ๋„์„œ ์ƒ์„ธ ์ •๋ณด์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ ๋„์„œ ์ •๋ณด๋ฅผ ํ™•์ธํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ƒ์„ธ ์กฐํšŒ ํŽ˜์ด์ง€์—์„œ ํ•ด๋‹น ์ฑ…์— ๋Œ€ํ•œ ์˜คํ”ˆํ†ก์— ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋“ฑ๋กํ•œ ๋‚ด ๋„์„œ๊ด€์—์„œ ๋Œ€์ถœ์ด ๊ฐ€๋Šฅํ•œ์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋Œ€์ถœ ๊ฐ€๋Šฅ, ๋Œ€์ถœ ๋ถˆ๊ฐ€๋Šฅ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

    ๋„์„œ ์ƒ์„ธ ์ •๋ณด(๋‚ด ๋„์„œ๊ด€ ๋“ฑ๋ก ์•ˆ ํ•œ ๊ฒฝ์šฐ) ๋Œ€์ถœ ๋ถˆ๊ฐ€์ผ ๋•Œ ๋Œ€์ถœ ๊ฐ€๋Šฅํ•  ๋•Œ

9. ํšŒ์› ์„ค์ •

  • ๋กœ๊ทธ์ธ, ๋กœ๊ทธ์•„์›ƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์œ ์ €์—๊ฒŒ ํ•œ๋ฒˆ ๋” ์˜์‚ฌ๋ฅผ ๋ฌผ์–ด๋ณด๋„๋ก ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

    ์„ค์ • ๋กœ๊ทธ์•„์›ƒ ํƒˆํ‡ดํ•˜๊ธฐ

Directory Structure

src/main/
โ”œโ”€โ”€ java
โ”‚   โ””โ”€โ”€ com
โ”‚       โ””โ”€โ”€ book
โ”‚           โ””โ”€โ”€ backend
โ”‚               โ”œโ”€โ”€ domain
โ”‚               โ”‚   โ”œโ”€โ”€ auth
โ”‚               โ”‚   โ”œโ”€โ”€ book
โ”‚               โ”‚   โ”œโ”€โ”€ detail
โ”‚               โ”‚   โ”œโ”€โ”€ genre
โ”‚               โ”‚   โ”œโ”€โ”€ goal
โ”‚               โ”‚   โ”œโ”€โ”€ library
โ”‚               โ”‚   โ”œโ”€โ”€ message
โ”‚               โ”‚   โ”œโ”€โ”€ oidc
โ”‚               โ”‚   โ”œโ”€โ”€ openapi
โ”‚               โ”‚   โ”œโ”€โ”€ opentalk
โ”‚               โ”‚   โ”œโ”€โ”€ record
โ”‚               โ”‚   โ”œโ”€โ”€ search
โ”‚               โ”‚   โ”œโ”€โ”€ user
โ”‚               โ”‚   โ”œโ”€โ”€ userBook
โ”‚               โ”‚   โ””โ”€โ”€ userOpentalk
โ”‚               โ”œโ”€โ”€ exception
โ”‚               โ”œโ”€โ”€ global
โ”‚               โ””โ”€โ”€ util
โ””โ”€โ”€ resources
    โ”œโ”€โ”€ sql
    โ””โ”€โ”€ static

About

[์ฝ์„๊ฑฐ๋ฆฌ๐Ÿ“š] ๋„์„œ๊ด€ ์ •๋ณด๋‚˜๋ฃจ Open API ๊ธฐ๋ฐ˜ iOS ๋…์„œ ํ”Œ๋žซํผ ์•ฑ ์„œ๋ฒ„ ์ฝ”๋“œ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages