Skip to content

netscout/AngularShop_sources

Repository files navigation

Angular 11 / ASP.NET Core 3.1 / Spring Boot 2.3 with Kotlin / DRF 3.11

๊ฐœ์ธ์ ์ธ ๊ณต๋ถ€๋ฅผ ์œ„ํ•ด ๊ฐ„๋‹จํ•œ ์‡ผํ•‘๋ชฐ ์ƒ˜ํ”Œ์„ ์ œ์ž‘ํ•œ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.

๊ทธ๋™์•ˆ SPA๋ฅผ ํ†ตํ•œ ํ”„๋ก ํŠธ์—”๋“œ ๊ตฌํ˜„๊ณผ SPA-๋ฐฑ์—”๋“œ ๊ฐ„์˜ ํ†ต์‹ , ๊ทธ๋ฆฌ๊ณ  ASP.NET Core 3.1 ๋“ฑ์˜ ์ตœ์‹  ASP.NET Core ๊ตฌํ˜„๊ณผ Spring Boot, Django Rest Framework(์ดํ•˜ DRF)๋“ฑ์˜ ๊ตฌํ˜„์— ๋Œ€ํ•ด ๊ถ๊ธˆํ–ˆ๊ธฐ์— ๊ถ๊ธˆ์ฆ์„ ํ•ด์†Œํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Angular 11์œผ๋กœ ํ”„๋ก ํŠธ์—”๋“œ๊ฐ€ ๊ตฌํ˜„๋˜์—ˆ์œผ๋ฉฐ ๋™์ผํ•œ ํ”„๋ก ํŠธ์—”๋“œ์— ๋Œ€ํ•ด ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ๋ฐฑ์—”๋“œ๋ฅผ ๊ฐ๊ฐ ASP.NET Core 3.1, Spring Boot 2.3(Kotlin), DRF 3.11๋กœ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค. (DRF์˜ ๊ฒฝ์šฐ ์†์„ฑ๋ช…์„ ์บ๋ฉ€ ์ผ€์ด์Šค ๋Œ€์‹ ์— ์Šค๋„ค์ดํฌ ์ผ€์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํƒ“์— Angular ํ”„๋กœ์ ํŠธ๊ฐ€ ๊ตฌ๋ถ„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.)

์ฒ˜์Œ์—๋Š” ์ฑ… ํ˜•ํƒœ๋กœ ์ •๋ฆฌํ•˜๋ ค๊ณ  ์ƒ๊ฐํ–ˆ์—ˆ๊ธฐ์— ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ์ฑ…์˜ ๊ฐ ์ฑ•ํ„ฐ์— ํ•ด๋‹นํ•˜๋„๋ก ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๊ฐ ์ฑ•ํ„ฐ์˜ ๋‚ด์šฉ์€ https://blog.naver.com/netscout82/221993591322 ์—์„œ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œ๊ฐ„์˜ ์—ฌ์œ ๊ฐ€ ์—†์—ˆ๊ธฐ์— ์ •๋ฆฌ๋œ ๋‚ด์šฉ์€ ์ž์„ธํ•œ ๋‚ด์šฉ๋ณด๋‹ค๋Š” '๊ทธ๋ƒฅ ์ด๋Ÿฐ ์‹์œผ๋กœ ์ง„ํ–‰ํ•œ๋‹ค' ๋Š๋‚Œ ์ •๋„๋กœ ์ •๋ฆฌ๋˜์—ˆ์Œ์„ ์–‘ํ•ด๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์†Œ์Šค์ฝ”๋“œ ์‹คํ–‰ ๋ฐฉ๋ฒ•

์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์šฐ์„  MySQL ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋ฅผ ์„ค์ •ํ•˜๊ณ  3๊ฐœ์˜ ๋ฐฑ์—”๋“œ ์ค‘ ํ™•์ธํ•˜๊ณ  ์‹ถ์€ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ณจ๋ผ์„œ ๋ฐฑ์—”๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ Angular ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ์ข… ์™„์„ฑ ํ”„๋กœ์ ํŠธ๋Š” chapter9 ํด๋” ์•ˆ์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

cd chapter9\AngularShop

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •

๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋Š” Docker-Compose ๋ฅผ ํ†ตํ•ด MySQL์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Docker-Compose๋Š” Docker Desktop ์„ ์„ค์น˜ํ•˜๋ฉด ๊ฐ™์ด ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ์˜ ๋ฃจํŠธ ํด๋”์— docker-compose.yaml ํŒŒ์ผ์ด ์žˆ์œผ๋ฏ€๋กœ ๋‹ค์Œ ์ปค๋งจ๋“œ๋ฅผ ํ†ตํ•ด MySQL์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

docker-compose up -d

์ฒ˜์Œ MySQL ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œ ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š”๋ฐ 1-2๋ถ„ ๋˜๋Š” ๊ทธ ์ด์ƒ ์†Œ์š”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ตฌ์„ฑ๋œ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์ •๋ณด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. (๋‹จ์ˆœ ๊ฐœ๋ฐœ์šฉ DB์ด๋ฏ€๋กœ ํŒจ์Šค์›Œ๋“œ๋Š” ๋Œ€์ถฉ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค ;))

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค : AngularShop
๋ฃจํŠธ ๊ณ„์ • ํŒจ์Šค์›Œ๋“œ : 123456
์‚ฌ์šฉ์ž ๊ณ„์ • : user
์‚ฌ์šฉ์ž ๊ณ„์ • ํŒจ์Šค์›Œ๋“œ : 1234

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” HeidiSQL๋“ฑ์˜ ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ํ™•์ธ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

HeidiSQL์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘์† ํ•  ๋•Œ Authentication plugin 'caching_sha2_password' cannot be loaded ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด, docker ps ๋ช…๋ น์„ ํ†ตํ•ด MySQL์ด ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์„ ํ™•์ธํ•˜๊ณ , ์ด๋ฆ„์„ ์ด์šฉํ•ด์„œ Docker ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰ ์ค‘์ธ MySQL์— ์ ‘์†ํ•˜์—ฌ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

C:\Sources\AngularShop_sources\chapter9\AngularShop>docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                               NAMES
8b84fd03c7f0   mysql     "docker-entrypoint.sโ€ฆ"   3 minutes ago   Up 3 minutes   0.0.0.0:3306->3306/tcp, 33060/tcp   angularshop_db_1

C:\Sources\AngularShop_sources\chapter9\AngularShop>docker exec -it angularshop_db_1 mysql --user=root --password
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 19
Server version: 8.0.23 MySQL Community Server - GPL

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> ALTER USER 'user' IDENTIFIED WITH mysql_native_password BY '1234';
Query OK, 0 rows affected (0.03 sec)

mysql> ALTER USER 'root' IDENTIFIED WITH mysql_native_password BY '123456';
Query OK, 0 rows affected (0.03 sec)

mysql> exit
Bye

ASP.NET Core ๋ฐฑ์—”๋“œ ๊ตฌ์„ฑ

.NET Core SDK ์„ค์น˜

๊ธฐ์กด์˜ .NET์€ ์œˆ๋„์šฐ ๊ธฐ๋ฐ˜์˜ .Net Framework 4.8, ํฌ๋กœ์Šค ํ”Œ๋žซํผ .NET Core 3.1 ์œผ๋กœ ๋‚˜๋‰˜์–ด ์žˆ์—ˆ์ง€๋งŒ, ๋‘˜์„ ํ•ฉ์ณ์„œ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๊ธฐ๋ฐ˜์˜ .NET 5๋กœ ํ†ตํ•ฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ์—์„œ๋Š” .NET Core 3.1์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ .NET Core SDK ์ค‘์—์„œ 3.1 ๋ฒ„์ „ SDK๋ฅผ ๋‹ค์šด๋กœ๋“œ ํ•˜์—ฌ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

์„ค์น˜ ํ›„ ๋‹ค์Œ ๋ช…๋ น์„ ํ†ตํ•ด SDK์˜ ๋ฒ„์ „์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

C:\Sources\AngularShop_sources\chapter9\AngularShop\AngularShop>dotnet --version
3.1.405

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฐ ์‹คํ–‰

๋ณธ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” Entity Framework Cor 3.1์˜ Code First๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฝ”๋“œ๊ฐ€ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ž‘์„ฑ๋œ ๋ชจ๋ธ ์ฝ”๋“œ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด dotnet-ef๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

C:\Sources\AngularShop_sources\chapter9\AngularShop\AngularShop>dotnet tool install --global dotnet-ef
๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๋„๊ตฌ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. dotnet-ef
'dotnet-ef' ๋„๊ตฌ('5.0.2' ๋ฒ„์ „)๊ฐ€ ์„ค์น˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ๋ช…๋ น์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

C:\Sources\AngularShop_sources\chapter9\AngularShop\AngularShop>dotnet ef database update
Build started...
Build succeeded.
Done.

๋งŒ์•ฝ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘์† ์ •๋ณด๊ฐ€ ๊ธฐ๋ณธ ์„ค์ •๊ณผ ๋‹ค๋ฅธ ๊ฒฝ์šฐ appsettings.Development.json ํŒŒ์ผ์˜ ์—ฐ๊ฒฐ๋ฌธ์ž์—ด์„ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณต์› ์™„๋ฃŒ ํ›„ ๋‹ค์Œ ๋ช…๋ น์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

C:\Sources\AngularShop_sources\chapter9\AngularShop\AngularShop>dotnet run
info: Microsoft.Hosting.Lifetime[0]
      Now listening on: https://localhost:5001
info: Microsoft.Hosting.Lifetime[0]
      Now listening on: http://localhost:5000
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
      Content root path: C:\Sources\AngularShop_sources\chapter9\AngularShop\AngularShop

๋ธŒ๋ผ์šฐ์ €๋กœ https://localhost:5001 ์œผ๋กœ ์ ‘์†ํ•˜๋ฉด Swagger ํŽ˜์ด์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Ad Block์ด ์„ค์ •๋œ ๋ธŒ๋ผ์šฐ์ €์˜ ๊ฒฝ์šฐ ํ˜ธ์ถœ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๊ผญ https๋ฅผ ์‚ฌ์šฉํ•˜๋Š” https://localhost:5001๋กœ ์ ‘์† ํ•ด์„œ ํ…Œ์ŠคํŠธ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

SeedํŒŒํŠธ์˜ CreateDefaultUsers, CreateSampleProducts๋ฅผ ํ•œ ๋ฒˆ์”ฉ ์‹คํ–‰ํ•˜์—ฌ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

HeidiSQL์„ ํ†ตํ•ด ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ํ™•์ธ ๋˜๋ฉด ๋ฐฑ์—”๋“œ ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Spring Boot ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ

๋ณธ ํ”„๋กœ์ ํŠธ๋Š” OpenJDK 1.8 ๋ฒ„์ „, Kotlin ๊ทธ๋ฆฌ๊ณ  Gradle์„ ์‚ฌ์šฉํ•ด ๊ตฌ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Spring Boot ์ฝ”๋“œ๊ฐ€ ์ค€๋น„๋œ AngularShopBoot ํด๋”๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

C:\Sources>cd AngularShop_sources\chapter9\AngularShop\AngularShopBoot

OpenJDK ์„ค์น˜

ํ™˜๊ฒฝ๊ตฌ์„ฑ ์ฐธ๊ณ  ์ž๋ฃŒ๋ฅผ ํ™•์ธํ•˜๋ฉด ์•„๋ž˜ ๊ณผ์ •์„ ์Šคํฌ๋ฆฐ์ƒท๊ณผ ํ•จ๊ป˜ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

OpenJDK ๋‹ค์šด๋กœ๋“œ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜์—ฌ OpenJDK8 (LTS) ๊ทธ๋ฆฌ๊ณ  HotSpot, Windows, x64๋ฅผ ์„ ํƒํ•˜๊ณ  .msi ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œ ํ•ฉ๋‹ˆ๋‹ค.

์„ค์น˜ ๋„์ค‘์— "Set JAVA_HOME variable" ํ•ญ๋ชฉ์„ ๊ผญ ์„ ํƒํ•˜๊ณ  ์„ค์น˜๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์„ค์น˜๋ฅผ ๋งˆ์นœ ํ›„์— ๋‹ค์Œ ๋ช…๋ น์–ด๋กœ JDK ๋ฒ„์ „์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

C:\Sources\AngularShop_sources\chapter9\AngularShop\AngularShopBoot>java -version
openjdk version "1.8.0_282"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_282-b08)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.282-b08, mixed mode)

Spring Boot ํ”„๋กœ์ ํŠธ ์‹คํ–‰

์šฐ์„  ์—…๋กœ๋“œ๋˜๋Š” ์ด๋ฏธ์ง€๊ฐ€ ์ €์žฅ๋  imagesํด๋”์˜ ๊ฒฝ๋กœ๋ฅผ ์„ค์ •ํ•ด์ค๋‹ˆ๋‹ค. WebConfig.kt ์—์„œ images/** ์™€ ๋งคํ•‘๋˜๋Š” ํด๋”๋ฅผ ํ˜„์žฌ ํด๋” ์œ„์น˜์™€ ๋งž๊ฒŒ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

class WebConfig : WebMvcConfigurer {
    override fun addResourceHandlers(registry: ResourceHandlerRegistry) {
        registry.addResourceHandler("/images/**")
                .addResourceLocations("file:///c:/Sources/AngularShop_sources/chapter9/AngularShop/images/")
        registry.addResourceHandler("/resources/**")
                .addResourceLocations("/resources/")
    }
}

๋‹ค์Œ ๋ช…๋ น์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

C:\Sources\AngularShop_sources\chapter9\AngularShop\AngularShopBoot>gradlew bootrun

> Task :bootRun

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.3.0.RELEASE)

....์ค‘๋žต....

2021-02-06 15:22:18.379  INFO 6260 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 0 ms
<==========---> 80% EXECUTING [55s]
> :bootRun

์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ์„ ์œ„ํ•ด ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋‹ค์Œ ์ฃผ์†Œ๋ฅผ ํ†ตํ•ด API๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

http://localhost:8080/api/Seed/GenerateProducts
http://localhost:8080/api/Seed/GenerateUsers

HeidiSQL์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ํ™•์ธ๋˜์—ˆ๋‹ค๋ฉด ๋ฐฑ์—”๋“œ ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Django Rest Framework ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ

DRF ์ฝ”๋“œ๊ฐ€ ์ค€๋น„๋œ AngularShopDRF ํด๋”๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

C:\Sources>cd AngularShop_sources\chapter9\AngularShop\AngularShopDRF

Python ์„ค์น˜

Python 3.7.9 ๋‹ค์šด๋กœ๋“œ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜์—ฌ x64 Installer๋ฅผ ๋‹ค์šด๋กœ๋“œ ํ•˜์—ฌ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

์„ค์น˜ ์ค‘์— Add Python 3.7 to PATH ์˜ต์…˜์„ ๊ผญ ์ฒดํฌํ•˜๊ณ  ์„ค์น˜๋ฅผ ์ง„ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ํŒŒ์ด์„  ๋ฒ„์ „์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

C:\Sources\AngularShop_sources\chapter9\AngularShop>python -V
Python 3.7.9

๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๊ฐ€์ƒํ™˜๊ฒฝ ์„ค์ • ๋ฐ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

C:\Sources\AngularShop_sources\chapter9\AngularShop\AngularShopDRF>python -m venv venv

C:\Sources\AngularShop_sources\chapter9\AngularShop\AngularShopDRF>venv\Scripts\activate

(venv) C:\Sources\AngularShop_sources\chapter9\AngularShop\AngularShopDRF>pip install -r requirements.txt

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์„ฑ

๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ๋กœ ์ž‘์„ฑ๋œ ๋ชจ๋ธ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.

(venv) C:\Sources\AngularShop_sources\chapter9\AngularShop\AngularShopDRF>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions, shop
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0001_initial... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying shop.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying sessions.0001_initial... OK
  Applying shop.0002_userlogin... OK
  Applying shop.0003_order_orderitem_orderstatus... OK

ํ”„๋กœ์ ํŠธ ์‹คํ–‰

์šฐ์„  ๊ด€๋ฆฌ์ž ๊ณ„์ •์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ ํŒจ์Šค์›Œ๋“œ๋Š” qwerty1@ ์ž…๋‹ˆ๋‹ค.

(venv) C:\Sources\AngularShop_sources\chapter9\AngularShop\AngularShopDRF>python manage.py createsuperuser
Email: admin@email.com
Username: admin
Password:
Password (again):
Superuser created successfully.

์ด์–ด์„œ ๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

(venv) C:\Sources\AngularShop_sources\chapter9\AngularShop\AngularShopDRF>python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
February 07, 2021 - 13:13:08
Django version 3.0.7, using settings 'AngularShopDRF.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ๋‹ค์Œ URL์„ ํ˜ธ์ถœํ•˜์—ฌ ์ดˆ๊ธฐ ์ œํ’ˆ ๋ฐ์ดํ„ฐ์™€ ๊ธฐ๋ณธ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

http://127.0.0.1:8000/api/seed/generate-products
http://127.0.0.1:8000/api/seed/generate-users

์ƒ์„ฑ๋œ ์‚ฌ์šฉ์ž ๋ฐ ์ œํ’ˆ ๋ฐ์ดํ„ฐ๊ฐ€ ํ™•์ธ๋˜๋ฉด ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Angular ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ

Angular ํ”„๋กœ์ ํŠธ๋Š” .NET, Spring Boot ๋ฐฑ์—”๋“œ๋ฅผ ์œ„ํ•œ AngularShop-Front ํ”„๋กœ์ ํŠธ์™€ DRF ๋ฐฑ์—”๋“œ๋ฅผ ์œ„ํ•œ AngularShop-Fron-DRF ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‘ ํ”„๋กœ์ ํŠธ์˜ ์„ค์ • ๋ฐฉ๋ฒ•์€ ๋ชจ๋‘ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

Node.js ์„ค์น˜

Node.js๋Š” Node Version Manager For Windows๋ฅผ ํ†ตํ•ด ์„ค์น˜๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

(venv) C:\Sources\AngularShop_sources\chapter9\AngularShop\AngularShop-Front>nvm install 14.15.4
Downloading node.js version 14.15.4 (64-bit)...
Complete
Creating C:\Users\netsc\AppData\Roaming\nvm\temp

Downloading npm version 6.14.10... Complete
Installing npm v6.14.10...

Installation complete. If you want to use this version, type

nvm use 14.15.4

C:\Sources\AngularShop_sources\chapter9\AngularShop\AngularShop-Front>nvm use 14.15.4
Now using node v14.15.4 (64-bit)

Node ํŒจํ‚ค์ง€ ์„ค์น˜

๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ํ•„์š”ํ•œ Node ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

C:\Sources\AngularShop_sources\chapter9\AngularShop\AngularShop-Front>npm install -g @angular/cli


C:\Sources\AngularShop_sources\chapter9\AngularShop\AngularShop-Front>npm i

Angular ํ”„๋กœ์ ํŠธ ์‹คํ–‰ํ•˜๊ธฐ - .NET Core

ASP.NET Core๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ Angular ํ”„๋กœ์ ํŠธ์™€์˜ ์—ฐ๋™์„ ์œ„ํ•ด ASP.NET Core ๋ฐฑ์—”๋“œ๋กœ ์˜ค๋Š” ์š”์ฒญ์„ Angular ํ”„๋กœ์ ํŠธ๋กœ ์ „๋‹ฌํ•˜๋Š” ์„œ๋ฒ„ -> ํ”„๋ก ํŠธ ๋ฐฉ์‹์˜ ํ”„๋ก์‹œ ์„ค์ •์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Proxy ์„ค์ • ์ฐธ๊ณ ์ž๋ฃŒ๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

/src/environments/environment.ts ํŒŒ์ผ์˜ baseUrl ์†์„ฑ ๊ฐ’์„ .NET Core์˜ ์ฃผ์†Œ๋กœ ์„ค์ •ํ•ด์ค๋‹ˆ๋‹ค.

export const environment = {
  production: false,
  baseUrl: "https://localhost:5001/"
};

๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Angular ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

C:\Sources\AngularShop_sources\chapter9\AngularShop\AngularShop-Front>ng serve

๊ทธ๋ฆฌ๊ณ  https://localhost:5001/index ์„ ํ†ตํ•ด Angular ์•ฑ์— ์ ‘์†ํ•˜๋ฉด ํŽ˜์ด์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Angular ํ”„๋กœ์ ํŠธ ์‹คํ–‰ํ•˜๊ธฐ - Spring Boot

Spring Boot๋Š” Angular์•ฑ์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ๋ฐฑ์—”๋“œ๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์˜ ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ Spring Boot Proxy ์„ค์ • ์ฐธ๊ณ ์ž๋ฃŒ๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

/src/environments/environment.ts ํŒŒ์ผ์˜ baseUrl ์†์„ฑ ๊ฐ’์„ Angular์•ฑ์˜ ์ฃผ์†Œ๋กœ ์„ค์ •ํ•ด์ค๋‹ˆ๋‹ค.

export const environment = {
  production: false,
  baseUrl: "http://localhost:4200/"
};

๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Angular ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

C:\Sources\AngularShop_sources\chapter9\AngularShop\AngularShop-Front>ng serve --proxy-config=proxy.conf.json

๊ทธ๋ฆฌ๊ณ  https://localhost:4200 ์„ ํ†ตํ•ด Angular ์•ฑ์— ์ ‘์†ํ•˜๋ฉด ํŽ˜์ด์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Angular ํ”„๋กœ์ ํŠธ ์‹คํ–‰ํ•˜๊ธฐ - DRF

DRF๋Š” Angular์•ฑ์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ๋ฐฑ์—”๋“œ๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์˜ ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ DRF Proxy ์„ค์ • ์ฐธ๊ณ ์ž๋ฃŒ๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Angular ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

C:\Sources\AngularShop_sources\chapter9\AngularShop\AngularShop-Front-DRF>ng serve --proxy-config=proxy-drf.conf.json

๊ทธ๋ฆฌ๊ณ  https://localhost:4200 ์„ ํ†ตํ•ด Angular ์•ฑ์— ์ ‘์†ํ•˜๋ฉด ํŽ˜์ด์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

About

Angular 11 / ASP.NET Core 3.1 / Spring Boot 2.3 with Kotlin / DRF 3.11

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published