Giter Club home page Giter Club logo

dnd-10th-6-backend's People

Contributors

eun-seong avatar rlacksgus97 avatar spolice0324 avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

dnd-10th-6-backend's Issues

๋กœ๊ทธ์ธ ๋ฐ ํšŒ์›๊ฐ€์ž… ๊ตฌํ˜„

๊ธฐ๋Šฅ ์„ค๋ช…

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

์š”๊ตฌ ์‚ฌํ•ญ

  • ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ ์‹œ๋„ํ•˜๋ฉด,
  • DB์— ์กด์žฌํ•˜๋Š” ์‚ฌ์šฉ์ž์ธ์ง€ ํ™•์ธ ํ›„
  • ํšŒ์›๊ฐ€์ž…/๋กœ๊ทธ์ธ์„ ์ง„ํ–‰ํ•˜๊ณ  accessToken, refreshToken์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • refreshToken์€ DB์— ์ €์žฅ๋œ๋‹ค.

ํŠน์ด ์‚ฌํ•ญ

๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์„ค๋ฌธ ์กฐํšŒ API

๊ธฐ๋Šฅ ์„ค๋ช…

๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์„ค๋ฌธ ์กฐํšŒ API ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ

GET /users/profile/surveys?pageSize&pageNo&period&relation

  • period, relation ํ•„ํ„ฐ ์ ์šฉ
  • pagination ์ ์šฉ

Response

{
	data: {
    "page": 0,
    "size": 20,
    "totalPage": 1,
    "totalCount": 2,
		"content": [
			{
				"surveyId": "asdf",
				"relation": "ELEMENT",
				"period": "period",
				"recieverName": "string",
				"sendedAt": "2022-10-10T00:00:00"
			},
			...
		]
	}
}

ํŠน์ด ์‚ฌํ•ญ

์ˆ˜์ •๋œ ๋กœ๊ทธ์ธ ๋ฐ ํšŒ์›๊ฐ€์ž… ํ”Œ๋กœ์šฐ ๊ตฌํ˜„

๊ธฐ๋Šฅ ์„ค๋ช…

AS-IS
ํšŒ์›๊ฐ€์ž… ๊ธฐ์ค€ : ์ตœ์ดˆ ๋กœ๊ทธ์ธ ์‹œ
์นด์นด์˜ค ๋กœ๊ทธ์ธ ์™„๋ฃŒ ์‹œ, ์ตœ์ดˆ ๋กœ๊ทธ์ธ์ผ ๊ฒฝ์šฐ ํšŒ์›๊ฐ€์ž…
์นด์นด์˜ค์—์„œ ์œ ์ € ์ •๋ณด ์กฐํšŒํ•˜์—ฌ ๋‹‰๋„ค์ž„ ๊ฐ€์ ธ์™€ ๋””ํดํŠธ ๋‹‰๋„ค์ž„์œผ๋กœ ์„ค์ •

TO-BE
ํšŒ์›๊ฐ€์ž… ๊ธฐ์ค€ : ์ตœ์ดˆ ๋กœ๊ทธ์ธ + ๋‹‰๋„ค์ž„ ์ž…๋ ฅ ์™„๋ฃŒ
์นด์นด์˜ค ๋กœ๊ทธ์ธ ์™„๋ฃŒ ์‹œ
๊ธฐ์กด ์œ ์ €๋ผ๋ฉด accessToken๊ณผ refreshToken ์‘๋‹ต
์‹ ๊ทœ ๊ฐ€์ž… ์œ ์ €๋ผ๋ฉด HTTP status 404 ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ์ฟ ํ‚ค๋กœ kakao oauth accessToken์„ ์„ค์ •ํ•˜์—ฌ ์‘๋‹ต
(client) ์ด ๊ฒฝ์šฐ ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€๋กœ ์ด๋™
/api/v1/signup API๋ฅผ ์ด์šฉํ•˜์—ฌ ํšŒ์›๊ฐ€์ž…
์œ ์ €๊ฐ€ ์ž…๋ ฅํ•œ ๋‹‰๋„ค์ž„๊ณผ set-cookie๋กœ ์„ค์ •๋œ ์ฟ ํ‚ค์™€ ํ•จ๊ป˜ ์š”์ฒญ
(server) accessToken ์œผ๋กœ ์œ ์ € ์ •๋ณด ์กฐํšŒ ํ›„ ํšŒ์›๊ฐ€์ž… ์™„๋ฃŒ

์š”๊ตฌ ์‚ฌํ•ญ

ํŠน์ด ์‚ฌํ•ญ

Statistics์™€ Statistic์„ Dashboard ๋„๋ฉ”์ธ์œผ๋กœ ์ด๋™

๊ธฐ๋Šฅ ์„ค๋ช…

statistcis ๋„๋ฉ”์ธ์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์•„๋ž˜ 2๊ฐ€์ง€๋ฅผ dashboard ๋„๋ฉ”์ธ์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ

  • Statistics์™€ Statistic์„ Dashboard ๋„๋ฉ”์ธ์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  • ์ „์ฒดํ†ต๊ณ„๋Ÿ‰ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์ € ํ†ต๊ณ„๋Ÿ‰ ๊ณ„์‚ฐํ•˜๋Š” ๋กœ์ง์„ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

ํŠน์ด ์‚ฌํ•ญ

test

๊ธฐ๋Šฅ ์„ค๋ช…

์š”๊ตฌ ์‚ฌํ•ญ

ํŠน์ด ์‚ฌํ•ญ

reason required ํ•„๋“œ ์ถ”๊ฐ€

๊ธฐ๋Šฅ ์„ค๋ช…

Question์— reason required ํ•„๋“œ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ

  • short_answer์ผ ๊ฒฝ์šฐ ์ด์œ  ์ž…๋ ฅ์ด ํ•„์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ, Question์— reason required ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฌธํ•ญ ์กฐํšŒ ์‹œ reasonRequired ํ•„๋“œ ํ•จ๊ป˜ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.
  • ์„ค๋ฌธ ์ƒ์„ฑ ์‹œ
    • reason required์ธ๋ฐ, reason ํ•„๋“œ๊ฐ€ ๋น„์–ด์žˆ์„ ๊ฒฝ์šฐ ์˜ˆ์™ธ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์งˆ๋ฌธ๋ณ„ ์ƒ์„ธ๋ณด๊ธฐ API

๊ธฐ๋Šฅ ์„ค๋ช…

์งˆ๋ฌธ๋ณ„ ์ƒ์„ธ๋ณด๊ธฐ

์š”๊ตฌ ์‚ฌํ•ญ

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2024-02-20 แ„‹แ…ฉแ„’แ…ฎ 9 42 30

ํŠน์ด ์‚ฌํ•ญ

  • projection ์—†์ด ๊ตฌํ˜„ ์ดํ›„ ๋ฆฌํŒฉํ† ๋ง

๋ฌธํ•ญ ์กฐํšŒ API ๊ตฌํ˜„

๊ธฐ๋Šฅ ์„ค๋ช…

์ „์ฒด ๋ฌธํ•ญ์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ

  • ์ธ์ฆ ์—†์ด ์กฐํšŒ๊ฐ€๋Šฅํ•ด์•ผ ํ•จ
  • ๋ฌธํ•ญ ๋ฐ์ดํ„ฐ ๋„ฃ๋Š” ddl๋„ ํ•จ๊ป˜ ์ž‘์„ฑ
  • question๊ณผ option ํ…Œ์ด๋ธ” ์ƒ์„ฑ
/**** ๋ฌธํ•ญ(question) ****/

MULTIPLE_CHOICE : ์„ ์ง€๊ฐ€ 3๊ฐœ ์ด์ƒ
OX : ์„ ์ง€๊ฐ€ 2๊ฐœ
SHORT_ANSWER : 15์ž ์ดํ•˜
NUMBER : ์ˆซ์ž
// ESSAY : 15์ž ์ดˆ๊ณผ

// ๋‹ค์ค‘์„ ํƒ

{
    "id": 1,
    "title": "string",
    "question_type":"MULTIPLE_CHOICE",
    "options": [
        "A", "B", "C"
    ]
}

{
    "title": "string",
    "question_type":"OX",
    "options": [
        "O", "X"
    ]
}

{
    "title": "string",
    "question_type":"SHORT_ANSWER"
}

{
    "title": "string",
    "question_type":"NUMBER",
    "options": [
        0, 1000
    ]
}



/**** ์„ ์ง€(option) ****/
{
    "id": "id",
    "content": "string"
}

{
    "id": "docuemtn id",
    "content": "MANUAL"
}

ํŠน์ด ์‚ฌํ•ญ

์„ค๋ฌธ ์ƒ์„ฑ API ๊ตฌํ˜„

๊ธฐ๋Šฅ ์„ค๋ช…

๋‚ด๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋‚˜์˜ ์„ค๋ฌธ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ

  • ์ธ์ฆ์€ Optionalํ•˜๋‹ค.
    • ์ธ์ฆ๋œ ์š”์ฒญ์ผ ๊ฒฝ์šฐ -> ์š”์ฒญํ•œ ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ์ €์žฅํ•œ๋‹ค.
    • ์ต๋ช…์ผ ๊ฒฝ์šฐ -> null๋กœ ๋น„์›Œ๋‘”๋‹ค.
/**** ์„ค๋ฌธ(survey) ****/
- pk - id
- fk ํ•ด์ค€ ์‚ฌ์šฉ์ž - null
- fk ๋ฐ›์€ ์‚ฌ์šฉ์ž
- ๋‹ต๋ณ€[]
    - ๋ฌธํ•ญ id
    - answer(์งˆ๋ฌธ ์œ ํ˜•๋ณ„๋กœ ๊ตฌ์กฐ ๋‹ค๋ฆ„)

// type
// manual : ๋‹ค์ง€์„ ๋‹ค์˜ ์ง์ ‘ ์ž…๋ ฅ, ์ฃผ๊ด€์‹ -> answer : ํ…์ŠคํŠธ or ์ˆซ์ž
// option : OX, ๋‹ค์ง€์„ ๋‹ค์˜ ์„ ์ง€ -> answer : option id

{
    "id": "pk",
    "owner":"user id",
    "sender":"user id or null",
    "period": "string",
    "relation": "string",
    "answers": [
        { "question_id": "id", "type": "manual | option", "answer": "docuemtn id" }
    ],
    "reason": "string"
}

{
    "id": "pk",
    "owner":"user id",
    "sender":"user id or null",
    "answers": [
        { "question_id": "id", "answer": "option document id" }
    ],
    "reason": "string"
}

Enum

Period

  • SIX_MONTHS
  • ONE_YEAR
  • FOUR_YEARS
  • INFINITE

Relation

  • ELEMENTARY_SCHOOL
  • MIDDLE_AND_HIGH_SCHOOL
  • UNIVERSITY
  • WORK
  • SOCIAL
  • ETC

ํŠน์ด ์‚ฌํ•ญ

CI/CD ์„ธํŒ…

๊ธฐ๋Šฅ ์„ค๋ช…

  • ์Šคํ…Œ์ด์ง• CI/CD ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค
  • main๊ณผ staging ๋ธŒ๋žœ์น˜๊ฐ€ ํ‘ธ์‹œ๋˜์—ˆ์„ ๋•Œ ๊ฐ๊ฐ ์šด์˜, ์Šคํ…Œ์ด์ง• ํ™˜๊ฒฝ์— ์ž๋™ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค

์š”๊ตฌ ์‚ฌํ•ญ

ํŠน์ด ์‚ฌํ•ญ

์„ค๋ฌธ ์ƒ์„ธ๋ณด๊ธฐ ์˜ค๋ฅ˜

๋ฒ„๊ทธ ํ˜„์ƒ

question ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋˜์ง€ ์•Š์•„ pair question answer์—์„œ ์˜ค๋ฅ˜๋ฐœ์ƒ

์žฌํ˜„ ๋ฐฉ๋ฒ•

์˜ˆ์ƒํ–ˆ๋˜ ๋™์ž‘

์Šคํฌ๋ฆฐ์ƒท

ํŠน์ด ์‚ฌํ•ญ

์œ ์ € ํผ๋ธ”๋ฆญ ์ •๋ณด ์กฐํšŒ api

๊ธฐ๋Šฅ ์„ค๋ช…

์œ ์ € ํผ๋ธ”๋ฆญ ์ •๋ณด ์กฐํšŒ api ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ

  • ์ธ์ฆ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • wikiId๋ฅผ ์ฟผ๋ฆฌ์ŠคํŠธ๋ง์œผ๋กœ ๋ฐ›๊ณ , nickname์„ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.

ํŠน์ด ์‚ฌํ•ญ

๋นŒ๋ฆด ์ˆ˜ ์žˆ๋Š” ๊ธˆ์•ก MANUALํƒ€์ž…์ผ ๊ฒฝ์šฐ locale๊ณผ ์› ๋ถ™์—ฌ์„œ ์‘๋‹ต

๊ธฐ๋Šฅ ์„ค๋ช…

๋นŒ๋ฆด ์ˆ˜ ์žˆ๋Š” ๊ธˆ์•ก MANUALํƒ€์ž…์ผ ๊ฒฝ์šฐ locale๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  "์›"์„ ๋ถ™์—ฌ์„œ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ

ํŠน์ด ์‚ฌํ•ญ

JDK 17 ํ•จ์ˆ˜๋กœ ๋ณ€๊ฒฝ

๊ธฐ๋Šฅ ์„ค๋ช…

JDK 21 ๋ฒ„์ „ ํ•จ์ˆ˜๊ฐ€ ์‚ฌ์šฉ๋œ ๊ณณ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
17์— ๋งž์ถฐ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ

ํŠน์ด ์‚ฌํ•ญ

Oauth ๋กœ๊ทธ์ธ ์‹œ ํšŒ์› ๊ฐ€์ž… ์—ฌ๋ถ€ ํŒ๋‹จํ•˜์—ฌ ์‘๋‹ต

๊ธฐ๋Šฅ ์„ค๋ช…

Oauth ๋กœ๊ทธ์ธ ์‹œ ํšŒ์› ๊ฐ€์ž… ์—ฌ๋ถ€ ํŒ๋‹จํ•˜์—ฌ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ

ํšŒ์›๊ฐ€์ž…์ด ๋˜์–ด ์žˆ์„ ์‹œ, ๊ธฐ์กด๊ณผ ๋™์ผํ•˜๊ฒŒ accessToken๊ณผ refreshToken์„ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.
์•„๋‹ ์‹œ, 404 http status๋ฅผ oauth provider์™€ oauth accesstoken๊ณผ ํ•จ๊ป˜ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.

ํŠน์ด ์‚ฌํ•ญ

์นด์นด์˜ค OAuth ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ

๊ธฐ๋Šฅ ์„ค๋ช…

์นด์นด์˜ค oauth ๋กœ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•œ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ

POST /api/v1/login

  • code๋ฅผ ํ†ตํ•ด ์นด์นด์˜ค oauth ์„œ๋ฒ„์— token์„ ์š”์ฒญํ•œ๋‹ค.
  • token์„ ํ†ตํ•ด ์นด์นด์˜ค oauth ์„œ๋ฒ„์— ์‚ฌ์šฉ์ž ์‹๋ณ„์ž๋ฅผ ์กฐํšŒํ•œ๋‹ค.

Request Body

{
  "provider": "kakao",
  "code": "string"
}

์‘๋‹ต ํ•˜๋Š” ๋ถ€๋ถ„์€ @rlacksgus97๊ฐ€ ์—ฐ๊ฒฐํ•ด์„œ ์ž‘์—…ํ•ด์ฃผ์„ธ์š”.

Response Body

{
  "accessToken": "string",
  "refreshToken": "string"
}

ํŠน์ด ์‚ฌํ•ญ

์„ค๋ฌธ์„ ์ƒ์„ฑํ•  ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น ์œ ์ €์˜ ํ†ต๊ณ„ ํ…Œ์ด๋ธ” ์—…๋ฐ์ดํŠธ

๊ธฐ๋Šฅ ์„ค๋ช…

์„ค๋ฌธ์„ ์ƒ์„ฑํ•  ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น ์œ ์ €์˜ ํ†ต๊ณ„ ํ…Œ์ด๋ธ” ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ

  • ์„ค๋ฌธ ์ƒ์„ฑ api๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ , ์ •์ƒ์ ์ธ ์š”์ฒญ์ด๋ผ๋ฉด ํ•ด๋‹น ์œ ์ €์˜ ํ†ต๊ณ„ ํ…Œ์ด๋ธ”์„ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.
  • ์งˆ๋ฌธ๋งˆ๋‹ค ํ†ต๊ณ„ ์œ ํ˜• ํ•„๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • ์ง‘๊ณ„ ์œ ํ˜• : ๋Œ€์‹œ๋ณด๋“œ ์œ ํ˜•๋งˆ๋‹ค ์ง‘๊ณ„ ์œ ํ˜•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
    • RATIO
    • AVERAGE
  • ๋Œ€์‹œ๋ณด๋“œ ์œ ํ˜• : ์งˆ๋ฌธ๋งˆ๋‹ค ๋Œ€์‹œ๋ณด๋“œ ์œ ํ˜•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
    • BEST_WORTH
    • CHARACTER
    • MONEY
    • HAPPY
    • SAD

์œ ์ € ๋ณ„ ํ†ต๊ณ„

{
    "wikiId": "uuid",
    // period์™€ relation ์ค‘ ํ•˜๋‚˜๋งŒ ์กด์žฌ
    "filter_type": "PERIOD" or "RELATION",
    "filter_value": "work",
    "answers": [
        { 
            "questionId": "uuid", 
            "total_count": 100,
            "options": [ { "optionId": "option id", "legend": "string", "count": 10 }, ... ]
        }
    ]
}

์ „์ฒด ํ†ต๊ณ„

ํ•ด๋‹นํ•˜๋Š” ์ง‘๊ณ„ ์œ ํ˜•๋งŒ ์ „์ฒด ํ†ต๊ณ„๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.

  • ์ง‘๊ณ„ ์œ ํ˜•
    • AVERAGE

ํŠน์ด ์‚ฌํ•ญ

์ „์ฒด ํ†ต๊ณ„๋Ÿ‰ ํ•„์š”ํ•œ ๋Œ€์‹œ๋ณด๋“œ ๊ณ„์‚ฐ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

๊ธฐ๋Šฅ ์„ค๋ช…

์ „์ฒด ํ†ต๊ณ„๋Ÿ‰ ํ•„์š”ํ•œ ๋Œ€์‹œ๋ณด๋“œ ๊ณ„์‚ฐ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ

  • Period, Relation ๋ณ„๋กœ ์ „์ฒด ํ†ต๊ณ„๋Ÿ‰ ๊ณ„์‚ฐ
    • MONEY ๋Œ€์‹œ๋ณด๋“œ ํƒ€์ž…
  • Dashboard ์กฐํšŒ api ์‘๋‹ต์— ํ•ด๋‹น ๊ฐ’ ์„ค์ •

ํŠน์ด ์‚ฌํ•ญ

JwtExceptionHandlerFilter์—์„œ CORS ์„ค์ •

๋ฒ„๊ทธ ํ˜„์ƒ

JwtExceptionHandlerFilter๋ฅผ ๊ฑฐ์น˜๋Š” ๊ฒฝ์šฐ CORS ์„ค์ •์ด ์ ์šฉ๋˜์ง€ ์•Š์Œ

์žฌํ˜„ ๋ฐฉ๋ฒ•

์˜ˆ์ƒํ–ˆ๋˜ ๋™์ž‘

์Šคํฌ๋ฆฐ์ƒท

ํŠน์ด ์‚ฌํ•ญ

๋น„์œจ ๊ณ„์‚ฐ ๋Œ€์‹œ๋ณด๋“œ ์ปดํฌ๋„ŒํŠธ totalCount ๋ฒ„๊ทธ

๋ฒ„๊ทธ ํ˜„์ƒ

๋น„์œจ ๊ณ„์‚ฐ ๋Œ€์‹œ๋ณด๋“œ ์ปดํฌ๋„ŒํŠธ totalCount๊ฐ€ ์‹ค์ œ ๋ฐ์ดํ„ฐ์™€ ๋งž์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ์ƒํ–ˆ๋˜ ๋™์ž‘

์ง์ ‘์ž…๋ ฅ์ผ ๊ฒฝ์šฐ์—๋„ totalCount๋Š” ์ฆ๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

JWT ์ธ์ฆ ๊ตฌํ˜„

๊ธฐ๋Šฅ ์„ค๋ช…

JWT๋ฅผ ์ด์šฉํ•ด ์ธ์ฆ์„ ๊ตฌํ˜„ํ•œ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ

  • ๋กœ๊ทธ์ธ ์‹œ, accessToken๊ณผ refreshToken์„ ๋ฐœ๊ธ‰ํ•œ๋‹ค.
  • accessToken๊ณผ refreshToken์„ ์ด์šฉํ•ด ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•œ๋‹ค.

ํŠน์ด ์‚ฌํ•ญ

์ธ์ฆ ํ•„ํ„ฐ permit Url์— Method ํ•จ๊ป˜ ์ ์šฉ

๊ธฐ๋Šฅ ์„ค๋ช…

์ธ์ฆ ํ•„ํ„ฐ๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๋Š” url์— ํŠน์ • method๋งŒ ์ ์šฉ๋˜๋„๋ก ์ˆ˜์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ

  • /survey -> POST /survey
  • /users -> GET /users

ํŠน์ด ์‚ฌํ•ญ

Question ๋กœ์ปฌ ์บ์‹œ ๋“ฑ๋ก

๊ธฐ๋Šฅ ์„ค๋ช…

์„œ๋น„์Šค ํŠน์„ฑ ์ƒ question์— ๋Œ€ํ•œ ์ •๋ณด๋Š” write๊ฐ€ ์ ๊ณ  read๊ฐ€ ๋งŽ์€ ์ž‘์—…์ž„
๊ธ€๋กœ๋ฒŒ ์บ์‹œ(๋ ˆ๋””์Šค)๋ฅผ ๋„์ž…ํ•˜๊ธฐ์—” ์ธํ”„๋ผ ์ž์›์ด ๋ถ€์กฑํ•œ ์ƒํ™ฉ
question์— ๋Œ€ํ•œ ๋กœ์ปฌ ์บ์‹œ๋ฅผ ์ƒ์„ฑํ•ด์„œ ์‚ฌ์šฉ
Map<String, Question>์˜ ํ˜•ํƒœ๋กœ..?

์š”๊ตฌ ์‚ฌํ•ญ

ํŠน์ด ์‚ฌํ•ญ

Option์— order ํ•„๋“œ ์ถ”๊ฐ€

๊ธฐ๋Šฅ ์„ค๋ช…

Option์— order ํ•„๋“œ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ

  • Option Entity์— order ํ•„๋“œ ์ถ”๊ฐ€
  • ๋ฌธํ•ญ ์กฐํšŒ ์‹œ Option order ๊ธฐ์ค€ ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ์‘๋‹ต

๋นŒ๋ฆด ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์•ก์ˆ˜ ์„ค์ •

๊ธฐ๋Šฅ ์„ค๋ช…

์„ค๋ฌธ ์ƒ์„ฑ ์‹œ, ๋นŒ๋ฆด ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์•ก์ˆ˜ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ

  • ์„ค๋ฌธ ์ƒ์„ฑ ์‹œ BORROWING_LIMIT ๋ฌธํ•ญ์˜ MANUAL ๋‹ต๋ณ€ ํƒ€์ž…์˜ ์ตœ๋Œ“๊ฐ’์€ 1,000,000,000์›(10์–ต)์ž…๋‹ˆ๋‹ค.

COSR ๊ด€๋ จ WebConfigure ์ถ”๊ฐ€

๊ธฐ๋Šฅ ์„ค๋ช…

cors ๊ด€๋ จ ์„ค์ •์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ

  • origin์€ localhost์™€ namui-wiki.life ๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • method๋Š” get, post, put, patch, delete ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํŠน์ด ์‚ฌํ•ญ

refresh token DB์— ์ €์žฅ์•ˆ๋จ

๋ฒ„๊ทธ ํ˜„์ƒ

๋กœ๊ทธ์ธ ์‹œ refresh token์ด DB์— ์ €์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์žฌํ˜„ ๋ฐฉ๋ฒ•

์˜ˆ์ƒํ–ˆ๋˜ ๋™์ž‘

์Šคํฌ๋ฆฐ์ƒท

ํŠน์ด ์‚ฌํ•ญ

mongodb๋Š” rdb์™€ ๋‹ฌ๋ฆฌ dirty checking์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ณ ๋กœ, setRefreshtoken ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ํ›„ save ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๋ณ„ ๋Œ€์‹œ๋ณด๋“œ ์กฐํšŒ API

๊ธฐ๋Šฅ ์„ค๋ช…

์‚ฌ์šฉ์ž๋ณ„ ๋Œ€์‹œ๋ณด๋“œ ์กฐํšŒ API ๊ตฌํ˜„

์š”๊ตฌ ์‚ฌํ•ญ

  • ์ธ์ฆ๋˜๊ณ  ํšŒ์›๊ฐ€์ž…๋œ ์‚ฌ์šฉ์ž๋งŒ ํ˜ธ์ถœ ๊ฐ€๋Šฅ
  • dashboard ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ์ •์ œ ํ›„ ์‘๋‹ต

image

ํŠน์ด ์‚ฌํ•ญ

์•Œ๋žŒ ๊ด€๋ จ API ๊ตฌํ˜„

๊ธฐ๋Šฅ ์„ค๋ช…

notification ๊ด€๋ จ api ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ

  • ์„ค๋ฌธ ์ƒ์„ฑ ์‹œ ๋‚˜์˜ ์•Œ๋ฆผ ๋ฆฌ์ŠคํŠธ์— ํ•ด๋‹น ์‚ฌํ•ญ์„ ์ €์žฅํ•œ๋‹ค.

GET /notifications

๋‚˜์˜ ์•Œ๋ฆผ ์กฐํšŒ

PUT /notifications/:notificationId

notificationId์— ํ•ด๋‹นํ•˜๋Š” ์•Œ๋žŒ์„ ์ฝ์Œ ์ฒ˜๋ฆฌํ•œ๋‹ค.

๋Œ€์‹œ๋ณด๋“œ CHARACTER Type์— ๊ฐ ํ•ญ๋ชฉ๋ณ„๋กœ questionId ํฌํ•จ

๊ธฐ๋Šฅ ์„ค๋ช…

๋Œ€์‹œ๋ณด๋“œ์˜ CHARACTER ํƒ€์ž…์—์„œ questionId๋ฅผ ํฌํ•จํ•˜๋„๋ก ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ

AS-IS

            {
                "dashboardType": "CHARACTER",
                "questionId": "65d84728cfc30b23f358ca7c",
                "friendly": true,
                "similar": true,
                "mbti": true,
                "busy": false
            },

TO-BE

           {
                "dashboardType": "CHARACTER",
                "characters": [
                    {
                        "name": "FRIENDLINESS_LEVEL",
                        "value": true,
                        "questionId": "65d84728cfc30b23f358ca6f"
                    },
                    {
                        "name": "PERSONALITY_TYPE",
                        "value": true,
                        "questionId": "65d84728cfc30b23f358ca70"
                    },
                    {
                        "name": "MBTI_IMMERSION",
                        "value": true,
                        "questionId": "65d84728cfc30b23f358ca71"
                    },
                    {
                        "name": "WEEKEND_COMMITMENTS",
                        "value": false,
                        "questionId": "65d84728cfc30b23f358ca72"
                    }
                ]
            }

ํŠน์ด ์‚ฌํ•ญ

Jwt ์ถ”๊ฐ€ ๊ตฌํ˜„

๊ธฐ๋Šฅ ์„ค๋ช…

  • filter์—์„œ์˜ ์—๋Ÿฌ ํ•ธ๋“ค๋ง
  • ํ•„ํ„ฐ ์ดํ›„ ํ† ํฐ ์ •๋ณด ํ™œ์šฉ
  • refresh ๊ตฌํ˜„

์š”๊ตฌ ์‚ฌํ•ญ

ํŠน์ด ์‚ฌํ•ญ

  • #6 ์ฝ”๋“œ ๋ฆฌ๋ทฐ์— ๋Œ€ํ•œ ์ˆ˜์ •๋„ ์—ฌ๊ธฐ์„œ ๊ฐ™์ด ์ง„ํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

swagger ์„ค์ •

๊ธฐ๋Šฅ ์„ค๋ช…

์š”๊ตฌ ์‚ฌํ•ญ

swagger ์„ค์ •์œผ๋กœ API ๋ฌธ์„œ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

ํŠน์ด ์‚ฌํ•ญ

configmap์œผ๋กœ application.yaml ์ฃผ์ž…

๊ธฐ๋Šฅ ์„ค๋ช…

application.yaml์„ configmap์„ ์ด์šฉํ•ด pod์— ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ

ํŠน์ด ์‚ฌํ•ญ

์ž‘์„ฑ ๋ฐฉ๋ฒ•์€ ์˜จ๋ผ์ธ์œผ๋กœ ๊ณต์œ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค

๋ฌธํ•ญ ์กฐํšŒ api์— ํƒ€์ž…๋ณ„ ํ•„ํ„ฐ ์ถ”๊ฐ€

๊ธฐ๋Šฅ ์„ค๋ช…

๋ฌธํ•ญ ์กฐํšŒ api์— ๋ฌธํ•ญ ํƒ€์ž…๋ณ„ ํ•„ํ„ฐ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ

  • QuestionType์— ๋”ฐ๋ฅธ ๋ฌธํ•ญ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

ํƒ€์ž…

  • OX
  • MULTIPLE_CHOICE
  • SHORT_ANSWER
  • NUMERIC_CHOICE

ํŠน์ด ์‚ฌํ•ญ

Option์„ Question์œผ๋กœ ๊ท€์†

OptionId๋ฅผ Question์ด ๊ฐ€์ง€๊ณ  ์žˆ์–ด์„œ ํ•ญ์ƒ Option์„ ์กฐํšŒํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, RDB์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•„ NoSql์˜ ํŠน์ง•์„ ๋” ์‚ด๋ฆฌ ์œ„ํ•ด์„œ ํ•œ ์ปฌ๋ ‰์…˜์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋” ์˜ฌ๋ฐ”๋ฅด๋‹ค๋Š” ํŒ๋‹จ์ž…๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ ์„ค๋ช…

Option Collection์„ ์‚ญ์ œ ํ•˜๊ณ , ๊ฐ Question์ด Option์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
Question ๋ณ„๋กœ ํ†ต๊ณ„๋ฅผ ๋‚ด๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ๊ด€๋ฆฌํ•  ํ•„์š” ์—†๋‹ค๊ณ  ํŒ๋‹จํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ

  • ๋Œ€์‹œ๋ณด๋“œ์™€ ์งˆ๋ฌธ ์กฐํšŒ ๋“ฑ ๊ด€๋ จ api ์ˆ˜์ • ํ•„์š”

ํŠน์ด ์‚ฌํ•ญ

SurveyAnswer ์ œ๊ฑฐ

๊ธฐ๋Šฅ ์„ค๋ช…

SurveyAnswer์™€ SurveyAnswer.Answer๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ๋กœ์ง์„ Survey๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ

  • SurveyAnswer๋ฅผ Survey๋กœ, SurveyAnswer.Answer๋ฅผ Survey.Answer๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด์— ๋งž์ถฐ ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

ํŠน์ด ์‚ฌํ•ญ

RuntimeException Handler ๊ตฌ์ถ•

๊ธฐ๋Šฅ ์„ค๋ช…

unchecked exception์„ ์ฒ˜๋ฆฌํ•  Global Handler๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ

  • ApplicationException ํƒ€์ž… ์ •์˜
  • RuntimeException์„ ์ƒ์†๋ฐ›๋Š” ApplicationErrorException ํด๋ž˜์Šค ์ •์˜
  • ์ „์—ญ Exception ํ•ธ๋“ค๋Ÿฌ ์ •์˜

ํŠน์ด ์‚ฌํ•ญ

MULTI_CHOICE ์ผ ๋•Œ ์˜ต์…˜์— MANUAL ํƒ€์ž… ์ถ”๊ฐ€

๊ธฐ๋Šฅ ์„ค๋ช…

MULTI_CHOICE ์ผ ๋•Œ ์˜ต์…˜์— MANUAL ํƒ€์ž… ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ

  • ๋ฌธํ•ญ ์กฐํšŒ ์‹œ ์˜ต์…˜์— MANUAL์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • ์„ค๋ฌธ ์ƒ์„ฑ ์‹œ์—๋Š” ๊ธฐ์กด ์ •์ฑ… ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

ํŠน์ด ์‚ฌํ•ญ

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.