์ธ๋ฑ์ค ๋ฃ๊ธฐ & ์ธ๋ฐ์๋ ์ฟผ๋ฆฌ ์ค์ด๊ธฐ
๊ณฐํฐ๋ทฐ๋ฅผ ์งํํ๋ฉด์, ์ ์ฒด ํ ์คํธ๋ฅผ ์คํํ ๋ ํญ์ 13~16์ด์ ์๊ฐ์ด ๊ฑธ๋ ธ๋ค.
ํ ์คํธ๊ฐ ์ฝ 260๊ฐ์ ๋์์ ๋ ์ด ์ ๋๊ฐ ๋์จ๋ค๊ณ ํ์ ๋, ์ด๋น 20๊ฐ์ ํ ์คํธ๊ฐ ๋์๊ฐ๋ค๊ณ ์๊ฐํ๋ค.
ํ์ง๋ง ๋๋ ๋, ๋ ๋นจ๋ผ์ง๊ธธ ์ํ๋ค...
๊ทธ๋์ ๋ชจ๋ API์ ์ฟผ๋ฆฌ ๋ก๊ทธ๋ฅผ ๋ถ์ํด๋ณด๊ธฐ ์์ํ๋ค.
์ด๋ ๊ฒ ๋ชจ๋ ๋ก๊น ์ true๋ก ์ค์ ํ๊ณ , ๋ก๊ทธ๋ฅผ ๋ถ์ํ๋ฉด์ ์กฐ๊ธ์ฉ ๋ฉ๋ชจ๋ฅผ ์งํํ๋ค.
์ฐ๋ค๋ณด๋, ํ์ํ ๋ถ๋ถ๊ณผ, ์ด๊ฒ ๊ผญ ์์ด์ผ ํ ๊น ์ถ์ ๋ถ๋ถ๋ค์ด ์์๋ค.
์ด์ ๋ํ ๊ฐ๋จํ ์ ๋ฆฌ๋ค๊ณผ, ์ฐ๋ฆฌ ํ์์ ์ฒ๋ฆฌํ ๋ฐฉ๋ฒ์ ๊ณต์ ํด๋ณด๋ ค๊ณ ํ๋ค.
epository.save๋ผ๋ ๋ก์ง์ ์ ๋ง ํํ๊ฒ ์ฌ์ฉํ๋ค.
์ด์ ๋? ๊ฒ๋๊ฒ ํธํ๋ค. ์ง์ง ๋ค๋ฅธ ๋ญ๊ฐ๋ฅผ ์๊ฐํ ํ์๊ฐ ์์๋ค.
ํ์ง๋ง ํธํ๋ค๋๊ฑด? ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ฒ๋ผ ๊ทธ ์์์ ๊ฒ๋๊ฒ ๋ง์ ์ผ๋ค์ ํ ์ ์๋ค๋ ๋ป์ด๋ค.
ํด๋น ์ํฐํฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ค. ๋ง์ฝ ์กด์ฌํ์ง ์๋๋ค๋ฉด insert, ์กด์ฌํ๋ค๋ฉด update๋ฅผ ์ฒ๋ฆฌํ๋ค.
START TRANSACTION
INSERT INTO ~~~~;
SELECT `Workbook` ~~~~;
COMMIT
ํธ๋์ญ์ ์ ์ง์ ๋ง๋ค์ด์ฃผ๋ ๊ฒ์ ์ข์ง๋ง, ํธ๋์ญ์ ์ ํ์ ๋ ํฌ๊ฒ ๋ง๋ค์ด์ ๋ ๋น ๋ฅด๊ฒ ํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
๊ทธ๋ ๊ฒ ๋ณด์์ ๋, select๋ฅผ ๋ฌด์กฐ๊ฑด ๋๊ฐ๋ ์ด๋ฐ ์ฟผ๋ฆฌ๊ฐ ์ข์์ง ๋ชจ๋ฅด๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
๊ทธ๋์, save๋ฅผ ์๋์ ๊ฐ์ด ๋ ๊ฐ์ง ๊ฒฝ์ฐ๋ก ์์ ํ๋ค.
update({id: entity.id}, entity)
๋ก ์ฒ๋ฆฌํด์ฃผ์.
๋ผ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ด๋ฅผ ์์ ํ๋ค.ํ๊ณ ๋๋ ๋ถํ์ํ select๊ฐ ํ๋์ฉ ์ค์ด๋๋ ํจ๊ณผ๋ฅผ ๊ฐ์ง ์ ์์๋ค.
๊ธฐ์กด์๋ ๋น ๋ฅธ ์กฐํ๋ฅผ ์ํด eager๋ฅผ entity์ ์ฐ๊ด๊ด๊ณ์ ๋ฑ๋กํด๋์๋ค.
์ด๋ ๊ฒ ํ๋ฉด, ์ฅ์ ์ด์ ๋จ์ ์ด ์๋ค.
์ด๊ฒ ํ์คํ ๋ชจ๋ select ๋ก์ง์์ ์กฐ์ธํ ๊ฐ์ฒด๋ฅผ ์ด๋ค๋ฉด ์ข์ง๋ง,
๊ทธ๊ฒ ์๋๋ผ๋ฉด ๋ ์ด ๋ ์ ์๋ค๋ ์ ์ ์ธ์งํ๊ณ ์์ง๋ง ๊ฑด๋๋ฆฌ์ง ๋ชปํ๊ณ ์์๋ค(...๋์์ ๋ฐ์ฑํด...)
๊ทธ๋์, ํด๋น ์ธ๋ํค๋ฅผ eager๋ก ์ค์ ํ ๋ชจ๋ ๊ฐ์ฒด์์ eager๋ฅผ ๋บ๋ค.
async findAll() {
return this.repository
.createQueryBuilder('Workbook')
.leftJoinAndSelect('Workbook.category', 'category')
.leftJoinAndSelect('Workbook.member', 'member')
.where('Workbook.isPublic = :state', { state: true })
.getMany();
}
์ด๋ฐ ์์ผ๋ก ํ์ํ ๋ ๋ง๋ค joinํด์ ์ฌ์ฉํ๋ ค๊ณ ์์ ํ๋ค.
ํ์ง๋ง, ์ด๋ ๊ฒ ์์ ํ์ ๋ ์๊ฐํด์ผ ํ๋ ๊ฒ์ด ์์๋ค.
์ฌ์ค ์ง์ง ์ฃผ๋ณ์ ์ด๊ฑฐ ๋ฌด์ญ๋ค๊ณ ์นญ์ผ๊ฑฐ๋ ธ๋ค.
sql์ ๋ค์ด๊ฐ์ explain์ผ๋ก ์ฟผ๋ฆฌ์ ๋ํ ์ฑ๋ฅ์ ์ฒดํฌํ๊ณ , ์ด์ ๋ํ ์ธ๋ฑ์ค๋ฅผ ์ง์ ์ง์ด๋ฃ์ด์ผ๊ฒ ๋ค๋ ์๊ฐ์ ํ๋ค.
๊ทธ๋ฐ๋ฐ....
nestjs๋ ์ฝ๋๋ ๋ฒจ์์ ์ธ๋ฑ์ค๋ฅผ ์๋ ๋ฑ๋กํด์ค๋ค.
๊ทธ๋์ ๋ฅ ๋ค์ด๋น ํด๋ณธ ๊ฒฐ๊ณผ, ์ธ๋ํค๋ ๋ฑ๋ก๋ ๋ ์ธ๋ฑ์ค๋ฅผ ๋ฑ๋ก์์ผ์ฃผ๋ ๊ตฌ์กฐ์ด๋ค.
leftJoin์ ํ๋ ๋ถ๋ถ, orderํ๋ ๋ถ๋ถ, whereํ๋ ๋ถ๋ถ์ ์ ๋ถ ์๊ฐํด๋ณด์๋ค.
๊ฒฐ๊ตญ leftJoin์ ์ธ๋ํค๋ก ๋ฑ๋ก๋์ด์๊ณ , ํด๋น ๋ถ๋ถ์ nestjs+type ormํ๊ฒฝ์์๋ ์ธ๋ฑ์ค๊ฐ ์๋์ ์ผ๋ก ๋ฑ๋ก๋์ด์์๋ค.
where๋ก ์กฐํ๋๋ ๋ถ๋ถ(where/andWhere๋ where/orWhere)์์๋ ๋ณตํฉ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๋ค
orderBy๋ก ์ ๋ ฌ๋๋ ๋ถ๋ถ๋ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํด์ฃผ์๋ค.
์ด๋ ๊ฒ ํ๊ณ ์ ์ฒด ํ ์คํธ๋ฅผ ๋๋ ค๋ณด์๋ค.
์ด์ ํ ์คํธ๋ฅผ ํ๋๋ฐ์ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด 8์ด๋๋ก ์ค์๋ค(์ฌ์ง์ด ์ด์ ๋ณด๋ค ํ ์คํธ์ฝ๋๊ฐ 15๊ฐ ๋์๋ค)
ํ ์คํธ์์๋ ํ ์ด๋ธ์ ๋ ์ฝ๋๊ฐ ๋ง์์ผ 20๊ฐ์ ๋์ธ ๊ฒ์ ๊ฐ์ํ๋ฉด, ์ค์ ํ๋ก๋์ ์์๋ ๋ ์ฑ๋ฅ์ ์ผ๋ก ํฅ์์ ์ผ๊ธฐํ๋ค๊ณ ์๊ฐํ๋ค.
๋ ๋น ๋ฅด๊ฒ ๋ง๋ค๊ธฐ ์ํ ๋น์ฅ์ ํ ์๋ฅผ ์ฒ๋ฆฌํ๊ณ , ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง์ ๊ดํ ์ ๋ฆฌ๋ฅผ ํด์ผ๊ณ๋ค.
๊ทธ๋ผ...twenty thousand...๐ฅ