Skip to content
This repository has been archived by the owner on Feb 19, 2022. It is now read-only.

๐Ÿ™๐Ÿป velog-server clone to Golang

Notifications You must be signed in to change notification settings

OhMinsSup/velog-golang-server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

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

Repository files navigation

story-server

๐Ÿ™๐Ÿป velog-server clone to Golang (Gin)

EP.1 ORM gorm์—์„œ ent๋กœ ๋ณ€๊ฒฝ

์ผ๋‹จ ์˜ค๋Š˜์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค orm์„ ๋ณ€๊ฒฝํ–ˆ๋‹ค. ๋‚ด๊ฐ€ ์ด๊ฑธ ๋ณ€๊ฒฝํ•˜๋Š” ์ด์œ ๋Š” ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ gorm์—์„œ ๋ชจ๋ธ๊ฐ„์˜ ๊ด€๊ณ„์™€ model์˜ ํ•„์ˆ˜๊ฐ’ nullable์„ ํ‘œ์‹œํ•˜๋Š”๊ฒŒ ์ƒ๋‹นํžˆ ๋ถˆํŽธํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฌด์—‡๋ณด๋‹ค ๋ณ€๊ฒฝ์„ ํ•˜์ž๊ณ  ์ƒ๊ฐํ•œ ์ด์œ ๋Š” ๋ญ”๊ฐ€ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์•ˆ๋˜๋Š” ๊ฒƒ ๊ฐ™์•˜๋‹ค. ๊ทธ๋ž˜์„œ ๋ณ€๊ฒฝ์„ ๊ฒฐ์‹ฌํ–ˆ๊ณ  ent๋กœ ๋ณ€๊ฒฝ์„ ํ–ˆ๋‹ค.

ํ˜„์žฌ User ๋ชจ๋ธ๋งŒ ์ƒ์„ฑ์„ ํ–ˆ์ง€๋งŒ ๊ณ„์† ๋ณ€๊ฒฝํ•ด ๋‚˜๊ฐˆ ์˜ˆ์ •์ด๋‹ค.

์˜ค๋Š˜ ํ•œ ์ผ

  • ent orm ์ ์šฉ
  • gin server ๊ตฌ์กฐ ๋ณ€๊ฒฝ๋ฐ docker ํŒŒ์ผ ๋ถ„๋ฆฌ (redis, postgresql)

EP.2 ์œ ์ € ํšŒ์›๊ฐ€์ž…์„ ๊ธฐ๋Šฅ ๊ตฌํ˜„

entgo์—์„œ ๋Œ€ํ•ด์„œ ์กฐ๊ธˆ ์ฐพ์•„๋ดค๋Š”๋ฐ code frist๋กœ ๊ฐœ๋ฐœ๋˜์–ด์„œ ๊ทธ๋Ÿฐ์ง€ ์›์‹œ์ ์œผ๋กœ raw query๋ฅผ ์ง€์›Œํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋งŒ์•ฝ์— ์‚ฌ์šฉํ• ๋ ค๋ฉด ๋นŒ๋“œ์ธ sql ๋ชจ๋“ˆ๊ณผ ์—ฐ๋™ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

์ด๋ฉ”์ผ ๋ฐœ์†ก API๋ฅผ ์ƒ์„ฑํ–ˆ๋Š”๋ฐ ์•„์ฃผ ์ž˜ ์ž‘๋™ํ•˜๊ณ  ์žˆ๋‹ค.

์˜ค๋Š˜ ํ•œ ์ผ

  • ent orm (emailAuth, User, UserProfile) ๋ชจ๋ธ ๊ตฌํ˜„
  • ent orm์—์„œ raw query๊ฐ€ ์ง€์›์ด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋นŒ๋“œ์ธ sql์„ ์—ฐ๋™ํ•ด์„œ ์‚ฌ์šฉ
  • sendEmail API ์ƒ์„ฑ

EP.3 ์œ ์ € ์ฝ”๋“œ ์ธ์ฆ ๊ธฐ๋Šฅ ๊ตฌํ˜„

์˜ค๋Š˜์€ ์œ ์ € ํšŒ์›๊ฐ€์ž…๋ฐ ์ฝ”๋“œ ์ธ์ฆ๋ถ€๋ถ„์„ ๊ตฌํ˜„ํ–ˆ๋‹ค. ์ผ๋‹จ ์ฝ”๋“œ๋กœ register token์„ ๋ฐœ๊ธ‰ ๋ฐ›๋Š” ๋ถ€๋ถ„์€ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰์„ ํ•˜๊ณ  ์žˆ์ง€๋งŒ ๋กœ๊ทธ์ธ ๋ถ€๋ถ„์€ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

์™œ๋ƒํ•˜๋ฉฐ ๋กœ์ปฌ ํšŒ์›๊ฐ€์ž…์ค‘ authToken ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๋Š” ๋ถ€๋ถ„์—์„œ sql ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

insert node to table "auth_tokens": pq: insert or update on table "auth_tokens" violates foreign key constraint "auth_tokens_users_auth_token"

๋‚ด๊ฐ€ table ์„ค๊ณ„๋ฅผ ์ž˜๋ชปํ•œ ๊ฒƒ ๊ฐ™๋‹ค.... ์Œ... ์ •์ƒ์ ์œผ๋กœ ํ•œ ๊ฒƒ ๊ฐ™์€๋ฐ... ์ด๊ฑด ๋‹ค์Œ์— ์ˆ˜์ •ํ•ด์•ผ๊ฒ ๋‹ค.

์˜ค๋Š˜ ํ•œ ์ผ

  • ๋กœ์ปฌ ํšŒ์›๊ฐ€์ž… API
  • ์ฝ”๋“œ ์ธ์ฆ API

EP.4 ์œ ์ € ํšŒ์›๊ฐ€์ž… API

์˜ค๋Š˜์€ ์ €๋ฒˆ ์ด์•ผ๊ธฐ์—์„œ ์œ ์ € ํ† ํฐ์ด ๋ฐœ๊ธ‰์ด ์•ˆ๋˜๋Š” ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค. ์ด์Šˆ์˜ ์›์ธ์€ entgo์—์„œ๋Š” 1:N N:M๋“ฑ ๋‹ค๋Œ€๋‹ค ๊ด€๊ณ„์—์„œ๋Š” column์„ ์„ค์ •ํ•  ๋•Œ s๋ฅผ ๋ถ™์—ฌ์•ผํ•˜๊ณ  user ๋ชจ๋ธ์—์„œ ํ† ํฐ์„ ์ถ”๊ฐ€ํ•ด์ค˜์•ผํ•˜๋Š” ์ด์Šˆ์˜€๋‹ค.

ํ•˜์ง€๋งŒ ํ•œ๊ฐ€์ง€ ์ด์Šˆ๊ฐ€ ๋” ๋ฐœ์ƒํ–ˆ๋Š”๋ฐ, authToken์„ ์ƒ์„ฑํ•˜๋ฉด fk_user_id์— ๊ฐ’์ด ๋“ค์–ด๊ฐ€์•ผํ•˜๋Š”๋ฐ ์™ ์ง€ ๋ชจ๋ฅด๊ฒŒ ๊ฐ’์ด ์•ˆ๋“ค์–ด๊ฐ„๋‹ค... ๋‚ด๊ฐ€ ์ƒ๊ฐํ–ˆ์„ ๋•Œ๋Š” ๋‚ด๊ฐ€ ์ž˜๋ชปํ•œ ๊ฒƒ ๊ฐ™์€๋ฐ ํ•œ๋ฒˆ ๋” ์ด์œ ๋ฅผ ์ฐพ์•„๋ด์•ผ๊ฒ ๋‹ค.

์˜ค๋Š˜ ํ•œ ์ผ

  • ๋กœ์ปฌ ํšŒ์›๊ฐ€์ž… API - (์ €๋ฒˆ ์ด์•ผ๊ธฐ ์ด์Šˆ ์ฒ˜๋ฆฌ)

EP.5 ์œ ์ € ํšŒ์›๊ฐ€์ž… API / ๋กœ๊ทธ์ธ API (2)

์•„์ง๋„ ์œ ์ € ์ธ์ฆ๋ถ€๋ถ„์„ ํ•˜๊ณ  ์žˆ๋‹ค.... authToken ๋ชจ๋ธ๊ณผ ๊ด€๋ จ ์—๋Ÿฌ๋กœ ์˜ค๋ž˜ ์ž‘์—…ํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ๊ทธ ์ด์œ ๋ฅผ ์ฐพ์•˜๋‹ค. ์ง€๊ธˆ authToken ๋ชจ๋ธ์„ ์ƒ์„ฑํ•˜๊ณ  User ๋ชจ๋ธ์— ๋“ฑ๋กํ•˜๋Š” ๊ฒƒ์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ํ…Œ์ด๋ธ”์ด ์ƒ์„ฑ๋  ๋•Œ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ํ…Œ์ด๋ธ”๊ฐ„ ๊ด€๊ณ„๊ฐ€ ์ž˜๋ชป ์„ค์ •๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๋ญ”๊ฐ€ entgo ์ฒ˜์Œ์ด๋ผ ์ด๋Ÿฐ ์‹ค์ˆ˜๋ฅผ ๋งŽ์ดํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์ด์œ ๋Š” ์ฐพ์•˜์ง€๋งŒ ์•„์ง ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ์ด๊ฑธ ๋นจ๋ฆฌ ๊ณ ์ณ์•ผ ํฌ์ŠคํŠธ ์ž‘์„ฑ ๋ถ€๋ถ„์„ ์ง„ํ–‰ ํ•  ํ…๋ฐ...

์˜ค๋Š˜ ํ•œ ์ผ

  • ๋กœ์ปฌ ํšŒ์›๊ฐ€์ž… / ๋กœ๊ทธ์ธ API - (์ €๋ฒˆ ์ด์•ผ๊ธฐ ์ด์Šˆ ์ฒ˜๋ฆฌ)

EP.6 ์œ ์ € ํšŒ์›๊ฐ€์ž… API / ๋กœ๊ทธ์ธ API (3), ์†Œ์…œ ๋กœ๊ทธ์ธ ์ค€๋น„

ํ† ํฐ ๋ฐœ๊ธ‰์— ๋Œ€ํ•œ ์ด์Šˆ๋ฅผ ์ฒ˜๋ฆฌํ–ˆ๋‹ค. ๋„ˆ๋ฌด ์–ด๋ ต๊ฒŒ ์ƒ๊ฐํ–ˆ๋‹ค. ๊ดœํžˆ ๊ด€๊ณ„๋ฅผ ๋งŒ๋“ค๋ ค๋‹ค๊ฐ€ ๋” ๋ณต์žกํ•ด์ง€๋Š” ๊ฒƒ ๊ฐ™์•„์„œ column์— ๊ทธ๋ƒฅ user id๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋‚˜์ค‘์— ์กฐํšŒ ํ•  ๋•Œ join๋ฅผ ํ•˜๋ฉด ๋˜๋Š”๊ฑธ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ๊ทธ๋ž˜๋„ ์„ฑ๊ณต์ ์œผ๋กœ ์ธ์ฆ์ด ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์†Œ์…œ ๋กœ๊ทธ์ธ์„ ์ค€๋น„ํ•˜๊ณ  ์žˆ๋‹ค. ์•„๋งˆ ํŽ˜์ด์Šค๋ถ ๊นƒํ—™ ์นด์นด์˜ค ๊ตฌ๊ธ€์„ ๋„์ž… ํ•  ์˜ˆ์ •์ธ๋ฐ... ์•„์ง์€ ํ™•์‹คํ•˜์ง€ ์•Š๋‹ค

์˜ค๋Š˜ ํ•œ ์ผ

  • ๋กœ์ปฌ ์ธ์ฆ API ๊ตฌํ˜„ ์™„๋ฃŒ
  • ์†Œ์…œ ์ธ์ฆ ํ…Œ์ด๋ธ” ์ƒ์„ฑ
  • ์†Œ์…œ API ์ค€๋น„

EP.7 ์†Œ์…œ ์ธ์ฆ API ๊ตฌํ˜„ (1)

์˜ค๋Š˜์€ ์†Œ์…œ ์ธ์ฆ API๋ฅผ ๊ตฌํ˜„ํ•˜์˜€๋‹ค. facebook, github๋ฅผ ๊ตฌํ˜„ํ•˜์˜€๊ณ  ์ถ”๊ฐ€์ ์œผ๋กœ kakao๋‚œ ๊ตฌ๊ธ€์„ ๊ตฌํ˜„ ํ•  ์˜ˆ์ •์ด๋‹ค. ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ golang์—์„œ multiple type์„ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•œ์ง€ ์‹œ๋„ํ•ด ๋ณผ๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ ํž˜๋“ ๊ฒƒ ๊ฐ™์•„์„œ ์ผ๋‹จ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌํ˜„

์˜ค๋Š˜ ํ•œ ์ผ

  • ์†Œ์…œ callback ๊ตฌํ˜„

EP.8 ์†Œ์…œ ์ธ์ฆ API ๊ตฌํ˜„ (2)

์˜ค๋Š˜๋„ ์–ด๊น€์—†์ด ์†Œ์…œ ์ธ์ฆ์„ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค. ์ผ๋‹จ ํŽ˜์ด์Šค๋ถ ๊นƒํ—™์— ๋Œ€ํ•ด์„œ๋Š” accessToken, profile ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์žˆ์ง€๋งŒ ์นด์นด์˜ค ๋กœ๊ทธ์ธ์˜ ๊ฒฝ์šฐ์—๋Š” token์„ ๋ชป๊ฐ€์ ธ์˜ค๊ณ  ์žˆ๋‹ค. ์ผ๋‹จ ๋„คํŠธ์›Œํฌ์—์„œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์€ ์„ฑ๊ณตํ•œ ๊ฒƒ ๊ฐ™์€๋ฐ... ์กฐ๊ธˆ ๋” ๋กœ๊น…์ด ํ•„์š”ํ•œ ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์›๋ž˜ ์†Œ์…œ ๋กœ๊ทธ์ธ์‹œ ๋Œ€๊ฒŒ ์ฝ”๋“œ ์ค‘๋ณต, switch๋ฌธ์„ ์‚ฌ์šฉ์„ ํ–ˆ์—ˆ๋Š”๋ฐ, ์ด๋ฒˆ์— ํŒจํ„ด๋งค์นญ์„ ๊ตฌํ˜„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์–ด์„œ ์‚ฌ์šฉ์„ ํ•˜์˜€๋‹ค, ๋งค์šด ๋งŒ์กฑ์Šค๋Ÿฝ๋‹ค.

์˜ค๋Š˜ ํ•œ ์ผ

  • ํŽ˜์ด์Šค๋ถ token, profile
  • ๊นƒํ—™ token, profile
  • kakao

EP.9 ์†Œ์…œ ์ธ์ฆ API ๊ตฌํ˜„ (3)

์˜ค๋Š˜๋„ ๋˜‘๊ฐ™์ด ์†Œ์…œ ์ธ์ฆ์„ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค. ์ผ๋‹จ kakao๋กœ ๋ถ€ํ„ฐ token๊ณผ ์œ ์ € profile ์ •๋ณด๋ฅผ ์ •์ƒ์ ์œผ๋กœ ๊ฐ€์ ธ์˜ค๊ณ  ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ํ•œ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ์†Œ์…œ profile ์ •๋ณด๊ฐ€ ์ „๋ถ€ ํƒ€์ž…์ด ๋‹ฌ๋ผ์„œ ๊ณตํ†ต์ ์ธ ์ฒ˜๋ฆฌ๊ฐ€ ์–ด๋ ต๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ profile๋“ค์„ ๊ฐ๊ฐ ํŒŒ์‹ฑ ํ›„ ๊ณตํ†ต๋œ ํƒ€์ž…์œผ๋กœ ์žฌ์ •์˜๋ฅผํ•ด์„œ ๋ฆฌํ„ดํ•ด์ค˜์•ผ๊ฒ ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์‹ค์ œ ์†Œ์…œ ํšŒ์›๊ฐ€์ž…๋ฐ ๋กœ๊ทธ์ธ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•ด ์งˆ ๊ฒƒ ๊ฐ™๋‹ค.

์˜ค๋Š˜ ํ•œ ์ผ

  • kakao token, profile

EP.10 ์†Œ์…œ ์ธ์ฆ API ๊ตฌํ˜„ (4)

์ด์ œ ์†Œ์…œ ์ธ์ฆ์ด ๊ฑฐ์˜ ๋๋‚˜๊ฐ„๋‹ค.... ์ •๋ง ๊ธธ์—ˆ๋‹ค... ์ด์ œ API๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋ฉด์„œ ์œ ์ €๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋กœ๊ทธ์ธํ•˜๋Š” ํ…Œ์ŠคํŠธ๋งŒ ์ž‘์—…ํ•˜๋ฉด ๋์ด๋‹ค. ๊ทธ๋Ÿผ ์ž‘์„ฑ ํŽ˜์ด์ง€๋ฅผ ์ž‘์—…ํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

์˜ค๋Š˜ ํ•œ ์ผ

  • ์†Œ์…œ ์ธ์ฆ ๊ธฐ๋Šฅ (1)

EP.11 ์†Œ์…œ ์ธ์ฆ API ๊ตฌํ˜„ (5)

์ •๋ง ์†Œ์…œ ์ธ์ฆ์ด ์ •๋ง ๊ธธ์ œ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๋ญ”๊ฐ€ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ์ƒ๊ฐํ•˜๊ณ  ์ข€ ๋” ์‰ฝ๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๋ฅผ ์ƒ๊ฐํ•ด์„œ ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ž˜๋„ ์ •๋ง ๊ฑฐ์˜ ๋‹ค ๋๋‚˜๊ฐ„๋‹ค. ์ด์ œ ์†Œ์…œ ํšŒ์›๊ฐ€์ž…๋งŒ ์ฒ˜๋ฆฌํ•˜๋ฉด ์ •๋ง ๋์ด๋‹ค.

์†Œ์…œ ํšŒ์› ๊ฐ€์ž… ๋‹ค์Œ์—๋Š” ํฌ์ŠคํŠธ ์ž‘์„ฑ ํŽ˜์ด์ง€๋ฅผ ์ž‘์—…ํ•˜๊ฒŒ ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฐœ์ƒํ•˜๋Š” ์ด์Šˆ๋Š” ์•„๋งˆ ํƒœ๊ทธ ์ฒ˜๋ฆฌ๊ฐ€ ๋  ๊ฒƒ ๊ฐ™๋‹ค. gorm์—์„œ๋Š” ๊ตฌํ˜„์€ ํ–ˆ๋Š”๋ฐ ๋ญ”๊ฐ€ ๋ถ€์กฑํ•œ ๋Š๋‚Œ์„ ๋งŽ์ด ๋ฐ›์•˜๋Š”๋ฐ ์ด๋ฒˆ์—๋Š” ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌ ํ• ๋ ค๊ณ  ํ•œ๋‹ค.

์˜ค๋Š˜ ํ•œ ์ผ

  • ์†Œ์…œ ์ธ์ฆ ๊ธฐ๋Šฅ (1)
  • ์†Œ์…œ token์œผ๋กœ profile ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ

EP.12 ์†Œ์…œ ์ธ์ฆ API ๊ตฌํ˜„ (6)

์†Œ์…œ ํšŒ์›๊ฐ€์ž… ์™„๋ฃŒ!!!

์˜ค๋Š˜ ํ•œ ์ผ

  • ์†Œ์…œ ํšŒ์›๊ฐ€์ž…

EP.13 ์œ ์ € ์ธ์ฆ ๋ฏธ๋“ค์›จ์–ด ์ˆ˜์ •

์˜ค๋Š˜์€ gorm ์œผ๋กœ ์ž‘์„ฑํ•œ ๋ฏธ๋“ค์›จ์–ด๋ฅผ entgo ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ–ˆ๋‹ค. ์ค‘๊ฐ„์— ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰์ด ์•ˆ๋˜๋Š” ์ด์Šˆ๊ฐ€ ์žˆ์žˆ์–ด๋Š”๋ฐ database/sql ์„ ์‚ฌ์šฉํ•ด์„œ entgo ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด sql driver๊ฐ€ ์—†๋Š”๋‹ค๋Š” ์ด์Šˆ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ, entgo ๋ฌธ์„œ์— github.com/jackc/pgx/v4/stdlib ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค๋Š” ๋‚ด์šฉ์„ ๋ณด๊ณ  ์ˆ˜์ •ํ–ˆ๋‹ค.

์˜ค๋Š˜ ํ•œ ์ผ

  • ๋ฏธ๋“ค์›จ์–ด

EP.14 ํฌ์ŠคํŠธ ์ž‘์„ฑ (1)

์˜ค๋Š˜์€ ๋“œ๋””์–ด ํฌ์ŠคํŠธ ์ž‘์„ฑ API๋ฅผ ์ž‘์—…ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ž‘์—…์ค‘ ์ƒ๋‹นํžˆ ๊ท€์ฐฎ์€ ๋ฒ„๊ทธ๋“ค์ด ๋งŽ์•˜๋Š”๋ฐ, ์ฒซ๋ฒˆ์งธ๋Š” import cycle not allowed์ด๋‹ค.

ํ•ด๋‹น ์˜ค๋ฅ˜๋Š” Go๋Š” ์ˆœํ™˜ ์ข…์†์„ฑ์„ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ ์‹œ๊ฐ„ ๋™์•ˆ import cycle not allowed ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ด์Šˆ๊ฐ€ ์žˆ์—ˆ๊ณ  ๋‘๋ฒˆ์งธ๋Š” UrlSlug๋‚ด์šฉ์ด ์ด์ƒํ•˜๊ฒŒ ์ €์žฅ๋˜๋Š” ์ด์Šˆ์ด๋‹ค. ์ด๊ฑด ๋‹ค์Œ๋ฒˆ์— ์ˆ˜์ •ํ•ด์•ผ๊ฒ ๋‹ค.

์˜ค๋Š˜ ํ•œ ์ผ

  • import cycle not allowed์ดํ•œ ํด๋” ๊ตฌ์กฐ ๋ณ€๊ฒฝ
  • ํฌ์ŠคํŠธ ์ž‘์„ฑ API ์ถ”๊ฐ€

EP.15 ํฌ์ŠคํŠธ ์ž‘์„ฑ (2)

์˜ค๋Š˜์€ ์–ด์ œ ์žˆ์—ˆ๋˜ ๋ฒ„๊ทธ๋“ค์„ ์ˆ˜์ •ํ•˜๊ณ  ํƒœ๊ทธ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•ด์„œ ํฌ์ŠคํŠธ ์ž‘์„ฑ์‹œ ์ถ”๊ฐ€ํ•˜๋Š” ๋กœ์ง์„ ์ž‘์„ฑํ•˜๊ณ  ์žˆ๋‹ค. ์ „์— ๋น„์Šทํ•œ ์ž‘์—…์„ ํ–ˆ์—ˆ๋Š”๋ฐ ์ด๋ฒˆ์—๋Š” ์ข€ ๋” golang ์Šค๋Ÿฌ์šด ๋ฐฉ๋ฒ•์œผ๋กœ ์ž‘์—…์„ ํ• ๋ ค๊ณ  ํ•œ๋‹ค. ๋ฌด์—‡๋ณด๋‹ค ์ „์— ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ๋Š” ์ค‘๋ณต๋ฐ ์“ธ๋ฐ์—†๋Š” ์ž‘์—…๋„ ๊ฐ™์ด ํ•œ ๊ฒƒ ๊ฐ™์•„์„œ ๊ทธ ๋ถ€๋ถ„์„ ์ˆ˜์ • ํ•  ์˜ˆ์ •์ด๋‹ค.

์˜ค๋Š˜ ํ•œ ์ผ

  • ํƒœ๊ทธ ๋ชจ๋ธ ์ƒ์„ฑ
  • ํฌ์ŠคํŠธ ์ž‘์„ฑ API ์ด์Šˆ ์ฒ˜๋ฆฌ (urlSlug)
  • ํฌ์ŠคํŠธ ์ž‘์„ฑ API์—์„œ ํƒœ๊ทธ ์—ฐ๊ฒฐ (1)

EP.16 ํฌ์ŠคํŠธ ์ž‘์„ฑ (3)

์˜ค๋Š˜์€ ํฌ์ŠคํŠธ ์ž‘์„ฑํ•˜๋Š” API ์ž‘์—…์ด ๋๋‚ฌ๋‹ค. ๋“œ๋””์–ด ์ด์ œ ์—…๋ฐ์ดํŠธํ•˜๋Š” API, ์ƒ์„ธ API๋ฅผ ๋งŒ๋“ค๋ฉด ๋Œ€๋žต์ ์ธ ํฌ์ŠคํŠธ ์ž‘์—…์ด ๋๋‚˜๊ณ  ๋ฆฌ์ŠคํŠธ๊นŒ์ง€ ์™„์„ฑํ•˜๋ฉด ๋˜๊ฒ ๋‹ค

์˜ค๋Š˜ ํ•œ ์ผ

  • ํฌ์ŠคํŠธ ์ž‘์„ฑ

About

๐Ÿ™๐Ÿป velog-server clone to Golang

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages