-
Notifications
You must be signed in to change notification settings - Fork 1
TypeORM โ Query Builder
์ต๊ฒ๊ธฐ edited this page Dec 14, 2023
·
2 revisions
TypeORM์ ์ฟผ๋ฆฌ๋น๋๋ SQL ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๊ณ ์คํํ๋๋ฐ ์ฌ์ฉ๋๋ tool์ด๋ค.
TypeORM์ find, save ๋ฑ ๋จ์ํ SQL์ฟผ๋ฆฌ๋ฅผ ์ํํ ์ ์๋ ๊ธฐ๋ณธ์ ์ธ ํจ์๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋, ๋ณต์กํ SQL ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋๋ฐ ์์ด์๋ ๋ง์ ์ด๋ ค์์ด ์๋ค.
๋ฐ๋ผ์ ์ด๋ฌํ ๊ฒฝ์ฐ Query Builder ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ SQL ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํ๋ค.
const stories = await this.storyRepository
.createQueryBuilder('story')
.innerJoinAndSelect('story.place', 'place')
.addSelect(
`
(${RadiusOfEarth} * 2 * ATAN2(
SQRT(
SIN(RADIANS(place.latitude - ${userLatitude}) / 2) *
SIN(RADIANS(place.latitude - ${userLatitude}) / 2) +
COS(RADIANS(${userLatitude})) * COS(RADIANS(place.latitude)) *
SIN(RADIANS(place.longitude - ${userLongitude}) / 2) *
SIN(RADIANS(place.longitude - ${userLongitude}) / 2)
),
SQRT(1 - (
SIN(RADIANS(place.latitude - ${userLatitude}) / 2) *
SIN(RADIANS(place.latitude - ${userLatitude}) / 2) +
COS(RADIANS(${userLatitude})) * COS(RADIANS(place.latitude)) *
SIN(RADIANS(place.longitude - ${userLongitude}) / 2) *
SIN(RADIANS(place.longitude - ${userLongitude}) / 2)
))
))`,
'distance',
)
.having('distance <= :radius', { radius })
.orderBy('distance', 'ASC')
.offset(offset)
.limit(limit)
.getMany();
-
SQL Injection ๋ฐฉ์ง Query Builder๋ ํ๋ผ๋ฏธํฐ ๋ฐ์ธ๋ฉ์ ํตํด SQL injection ๊ณต๊ฒฉ์ ๋ฐฉ์งํ ์ ์๋ค.
-
์ฑ๋ฅ ์ต์ ํ ํ์ํ ๋ฐ์ดํฐ๋ง ์ ํ์ ์ผ๋ก ๋ก๋ํ์ฌ ๋คํธ์ํฌ ์ฌ์ฉ๋๊ณผ ์๋ต ์๊ฐ์ ์ต์ ํํ ์ ์์ต๋๋ค.
- ๐จ ์ฑ ๋์์ธ
- ๐ API
- ๐๏ธ ๊ทธ๋ผ์ด๋ ๋ฃฐ
- ๐ ์ฝ๋ ์ปจ๋ฒค์
- ๐ซก ๋ง๋ฌด๋ฆฌ ์๊ฐ
- NaverLogin-SDK-iOS SPM ๋ฏธ์ง์ ์ด์
- ํ์ฑ์ค - ํํฝํ์ ์ํคํ ์ฒ ๊ตฌ์กฐ
- ํ์ฑ์ค - ์์ฐ์ฑ ์๋ ๋คํธ์ํฌ
- ํ์ฑ์ค - ๋ชจ๋ ํ ํ๋ฆฟ
- ์ด์ค๋ณต - NaverMap-SDK-iOS SPM๋ง๋ค๊ธฐ
- ์ ์ธํธ, ์ต๊ฒ๊ธฐ - BE ์ด๋ฏธ์ง ์ฒ๋ฆฌ
- ์์ ๋ฏผ - multipart/form-data
- ํ์ฑ์ค - ๋คํธ์ํฌ ์์ฒญ
- ์ต๊ฒ๊ธฐ - Exception Filter, Slack ์๋ฆผ
- ํ์ฑ์ค - Swipe Back
- ํ์ฑ์ค - ํด๋ฌ์คํฐ๋ง
- ์ ์ธํธ - Push Server-1
- ์ ์ธํธ - Push Server-2
- ์ด์ค๋ณต - ๋ฐฑ์๋ ์ง์์ ์ค์์ฑ
- 10์ 11์ผ (์) - ์ฑ ์๋น์ค ์ฃผ์ ๊ณ ๋ฏผ
- 10์ 12์ผ (๋ชฉ) - ์ฑ ์๋น์ค ์ฃผ์ ํ์
- 10์ 17์ผ (ํ) - ์ฑ ๋์์ธ ์ค๊ณ
- 10์ 24์ผ (ํ) - ์ฑ ์์ธ ๊ธฐํ
- DB ์ ํ ๊ณผ์
- TypeORM ์ ํ ์ด์
- Docker ์ ํ ์ด์
- Github Action ์ ํ ์ด์
- DB์๋ฒ์ ์๋น์ค ์๋ฒ๋ฅผ ๋ถ๋ฆฌํ ์ด์
- ์๋์์ฑ์ ์ํ Trie ๊ตฌ์กฐ๋ฅผ ์ ๊ฑฐํ๊ณ , naver cloud search๋ก ๋์ฒดํ ์ด์
- 1์ฃผ์ฐจ ๋ชฉํ - ํ์ ์ ์ํ ์ค๋น
- 2์ฃผ์ฐจ ๋ชฉํ - UI ๋ฐ DB ๊ตฌ์ถ
- 3์ฃผ์ฐจ ๋ชฉํ - ๋ฐฑ์๋์ ์๋น์ค ์ฐ๊ฒฐ
- 4์ฃผ์ฐจ ๋ชฉํ - QA ํด๋ณด๊ธฐ
- 5์ฃผ์ฐจ ๋ชฉํ - ๋ฒ๊ทธํฝ์ค
- 11์ 07์ผ (ํ) - ํ๋ก์ ํธ ์ค๋ช
- 11์ 16์ผ (๋ชฉ) - ํ๋ก์ ํธ ์งํํ๋ฉด์ ์๊ธด ๊ณ ๋ฏผ
- 11์ 21์ผ (ํ) - ๋ฉํ ๋ถ๋ค ํผ๋๋ฐฑ
- 11์ 28์ผ (ํ) - ํธ๋ฌ๋ธ ์ํ ํผ๋๋ฐฑ
- 12์ 05์ผ (ํ) - ๊ธฐ์ ์ ๋์ ์ ๋ํ ๊ณ ๋ฏผ
- 12์ 12์ผ (ํ) - ์ต์ข ๋ฐํ ํผ๋๋ฐฑ