{"id":84459,"date":"2024-11-19T08:32:50","date_gmt":"2024-11-19T05:02:50","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/"},"modified":"2024-11-19T08:32:50","modified_gmt":"2024-11-19T05:02:50","slug":"end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/","title":{"rendered":"\u0637\u0631\u0627\u062d\u06cc \u0633\u06cc\u0633\u062a\u0645 \u0627\u0646\u062a\u0647\u0627 \u0628\u0647 \u0627\u0646\u062a\u0647\u0627 \u0628\u0631\u0627\u06cc \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 React + Java + Cosmos DB"},"content":{"rendered":"<p>Summarize this content to 400 words in Persian Lang<br \/>\n            \u062f\u0631 \u0627\u06cc\u0646 \u0631\u0627\u0647\u0646\u0645\u0627\u060c \u0645\u0627 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 React + Java \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631 \u0628\u0627 Cosmos DB \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0637\u0631\u0627\u062d\u06cc \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f. \u0627\u06cc\u0646 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0645\u0642\u06cc\u0627\u0633\u200c\u067e\u0630\u06cc\u0631\u06cc \u0628\u0627\u0644\u0627\u060c \u062a\u0623\u062e\u06cc\u0631 \u06a9\u0645 \u0648 \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0628\u0648\u062f\u0646 \u0686\u0646\u062f \u0645\u0646\u0637\u0642\u0647 \u062f\u0627\u0631\u0646\u062f \u0627\u06cc\u062f\u0647\u200c\u0622\u0644 \u0627\u0633\u062a. \u0645\u0627 \u0647\u0645\u0647 \u0686\u06cc\u0632 \u0631\u0627 \u0627\u0632 \u0645\u0639\u0645\u0627\u0631\u06cc \u06af\u0631\u0641\u062a\u0647 \u062a\u0627 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u067e\u0648\u0634\u0634 \u062e\u0648\u0627\u0647\u06cc\u0645 \u062f\u0627\u062f \u0648 \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0645\u0631\u0627\u062d\u0644 \u0639\u0645\u0644\u06cc \u062a\u0642\u0633\u06cc\u0645 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.<\/p>\n<p>  1. \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u06cc\u0632\u06cc \u0648 \u062a\u062c\u0632\u06cc\u0647 \u0648 \u062a\u062d\u0644\u06cc\u0644 \u0646\u06cc\u0627\u0632\u0645\u0646\u062f\u06cc \u0647\u0627<\/p>\n<p>  \u062c\u0645\u0639 \u0622\u0648\u0631\u06cc \u0627\u0644\u0632\u0627\u0645\u0627\u062a<\/p>\n<p>Frontend Needs:<\/p>\n<p>\u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u067e\u0648\u06cc\u0627<br \/>\n\u0628\u0647 \u0631\u0648\u0632 \u0631\u0633\u0627\u0646\u06cc \u062f\u0631 \u0632\u0645\u0627\u0646 \u0648\u0627\u0642\u0639\u06cc.<br \/>\n\u0646\u0627\u0648\u0628\u0631\u06cc \u0628\u0635\u0631\u06cc<\/p>\n<p>\u0646\u06cc\u0627\u0632\u0647\u0627\u06cc Backend:<\/p>\n<p>API \u0647\u0627\u06cc \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631<br \/>\n\u0645\u062f\u06cc\u0631\u06cc\u062a \u067e\u06cc\u0686\u06cc\u062f\u0647 \u062f\u0627\u062f\u0647 \u0647\u0627<br \/>\n\u0630\u062e\u06cc\u0631\u0647 \u0633\u0627\u0632\u06cc \u0648 \u067e\u0631\u062f\u0627\u0632\u0634 \u0627\u0645\u0646 \u062f\u0627\u062f\u0647 \u0647\u0627<\/p>\n<p>\u0646\u06cc\u0627\u0632\u0647\u0627\u06cc \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647:<\/p>\n<p>\u0633\u0627\u062e\u062a\u0627\u0631 NoSQL \u0628\u0631\u0627\u06cc \u0627\u0646\u0639\u0637\u0627\u0641 \u067e\u0630\u06cc\u0631\u06cc.<br \/>\n\u062a\u0623\u062e\u06cc\u0631 \u06a9\u0645 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u062c\u0647\u0627\u0646\u06cc.<br \/>\n\u0633\u0637\u0648\u062d \u0633\u0627\u0632\u06af\u0627\u0631\u06cc \u0628\u0631\u0627\u06cc \u0639\u0645\u0644\u06cc\u0627\u062a \u062a\u0631\u0627\u06a9\u0646\u0634.<\/p>\n<p>  \u067e\u0634\u062a\u0647 \u0641\u0646\u0627\u0648\u0631\u06cc<\/p>\n<p>Frontend: React.js \u0628\u0627 TypeScript (\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc)\u060c Redux \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u062d\u0627\u0644\u062a.<\/p>\n<p>Backend: \u062c\u0627\u0648\u0627 \u0628\u0627 Spring Boot.<\/p>\n<p>\u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647: Azure Cosmos DB.<\/p>\n<p>\u0627\u0631\u062a\u0628\u0627\u0637: API \u0647\u0627\u06cc RESTful.<\/p>\n<p>\u0627\u0633\u062a\u0642\u0631\u0627\u0631: Docker + Kubernetes.<\/p>\n<p>  2. \u0637\u0631\u0627\u062d\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc<\/p>\n<p>  \u0645\u0639\u0645\u0627\u0631\u06cc \u0633\u0637\u062d \u0628\u0627\u0644\u0627<\/p>\n<p>Frontend: \u0628\u0631\u0646\u0627\u0645\u0647 React \u0628\u0631\u0627\u06cc \u0631\u0646\u062f\u0631 \u0633\u0645\u062a \u06a9\u0644\u0627\u06cc\u0646\u062a\u060c \u0645\u0635\u0631\u0641 API \u0648 UI \u067e\u0648\u06cc\u0627.<\/p>\n<p>Backend: Java Spring Boot \u0628\u0631\u0627\u06cc \u062a\u0648\u0633\u0639\u0647 API RESTful.<\/p>\n<p>\u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647: Cosmos DB \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0633\u0627\u0632\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0628\u0633\u06cc\u0627\u0631 \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0648 \u067e\u0627\u0631\u062a\u06cc\u0634\u0646 \u0628\u0646\u062f\u06cc \u0634\u062f\u0647.<\/p>\n<p>\u0627\u0631\u062a\u0628\u0627\u0637: API \u0647\u0627\u06cc REST \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 JSON \u0628\u0631\u0627\u06cc \u062a\u0639\u0627\u0645\u0644 \u0628\u06cc\u0646 \u0638\u0627\u0647\u0631 \u0648 \u0628\u0627\u0637\u0646.<\/p>\n<p>  3. \u062a\u0648\u0633\u0639\u0647 Frontend<\/p>\n<p>  \u0633\u0627\u062e\u062a\u0627\u0631 \u067e\u0648\u0634\u0647<\/p>\n<p>\u0633\u0627\u0632\u0645\u0627\u0646\u062f\u0647\u06cc \u067e\u0631\u0648\u0698\u0647 React \u0628\u0631\u0627\u06cc \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631\u06cc \u0648 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc:<\/p>\n<p>src\/<br \/>\n\u251c\u2500\u2500 components\/   # Reusable UI components<br \/>\n\u251c\u2500\u2500 pages\/        # Page-level components<br \/>\n\u251c\u2500\u2500 hooks\/        # Custom React hooks<br \/>\n\u251c\u2500\u2500 context\/      # Global state management using Context API<br \/>\n\u251c\u2500\u2500 services\/     # API calls<br \/>\n\u251c\u2500\u2500 styles\/       # CSS\/SCSS files<br \/>\n\u251c\u2500\u2500 App.js        # Root component<br \/>\n\u2514\u2500\u2500 index.js      # Entry point<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u0645\u0633\u06cc\u0631\u06cc\u0627\u0628\u06cc<\/p>\n<p>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f react-router-dom \u0628\u0631\u0627\u06cc \u0646\u0627\u0648\u0628\u0631\u06cc:<\/p>\n<p>import { BrowserRouter as Router, Routes, Route } from &#8220;react-router-dom&#8221;;<\/p>\n<p>function App() {<br \/>\n  return (<br \/>\n    &lt;Router&gt;<br \/>\n      &lt;Routes&gt;<br \/>\n        &lt;Route path=&#8221;\/&#8221; element={&lt;Home \/&gt;} \/&gt;<br \/>\n        &lt;Route path=&#8221;\/users&#8221; element={&lt;UserList \/&gt;} \/&gt;<br \/>\n      &lt;\/Routes&gt;<br \/>\n    &lt;\/Router&gt;<br \/>\n  );<br \/>\n}<\/p>\n<p>export default App;<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u0645\u062f\u06cc\u0631\u06cc\u062a \u062f\u0648\u0644\u062a\u06cc<\/p>\n<p>\u0628\u06cc\u0646 \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f Redux \u06cc\u0627 Context API:<\/p>\n<p>\u0627\u0632 Redux \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0628\u0632\u0631\u06af\u06cc \u06a9\u0647 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u062a\u0645\u0631\u06a9\u0632 \u062d\u0627\u0644\u062a \u062f\u0627\u0631\u0646\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<br \/>\n\u0627\u0632 Context API \u0628\u0631\u0627\u06cc \u0633\u0646\u0627\u0631\u06cc\u0648\u0647\u0627\u06cc \u0627\u0634\u062a\u0631\u0627\u06a9\u200c\u06af\u0630\u0627\u0631\u06cc \u062d\u0627\u0644\u062a \u0633\u0627\u062f\u0647\u200c\u062a\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>  4. \u062a\u0648\u0633\u0639\u0647 Backend<\/p>\n<p>  \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0628\u0648\u062a \u0628\u0647\u0627\u0631<\/p>\n<p>\u0628\u0627 Maven \u06cc\u0627 Gradle \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 Spring Boot \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f. \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627\u06cc \u0632\u06cc\u0631 \u0631\u0627 \u0634\u0627\u0645\u0644 \u0634\u0648\u062f:<\/p>\n<p>    com.azure.spring<br \/>\n    spring-cloud-azure-starter-data-cosmos<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u0633\u0627\u062e\u062a\u0627\u0631 \u067e\u0631\u0648\u0698\u0647<\/p>\n<p>\u0628\u0627\u0637\u0646 \u062e\u0648\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631\u06cc \u0633\u0627\u0632\u0645\u0627\u0646\u062f\u0647\u06cc \u06a9\u0646\u06cc\u062f:<\/p>\n<p>src\/main\/java\/com\/example\/<br \/>\n\u251c\u2500\u2500 controller\/    # REST Controllers<br \/>\n\u251c\u2500\u2500 service\/       # Business logic<br \/>\n\u251c\u2500\u2500 repository\/    # Cosmos DB integration<br \/>\n\u251c\u2500\u2500 model\/         # Data models<br \/>\n\u2514\u2500\u2500 application\/   # Main application class<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc Cosmos DB<\/p>\n<p>\u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0644\u0627\u0632\u0645 \u0631\u0627 \u0628\u0647 \u0622\u0646 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f application.properties:<\/p>\n<p>spring.cloud.azure.cosmos.endpoint=<br \/>\nspring.cloud.azure.cosmos.key=<br \/>\nspring.cloud.azure.cosmos.database=<br \/>\nspring.cloud.azure.cosmos.consistency-level=Session<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u0645\u062f\u0644 \u0647\u0627 \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f<\/p>\n<p>\u0627\u0632 \u062d\u0627\u0634\u06cc\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0628\u0631\u0627\u06cc \u0646\u06af\u0627\u0634\u062a \u06a9\u0644\u0627\u0633 \u0647\u0627\u06cc \u062c\u0627\u0648\u0627 \u0628\u0647 Cosmos DB \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<p>@Container(containerName = &#8220;users&#8221;)<br \/>\npublic class User {<br \/>\n    @Id<br \/>\n    private String id;<br \/>\n    private String name;<br \/>\n    private String email;<\/p>\n<p>    \/\/ Getters and setters<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u0645\u062e\u0632\u0646<\/p>\n<p>\u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0631\u0627\u0628\u0637 \u0645\u062e\u0632\u0646 \u0628\u0631\u0627\u06cc \u0639\u0645\u0644\u06cc\u0627\u062a \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647:<\/p>\n<p>@Repository<br \/>\npublic interface UserRepository extends CosmosRepository&lt;User, String&gt; {}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u062e\u062f\u0645\u0627\u062a<\/p>\n<p>\u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0645\u0646\u0637\u0642 \u06a9\u0633\u0628 \u0648 \u06a9\u0627\u0631 \u062f\u0631 \u06a9\u0644\u0627\u0633 \u062e\u062f\u0645\u0627\u062a:<\/p>\n<p>@Service<br \/>\npublic class UserService {<br \/>\n    @Autowired<br \/>\n    private UserRepository userRepository;<\/p>\n<p>    public List&lt;User&gt; getAllUsers() {<br \/>\n        return userRepository.findAll();<br \/>\n    }<\/p>\n<p>    public User createUser(User user) {<br \/>\n        return userRepository.save(user);<br \/>\n    }<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u0646\u062f\u0647<\/p>\n<p>API \u0647\u0627 \u0631\u0627 \u0628\u0631\u0627\u06cc \u062a\u0639\u0627\u0645\u0644 \u0628\u0627 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f:<\/p>\n<p>@RestController<br \/>\n@RequestMapping(&#8220;\/api\/users&#8221;)<br \/>\npublic class UserController {<br \/>\n    @Autowired<br \/>\n    private UserService userService;<\/p>\n<p>    @GetMapping<br \/>\n    public List&lt;User&gt; getUsers() {<br \/>\n        return userService.getAllUsers();<br \/>\n    }<\/p>\n<p>    @PostMapping<br \/>\n    public User createUser(@RequestBody User user) {<br \/>\n        return userService.createUser(user);<br \/>\n    }<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  5. \u0637\u0631\u0627\u062d\u06cc \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647<\/p>\n<p>  \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc Cosmos DB<\/p>\n<p>\u067e\u0627\u0631\u062a\u06cc\u0634\u0646 \u0628\u0646\u062f\u06cc: \u0627\u0632 \u06cc\u06a9 \u0641\u06cc\u0644\u062f \u0645\u0646\u062d\u0635\u0631 \u0628\u0647 \u0641\u0631\u062f \u0645\u0627\u0646\u0646\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f userId \u0628\u0631\u0627\u06cc \u0628\u0647\u06cc\u0646\u0647 \u0633\u0627\u0632\u06cc \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631\u06cc<\/p>\n<p>\u0633\u0637\u0648\u062d \u0633\u0627\u0632\u06af\u0627\u0631\u06cc:<\/p>\n<p>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u062c\u0644\u0633\u0647 \u0633\u0627\u0632\u06af\u0627\u0631\u06cc \u0628\u0631\u0627\u06cc \u0627\u06a9\u062b\u0631 \u0633\u0646\u0627\u0631\u06cc\u0648\u0647\u0627<br \/>\n\u062a\u063a\u06cc\u06cc\u0631 \u0628\u0647 \u0642\u0648\u06cc \u0633\u0627\u0632\u06af\u0627\u0631\u06cc \u0628\u0631\u0627\u06cc \u0639\u0645\u0644\u06cc\u0627\u062a \u062d\u06cc\u0627\u062a\u06cc<\/p>\n<p>\u0646\u0645\u0627\u06cc\u0647 \u0633\u0627\u0632\u06cc: \u0627\u0632 \u0646\u0645\u0627\u06cc\u0647 \u0633\u0627\u0632\u06cc \u062e\u0648\u062f\u06a9\u0627\u0631 Cosmos DB \u0628\u0631\u0627\u06cc \u0628\u0647\u06cc\u0646\u0647 \u0633\u0627\u0632\u06cc \u067e\u0631\u0633 \u0648 \u062c\u0648 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>  6. \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0633\u0627\u0632\u06cc<\/p>\n<p>  \u0627\u062a\u0635\u0627\u0644 Frontend \u0628\u0627 Backend<\/p>\n<p>\u0627\u0632 Axios \u06cc\u0627 Fetch \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 React \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<p>import axios from &#8220;axios&#8221;;<\/p>\n<p>const API_URL = &#8220;http:\/\/localhost:8080\/api\/users&#8221;;<\/p>\n<p>export const fetchUsers = async () =&gt; {<br \/>\n  const response = await axios.get(API_URL);<br \/>\n  return response.data;<br \/>\n};<\/p>\n<p>export const createUser = async (user) =&gt; {<br \/>\n  const response = await axios.post(API_URL, user);<br \/>\n  return response.data;<br \/>\n};<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0647\u0627 \u062f\u0631 React<\/p>\n<p>import React, { useState, useEffect } from &#8220;react&#8221;;<br \/>\nimport { fetchUsers, createUser } from &#8220;.\/services\/userService&#8221;;<\/p>\n<p>function UserList() {<br \/>\n  const [users, setUsers] = useState([]);<\/p>\n<p>  useEffect(() =&gt; {<br \/>\n    fetchUsers().then(setUsers);<br \/>\n  }, []);<\/p>\n<p>  return (<br \/>\n    &lt;div&gt;<br \/>\n      &lt;h1&gt;User List&lt;\/h1&gt;<br \/>\n      &lt;ul&gt;<br \/>\n        {users.map((user) =&gt; (<br \/>\n          &lt;li key={user.id}&gt;{user.name}&lt;\/li&gt;<br \/>\n        ))}<br \/>\n      &lt;\/ul&gt;<br \/>\n    &lt;\/div&gt;<br \/>\n  );<br \/>\n}<\/p>\n<p>export default UserList;<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  7. \u0622\u0632\u0645\u0627\u06cc\u0634<\/p>\n<p>  \u062a\u0633\u062a Frontend<\/p>\n<p>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u0627\u0633\u062a \u0648 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u062a\u0633\u062a \u0648\u0627\u06a9\u0646\u0634 \u0628\u0631\u0627\u06cc \u062a\u0633\u062a \u0647\u0627\u06cc \u0648\u0627\u062d\u062f<br \/>\n\u062a\u0633\u062a \u0647\u0627\u06cc \u0627\u062f\u063a\u0627\u0645 \u0631\u0627 \u0628\u0631\u0627\u06cc \u062a\u0645\u0627\u0633 \u0647\u0627\u06cc API \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f.<\/p>\n<p>  \u062a\u0633\u062a Backend<\/p>\n<p>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f JUnit \u0648 \u0645\u0648\u06a9\u06cc\u062a\u0648 \u0628\u0631\u0627\u06cc \u062a\u0633\u062a \u0647\u0627\u06cc \u0648\u0627\u062d\u062f<br \/>\n\u0622\u0632\u0645\u0627\u06cc\u0634 \u0639\u0645\u0644\u06cc\u0627\u062a \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0628\u0627 Cosmos DB \u062a\u0639\u0628\u06cc\u0647 \u0634\u062f\u0647:<\/p>\n<p>      com.azure<br \/>\n      cosmosdb-emulator<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  8. \u0627\u0633\u062a\u0642\u0631\u0627\u0631<\/p>\n<p>  Containerization \u0628\u0627 Docker<\/p>\n<p>Dockerfiles \u0631\u0627 \u0647\u0645 \u0628\u0631\u0627\u06cc frontend \u0648 \u0647\u0645 \u0628\u0631\u0627\u06cc backend \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n<p>  FROM node:16<br \/>\n  WORKDIR \/app<br \/>\n  COPY . .<br \/>\n  RUN npm install<br \/>\n  RUN npm run build<br \/>\n  EXPOSE 3000<br \/>\n  CMD [&#8220;npm&#8221;, &#8220;start&#8221;]\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  FROM openjdk:17<br \/>\n  WORKDIR \/app<br \/>\n  COPY target\/*.jar app.jar<br \/>\n  EXPOSE 8080<br \/>\n  ENTRYPOINT [&#8220;java&#8221;, &#8220;-jar&#8221;, &#8220;app.jar&#8221;]\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u0627\u0631\u06a9\u0633\u062a\u0631\u0627\u0633\u06cc\u0648\u0646 \u0628\u0627 Kubernetes<\/p>\n<p>\u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u062e\u062f\u0645\u0627\u062a \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0646\u0645\u0627\u06cc\u0634\u06af\u0631\u0647\u0627\u06cc Kubernetes:<\/p>\n<p>\u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0648 \u062e\u062f\u0645\u0627\u062a \u0628\u0631\u0627\u06cc \u0641\u0631\u0627\u0646\u062a \u0627\u0646\u062f \u0648 \u0628\u06a9 \u0627\u0646\u062f<br \/>\n\u0627\u0632 ConfigMaps \u0648 Secrets \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0627\u0639\u062a\u0628\u0627\u0631 Cosmos DB \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>  9. \u0642\u0627\u0628\u0644\u06cc\u062a \u0645\u0634\u0627\u0647\u062f\u0647<\/p>\n<p>  \u0648\u0631\u0648\u062f \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645<\/p>\n<p>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u0648\u0631\u0648\u062f \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645 \u0628\u0631\u0627\u06cc \u062b\u0628\u062a \u0628\u0627\u0637\u0646<br \/>\n\u0627\u0632 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u0647 \u0645\u0631\u0648\u0631\u06af\u0631 \u0628\u0631\u0627\u06cc \u0627\u0634\u06a9\u0627\u0644 \u0632\u062f\u0627\u06cc\u06cc \u0638\u0627\u0647\u0631\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>  \u0646\u0638\u0627\u0631\u062a<\/p>\n<p>\u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f \u067e\u0631\u0648\u0645\u062a\u0626\u0648\u0633 \u0648 \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0628\u0631\u0627\u06cc \u0645\u0627\u0646\u06cc\u062a\u0648\u0631\u06cc\u0646\u06af \u0628\u0627\u0637\u0646<br \/>\n\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u0645\u0627\u0646\u06cc\u062a\u0648\u0631 \u0644\u0627\u062c\u0648\u0631\u062f\u06cc \u0628\u0631\u0627\u06cc \u0628\u06cc\u0646\u0634 Cosmos DB.<\/p>\n<p>  10. \u0628\u0647\u062a\u0631\u06cc\u0646 \u0634\u06cc\u0648\u0647 \u0647\u0627<\/p>\n<p>\u0627\u0632 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637\u06cc \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062d\u0633\u0627\u0633 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<br \/>\n\u0628\u0647\u06cc\u0646\u0647 \u0633\u0627\u0632\u06cc \u062a\u0645\u0627\u0633 \u0647\u0627\u06cc API \u0628\u0627 \u0635\u0641\u062d\u0647 \u0628\u0646\u062f\u06cc \u0648 \u0641\u06cc\u0644\u062a\u0631 \u06a9\u0631\u062f\u0646.<br \/>\n\u0634\u06cc\u0648\u0647 \u0647\u0627\u06cc \u0635\u062d\u06cc\u062d \u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u062e\u0637\u0627 \u0631\u0627 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0627\u06cc\u0646 \u0631\u0627\u0647\u0646\u0645\u0627 \u0637\u0631\u0627\u062d\u06cc \u0642\u0648\u06cc \u0648 \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 React + Java + Cosmos DB \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc \u06a9\u0646\u062f. \u0634\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u06cc\u0646 \u0645\u0639\u0645\u0627\u0631\u06cc \u0631\u0627 \u0628\u0627 \u0645\u0648\u0627\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0627\u0635 \u062a\u0637\u0628\u06cc\u0642 \u062f\u0647\u06cc\u062f \u0648 \u0627\u0632 \u0642\u0627\u0628\u0644\u06cc\u062a \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0648 \u0639\u0645\u0644\u06a9\u0631\u062f \u067e\u0631\u0648\u0698\u0647 \u062e\u0648\u062f \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0646\u06cc\u062f.<\/p>\n<div data-article-id=\"2111404\" id=\"article-body\">\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0631\u0627\u0647\u0646\u0645\u0627\u060c \u0645\u0627 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 React + Java \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631 \u0628\u0627 Cosmos DB \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0637\u0631\u0627\u062d\u06cc \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f. \u0627\u06cc\u0646 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0645\u0642\u06cc\u0627\u0633\u200c\u067e\u0630\u06cc\u0631\u06cc \u0628\u0627\u0644\u0627\u060c \u062a\u0623\u062e\u06cc\u0631 \u06a9\u0645 \u0648 \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0628\u0648\u062f\u0646 \u0686\u0646\u062f \u0645\u0646\u0637\u0642\u0647 \u062f\u0627\u0631\u0646\u062f \u0627\u06cc\u062f\u0647\u200c\u0622\u0644 \u0627\u0633\u062a. \u0645\u0627 \u0647\u0645\u0647 \u0686\u06cc\u0632 \u0631\u0627 \u0627\u0632 \u0645\u0639\u0645\u0627\u0631\u06cc \u06af\u0631\u0641\u062a\u0647 \u062a\u0627 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u067e\u0648\u0634\u0634 \u062e\u0648\u0627\u0647\u06cc\u0645 \u062f\u0627\u062f \u0648 \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0645\u0631\u0627\u062d\u0644 \u0639\u0645\u0644\u06cc \u062a\u0642\u0633\u06cc\u0645 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.<\/p>\n<hr\/>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/#1_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D8%B1%DB%8C%D8%B2%DB%8C_%D9%88_%D8%AA%D8%AC%D8%B2%DB%8C%D9%87_%D9%88_%D8%AA%D8%AD%D9%84%DB%8C%D9%84_%D9%86%DB%8C%D8%A7%D8%B2%D9%85%D9%86%D8%AF%DB%8C_%D9%87%D8%A7\" >1. \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u06cc\u0632\u06cc \u0648 \u062a\u062c\u0632\u06cc\u0647 \u0648 \u062a\u062d\u0644\u06cc\u0644 \u0646\u06cc\u0627\u0632\u0645\u0646\u062f\u06cc \u0647\u0627<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/#%D8%AC%D9%85%D8%B9_%D8%A2%D9%88%D8%B1%DB%8C_%D8%A7%D9%84%D8%B2%D8%A7%D9%85%D8%A7%D8%AA\" >\u062c\u0645\u0639 \u0622\u0648\u0631\u06cc \u0627\u0644\u0632\u0627\u0645\u0627\u062a<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/#%D9%BE%D8%B4%D8%AA%D9%87_%D9%81%D9%86%D8%A7%D9%88%D8%B1%DB%8C\" >\u067e\u0634\u062a\u0647 \u0641\u0646\u0627\u0648\u0631\u06cc<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/#2_%D8%B7%D8%B1%D8%A7%D8%AD%DB%8C_%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C\" >2. \u0637\u0631\u0627\u062d\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/#%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C_%D8%B3%D8%B7%D8%AD_%D8%A8%D8%A7%D9%84%D8%A7\" >\u0645\u0639\u0645\u0627\u0631\u06cc \u0633\u0637\u062d \u0628\u0627\u0644\u0627<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/#3_%D8%AA%D9%88%D8%B3%D8%B9%D9%87_Frontend\" >3. \u062a\u0648\u0633\u0639\u0647 Frontend<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/#%D8%B3%D8%A7%D8%AE%D8%AA%D8%A7%D8%B1_%D9%BE%D9%88%D8%B4%D9%87\" >\u0633\u0627\u062e\u062a\u0627\u0631 \u067e\u0648\u0634\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/#%D9%85%D8%B3%DB%8C%D8%B1%DB%8C%D8%A7%D8%A8%DB%8C\" >\u0645\u0633\u06cc\u0631\u06cc\u0627\u0628\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/#%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA_%D8%AF%D9%88%D9%84%D8%AA%DB%8C\" >\u0645\u062f\u06cc\u0631\u06cc\u062a \u062f\u0648\u0644\u062a\u06cc<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/#4_%D8%AA%D9%88%D8%B3%D8%B9%D9%87_Backend\" >4. \u062a\u0648\u0633\u0639\u0647 Backend<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/#%D8%B1%D8%A7%D9%87_%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C_%D8%A8%D9%88%D8%AA_%D8%A8%D9%87%D8%A7%D8%B1\" >\u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0628\u0648\u062a \u0628\u0647\u0627\u0631<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/#%D8%B3%D8%A7%D8%AE%D8%AA%D8%A7%D8%B1_%D9%BE%D8%B1%D9%88%DA%98%D9%87\" >\u0633\u0627\u062e\u062a\u0627\u0631 \u067e\u0631\u0648\u0698\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/#%D9%BE%DB%8C%DA%A9%D8%B1%D8%A8%D9%86%D8%AF%DB%8C_Cosmos_DB\" >\u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc Cosmos DB<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/#%D9%85%D8%AF%D9%84_%D9%87%D8%A7_%D8%B1%D8%A7_%D8%AA%D8%B9%D8%B1%DB%8C%D9%81_%DA%A9%D9%86%DB%8C%D8%AF\" >\u0645\u062f\u0644 \u0647\u0627 \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/#%D9%85%D8%AE%D8%B2%D9%86\" >\u0645\u062e\u0632\u0646<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/#%D8%AE%D8%AF%D9%85%D8%A7%D8%AA\" >\u062e\u062f\u0645\u0627\u062a<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/#%DA%A9%D9%86%D8%AA%D8%B1%D9%84_%DA%A9%D9%86%D9%86%D8%AF%D9%87\" >\u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u0646\u062f\u0647<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/#5_%D8%B7%D8%B1%D8%A7%D8%AD%DB%8C_%D9%BE%D8%A7%DB%8C%DA%AF%D8%A7%D9%87_%D8%AF%D8%A7%D8%AF%D9%87\" >5. \u0637\u0631\u0627\u062d\u06cc \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/#%D9%88%DB%8C%DA%98%DA%AF%DB%8C_%D9%87%D8%A7%DB%8C_Cosmos_DB\" >\u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc Cosmos DB<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/#6_%DB%8C%DA%A9%D9%BE%D8%A7%D8%B1%DA%86%D9%87_%D8%B3%D8%A7%D8%B2%DB%8C\" >6. \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0633\u0627\u0632\u06cc<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/#%D8%A7%D8%AA%D8%B5%D8%A7%D9%84_Frontend_%D8%A8%D8%A7_Backend\" >\u0627\u062a\u0635\u0627\u0644 Frontend \u0628\u0627 Backend<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/#%D9%86%D9%85%D8%A7%DB%8C%D8%B4_%D8%AF%D8%A7%D8%AF%D9%87_%D9%87%D8%A7_%D8%AF%D8%B1_React\" >\u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0647\u0627 \u062f\u0631 React<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/#7_%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4\" >7. \u0622\u0632\u0645\u0627\u06cc\u0634<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/#%D8%AA%D8%B3%D8%AA_Frontend\" >\u062a\u0633\u062a Frontend<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/#%D8%AA%D8%B3%D8%AA_Backend\" >\u062a\u0633\u062a Backend<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-26\" href=\"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/#8_%D8%A7%D8%B3%D8%AA%D9%82%D8%B1%D8%A7%D8%B1\" >8. \u0627\u0633\u062a\u0642\u0631\u0627\u0631<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-27\" href=\"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/#Containerization_%D8%A8%D8%A7_Docker\" >Containerization \u0628\u0627 Docker<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-28\" href=\"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/#%D8%A7%D8%B1%DA%A9%D8%B3%D8%AA%D8%B1%D8%A7%D8%B3%DB%8C%D9%88%D9%86_%D8%A8%D8%A7_Kubernetes\" >\u0627\u0631\u06a9\u0633\u062a\u0631\u0627\u0633\u06cc\u0648\u0646 \u0628\u0627 Kubernetes<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-29\" href=\"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/#9_%D9%82%D8%A7%D8%A8%D9%84%DB%8C%D8%AA_%D9%85%D8%B4%D8%A7%D9%87%D8%AF%D9%87\" >9. \u0642\u0627\u0628\u0644\u06cc\u062a \u0645\u0634\u0627\u0647\u062f\u0647<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-30\" href=\"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/#%D9%88%D8%B1%D9%88%D8%AF_%D8%A8%D9%87_%D8%B3%DB%8C%D8%B3%D8%AA%D9%85\" >\u0648\u0631\u0648\u062f \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-31\" href=\"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/#%D9%86%D8%B8%D8%A7%D8%B1%D8%AA\" >\u0646\u0638\u0627\u0631\u062a<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-32\" href=\"https:\/\/nabfollower.com\/blog\/end-to-end-system-design-for-a-react-java-cosmos-db-application-3kmj\/#10_%D8%A8%D9%87%D8%AA%D8%B1%DB%8C%D9%86_%D8%B4%DB%8C%D9%88%D9%87_%D9%87%D8%A7\" >10. \u0628\u0647\u062a\u0631\u06cc\u0646 \u0634\u06cc\u0648\u0647 \u0647\u0627<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"1_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D8%B1%DB%8C%D8%B2%DB%8C_%D9%88_%D8%AA%D8%AC%D8%B2%DB%8C%D9%87_%D9%88_%D8%AA%D8%AD%D9%84%DB%8C%D9%84_%D9%86%DB%8C%D8%A7%D8%B2%D9%85%D9%86%D8%AF%DB%8C_%D9%87%D8%A7\"><\/span>\n<p>  <strong>1. \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u06cc\u0632\u06cc \u0648 \u062a\u062c\u0632\u06cc\u0647 \u0648 \u062a\u062d\u0644\u06cc\u0644 \u0646\u06cc\u0627\u0632\u0645\u0646\u062f\u06cc \u0647\u0627<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"%D8%AC%D9%85%D8%B9_%D8%A2%D9%88%D8%B1%DB%8C_%D8%A7%D9%84%D8%B2%D8%A7%D9%85%D8%A7%D8%AA\"><\/span>\n<p>  <strong>\u062c\u0645\u0639 \u0622\u0648\u0631\u06cc \u0627\u0644\u0632\u0627\u0645\u0627\u062a<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>\n<strong>Frontend Needs<\/strong>:<\/p>\n<ul>\n<li>\u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u067e\u0648\u06cc\u0627<\/li>\n<li>\u0628\u0647 \u0631\u0648\u0632 \u0631\u0633\u0627\u0646\u06cc \u062f\u0631 \u0632\u0645\u0627\u0646 \u0648\u0627\u0642\u0639\u06cc.<\/li>\n<li>\u0646\u0627\u0648\u0628\u0631\u06cc \u0628\u0635\u0631\u06cc<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u0646\u06cc\u0627\u0632\u0647\u0627\u06cc Backend<\/strong>:<\/p>\n<ul>\n<li>API \u0647\u0627\u06cc \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631<\/li>\n<li>\u0645\u062f\u06cc\u0631\u06cc\u062a \u067e\u06cc\u0686\u06cc\u062f\u0647 \u062f\u0627\u062f\u0647 \u0647\u0627<\/li>\n<li>\u0630\u062e\u06cc\u0631\u0647 \u0633\u0627\u0632\u06cc \u0648 \u067e\u0631\u062f\u0627\u0632\u0634 \u0627\u0645\u0646 \u062f\u0627\u062f\u0647 \u0647\u0627<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u0646\u06cc\u0627\u0632\u0647\u0627\u06cc \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647<\/strong>:<\/p>\n<ul>\n<li>\u0633\u0627\u062e\u062a\u0627\u0631 NoSQL \u0628\u0631\u0627\u06cc \u0627\u0646\u0639\u0637\u0627\u0641 \u067e\u0630\u06cc\u0631\u06cc.<\/li>\n<li>\u062a\u0623\u062e\u06cc\u0631 \u06a9\u0645 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u062c\u0647\u0627\u0646\u06cc.<\/li>\n<li>\u0633\u0637\u0648\u062d \u0633\u0627\u0632\u06af\u0627\u0631\u06cc \u0628\u0631\u0627\u06cc \u0639\u0645\u0644\u06cc\u0627\u062a \u062a\u0631\u0627\u06a9\u0646\u0634.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"%D9%BE%D8%B4%D8%AA%D9%87_%D9%81%D9%86%D8%A7%D9%88%D8%B1%DB%8C\"><\/span>\n<p>  <strong>\u067e\u0634\u062a\u0647 \u0641\u0646\u0627\u0648\u0631\u06cc<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>\n<strong>Frontend<\/strong>: React.js \u0628\u0627 TypeScript (\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc)\u060c Redux \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u062d\u0627\u0644\u062a.<\/li>\n<li>\n<strong>Backend<\/strong>: \u062c\u0627\u0648\u0627 \u0628\u0627 Spring Boot.<\/li>\n<li>\n<strong>\u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647<\/strong>: Azure Cosmos DB.<\/li>\n<li>\n<strong>\u0627\u0631\u062a\u0628\u0627\u0637<\/strong>: API \u0647\u0627\u06cc RESTful.<\/li>\n<li>\n<strong>\u0627\u0633\u062a\u0642\u0631\u0627\u0631<\/strong>: Docker + Kubernetes.<\/li>\n<\/ul>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"2_%D8%B7%D8%B1%D8%A7%D8%AD%DB%8C_%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C\"><\/span>\n<p>  <strong>2. \u0637\u0631\u0627\u062d\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C_%D8%B3%D8%B7%D8%AD_%D8%A8%D8%A7%D9%84%D8%A7\"><\/span>\n<p>  <strong>\u0645\u0639\u0645\u0627\u0631\u06cc \u0633\u0637\u062d \u0628\u0627\u0644\u0627<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>\n<strong>Frontend<\/strong>: \u0628\u0631\u0646\u0627\u0645\u0647 React \u0628\u0631\u0627\u06cc \u0631\u0646\u062f\u0631 \u0633\u0645\u062a \u06a9\u0644\u0627\u06cc\u0646\u062a\u060c \u0645\u0635\u0631\u0641 API \u0648 UI \u067e\u0648\u06cc\u0627.<\/li>\n<li>\n<strong>Backend<\/strong>: Java Spring Boot \u0628\u0631\u0627\u06cc \u062a\u0648\u0633\u0639\u0647 API RESTful.<\/li>\n<li>\n<strong>\u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647<\/strong>: Cosmos DB \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0633\u0627\u0632\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0628\u0633\u06cc\u0627\u0631 \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0648 \u067e\u0627\u0631\u062a\u06cc\u0634\u0646 \u0628\u0646\u062f\u06cc \u0634\u062f\u0647.<\/li>\n<li>\n<strong>\u0627\u0631\u062a\u0628\u0627\u0637<\/strong>: API \u0647\u0627\u06cc REST \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 JSON \u0628\u0631\u0627\u06cc \u062a\u0639\u0627\u0645\u0644 \u0628\u06cc\u0646 \u0638\u0627\u0647\u0631 \u0648 \u0628\u0627\u0637\u0646.<\/li>\n<\/ul>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"3_%D8%AA%D9%88%D8%B3%D8%B9%D9%87_Frontend\"><\/span>\n<p>  <strong>3. \u062a\u0648\u0633\u0639\u0647 Frontend<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"%D8%B3%D8%A7%D8%AE%D8%AA%D8%A7%D8%B1_%D9%BE%D9%88%D8%B4%D9%87\"><\/span>\n<p>  <strong>\u0633\u0627\u062e\u062a\u0627\u0631 \u067e\u0648\u0634\u0647<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0633\u0627\u0632\u0645\u0627\u0646\u062f\u0647\u06cc \u067e\u0631\u0648\u0698\u0647 React \u0628\u0631\u0627\u06cc \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631\u06cc \u0648 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>src\/\n\u251c\u2500\u2500 components\/   # Reusable UI components\n\u251c\u2500\u2500 pages\/        # Page-level components\n\u251c\u2500\u2500 hooks\/        # Custom React hooks\n\u251c\u2500\u2500 context\/      # Global state management using Context API\n\u251c\u2500\u2500 services\/     # API calls\n\u251c\u2500\u2500 styles\/       # CSS\/SCSS files\n\u251c\u2500\u2500 App.js        # Root component\n\u2514\u2500\u2500 index.js      # Entry point\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D9%85%D8%B3%DB%8C%D8%B1%DB%8C%D8%A7%D8%A8%DB%8C\"><\/span>\n<p>  <strong>\u0645\u0633\u06cc\u0631\u06cc\u0627\u0628\u06cc<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f <code>react-router-dom<\/code> \u0628\u0631\u0627\u06cc \u0646\u0627\u0648\u0628\u0631\u06cc:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">BrowserRouter<\/span> <span class=\"k\">as<\/span> <span class=\"nx\">Router<\/span><span class=\"p\">,<\/span> <span class=\"nx\">Routes<\/span><span class=\"p\">,<\/span> <span class=\"nx\">Route<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">react-router-dom<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\n\n<span class=\"kd\">function<\/span> <span class=\"nf\">App<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\n    <span class=\"o\">&lt;<\/span><span class=\"nx\">Router<\/span><span class=\"o\">&gt;<\/span>\n      <span class=\"o\">&lt;<\/span><span class=\"nx\">Routes<\/span><span class=\"o\">&gt;<\/span>\n        <span class=\"o\">&lt;<\/span><span class=\"nx\">Route<\/span> <span class=\"nx\">path<\/span><span class=\"o\">=<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">\/<\/span><span class=\"dl\">\"<\/span> <span class=\"nx\">element<\/span><span class=\"o\">=<\/span><span class=\"p\">{<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">Home<\/span> <span class=\"o\">\/&gt;<\/span><span class=\"p\">}<\/span> <span class=\"sr\">\/<\/span><span class=\"err\">&gt;\n<\/span>        <span class=\"o\">&lt;<\/span><span class=\"nx\">Route<\/span> <span class=\"nx\">path<\/span><span class=\"o\">=<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">\/users<\/span><span class=\"dl\">\"<\/span> <span class=\"nx\">element<\/span><span class=\"o\">=<\/span><span class=\"p\">{<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">UserList<\/span> <span class=\"o\">\/&gt;<\/span><span class=\"p\">}<\/span> <span class=\"sr\">\/<\/span><span class=\"err\">&gt;\n<\/span>      <span class=\"o\">&lt;<\/span><span class=\"sr\">\/Routes<\/span><span class=\"err\">&gt;\n<\/span>    <span class=\"o\">&lt;<\/span><span class=\"sr\">\/Router<\/span><span class=\"err\">&gt;\n<\/span>  <span class=\"p\">);<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"k\">export<\/span> <span class=\"k\">default<\/span> <span class=\"nx\">App<\/span><span class=\"p\">;<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA_%D8%AF%D9%88%D9%84%D8%AA%DB%8C\"><\/span>\n<p>  <strong>\u0645\u062f\u06cc\u0631\u06cc\u062a \u062f\u0648\u0644\u062a\u06cc<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u06cc\u0646 \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f <strong>Redux<\/strong> \u06cc\u0627 <strong>Context API<\/strong>:<\/p>\n<ul>\n<li>\u0627\u0632 Redux \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0628\u0632\u0631\u06af\u06cc \u06a9\u0647 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u062a\u0645\u0631\u06a9\u0632 \u062d\u0627\u0644\u062a \u062f\u0627\u0631\u0646\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/li>\n<li>\u0627\u0632 Context API \u0628\u0631\u0627\u06cc \u0633\u0646\u0627\u0631\u06cc\u0648\u0647\u0627\u06cc \u0627\u0634\u062a\u0631\u0627\u06a9\u200c\u06af\u0630\u0627\u0631\u06cc \u062d\u0627\u0644\u062a \u0633\u0627\u062f\u0647\u200c\u062a\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/li>\n<\/ul>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"4_%D8%AA%D9%88%D8%B3%D8%B9%D9%87_Backend\"><\/span>\n<p>  <strong>4. \u062a\u0648\u0633\u0639\u0647 Backend<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"%D8%B1%D8%A7%D9%87_%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C_%D8%A8%D9%88%D8%AA_%D8%A8%D9%87%D8%A7%D8%B1\"><\/span>\n<p>  <strong>\u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0628\u0648\u062a \u0628\u0647\u0627\u0631<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u0627 Maven \u06cc\u0627 Gradle \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 Spring Boot \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f. \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627\u06cc \u0632\u06cc\u0631 \u0631\u0627 \u0634\u0627\u0645\u0644 \u0634\u0648\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight xml\"><code><span class=\"nt\"><dependency\/><\/span>\n    <span class=\"nt\"><groupid\/><\/span>com.azure.spring<span class=\"nt\"\/>\n    <span class=\"nt\"><artifactid\/><\/span>spring-cloud-azure-starter-data-cosmos<span class=\"nt\"\/>\n<span class=\"nt\"\/>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D8%B3%D8%A7%D8%AE%D8%AA%D8%A7%D8%B1_%D9%BE%D8%B1%D9%88%DA%98%D9%87\"><\/span>\n<p>  <strong>\u0633\u0627\u062e\u062a\u0627\u0631 \u067e\u0631\u0648\u0698\u0647<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u0627\u0637\u0646 \u062e\u0648\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631\u06cc \u0633\u0627\u0632\u0645\u0627\u0646\u062f\u0647\u06cc \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>src\/main\/java\/com\/example\/\n\u251c\u2500\u2500 controller\/    # REST Controllers\n\u251c\u2500\u2500 service\/       # Business logic\n\u251c\u2500\u2500 repository\/    # Cosmos DB integration\n\u251c\u2500\u2500 model\/         # Data models\n\u2514\u2500\u2500 application\/   # Main application class\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D9%BE%DB%8C%DA%A9%D8%B1%D8%A8%D9%86%D8%AF%DB%8C_Cosmos_DB\"><\/span>\n<p>  <strong>\u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc Cosmos DB<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0644\u0627\u0632\u0645 \u0631\u0627 \u0628\u0647 \u0622\u0646 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f <code>application.properties<\/code>:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight properties\"><code><span class=\"py\">spring.cloud.azure.cosmos.endpoint<\/span><span class=\"p\">=<\/span><span class=\"s\"><your_cosmos_db_endpoint\/><\/span>\n<span class=\"py\">spring.cloud.azure.cosmos.key<\/span><span class=\"p\">=<\/span><span class=\"s\"><your_cosmos_db_key\/><\/span>\n<span class=\"py\">spring.cloud.azure.cosmos.database<\/span><span class=\"p\">=<\/span><span class=\"s\"><database_name\/><\/span>\n<span class=\"py\">spring.cloud.azure.cosmos.consistency-level<\/span><span class=\"p\">=<\/span><span class=\"s\">Session<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D9%85%D8%AF%D9%84_%D9%87%D8%A7_%D8%B1%D8%A7_%D8%AA%D8%B9%D8%B1%DB%8C%D9%81_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  <strong>\u0645\u062f\u0644 \u0647\u0627 \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u0632 \u062d\u0627\u0634\u06cc\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0628\u0631\u0627\u06cc \u0646\u06af\u0627\u0634\u062a \u06a9\u0644\u0627\u0633 \u0647\u0627\u06cc \u062c\u0627\u0648\u0627 \u0628\u0647 Cosmos DB \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight java\"><code><span class=\"nd\">@Container<\/span><span class=\"o\">(<\/span><span class=\"n\">containerName<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"users\"<\/span><span class=\"o\">)<\/span>\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">User<\/span> <span class=\"o\">{<\/span>\n    <span class=\"nd\">@Id<\/span>\n    <span class=\"kd\">private<\/span> <span class=\"nc\">String<\/span> <span class=\"n\">id<\/span><span class=\"o\">;<\/span>\n    <span class=\"kd\">private<\/span> <span class=\"nc\">String<\/span> <span class=\"n\">name<\/span><span class=\"o\">;<\/span>\n    <span class=\"kd\">private<\/span> <span class=\"nc\">String<\/span> <span class=\"n\">email<\/span><span class=\"o\">;<\/span>\n\n    <span class=\"c1\">\/\/ Getters and setters<\/span>\n<span class=\"o\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D9%85%D8%AE%D8%B2%D9%86\"><\/span>\n<p>  <strong>\u0645\u062e\u0632\u0646<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0631\u0627\u0628\u0637 \u0645\u062e\u0632\u0646 \u0628\u0631\u0627\u06cc \u0639\u0645\u0644\u06cc\u0627\u062a \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight java\"><code><span class=\"nd\">@Repository<\/span>\n<span class=\"kd\">public<\/span> <span class=\"kd\">interface<\/span> <span class=\"nc\">UserRepository<\/span> <span class=\"kd\">extends<\/span> <span class=\"nc\">CosmosRepository<\/span><span class=\"o\">&lt;<\/span><span class=\"nc\">User<\/span><span class=\"o\">,<\/span> <span class=\"nc\">String<\/span><span class=\"o\">&gt;<\/span> <span class=\"o\">{}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D8%AE%D8%AF%D9%85%D8%A7%D8%AA\"><\/span>\n<p>  <strong>\u062e\u062f\u0645\u0627\u062a<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0645\u0646\u0637\u0642 \u06a9\u0633\u0628 \u0648 \u06a9\u0627\u0631 \u062f\u0631 \u06a9\u0644\u0627\u0633 \u062e\u062f\u0645\u0627\u062a:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight java\"><code><span class=\"nd\">@Service<\/span>\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">UserService<\/span> <span class=\"o\">{<\/span>\n    <span class=\"nd\">@Autowired<\/span>\n    <span class=\"kd\">private<\/span> <span class=\"nc\">UserRepository<\/span> <span class=\"n\">userRepository<\/span><span class=\"o\">;<\/span>\n\n    <span class=\"kd\">public<\/span> <span class=\"nc\">List<\/span><span class=\"o\">&lt;<\/span><span class=\"nc\">User<\/span><span class=\"o\">&gt;<\/span> <span class=\"nf\">getAllUsers<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">userRepository<\/span><span class=\"o\">.<\/span><span class=\"na\">findAll<\/span><span class=\"o\">();<\/span>\n    <span class=\"o\">}<\/span>\n\n    <span class=\"kd\">public<\/span> <span class=\"nc\">User<\/span> <span class=\"nf\">createUser<\/span><span class=\"o\">(<\/span><span class=\"nc\">User<\/span> <span class=\"n\">user<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">userRepository<\/span><span class=\"o\">.<\/span><span class=\"na\">save<\/span><span class=\"o\">(<\/span><span class=\"n\">user<\/span><span class=\"o\">);<\/span>\n    <span class=\"o\">}<\/span>\n<span class=\"o\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%DA%A9%D9%86%D8%AA%D8%B1%D9%84_%DA%A9%D9%86%D9%86%D8%AF%D9%87\"><\/span>\n<p>  <strong>\u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u0646\u062f\u0647<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>API \u0647\u0627 \u0631\u0627 \u0628\u0631\u0627\u06cc \u062a\u0639\u0627\u0645\u0644 \u0628\u0627 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight java\"><code><span class=\"nd\">@RestController<\/span>\n<span class=\"nd\">@RequestMapping<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/api\/users\"<\/span><span class=\"o\">)<\/span>\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">UserController<\/span> <span class=\"o\">{<\/span>\n    <span class=\"nd\">@Autowired<\/span>\n    <span class=\"kd\">private<\/span> <span class=\"nc\">UserService<\/span> <span class=\"n\">userService<\/span><span class=\"o\">;<\/span>\n\n    <span class=\"nd\">@GetMapping<\/span>\n    <span class=\"kd\">public<\/span> <span class=\"nc\">List<\/span><span class=\"o\">&lt;<\/span><span class=\"nc\">User<\/span><span class=\"o\">&gt;<\/span> <span class=\"nf\">getUsers<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">userService<\/span><span class=\"o\">.<\/span><span class=\"na\">getAllUsers<\/span><span class=\"o\">();<\/span>\n    <span class=\"o\">}<\/span>\n\n    <span class=\"nd\">@PostMapping<\/span>\n    <span class=\"kd\">public<\/span> <span class=\"nc\">User<\/span> <span class=\"nf\">createUser<\/span><span class=\"o\">(<\/span><span class=\"nd\">@RequestBody<\/span> <span class=\"nc\">User<\/span> <span class=\"n\">user<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">userService<\/span><span class=\"o\">.<\/span><span class=\"na\">createUser<\/span><span class=\"o\">(<\/span><span class=\"n\">user<\/span><span class=\"o\">);<\/span>\n    <span class=\"o\">}<\/span>\n<span class=\"o\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"5_%D8%B7%D8%B1%D8%A7%D8%AD%DB%8C_%D9%BE%D8%A7%DB%8C%DA%AF%D8%A7%D9%87_%D8%AF%D8%A7%D8%AF%D9%87\"><\/span>\n<p>  <strong>5. \u0637\u0631\u0627\u062d\u06cc \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"%D9%88%DB%8C%DA%98%DA%AF%DB%8C_%D9%87%D8%A7%DB%8C_Cosmos_DB\"><\/span>\n<p>  <strong>\u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc Cosmos DB<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>\n<strong>\u067e\u0627\u0631\u062a\u06cc\u0634\u0646 \u0628\u0646\u062f\u06cc<\/strong>: \u0627\u0632 \u06cc\u06a9 \u0641\u06cc\u0644\u062f \u0645\u0646\u062d\u0635\u0631 \u0628\u0647 \u0641\u0631\u062f \u0645\u0627\u0646\u0646\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f <code>userId<\/code> \u0628\u0631\u0627\u06cc \u0628\u0647\u06cc\u0646\u0647 \u0633\u0627\u0632\u06cc \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631\u06cc<\/li>\n<li>\n<strong>\u0633\u0637\u0648\u062d \u0633\u0627\u0632\u06af\u0627\u0631\u06cc<\/strong>:<\/p>\n<ul>\n<li>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f <strong>\u062c\u0644\u0633\u0647<\/strong> \u0633\u0627\u0632\u06af\u0627\u0631\u06cc \u0628\u0631\u0627\u06cc \u0627\u06a9\u062b\u0631 \u0633\u0646\u0627\u0631\u06cc\u0648\u0647\u0627<\/li>\n<li>\u062a\u063a\u06cc\u06cc\u0631 \u0628\u0647 <strong>\u0642\u0648\u06cc<\/strong> \u0633\u0627\u0632\u06af\u0627\u0631\u06cc \u0628\u0631\u0627\u06cc \u0639\u0645\u0644\u06cc\u0627\u062a \u062d\u06cc\u0627\u062a\u06cc<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u0646\u0645\u0627\u06cc\u0647 \u0633\u0627\u0632\u06cc<\/strong>: \u0627\u0632 \u0646\u0645\u0627\u06cc\u0647 \u0633\u0627\u0632\u06cc \u062e\u0648\u062f\u06a9\u0627\u0631 Cosmos DB \u0628\u0631\u0627\u06cc \u0628\u0647\u06cc\u0646\u0647 \u0633\u0627\u0632\u06cc \u067e\u0631\u0633 \u0648 \u062c\u0648 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/li>\n<\/ul>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"6_%DB%8C%DA%A9%D9%BE%D8%A7%D8%B1%DA%86%D9%87_%D8%B3%D8%A7%D8%B2%DB%8C\"><\/span>\n<p>  <strong>6. \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0633\u0627\u0632\u06cc<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"%D8%A7%D8%AA%D8%B5%D8%A7%D9%84_Frontend_%D8%A8%D8%A7_Backend\"><\/span>\n<p>  <strong>\u0627\u062a\u0635\u0627\u0644 Frontend \u0628\u0627 Backend<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u0632 Axios \u06cc\u0627 Fetch \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 React \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"k\">import<\/span> <span class=\"nx\">axios<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">axios<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\n\n<span class=\"kd\">const<\/span> <span class=\"nx\">API_URL<\/span> <span class=\"o\">=<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">http:\/\/localhost:8080\/api\/users<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\n\n<span class=\"k\">export<\/span> <span class=\"kd\">const<\/span> <span class=\"nx\">fetchUsers<\/span> <span class=\"o\">=<\/span> <span class=\"k\">async <\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">response<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nx\">axios<\/span><span class=\"p\">.<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"nx\">API_URL<\/span><span class=\"p\">);<\/span>\n  <span class=\"k\">return<\/span> <span class=\"nx\">response<\/span><span class=\"p\">.<\/span><span class=\"nx\">data<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">};<\/span>\n\n<span class=\"k\">export<\/span> <span class=\"kd\">const<\/span> <span class=\"nx\">createUser<\/span> <span class=\"o\">=<\/span> <span class=\"k\">async <\/span><span class=\"p\">(<\/span><span class=\"nx\">user<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">response<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nx\">axios<\/span><span class=\"p\">.<\/span><span class=\"nf\">post<\/span><span class=\"p\">(<\/span><span class=\"nx\">API_URL<\/span><span class=\"p\">,<\/span> <span class=\"nx\">user<\/span><span class=\"p\">);<\/span>\n  <span class=\"k\">return<\/span> <span class=\"nx\">response<\/span><span class=\"p\">.<\/span><span class=\"nx\">data<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">};<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D9%86%D9%85%D8%A7%DB%8C%D8%B4_%D8%AF%D8%A7%D8%AF%D9%87_%D9%87%D8%A7_%D8%AF%D8%B1_React\"><\/span>\n<p>  <strong>\u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0647\u0627 \u062f\u0631 React<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"k\">import<\/span> <span class=\"nx\">React<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">useState<\/span><span class=\"p\">,<\/span> <span class=\"nx\">useEffect<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">react<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">fetchUsers<\/span><span class=\"p\">,<\/span> <span class=\"nx\">createUser<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">.\/services\/userService<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\n\n<span class=\"kd\">function<\/span> <span class=\"nf\">UserList<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">users<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setUsers<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useState<\/span><span class=\"p\">([]);<\/span>\n\n  <span class=\"nf\">useEffect<\/span><span class=\"p\">(()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nf\">fetchUsers<\/span><span class=\"p\">().<\/span><span class=\"nf\">then<\/span><span class=\"p\">(<\/span><span class=\"nx\">setUsers<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">},<\/span> <span class=\"p\">[]);<\/span>\n\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\n    <span class=\"o\">&lt;<\/span><span class=\"nx\">div<\/span><span class=\"o\">&gt;<\/span>\n      <span class=\"o\">&lt;<\/span><span class=\"nx\">h1<\/span><span class=\"o\">&gt;<\/span><span class=\"nx\">User<\/span> <span class=\"nx\">List<\/span><span class=\"o\">&lt;<\/span><span class=\"sr\">\/h1<\/span><span class=\"err\">&gt;\n<\/span>      <span class=\"o\">&lt;<\/span><span class=\"nx\">ul<\/span><span class=\"o\">&gt;<\/span>\n        <span class=\"p\">{<\/span><span class=\"nx\">users<\/span><span class=\"p\">.<\/span><span class=\"nf\">map<\/span><span class=\"p\">((<\/span><span class=\"nx\">user<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">(<\/span>\n          <span class=\"o\">&lt;<\/span><span class=\"nx\">li<\/span> <span class=\"nx\">key<\/span><span class=\"o\">=<\/span><span class=\"p\">{<\/span><span class=\"nx\">user<\/span><span class=\"p\">.<\/span><span class=\"nx\">id<\/span><span class=\"p\">}<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">{<\/span><span class=\"nx\">user<\/span><span class=\"p\">.<\/span><span class=\"nx\">name<\/span><span class=\"p\">}<\/span><span class=\"o\">&lt;<\/span><span class=\"sr\">\/li<\/span><span class=\"err\">&gt;\n<\/span>        <span class=\"p\">))}<\/span>\n      <span class=\"o\">&lt;<\/span><span class=\"sr\">\/ul<\/span><span class=\"err\">&gt;\n<\/span>    <span class=\"o\">&lt;<\/span><span class=\"sr\">\/div<\/span><span class=\"err\">&gt;\n<\/span>  <span class=\"p\">);<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"k\">export<\/span> <span class=\"k\">default<\/span> <span class=\"nx\">UserList<\/span><span class=\"p\">;<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"7_%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4\"><\/span>\n<p>  <strong>7. \u0622\u0632\u0645\u0627\u06cc\u0634<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"%D8%AA%D8%B3%D8%AA_Frontend\"><\/span>\n<p>  <strong>\u062a\u0633\u062a Frontend<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f <strong>\u0627\u0633\u062a<\/strong> \u0648 <strong>\u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u062a\u0633\u062a \u0648\u0627\u06a9\u0646\u0634<\/strong> \u0628\u0631\u0627\u06cc \u062a\u0633\u062a \u0647\u0627\u06cc \u0648\u0627\u062d\u062f<\/li>\n<li>\u062a\u0633\u062a \u0647\u0627\u06cc \u0627\u062f\u063a\u0627\u0645 \u0631\u0627 \u0628\u0631\u0627\u06cc \u062a\u0645\u0627\u0633 \u0647\u0627\u06cc API \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"%D8%AA%D8%B3%D8%AA_Backend\"><\/span>\n<p>  <strong>\u062a\u0633\u062a Backend<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f <strong>JUnit<\/strong> \u0648 <strong>\u0645\u0648\u06a9\u06cc\u062a\u0648<\/strong> \u0628\u0631\u0627\u06cc \u062a\u0633\u062a \u0647\u0627\u06cc \u0648\u0627\u062d\u062f<\/li>\n<li>\u0622\u0632\u0645\u0627\u06cc\u0634 \u0639\u0645\u0644\u06cc\u0627\u062a \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0628\u0627 Cosmos DB \u062a\u0639\u0628\u06cc\u0647 \u0634\u062f\u0647:\n<\/li>\n<\/ul>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight xml\"><code>  <span class=\"nt\"><dependency\/><\/span>\n      <span class=\"nt\"><groupid\/><\/span>com.azure<span class=\"nt\"\/>\n      <span class=\"nt\"><artifactid\/><\/span>cosmosdb-emulator<span class=\"nt\"\/>\n  <span class=\"nt\"\/>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"8_%D8%A7%D8%B3%D8%AA%D9%82%D8%B1%D8%A7%D8%B1\"><\/span>\n<p>  <strong>8. \u0627\u0633\u062a\u0642\u0631\u0627\u0631<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"Containerization_%D8%A8%D8%A7_Docker\"><\/span>\n<p>  <strong>Containerization \u0628\u0627 Docker<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Dockerfiles \u0631\u0627 \u0647\u0645 \u0628\u0631\u0627\u06cc frontend \u0648 \u0647\u0645 \u0628\u0631\u0627\u06cc backend \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight docker\"><code>  FROM node:16\n  WORKDIR \/app\n  COPY . .\n  RUN npm install\n  RUN npm run build\n  EXPOSE 3000\n  CMD [\"npm\", \"start\"]\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight docker\"><code>  FROM openjdk:17\n  WORKDIR \/app\n  COPY target\/*.jar app.jar\n  EXPOSE 8080\n  ENTRYPOINT [\"java\", \"-jar\", \"app.jar\"]\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D8%A7%D8%B1%DA%A9%D8%B3%D8%AA%D8%B1%D8%A7%D8%B3%DB%8C%D9%88%D9%86_%D8%A8%D8%A7_Kubernetes\"><\/span>\n<p>  <strong>\u0627\u0631\u06a9\u0633\u062a\u0631\u0627\u0633\u06cc\u0648\u0646 \u0628\u0627 Kubernetes<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u062e\u062f\u0645\u0627\u062a \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0646\u0645\u0627\u06cc\u0634\u06af\u0631\u0647\u0627\u06cc Kubernetes:<\/p>\n<ul>\n<li>\u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f <strong>\u0627\u0633\u062a\u0642\u0631\u0627\u0631<\/strong> \u0648 <strong>\u062e\u062f\u0645\u0627\u062a<\/strong> \u0628\u0631\u0627\u06cc \u0641\u0631\u0627\u0646\u062a \u0627\u0646\u062f \u0648 \u0628\u06a9 \u0627\u0646\u062f<\/li>\n<li>\u0627\u0632 ConfigMaps \u0648 Secrets \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0627\u0639\u062a\u0628\u0627\u0631 Cosmos DB \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/li>\n<\/ul>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"9_%D9%82%D8%A7%D8%A8%D9%84%DB%8C%D8%AA_%D9%85%D8%B4%D8%A7%D9%87%D8%AF%D9%87\"><\/span>\n<p>  <strong>9. \u0642\u0627\u0628\u0644\u06cc\u062a \u0645\u0634\u0627\u0647\u062f\u0647<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"%D9%88%D8%B1%D9%88%D8%AF_%D8%A8%D9%87_%D8%B3%DB%8C%D8%B3%D8%AA%D9%85\"><\/span>\n<p>  <strong>\u0648\u0631\u0648\u062f \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f <strong>\u0648\u0631\u0648\u062f \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645<\/strong> \u0628\u0631\u0627\u06cc \u062b\u0628\u062a \u0628\u0627\u0637\u0646<\/li>\n<li>\u0627\u0632 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u0647 \u0645\u0631\u0648\u0631\u06af\u0631 \u0628\u0631\u0627\u06cc \u0627\u0634\u06a9\u0627\u0644 \u0632\u062f\u0627\u06cc\u06cc \u0638\u0627\u0647\u0631\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"%D9%86%D8%B8%D8%A7%D8%B1%D8%AA\"><\/span>\n<p>  <strong>\u0646\u0638\u0627\u0631\u062a<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>\u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f <strong>\u067e\u0631\u0648\u0645\u062a\u0626\u0648\u0633<\/strong> \u0648 <strong>\u06af\u0631\u0627\u0641\u0627\u0646\u0627<\/strong> \u0628\u0631\u0627\u06cc \u0645\u0627\u0646\u06cc\u062a\u0648\u0631\u06cc\u0646\u06af \u0628\u0627\u0637\u0646<\/li>\n<li>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f <strong>\u0645\u0627\u0646\u06cc\u062a\u0648\u0631 \u0644\u0627\u062c\u0648\u0631\u062f\u06cc<\/strong> \u0628\u0631\u0627\u06cc \u0628\u06cc\u0646\u0634 Cosmos DB.<\/li>\n<\/ul>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"10_%D8%A8%D9%87%D8%AA%D8%B1%DB%8C%D9%86_%D8%B4%DB%8C%D9%88%D9%87_%D9%87%D8%A7\"><\/span>\n<p>  <strong>10. \u0628\u0647\u062a\u0631\u06cc\u0646 \u0634\u06cc\u0648\u0647 \u0647\u0627<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li>\u0627\u0632 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637\u06cc \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062d\u0633\u0627\u0633 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/li>\n<li>\u0628\u0647\u06cc\u0646\u0647 \u0633\u0627\u0632\u06cc \u062a\u0645\u0627\u0633 \u0647\u0627\u06cc API \u0628\u0627 \u0635\u0641\u062d\u0647 \u0628\u0646\u062f\u06cc \u0648 \u0641\u06cc\u0644\u062a\u0631 \u06a9\u0631\u062f\u0646.<\/li>\n<li>\u0634\u06cc\u0648\u0647 \u0647\u0627\u06cc \u0635\u062d\u06cc\u062d \u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u062e\u0637\u0627 \u0631\u0627 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0646\u06cc\u062f.<\/li>\n<\/ul>\n<hr\/>\n<p>\u0627\u06cc\u0646 \u0631\u0627\u0647\u0646\u0645\u0627 \u0637\u0631\u0627\u062d\u06cc \u0642\u0648\u06cc \u0648 \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 React + Java + Cosmos DB \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc \u06a9\u0646\u062f. \u0634\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u06cc\u0646 \u0645\u0639\u0645\u0627\u0631\u06cc \u0631\u0627 \u0628\u0627 \u0645\u0648\u0627\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0627\u0635 \u062a\u0637\u0628\u06cc\u0642 \u062f\u0647\u06cc\u062f \u0648 \u0627\u0632 \u0642\u0627\u0628\u0644\u06cc\u062a \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0648 \u0639\u0645\u0644\u06a9\u0631\u062f \u067e\u0631\u0648\u0698\u0647 \u062e\u0648\u062f \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0646\u06cc\u062f.<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Summarize this content to 400 words in Persian Lang \u062f\u0631 \u0627\u06cc\u0646 \u0631\u0627\u0647\u0646\u0645\u0627\u060c \u0645\u0627 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 React + Java \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631 \u0628\u0627 Cosmos DB \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0637\u0631\u0627\u062d\u06cc \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f. \u0627\u06cc\u0646 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0645\u0642\u06cc\u0627\u0633\u200c\u067e\u0630\u06cc\u0631\u06cc \u0628\u0627\u0644\u0627\u060c \u062a\u0623\u062e\u06cc\u0631 \u06a9\u0645 \u0648 \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0628\u0648\u062f\u0646 \u0686\u0646\u062f \u0645\u0646\u0637\u0642\u0647 \u062f\u0627\u0631\u0646\u062f \u0627\u06cc\u062f\u0647\u200c\u0622\u0644 \u0627\u0633\u062a. \u0645\u0627 \u0647\u0645\u0647 \u0686\u06cc\u0632 \u0631\u0627 \u0627\u0632 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":84460,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-84459","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/84459","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=84459"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/84459\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/84460"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=84459"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=84459"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=84459"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}