<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Weder Sousa</title>
    <description>The latest articles on DEV Community by Weder Sousa (@weder96).</description>
    <link>https://dev.to/weder96</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F887615%2F8511393a-3f12-423b-ac7b-65c7fc566d8b.png</url>
      <title>DEV Community: Weder Sousa</title>
      <link>https://dev.to/weder96</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/weder96"/>
    <language>en</language>
    <item>
      <title>From Code to Solutions: Why Problem-Solving is the Ultimate Success Factor in Software Development</title>
      <dc:creator>Weder Sousa</dc:creator>
      <pubDate>Thu, 23 Jan 2025 17:20:51 +0000</pubDate>
      <link>https://dev.to/weder96/why-solving-problems-is-the-key-to-success-in-software-development-1ngg</link>
      <guid>https://dev.to/weder96/why-solving-problems-is-the-key-to-success-in-software-development-1ngg</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;A friend recently approached me for help and professional advice. This conversation made me think. &lt;br&gt;
What if I were in his shoes, looking for advice on how to pursue a career as a programmer or software architect? &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"That’s why I’m writing today to my past self and to those who are just starting out on this journey."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When a &lt;strong&gt;software architect or programmer&lt;/strong&gt; faces a challenge, the temptation to start coding right away is great. However, this rush can result in ineffective solutions and wasted time. Often, what is being developed does not address the root of the problem, &lt;strong&gt;leading to future complications&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;On the other hand, when taking on the role of software architect, it can be tempting to apply our &lt;strong&gt;“magic architecture”&lt;/strong&gt; or follow the latest technology fad. This approach can be risky and, &lt;strong&gt;in many cases, irresponsible.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Understanding the problem in a &lt;strong&gt;comprehensive way is essential&lt;/strong&gt;, especially in a critical sector such as the pharmaceutical industry. With a deeper understanding, we can identify the real needs of users and &lt;strong&gt;find appropriate solutions&lt;/strong&gt;, resulting in more effective code that meets industry requirements.&lt;/p&gt;

&lt;p&gt;It is vital to remember that what really matters is not just how we solve a problem, but rather finding a solution that works. However, a poorly structured solution may seem appealing at first glance, &lt;strong&gt;but will become complex and costly to maintain over time.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Expanding Your Toolkit
&lt;/h2&gt;

&lt;p&gt;While coding is essential for developers, it is not the only skill required. There are several technologies and resources that a software architect or programmer can explore to enhance their skills and deliver more robust solutions.&lt;/p&gt;

&lt;p&gt;In this article, we will consider a scenario where the professional is experienced, familiar with multiple projects, and has knowledge of cloud architecture, microservices, and object-oriented programming.&lt;/p&gt;

&lt;p&gt;However, it is vital that, throughout this journey, the developer &lt;strong&gt;does not fall into two major mistakes:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Imposter Syndrome&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Superman Syndrome&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These syndromes can harm not only the individual, &lt;strong&gt;but also negatively impact the team and professional reputation.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Understand the Problem from the Customer's Perspective
&lt;/h2&gt;

&lt;p&gt;Understanding the problem at hand is essential, but this must be done from the customer's perspective, and not just based on how the developer sees the situation. In a previous experience, we faced a disorganized project in React, where two previous teams gave up due to complications. When talking to the analyst, &lt;strong&gt;we realized that, by understanding her expectations&lt;/strong&gt; and the reasons why we had not been able to deliver what she wanted, we radically changed our approach. This exchange of understanding led us to specialize instead of remaining generalists.&lt;/p&gt;

&lt;p&gt;Be what we call the &lt;strong&gt;"Middle Dev"&lt;/strong&gt;, acting as a central link between the business rules and the areas of technology, development and architecture. This way, tasks start to be &lt;strong&gt;completed efficiently and clearly&lt;/strong&gt;, resulting in a more &lt;strong&gt;productive and organized workflow&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Be an Expert in Your Client's Processes
&lt;/h2&gt;

&lt;p&gt;Offering a robust solution is not limited to defining the best system architecture or the best cloud configuration. Even if you use on-premises servers, write clean code in Java and Spring Boot, or implement a serverless solution on AWS, none of this is valid if it does not meet the client's real needs.&lt;/p&gt;

&lt;p&gt;Having a deep &lt;strong&gt;understanding of your client's problem is essential&lt;/strong&gt;. Understanding both worlds — programming and architecture — allows you to think more clearly and propose effective solutions. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It's like planting a tree: for it to grow and bear fruit&lt;/strong&gt;, its roots need to be firmly established. Many times, &lt;strong&gt;we try to make a project&lt;/strong&gt; work without the necessary foundation, leading to abandoning ship.&lt;/p&gt;

&lt;p&gt;On the other hand, we also have clients who &lt;strong&gt;never stop thinking about new problems&lt;/strong&gt;. In a startup where I worked, the original architecture was quickly restructured, evolving over time. If there had been more careful planning from the beginning, the restructuring could have been avoided.&lt;/p&gt;

&lt;h2&gt;
  
  
  Right or Wrong Decision
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F67vj7qbfzfc15u3wnh0w.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F67vj7qbfzfc15u3wnh0w.jpg" alt="Image description" width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are projects that are born great, and this is mainly due to the vision of their creators (stakeholders). In another startup where I worked, the application was conceived in a grand way from the beginning. The frontend of the application was excellent and, once implemented, it was in a sector that is experiencing explosive growth worldwide: industrial automation, known as Industry 4.0. The project was fantastic, and the stakeholder managed to integrate some concepts from Industry 5.0, which was impressive.&lt;/p&gt;

&lt;p&gt;I am mentioning this project in particular because I have worked on more than 50 software projects, and there was a phrase said at an early stage that helps us understand what I want to share in this article.&lt;/p&gt;

&lt;p&gt;Once, as software architects, we were invited to have lunch with the client (stakeholders). At the end of the meal, he paid the bill, we thanked him and he left a phrase that will stick in my memory.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"There is no such thing as a free lunch."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To translate this sentence for you: &lt;strong&gt;"I have a problem that can only be solved with advanced technology and architecture. I want you to understand what I'm thinking and implement it in a system."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After some time, we finished our part of the project. The client then formed a team to continue the work, which was good news. We did a knowledge transfer to his team, based on a learning process. However, when we arrived, we realized that the team wanted to change everything. Remember that I mentioned earlier that there are systems that are born big. Here, I could say that it was a big problem. We must always consider two points. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Was the first decision wrong? No. And the second? Neither.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The system was delivered, met the client's needs and was successfully implemented. However, it was still a small growing tree. Today, the same system has artificial intelligence integrated into the automation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Don't Be the Lazy Expert
&lt;/h2&gt;

&lt;p&gt;For a long time, I conducted interviews to select good professionals for the company, both for backend and frontend. One day, a colleague asked me about a specific selection process, because the other candidate had more technical qualifications and a longer career than the one I had chosen.&lt;/p&gt;

&lt;p&gt;The issue was much more complex than it seemed. In a selection process, the interviewer often feels like he or she is in court. After going through several selection processes, I realized that this approach needed to change. I always proposed a conversation where the important thing was not just the answers or the effort to impress, but rather transparency and sincerity. Admitting "I don't know" – even if it costs you the job – is actually one of the most valuable characteristics of a professional. What motivated me the most to choose the other candidate was his ability to pursue knowledge, even without knowing the answer at that moment. In the second phase of the interview, he brought a newspaper that showed his research and interest in the subject. This attitude made a difference, and yes, it was one of the best choices we have ever made, because he really went after it and solved problems.&lt;/p&gt;

&lt;p&gt;You, who are reading this far, have probably asked yourself:&lt;/p&gt;

&lt;p&gt;Why were technical qualifications considered less important than the search for information that eventually emerged during the interview?&lt;/p&gt;

&lt;p&gt;The answer is simple, although it is one of the most difficult to accept in our field: we don't know everything, but having the willingness to search and discover is the least we can do.&lt;/p&gt;

&lt;p&gt;At this point, you may be thinking: why didn't they do this with you?&lt;/p&gt;

&lt;p&gt;One of the good things in life is choices. Everything I went through as an interviewer during the selection processes taught me to be better. When I went for an interview again, all I did was be myself, "senior yes, but I don't know everything." What I expected from people should also be reflected in me. I have listed here qualities that can set you apart with recruiters who seek the best for their teams:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Be truthful: "I don't know" is a valid answer.&lt;/li&gt;
&lt;li&gt;Be frank and honest.&lt;/li&gt;
&lt;li&gt;Don't try to beat around the bush in an interview; often you only have 30 minutes.&lt;/li&gt;
&lt;li&gt;Be someone who goes after it. If you don't know today, ask again tomorrow.&lt;/li&gt;
&lt;li&gt;Be willing to learn (everything changes quickly in technology).&lt;/li&gt;
&lt;li&gt;What is new should not surprise you (take time for proof of concepts).&lt;/li&gt;
&lt;li&gt;Don't be a one-trick pony; learn several ways to accomplish the same task.&lt;/li&gt;
&lt;li&gt;Listen first, listen again, think. Maybe you can talk, think again, and then talk.&lt;/li&gt;
&lt;li&gt;Don't just present an idea; bring a solution (don't feed POs without being sure).&lt;/li&gt;
&lt;li&gt;Be to someone what you would like them to be to you.&lt;/li&gt;
&lt;li&gt;Don't play with your reputation (your reputation is worth a lot, don't risk it by trying).&lt;/li&gt;
&lt;li&gt;Well-written code allows you to take a vacation (and it's not just about vacations).&lt;/li&gt;
&lt;li&gt;Don't get carried away by technological fads, but don't get left behind either.&lt;/li&gt;
&lt;li&gt;Your new version may always come with flaws, but it is certain that it will present improvements (don't let time pass without evolution).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Communication
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Firkkomya3jx86gyha7jy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Firkkomya3jx86gyha7jy.png" alt="Image description" width="702" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At the beginning of our professional careers, our entire focus is on becoming the best in hard skills (knowing how to program well and knowing the tools). Today, after more than 20 years in the profession and with more than 50 projects developed in various areas of knowledge, I have a broad understanding of Frontend, Backend, Database and Cloud. However, 10 years ago, I considered myself a senior, but I discovered that I was not.&lt;/p&gt;

&lt;p&gt;I will tell you how this discovery happened. I went through a humiliating experience, the kind that could make anyone cry. However, I have never been the type to play the victim. It was a difficult situation, especially because I faced a person who believed he was the best. He yelled at me and said that I knew nothing about what I was doing. It was terrible. After the confrontation, I went to my superior and asked to be fired, because I realized that some people might think the same way he did. However, when I laid my head on the pillow, I realized that the reason for that behavior was much more complex than I imagined.&lt;/p&gt;

&lt;p&gt;So, I reflected and decided that I wanted to become a better person. I wanted to learn how to express myself more effectively and ensure that I would never experience anything like this again. My goal was to stand out in my field, not by becoming just another professional, but by mastering the languages ​​and methods until I understood them in depth. Today, I can say that I am a senior, but that is only part of the story. It was on that day that I understood that communication is what really makes someone considered senior. Knowing how to ask questions is important, but knowing how to listen is even more essential.&lt;/p&gt;

&lt;p&gt;Of course, you should excel in hard skills, but your pay can be much better if you are also good at soft skills. Knowing how to talk to people, listen to them, and propose solutions that have been well thought out, often after a proof of concept, makes all the difference. Today, I am a senior because I learned what no one teaches in schools, colleges or Architecture and Development courses.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The biggest challenge in life is learning and being able to teach. Today, more than ever, we have access to resources and people who can provide us with valuable lessons. Being the best in your field is important, but being human and contributing to your team is essential. I work with a Scrum Master who constantly seeks to be better for his team, which has transformed our environment and increased productivity.&lt;/p&gt;

&lt;p&gt;Learning from each experience and never considering yourself the best are principles that drive us to be better. I end this article with a phrase that resonates to this day: &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Perfect is the enemy of good!"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Focus on solving problems in the best way you can, without demanding perfection from yourself.&lt;/p&gt;

&lt;p&gt;The code is merely your tool. So don’t waste all your time fixating solely on writing code. Instead, focus on the challenges at hand and how you can effectively address them. Remember, it's about finding solutions, not just writing lines of code!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>careerdevelopment</category>
      <category>architecture</category>
      <category>programming</category>
    </item>
    <item>
      <title>The Power of AWS API Gateway and AWS AppSync: Transforming API Development, Functionality, and Use Cases</title>
      <dc:creator>Weder Sousa</dc:creator>
      <pubDate>Mon, 13 Jan 2025 21:42:14 +0000</pubDate>
      <link>https://dev.to/aws-builders/unlocking-the-power-of-aws-api-gateway-and-aws-appsync-transforming-api-development-5fo7</link>
      <guid>https://dev.to/aws-builders/unlocking-the-power-of-aws-api-gateway-and-aws-appsync-transforming-api-development-5fo7</guid>
      <description>&lt;h1&gt;
  
  
  &lt;strong&gt;07. Amazon API Gateway&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;A service that enables &lt;strong&gt;creating, publishing, maintaining, monitoring, and securing APIs at scale&lt;/strong&gt;. It is often used in conjunction with &lt;strong&gt;AWS Lambda&lt;/strong&gt; to create serverless RESTful interfaces.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Does an API Gateway Work?
&lt;/h2&gt;

&lt;p&gt;An API Gateway acts as an intermediary that enables communication between different applications and services, facilitating the exchange of data over the network. It receives requests, known as "API calls", from both internal and external sources, routes these requests to the corresponding API, and then returns the responses to the user or device that made the request.&lt;/p&gt;

&lt;p&gt;For example, imagine that a user of an application needs to access four different services to complete a process. Instead of allowing microservices to call each other directly, we make all calls through the API Gateway. This simplifies communication and improves the management of interactions between services.&lt;/p&gt;

&lt;p&gt;Amazon API Gateway is a managed service that simplifies the management of common API-related tasks, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Routing&lt;/li&gt;
&lt;li&gt;Security&lt;/li&gt;
&lt;li&gt;Caching&lt;/li&gt;
&lt;li&gt;Throttling&lt;/li&gt;
&lt;li&gt;Monitoring&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbhbac2armvz4dza1ztvp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbhbac2armvz4dza1ztvp.png" alt="Image description" width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why use an API Gateway?
&lt;/h2&gt;

&lt;p&gt;At its core, an API Gateway accepts remote requests and returns responses, providing a simple and reliable experience for your customers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Benefits of API Gateway&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Abuse Protection: API Gateway helps protect your APIs from overuse and abuse by enabling you to implement authentication, authorization, and rate limiting capabilities.&lt;/li&gt;
&lt;li&gt;Easy Analytics and Monitoring: With built-in functions, it simplifies the collection of analytics data and monitoring of API performance.&lt;/li&gt;
&lt;li&gt;Broker for Microservices: In a microservices architecture, a single request can require calls to dozens of different applications. API Gateway acts as an intermediary, facilitating communication between services.&lt;/li&gt;
&lt;li&gt;Centralization of Services: As you add or update API services, API Gateway ensures that your users can find everything in one place.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Disadvantages and Challenges of API Gateway&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Routing Rules Configuration: Routing rules need to be established, which can require additional effort.&lt;/li&gt;
&lt;li&gt;Potential Complexity: With all API rules concentrated in one place, there is a risk of increased management complexity.&lt;/li&gt;
&lt;li&gt;Single Point of Failure: Using an API Gateway can introduce the possibility of a single point of failure if not properly managed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  API Gateway Security
&lt;/h3&gt;

&lt;p&gt;API Gateway security can be broken down into several main categories:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Identity and Access Management&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Access control is the primary security driver for API Gateway technology.&lt;/li&gt;
&lt;li&gt;It allows an organization to manage who can access an API and establish rules for how data requests are handled.&lt;/li&gt;
&lt;li&gt;With all traffic routed through an API Gateway, IT security experts feel more confident in monitoring the organization’s security.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. API Call Security&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API Gateway allows all API calls to be routed through a single point, making it easier to assess, transform, and secure calls across the entire infrastructure.&lt;/li&gt;
&lt;li&gt;When traffic passes through the gateway, security experts have a clear view of what is happening and can more easily implement changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. DDoS and Threat Protection&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Without threat protection, API Gateway and its APIs, as well as native integration server services, are vulnerable.&lt;/li&gt;
&lt;li&gt;This makes the system susceptible to attacks, such as DDoS or SQL injections, perpetrated by malware or anonymous attackers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Input Validations&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inadequate input validations can allow hackers to exploit vulnerabilities in the system.&lt;/li&gt;
&lt;li&gt;Attacks can use existing inputs to figure out what is accepted or rejected, until they find an entry point to compromise the integrity of the API.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Main Types of Input Validations:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Message Size:&lt;/strong&gt; Limiting the message size is essential, especially if you are certain that you will not receive large messages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SQL Injection:&lt;/strong&gt; SQL injection protection prevents potentially malicious requests from being processed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;XML Threat Protection:&lt;/strong&gt; Malicious attacks on XML applications usually involve large and recursive payloads, XPath/XSLT or CData injections, which can overload the parser and cause the service to fail. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate Limiting:&lt;/strong&gt; Requiring authentication of all API users and logging of all API calls allows providers to limit the consumption rate of each user.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F865v06z7qyxcowe3pjd7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F865v06z7qyxcowe3pjd7.png" alt="Image description" width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;AWS API Gateway Features&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;A - API Management:&lt;/strong&gt; Allows you to easily create RESTful and WebSocket APIs. You can define endpoints, HTTP methods, and model the response and request data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;B - Backend Integration:&lt;/strong&gt; Supports integration with various AWS services such as AWS Lambda, EC2, and DynamoDB, as well as external backends such as HTTP servers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;C - Data Modeling and Validation:&lt;/strong&gt; Provides the ability to model and validate requests and responses using JSON schemas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;D - Traffic Management:&lt;/strong&gt; Allows you to control traffic distribution, including the implementation of throttling and usage quotas, helping to protect your services from sudden traffic spikes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;E - Authentication and Authorization:&lt;/strong&gt; Supports multiple security options, such as authentication via AWS IAM, Amazon Cognito User Pools, and integration with external identity providers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;F - Monitoring and Logs:&lt;/strong&gt; Integrates with Amazon CloudWatch to provide metrics and logs, allowing you to efficiently monitor and debug your APIs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;G - API Versioning:&lt;/strong&gt; Allows you to manage different versions of your API, making it easier to transition between versions without impacting existing users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;H - CORS (CrossOrigin Resource Sharing):&lt;/strong&gt; Makes it easy to configure CORS to allow API calls from different origins.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I - Performance and Scalability:&lt;/strong&gt; API Gateway is a managed service that automatically scales to meet demand, without you having to manage the infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ub9f68d67zee7znru9z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ub9f68d67zee7znru9z.png" alt="Image description" width="800" height="417"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Types of APIs that Amazon API Gateway Supports&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;HTTP API&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Description: Low-cost, low-latency REST API.&lt;/li&gt;
&lt;li&gt;Features:&lt;/li&gt;
&lt;li&gt;Native support for OIDC and OAuth2.&lt;/li&gt;
&lt;li&gt;Native CORS support.&lt;/li&gt;
&lt;li&gt;Usage: Ideal for building a CRUD API with AWS Lambda and DynamoDB.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;WebSocket API&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Description: WebSocket API with persistent connections.&lt;/li&gt;
&lt;li&gt;Usage: Ideal for real-time use cases, such as chat applications or dashboards.&lt;/li&gt;
&lt;li&gt;Example:&lt;/li&gt;
&lt;li&gt;Building a serverless chat application using WebSocket API, AWS Lambda, and DynamoDB.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;REST API&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Description: REST API that offers full control over requests and responses.&lt;/li&gt;
&lt;li&gt;Features: Includes API management capabilities.&lt;/li&gt;
&lt;li&gt;Usage: Create an API Gateway REST API with AWS Lambda integration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Private REST API&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Description: REST API that can only be accessed within an AWS Virtual Private Cloud (VPC).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Backend Flexibility&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Amazon API Gateway allows you to have broad flexibility in choosing backend technologies, including:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AWS Lambda:&lt;/strong&gt; To execute serverless functions in response to API calls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon DynamoDB:&lt;/strong&gt; To store and retrieve data in a NoSQL table.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon RDS:&lt;/strong&gt; To access relational databases (such as MySQL, PostgreSQL).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon Aurora:&lt;/strong&gt; A relational database compatible with MySQL and PostgreSQL.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon S3:&lt;/strong&gt; To serve static content and store files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Step Functions:&lt;/strong&gt; To orchestrate calls to multiple AWS services in a workflow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon SNS (Simple Notification Service):&lt;/strong&gt; To send notifications.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon SQS (Simple Queue Service):&lt;/strong&gt; To queue and process messages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS AppSync:&lt;/strong&gt; To implement GraphQL APIs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon CloudFront:&lt;/strong&gt; To deliver content through a content delivery network (CDN). - &lt;strong&gt;Amazon Kinesis:&lt;/strong&gt; For receiving and processing real-time data streams.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS IAM (Identity and Access Management):&lt;/strong&gt; For managing permissions and authentication.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon Cognito:&lt;/strong&gt; For user authentication and identity management.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon EventBridge:&lt;/strong&gt; For integrating events from different AWS services.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Elastic Load Balancing (ELB):&lt;/strong&gt; For routing traffic to EC2 instances and other services.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon EC2:&lt;/strong&gt; For accessing virtual server instances.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon ECS (Elastic Container Service):&lt;/strong&gt; For running containers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon EKS (Elastic Kubernetes Service):&lt;/strong&gt; For managing Kubernetes clusters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon Textract:&lt;/strong&gt; For extracting text and data from documents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Step Functions:&lt;/strong&gt; For building complex workflows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5vgr1zpqv3u7gjzbcoro.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5vgr1zpqv3u7gjzbcoro.png" alt="Image description" width="756" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;AWS API Gateway Use Cases&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Mobile and Web Applications:&lt;/strong&gt; You can use API Gateway to build scalable backends for mobile and web applications, enabling them to communicate with cloud services.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Microservices:&lt;/strong&gt; In a microservices architecture, API Gateway acts as an entry point for interactions between services, simplifying communication.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Serverless APIs:&lt;/strong&gt; By combining AWS Lambda and API Gateway, you can build serverless APIs. This eliminates the need to manage servers, reducing costs and increasing efficiency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Data Service Integration:&lt;/strong&gt; Use API Gateway to expose data from services such as S3, DynamoDB, and others, enabling easy and secure queries and operations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. WebSockets:&lt;/strong&gt; Build real-time applications, such as chats or real-time updates, using API Gateway's WebSocket functionality.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Third-Party Service Exposure:&lt;/strong&gt; API Gateway can act as a proxy, allowing you to expose APIs from external services in a controlled and secure manner.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. IoT Services:&lt;/strong&gt; Ideal for connecting IoT devices to backends, allowing devices to communicate with the cloud in a secure and scalable manner.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fljln72udyqq41r5y2q2n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fljln72udyqq41r5y2q2n.png" alt="Image description" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;08. AWS AppSync&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Introduction to GraphQL and AWS AppSync&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the fast-paced world of web and mobile app development, efficiency and real-time capabilities are not just nice-to-haves—they’ve become must-haves.&lt;/p&gt;

&lt;p&gt;Imagine that you’re at a restaurant and instead of placing multiple orders to get all the dishes you want, you can simply place a single order that includes everything at once.&lt;/p&gt;

&lt;p&gt;That’s exactly what &lt;strong&gt;GraphQL and AWS AppSync&lt;/strong&gt; bring to the development landscape, enabling developers to build dynamic, scalable apps with ease.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GraphQL,&lt;/strong&gt; which was conceived by &lt;strong&gt;Facebook in 2012 and publicly released in 2015&lt;/strong&gt;, is a query language for APIs and a runtime environment that lets you query your data with a type system that’s defined.&lt;/p&gt;

&lt;p&gt;Unlike traditional REST APIs, which often require developers to load multiple URLs, GraphQL makes it possible to get all the information your application needs in a single request. This ensures a smoother and more efficient experience, even on slow mobile connections — imagine getting a large meal all at once, instead of waiting for individual dishes. On the other hand, AWS AppSync can be thought of as the “GraphQL of AWS.” It’s a managed service that further simplifies the development process by creating serverless GraphQL and Pub/Sub APIs. Think of AppSync as a conductor in an orchestra: it coordinates all the different instruments (or services) so that they play in harmony. With a single endpoint, developers can securely and efficiently query, update, or publish data, enabling them to build interactive, feature-rich applications. In short, &lt;strong&gt;both GraphQL and AWS AppSync&lt;/strong&gt; not only save time and resources, but also improve the user experience by transforming the way we interact with data and build applications.&lt;/p&gt;

&lt;p&gt;Get ready to explore these powerful tools that &lt;strong&gt;will take your development to the next level!&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Key Features of GraphQL&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Precisely Defined Queries&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GraphQL allows developers to specify exactly what data they want in their queries.&lt;/li&gt;
&lt;li&gt;It’s like placing a custom order at a sandwich shop: instead of getting a standard sandwich, you can order exactly the ingredients you want, without a single unnecessary item.&lt;/li&gt;
&lt;li&gt;This minimizes waste and ensures you get exactly what you need, optimizing the efficiency of your application.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Single Request, Many Responses&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;With GraphQL, you can fetch all the data you need in a single request, unlike REST APIs, which often require multiple calls.&lt;/li&gt;
&lt;li&gt;Imagine you’re hosting a party, and instead of making multiple trips to the grocery store (one for drinks, one for snacks, one for dessert), you can place a single delivery order that includes everything you need for the party.&lt;/li&gt;
&lt;li&gt;This reduces latency and makes loading data much faster.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Strong Typing&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GraphQL uses a strong type system, allowing developers to define clear structures for their data.&lt;/li&gt;
&lt;li&gt;Think of it like a detailed map of a city: by following a well-defined map, you can easily find what you’re looking for without getting lost.&lt;/li&gt;
&lt;li&gt;This strong typing helps prevent errors and makes code maintenance easier, providing security for interactions with the API.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Evolution Without Breaking&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One of the great advantages of GraphQL is its ability to evolve without breaking backwards compatibility.&lt;/li&gt;
&lt;li&gt;It’s like a growing tree: as new branches are added, the tree continues to flourish, but the roots remain firmly planted.&lt;/li&gt;
&lt;li&gt;This means that new functionality can be added without negatively impacting clients already using a previous version of the API.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5. Real-Time Subscriptions&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GraphQL supports subscriptions, allowing applications to receive updates in real time.&lt;/li&gt;
&lt;li&gt;Think of it as a weather alert service – instead of constantly checking the temperature, you subscribe to receive a notification as soon as there are significant changes.&lt;/li&gt;
&lt;li&gt;This makes applications more dynamic and responsive, offering a richer user experience.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;6. Rich Tools and Ecosystem&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The ecosystem around GraphQL is vibrant, with several tools and libraries that facilitate development.&lt;/li&gt;
&lt;li&gt;Think of it as a well-stocked toolbox: each tool has a specific purpose and can make your life easier in different ways.&lt;/li&gt;
&lt;li&gt;Whether for queries, data management or integrations, GraphQL has a wide range of features that make development more efficient and enjoyable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;7. Automatic Documentation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Finally, with GraphQL, documentation is automatically generated from the schema.&lt;/li&gt;
&lt;li&gt;This is like having a personal assistant that follows your daily life and notes all your activities and appointments. - So when you need to check what you did, the information will always be accessible and organized, helping you better understand how to interact with the API.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;GraphQL Operations&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;We have 3 different operations in GraphQL:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Query :&lt;/strong&gt; used to retrieve data, such as a GET request.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Mutation :&lt;/strong&gt; used to modify data, such as CREATE, UPDATE or DELETE.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Subscription :&lt;/strong&gt; used to subscribe to data changes and receive real-time notifications.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;The big question and why choose AppSync?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Choosing AWS AppSync for developing applications that use GraphQL can bring a number of significant benefits. Below, I present some reasons, accompanied by real-world cases that illustrate how companies are leveraging AppSync to achieve their goals:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Rapid and Simplified Development&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Real-World Case Study:&lt;/strong&gt; Fast-growing education technology &lt;strong&gt;startup Knowt&lt;/strong&gt; has developed an innovative app that changes how students and teachers study and create assignments. Using a powerful algorithm and artificial intelligence, the app quickly converts notes into quizzes and flashcards. Founded in 2016 by Abheek Pandoh and Daniel Like, Knowt was born from an opportunity to improve learning through student note-taking. It started as an Android app and quickly expanded to iOS and the web.&lt;a href="https://aws.amazon.com/solutions/case-studies/knowt/?nc1=h_ls" rel="noopener noreferrer"&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Real-Time Data Integration&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Real Case Study: Sky Italia&lt;/strong&gt; wanted to provide a better experience to sports fans by sending real-time data updates during live broadcasts of sporting events, and using AWS AppSync, they were able to optimize data transfers during peak traffic times and deliver sports updates to viewers in milliseconds. &lt;a href="https://aws.amazon.com/pt/blogs/mobile/appsync-real-time-live-sports/" rel="noopener noreferrer"&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Automatic Scalability&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Real Case Study:&lt;/strong&gt; To provide an engaging, low-latency streaming experience, &lt;strong&gt;Amazon Music&lt;/strong&gt; decided to build a centralized, cloud-based queuing system. This system also features on-device storage, enabling offline playback and automatic data synchronization between clients and the central system, which is critical to handling the heavy usage of millions of users switching between devices and network connectivity.&lt;a href="https://aws.amazon.com/solutions/case-studies/amazonmusic-amplify-appsync-case-study/?nc1=h_ls" rel="noopener noreferrer"&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Simplified API Management&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Real Case Study:&lt;/strong&gt; Automatic Data Processing (ADP) was looking to modernize its flagship solutions, MyADP and ADP Mobile, to provide a seamless experience for its 17+ million users. As a global technology company specializing in human capital management (HCM) and payroll services, ADP is committed to building innovative products. To achieve this, low latency and a high-quality user experience are key. &lt;a href="https://aws.amazon.com/solutions/case-studies/adp-appsync-case-study/?nc1=h_ls" rel="noopener noreferrer"&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Improved User Experience&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Real Case Study: ResMed&lt;/strong&gt;, a leader in digital health, is a leading global provider of cloud-connected solutions for people with sleep apnea, COPD, asthma, and other chronic conditions. As of 2021, the company has already impacted the lives of more than 133 million people in over 140 countries and now aims to improve 250 million lives by 2025. To achieve this ambitious goal, ResMed needs an agile, serverless solution that will drive user satisfaction and meet growing demand.&lt;/p&gt;

&lt;p&gt;To meet this need, &lt;strong&gt;ResMed turned to Amazon Web Services (AWS) ** solutions to scale its support to more users globally, reduce application latency, and quickly implement new features. When developing its myAir app, the company chose AWS AppSync, a serverless GraphQL and Pub/Sub API service that makes it easy to build modern web and mobile applications. Combined with other AWS solutions, AppSync will enable ResMed to reduce operational overhead, improve the user experience, and provide more accurate and valuable insights through machine learning. This focus on improving the user experience not only increases satisfaction, but also enhances ResMed’s ability to fulfill its mission of positively **impacting the lives of millions of people&lt;/strong&gt;. &lt;a href="https://aws.amazon.com/solutions/case-studies/resmed-case-study/" rel="noopener noreferrer"&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Easy Maintenance and Evolution&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Real Case Study:&lt;/strong&gt; The article &lt;strong&gt;"Adding Real-Time Interactivity to Your Live Streams with AWS AppSync"&lt;/strong&gt; explores how to implement interactivity in live broadcasts using AWS AppSync. It describes the importance of engaging viewers through features such as live chat, polls, and reactions during events. The author presents a practical example of an application that integrates AppSync with a React front-end, enabling real-time communication with AWS streams. In addition, the article details the configuration of GraphQL subscriptions to facilitate instant interaction, improving the user experience and increasing engagement during broadcasts.&lt;br&gt;
&lt;a href="https://dev.to/aws/adding-real-time-interactivity-to-your-live-streams-with-aws-appsync-4gip"&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8. Enhanced Security&lt;/strong&gt;&lt;br&gt;
In the current context, where information security is a key priority for companies across all sectors, AWS AppSync stands out as a robust solution that enhances application security.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The companies mentioned in our examples&lt;/strong&gt; demonstrate how implementing AppSync not only improves efficiency and user experience, but also strengthens data protection. AppSync makes it easy to implement high-level authentication and authorization, ensuring that sensitive information is only accessed by authorized users.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Now, let’s see how these features can be applied in real-world scenarios:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1 - Mobile and Web Applications:&lt;/strong&gt; Perfect for building scalable backends for applications that dynamically interact with data, such as social networks or marketplaces.&lt;br&gt;
&lt;strong&gt;2 - Real-time Chat:&lt;/strong&gt; The real-time signing feature makes AppSync ideal for chat platforms, providing instant message delivery.&lt;br&gt;
&lt;strong&gt;3 - Collaboration Applications:&lt;/strong&gt; Allows users to work together in real-time, such as in document editors or file platforms, with dynamic updates for everyone.&lt;br&gt;
&lt;strong&gt;4 - Interactive Dashboards:&lt;/strong&gt; Provides a rich and engaging dashboard experience, enabling efficient queries and dynamic visualizations.&lt;br&gt;
** &lt;strong&gt;5 - Complex service integration:&lt;/strong&gt; Unifies data from multiple sources into a single API, ideal for applications that require a wide range of integrated information.&lt;br&gt;
&lt;strong&gt;6 - OfflineFirst applications:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Support for offline modes ensures that your applications work without an Internet connection, synchronizing changes as soon as the connection is restored.&lt;/li&gt;
&lt;li&gt;In onlinefirst, the application uses more APIs, simplifying development.&lt;/li&gt;
&lt;li&gt;You worry less about local data, storage, and synchronization. - The cache becomes a temporary resource, which stores lightweight data&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Components of a GraphQL API&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/en_us/appsync/latest/devguide/api-components.html" rel="noopener noreferrer"&gt;Components of a GraphQL API&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffqatkyngr1xukudtbm8s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffqatkyngr1xukudtbm8s.png" alt="appsync-architecture-graphql-api" width="550" height="217"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;There are 3 main components in a GraphQL API&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Schemas&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They act as a gateway that manages all requests to the server.&lt;/li&gt;
&lt;li&gt;They act as the single endpoint for interfacing with the client.&lt;/li&gt;
&lt;li&gt;They access, process, and relay data from the data source to the client.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Data Sources&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can include DynamoDB, Lambda, OpenSearch, HTTP endpoints, EventBridge, relational databases, and more.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Resolvers&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unit of code responsible for determining how a field's data will be resolved during a request.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnf5dwxbwx5hfbrc82t82.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnf5dwxbwx5hfbrc82t82.png" alt="aws-flow-infographic" width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/appsync/latest/devguide/data-source-components.html" rel="noopener noreferrer"&gt;core components in a GraphQL API&lt;/a&gt;&lt;/p&gt;

</description>
      <category>apigateway</category>
      <category>aws</category>
      <category>appsync</category>
      <category>usecase</category>
    </item>
    <item>
      <title>Unlocking the Power of AWS API Gateway and AWS AppSync: Transforming API Development, Functionality, and Use Cases</title>
      <dc:creator>Weder Sousa</dc:creator>
      <pubDate>Mon, 13 Jan 2025 21:29:01 +0000</pubDate>
      <link>https://dev.to/weder96/-49fk</link>
      <guid>https://dev.to/weder96/-49fk</guid>
      <description></description>
      <category>aws</category>
      <category>api</category>
      <category>serverless</category>
      <category>devops</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Weder Sousa</dc:creator>
      <pubDate>Mon, 13 Jan 2025 21:06:13 +0000</pubDate>
      <link>https://dev.to/weder96/-3pgc</link>
      <guid>https://dev.to/weder96/-3pgc</guid>
      <description></description>
      <category>career</category>
      <category>productivity</category>
    </item>
    <item>
      <title>AWS IAM: Access Control compared to how an International Airport works</title>
      <dc:creator>Weder Sousa</dc:creator>
      <pubDate>Sun, 05 Jan 2025 18:19:38 +0000</pubDate>
      <link>https://dev.to/aws-builders/aws-iam-access-control-compared-to-how-an-international-airport-works-1oph</link>
      <guid>https://dev.to/aws-builders/aws-iam-access-control-compared-to-how-an-international-airport-works-1oph</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Today, cloud computing is the backbone of the digital operations of thousands of companies around the world. At the heart of this dynamic ecosystem is Amazon Web Services (AWS), a platform that not only offers storage and processing, but also enables the construction of complex and scalable solutions. To understand the grandeur and functionality of this global infrastructure, we can draw a fascinating parallel with the map of airports around the world.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa1dyi7sj28ymvgo0nl6n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa1dyi7sj28ymvgo0nl6n.png" alt="Image description" width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Think of AWS as a vast, interconnected airport system, where each region and service is a vital hub that communicates with the rest of the network. Just as airports are responsible for managing air traffic and ensuring that millions of passengers and cargo arrive at their destinations safely and efficiently, AWS manages a constant flow of data and applications, ensuring that information is delivered accurately and in a timely manner. &lt;/p&gt;

&lt;p&gt;In this context, AWS Identity and Access Management (IAM) acts as the access control system for these airports, ensuring that only authorized passengers—or rather, users and services—can access critical areas and board their flights to the cloud.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxd0ba3hr1zknp40dfo8w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxd0ba3hr1zknp40dfo8w.png" alt="Image description" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By exploring this analogy, we’ll see how IAM is critical to security across most AWS services. Just as each airport has strict security standards and different boarding gates that determine where passengers can go, IAM defines who can access what across the vast array of AWS resources. Let’s take this comparison a step further by examining how AWS IAM and its credentials function as a sophisticated control system in an airport, providing the efficiency and security needed to operate in a complex, global environment.&lt;/p&gt;

&lt;p&gt;In the digital world, security and access control are paramount. When it comes to cloud services like Amazon Web Services (AWS), AWS IAM (Identity and Access Management) stands out as one of the pillars for managing who can do what within your infrastructure. To better understand the complexity and importance of AWS IAM, let’s compare it to that of an airport.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Airport: An Access Control System&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imagine an airport, where each person (passenger) has a specific role.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Passengers.&lt;/li&gt;
&lt;li&gt;Employees.&lt;/li&gt;
&lt;li&gt;Outsourcers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each has a type of authorization that determines how they can interact with the environment. This ecosystem reflects the functioning of AWS IAM, where users, groups, and permissions ensure that only the right people have access to the right resources.&lt;/p&gt;

&lt;p&gt;Before learning about IAM, we need to understand how an airport works:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Airport Structure
&lt;/h3&gt;

&lt;p&gt;An airport is a complex facility composed of several areas and functions that work together. Here are the main components:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Passenger Terminal:&lt;/strong&gt; Where passengers check in, go through security, wait for boarding, and disembark.&lt;/p&gt;

&lt;p&gt;Runways and Taxiways: Infrastructure for aircraft takeoff and landing, as well as paths for aircraft movement on the ground.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hangar:&lt;/strong&gt; Structures where aircraft are stored, maintained and sometimes repaired.&lt;br&gt;
&lt;strong&gt;Control Tower:&lt;/strong&gt; Location from which air traffic controllers monitor and manage flights, both within the airspace and during taxiing operations at the airport.&lt;br&gt;
&lt;strong&gt;Cargo Area:&lt;/strong&gt; Specific sections for handling cargo and goods that are transported by cargo aircraft.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Operating Processes
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;A. Arrival and Check-in&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Check-in&lt;/strong&gt;: Passengers arrive at &lt;strong&gt;the terminal and check-in&lt;/strong&gt;, which can be done at automatic kiosks or at the airline counter. Here, passengers receive their boarding pass and have their bags checked.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Document Verification&lt;/strong&gt;: Check-in also involves presenting documents, such as passport and visa, ensuring that passengers are &lt;strong&gt;authorized to travel&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;B. Security and Control&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Security Control&lt;/strong&gt;: Before entering the boarding area, all passengers go through security procedures. This includes screening of carry-on baggage and checking of personal items to ensure that there are no prohibited materials on board the aircraft.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Clearing Immigration (on international flights)&lt;/strong&gt;: For international flights, passengers must go through immigration control, where their documents are checked again.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;C. Access to the Boarding Area&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Waiting Room&lt;/strong&gt;: After passing through security, passengers enter the waiting room, where they can wait until boarding time. This area may have a variety of amenities, such as shops, restaurants, and lounges.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Boarding&lt;/strong&gt;: When the time comes, passengers are called in groups to board the aircraft. Boarding is often orderly, ensuring that everyone follows an organized flow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;D. Flight&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Takeoff&lt;/strong&gt;: After boarding, the aircraft taxis to the runway, where it awaits clearance from the control tower. Safety is always a priority, with controllers managing traffic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flight&lt;/strong&gt;: During the flight, pilots follow pre-defined flight paths and communicate regularly with air traffic controllers to ensure safety and efficiency.&lt;/p&gt;
&lt;h3&gt;
  
  
  E. Deplane and End of Trip
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Landing:&lt;/strong&gt; Upon approaching the destination, the aircraft receives instructions from the control tower for landing, where safety and precision are critical.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deplane:&lt;/strong&gt; After parking, passengers disembark and proceed to immigration (if necessary) and baggage claim.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Baggage Claim:&lt;/strong&gt; Passengers collect their bags from the designated area of ​​the terminal and complete their experience, whether departing for the city or connecting to another flight.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Deplane and Maintenance
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Aircraft Maintenance:&lt;/strong&gt; After a flight, aircraft undergo maintenance and cleaning, readying them for the next flight. &lt;strong&gt;Airport Management:&lt;/strong&gt; All airport operations are managed by an administrative team, which takes care of logistics, customer service, security and maintenance of the facilities.&lt;/p&gt;
&lt;h2&gt;
  
  
  Check-in: Creating Users and Groups
&lt;/h2&gt;

&lt;p&gt;When you start and create your account, &lt;strong&gt;AWS has AWS Identity &amp;amp; Access Management (IAM)&lt;/strong&gt;, this AWS service &lt;strong&gt;is free of charge&lt;/strong&gt; but its &lt;strong&gt;importance is vital&lt;/strong&gt;, as it defines the use of each of the more than &lt;a href="https://www.aboutamazon.com.br/o-que-fazemos/amazon-web-services" rel="noopener noreferrer"&gt;240 services&lt;/a&gt; offered in, but when we analyze the global infrastructure it is something very large:&lt;/p&gt;

&lt;p&gt;The AWS Cloud covers &lt;strong&gt;108 availability zones&lt;/strong&gt; in &lt;strong&gt;34 geographic regions&lt;/strong&gt;, with plans announced for another &lt;strong&gt;18 availability zones&lt;/strong&gt; and &lt;strong&gt;six more AWS regions&lt;/strong&gt; in Mexico, New Zealand, Kingdom of Saudi Arabia, Thailand, Taiwan and in the AWS European sovereign cloud. With &lt;strong&gt;41 local zones&lt;/strong&gt;, &lt;strong&gt;29 Wavelength zones&lt;/strong&gt; for ultra-low latency applications, &lt;strong&gt;245 countries and territories served&lt;/strong&gt;, and &lt;strong&gt;135 Direct Connect locations&lt;/strong&gt;. Let’s rethink the AWS cloud characteristics. It can be compared to a vast &lt;strong&gt;network of interconnected airports&lt;/strong&gt; around the world.** There are currently &lt;strong&gt;108 distribution terminals (availability zones)&lt;/strong&gt; spread across &lt;strong&gt;34 international hubs(geographic regions)&lt;/strong&gt;, with plans to add 18 more terminals and &lt;strong&gt;six new hubs in strategic locations&lt;/strong&gt;, including Mexico, New Zealand, Kingdom of Saudi Arabia, Thailand, Taiwan, and a &lt;strong&gt;sovereign cloud in Europe&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Within this network, &lt;strong&gt;there are 41 local airports&lt;/strong&gt; that serve specific areas, providing &lt;strong&gt;nearby connectivity to users&lt;/strong&gt; . In addition, AWS has &lt;strong&gt;29 Wavelength terminals&lt;/strong&gt;, optimizing operations for applications that &lt;strong&gt;require ultra-low latency&lt;/strong&gt;, such as real-time air traffic systems.**&lt;/p&gt;

&lt;p&gt;In total, this extensive structure serves &lt;strong&gt;245 countries and territories&lt;/strong&gt;, ensuring that passengers and cargo &lt;strong&gt;can efficiently connect&lt;/strong&gt; to &lt;strong&gt;135 destinations on Direct Connect&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;enabling fast and secure data transfer&lt;/strong&gt;, as well as the transfer of &lt;strong&gt;passengers between different points of the globe&lt;/strong&gt; .&lt;/p&gt;

&lt;p&gt;When we recontextualize it in terms of airports and their global operations, it makes it easier to understand through &lt;strong&gt;this analogy&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  The root user:
&lt;/h2&gt;

&lt;p&gt;In an airport, airlines such as &lt;strong&gt;American Airlines&lt;/strong&gt; and &lt;strong&gt;Gol Linhas Aéreas&lt;/strong&gt; rent &lt;strong&gt;offices to operate and offer flights&lt;/strong&gt; to their customers. There are large international airlines, such as &lt;strong&gt;Lufthansa&lt;/strong&gt;, that connect several continents, as well as smaller airlines, such as &lt;strong&gt;Azul&lt;/strong&gt;, that carry out local operations in specific markets.&lt;/p&gt;

&lt;p&gt;When an airline decides to operate at an airport, it signs a contract (terms of use), which we sign when registering with AWS, to use the services offered by that facility (AWS).&lt;/p&gt;

&lt;p&gt;Let's suppose that Delta Air Lines, for example, makes this arrangement; its regional manager, who represents the company at that airport, signs the contract and, in this way, obtains the "keys" to the office, allowing him and his team to access all the areas necessary for the operation of flights.&lt;/p&gt;

&lt;p&gt;In this case, there are certain laws that require certain niches to keep their data only in the Region of use, obeying the laws of that Country (Availability Zones), for example, financial clients and hospitals.&lt;/p&gt;

&lt;p&gt;The regional manager of an airline, such as Delta Air Lines, cannot run the office alone. To ensure that everything runs smoothly, he or she must hire a team, which may include sales agents, operations agents, baggage handlers, flight dispatchers, and administrative support.&lt;/p&gt;

&lt;p&gt;Ultimately, the manager distributes responsibilities while providing oversight.&lt;/p&gt;

&lt;p&gt;Similarly, when you first create an AWS account, you are given a unique login identity called the root user, which has full access to all services and resources.&lt;/p&gt;

&lt;p&gt;Although you can perform any task as the root user using the account email and password, AWS strongly recommends that this user not be used for day-to-day activities, even administrative ones. Instead, you should create &lt;strong&gt;IAM users&lt;/strong&gt;, &lt;strong&gt;assign specific permissions&lt;/strong&gt; to them, and &lt;strong&gt;keep the root user credentials secure&lt;/strong&gt;, reserving their use only for essential management tasks - so that the account can also "rest", and protect against potential root user-related issues.&lt;/p&gt;
&lt;h2&gt;
  
  
  IAM Users:
&lt;/h2&gt;

&lt;p&gt;Just as passengers check in before boarding, in AWS IAM, you start by creating users and groups. Users represent individuals or services that need access to your AWS resources. Groups are like check-in lines, where you can group users with similar needs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Users:&lt;/strong&gt; Each user is assigned credentials (equivalent to a boarding pass) that identify them and grant them access to your AWS account.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0c0pbaathdaeb9xfe8mi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0c0pbaathdaeb9xfe8mi.png" alt="Iam User" width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Suppose an airline manager, such as &lt;strong&gt;American Airlines&lt;/strong&gt;, has hired several people to perform different functions at the airport.&lt;br&gt;
He has assigned &lt;strong&gt;specific credentials and permissions&lt;/strong&gt; to each of them. For example, &lt;strong&gt;sales agents&lt;/strong&gt; are at the front desk, directly interacting with customers, but they never have access to the &lt;strong&gt;boarding area&lt;/strong&gt;. In contrast, &lt;strong&gt;baggage handlers&lt;/strong&gt; are &lt;strong&gt;authorized to enter the airside area&lt;/strong&gt;, where they can &lt;strong&gt;carry luggage onto the aircraft&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Similarly, in AWS, an &lt;strong&gt;IAM user&lt;/strong&gt; represents an entity** created to interact with &lt;strong&gt;cloud services&lt;/strong&gt;. Just like at the airport, each &lt;strong&gt;AWS user&lt;/strong&gt; has a &lt;strong&gt;name and credentials&lt;/strong&gt; that determine which services and resources it can access, &lt;strong&gt;depending on the permissions it has been assigned.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When a new &lt;strong&gt;IAM user&lt;/strong&gt; is created through the AWS CLI, AWS API, or console, it initially has no credentials. Just as a manager needs to assign credentials to employees based on their responsibilities, you must also create the type of credentials required for an IAM user, according to their specific roles in AWS. At some point, some of these users may have permissions in other airports than their credentials. In this case, AWS has &lt;strong&gt;AWS Organizations&lt;/strong&gt; where you can enable or disable zones, which would be the same as restricting that employee's access to another airport, limiting their credentials to only a geographic area, such as the Americas. They would not have access to airports in Europe.&lt;/p&gt;

&lt;p&gt;There is more: the manager has to create this amount and managing this becomes difficult and complex. In this case, AWS provides &lt;strong&gt;Control Tower&lt;/strong&gt;, which allows better control of the organizational environment when creating users.&lt;/p&gt;
&lt;h2&gt;
  
  
  IAM Groups
&lt;/h2&gt;

&lt;p&gt;Groups: Groups organize users with &lt;strong&gt;similar permissions&lt;/strong&gt;, simplifying management. A “Baggage Handling” group, for example, might have specific permissions to manage access to the airport baggage area and also the arrival and departure areas where aircraft are parked.&lt;/p&gt;

&lt;p&gt;Are you familiar with &lt;strong&gt;access cards&lt;/strong&gt;? These cards are used to grant &lt;strong&gt;access to restricted areas&lt;/strong&gt; to those who have them. Thus, the airport manager can program which &lt;strong&gt;doors or areas will be accessible&lt;/strong&gt; with each card.&lt;/p&gt;

&lt;p&gt;In this scenario, the manager has decided to provide access cards of different colors to employees, according to the permissions they need. For example:&lt;/p&gt;

&lt;p&gt;A group of ten people.&lt;/p&gt;

&lt;p&gt;Responsible for &lt;strong&gt;aircraft maintenance&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;They all received &lt;strong&gt;orange cards&lt;/strong&gt;, which allow access to the restricted areas where aircraft maintenance takes place.&lt;/p&gt;

&lt;p&gt;Now, let's imagine that an employee from the &lt;strong&gt;maintenance group is promoted&lt;/strong&gt; to a new role. What happens then? It's simple: &lt;strong&gt;he will be part of another group&lt;/strong&gt;, return his orange card and &lt;strong&gt;receive a new card&lt;/strong&gt; that will give him access to the &lt;strong&gt;areas necessary for his new role.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnpswk25ttgpo0lhiu0rc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnpswk25ttgpo0lhiu0rc.png" alt="IAM Groups" width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At the airport, an employee group can be compared to a set of access users. These groups allow a manager to specify permissions for a collective of employees, making it easier to manage their credentials.&lt;/p&gt;

&lt;p&gt;For example, a manager might have a group called "air traffic controllers" and assign that group the permissions needed to operate the service desk. Any employee who joins that group will automatically have the permissions assigned to them.&lt;/p&gt;

&lt;p&gt;If a new employee joins the airport team and needs customer service privileges, they can simply add them to the "air traffic controllers" group and they will receive the appropriate permissions. Likewise, if an employee changes roles, instead of changing their permissions individually, the manager can remove them from their previous group and add them to the new group as needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Additional Information on Groups:&lt;/strong&gt; - Groups can contain multiple users, but they cannot contain other Groups or Roles. - A user does not need to belong to any IAM Group.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A User can belong to multiple Groups.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  IAM Roles
&lt;/h2&gt;

&lt;p&gt;First we must understand what an IAM Role is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. What is an IAM Role?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An IAM Role is an &lt;strong&gt;identity that has specific permissions&lt;/strong&gt;. Roles are used to delegate access to AWS services and resources without the need to create permanent credentials.&lt;/p&gt;

&lt;p&gt;Knowing then that an IAM Role in AWS is like a &lt;strong&gt;temporary access card&lt;/strong&gt; that is issued to employees or systems at the airport, we can then understand that this access allows the employee or third parties, a person outside of our employees, for example an auditor from an institution, who &lt;strong&gt;receives this temporary credential&lt;/strong&gt; to access specific areas or perform certain tasks only when &lt;strong&gt;necessary and for a limited period&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. How IAM Roles Work:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Role Assumption:&lt;/strong&gt; Imagine that an aircraft maintainer who normally works in the maintenance area needs to &lt;strong&gt;temporarily access the boarding area&lt;/strong&gt; to transport tools or &lt;strong&gt;perform a check&lt;/strong&gt;. Instead of having a permanent access card for that area, he can &lt;strong&gt;"assume" a role&lt;/strong&gt; that gives him the necessary permission for a &lt;strong&gt;limited time&lt;/strong&gt;. This is a form of dynamic access control.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Temporary Credentials:&lt;/strong&gt; Once the maintainer assumes the role, he is given &lt;strong&gt;temporary credentials (such as a code or card)&lt;/strong&gt; that allow him to access the boarding area only during the time he actually needs to be there, &lt;strong&gt;ensuring that he does not have unlimited access.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Common Usage Scenarios:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Loading and Unloading Crew:&lt;/strong&gt; Crew members who handle baggage loading may need access to the landing strip from time to time. &lt;strong&gt;An IAM Role can be created specifically for this function&lt;/strong&gt;, allowing employees to assume the role when they are performing this work, ensuring that only the right people have access to the area when needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Temporary Security:&lt;/strong&gt; Let’s say there is a special situation where &lt;strong&gt;airport security staff need access to the control room&lt;/strong&gt; or a &lt;strong&gt;restricted area&lt;/strong&gt; to ensure &lt;strong&gt;security during an event&lt;/strong&gt;. They can use a role that grants them this temporary access, &lt;strong&gt;ensuring that they can act quickly and efficiently without needing to have continuous access&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But how does this work within AWS?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flz7hu6xxe453kt4mc6oy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flz7hu6xxe453kt4mc6oy.png" alt="IAM_policies_ec2_s3" width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The AssumeRole feature in AWS Identity and Access Management (IAM) is a mechanism that allows a user or service to &lt;strong&gt;"assume" a temporary role&lt;/strong&gt; that grants specific permissions to perform actions across different AWS services. This feature is critical for delegating access and managing permissions in complex environments.&lt;/p&gt;
&lt;h3&gt;
  
  
  How AssumeRole Works
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Creating a Role:&lt;/strong&gt; An AWS IAM administrator creates an IAM Role with a specific set of permissions (policies) and defines which entities are allowed to assume that role. The IAM Role is not associated with a particular user; instead, it can be used by multiple users, services, or even applications in AWS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Permission to Assume the Role:&lt;/strong&gt; The trust policy associated with the role defines which entities (users, services, or accounts) can assume that role. For example, a role might allow a user in account A to assume a role in account B.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Assuming the Role:&lt;/strong&gt; When an entity &lt;strong&gt;(such as a user or an EC2 instance)&lt;/strong&gt; needs to perform actions for which it &lt;strong&gt;does not have permissions&lt;/strong&gt;, it executes the &lt;strong&gt;AssumeRole&lt;/strong&gt; operation. This generates temporary credentials that &lt;strong&gt;allow the entity to act under the permissions defined by the role&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Using Temporary Credentials:&lt;/strong&gt; Once &lt;strong&gt;AssumeRole&lt;/strong&gt; is successful, the entity receives a temporary set of credentials &lt;strong&gt;(Access Key ID, Secret Access Key, and Session Token)&lt;/strong&gt; that can be used to interact with AWS services according to the **permissions of the role.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Temporary Credentials Duration:&lt;/strong&gt; These credentials have a configurable limited duration (typically a few minutes to a few hours) and do not need to be saved or managed permanently.&lt;/p&gt;
&lt;h3&gt;
  
  
  Common Usage Scenarios for AssumeRole
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Delegation of Responsibilities:&lt;/strong&gt; A user in one account can assume a role in another account to perform specific tasks, enabling collaboration between different accounts without sharing permanent credentials.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Temporary Access:&lt;/strong&gt; Applications running on EC2 instances can assume roles to access other AWS services (such as S3, DynamoDB, etc.) without the need to store permanent credentials.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Event-Driven Systems:&lt;/strong&gt; Allow Lambda functions to assume roles to perform specific tasks when triggered by events, such as accessing databases or storage services.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Elevated Privileges:&lt;/strong&gt; Users may have the ability to assume a role with elevated permissions for temporary administration or configuration that are not enabled by default.&lt;/p&gt;
&lt;h3&gt;
  
  
  Practical Example:
&lt;/h3&gt;

&lt;p&gt;Suppose you have a role named &lt;strong&gt;"AdminRole"&lt;/strong&gt; with administrative permissions to &lt;strong&gt;manage AWS resources&lt;/strong&gt;. The role has a trust policy that allows &lt;strong&gt;users from account A to assume it&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A user from account A makes an API request to AssumeRole for the role "AdminRole".&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;AWS verifies the trust defined in the role policy and, if approved, authenticates the request.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The user is provided with temporary credentials for the role.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;With these credentials, the user can manage resources as permitted by the "AdminRole" role.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Multi-Factor Authentication (MFA)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. What is MFA?&lt;/strong&gt;&lt;br&gt;
Multi-Factor Authentication (MFA) is a method of confirming a person’s identity that requires more than one factor for authentication. In the context of an airport, this can be compared to a security system that requires an employee to present multiple forms of identification before gaining access to restricted areas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. How MFA Works at the Airport:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Factor 1:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Identification (ID) Card:&lt;/strong&gt; The first factor could be the employee’s identification card, &lt;strong&gt;similar to a badge&lt;/strong&gt; that proves they are a member of the airport staff, allowing access to specific areas. &lt;strong&gt;This card typically contains some basic information and a photo.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Factor 2:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Access Code (Password or PIN):&lt;/strong&gt; The second factor is an &lt;strong&gt;access code or PIN&lt;/strong&gt; that the employee must enter when presenting their &lt;strong&gt;ID card&lt;/strong&gt;. This code can be generated by a device, &lt;strong&gt;such as a security token or a smartphone&lt;/strong&gt;, and changes regularly to ensure additional security.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3rd Factor (Optional):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Biometrics:&lt;/strong&gt; To further strengthen security, &lt;strong&gt;the airport can implement a third factor&lt;/strong&gt;, such as &lt;strong&gt;biometric verification (e.g., a fingerprint or facial recognition)&lt;/strong&gt; at the entrance to highly sensitive areas, such as the &lt;strong&gt;control room or the runway&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  IAM Policies (Permissions)
&lt;/h2&gt;

&lt;p&gt;An IAM user, group, or role can be assigned a JSON document called an IAM Policy, for example:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. What are IAM Policies?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the context of AWS, &lt;strong&gt;IAM Policies are rules that define the permissions that users&lt;/strong&gt; or &lt;strong&gt;groups have regarding actions on specific resources&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In an airport, these policies can be compared to &lt;strong&gt;rules and regulations that determine who can do what in different areas of the airport&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Types of Airport Policies:&lt;/strong&gt;&lt;br&gt;
To better understand, let's consider different types of policies that could &lt;strong&gt;exist in an airport:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Area Access Policy:&lt;/strong&gt; A policy that defines which employees can access which areas of the airport. For example, only maintenance personnel can access the aircraft maintenance area. This policy might specify that only members of a named group, such as &lt;strong&gt;"Maintainers", have access to certain areas, such as the runway or hangar.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Action Policy:&lt;/strong&gt; This policy determines what actions an &lt;strong&gt;employee can take in a specific area&lt;/strong&gt;. For example, a security officer may have permission to &lt;strong&gt;"inspect" and "ticket"&lt;/strong&gt; in the &lt;strong&gt;secure&lt;/strong&gt; zone, while a &lt;strong&gt;check-in&lt;/strong&gt; agent may have permission to &lt;strong&gt;"check-in"&lt;/strong&gt; and &lt;strong&gt;"issue boarding passes"&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Compliance Policy:&lt;/strong&gt; These policies can ensure that employees follow &lt;strong&gt;regulatory procedures&lt;/strong&gt;. For example, all employees must undergo security training before gaining access to &lt;strong&gt;restricted areas&lt;/strong&gt;. The policy may require new employees to complete this training in order to &lt;strong&gt;receive their access credentials&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. How It Works in Practice:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Imagine that a new employee is hired&lt;/strong&gt; at the airport. To ensure that permissions are appropriate, &lt;strong&gt;the security manager configures the following IAM Policies:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Defining Groups:&lt;/strong&gt; The manager creates groups for different roles, such as &lt;strong&gt;"Security"&lt;/strong&gt;, &lt;strong&gt;"Maintenance"&lt;/strong&gt;, &lt;strong&gt;"Customer Service"&lt;/strong&gt;. This makes it easier to organize permissions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxw1k4e4hidd6i04n4ynm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxw1k4e4hidd6i04n4ynm.png" alt="roles" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Assigning Permissions:&lt;/strong&gt; The manager then defines policies that connect these groups to actions and areas. For example:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security Group:&lt;/strong&gt; Permission to perform inspections, monitor cameras, control entry and exit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Maintenance Group:&lt;/strong&gt; Permission to access hangar areas, operate maintenance equipment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Customer Service Group:&lt;/strong&gt; Permission to access check-in and boarding areas, issue boarding passes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Policy Review and Update:&lt;/strong&gt; As employees change roles or new procedures are implemented (such as a new type of security check), policies need to be reviewed and updated.&lt;/p&gt;

&lt;p&gt;If a maintenance team member is promoted to a security position, &lt;strong&gt;they can be removed from the maintenance group and assigned to the security group&lt;/strong&gt;, automatically changing their permissions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Importance of IAM Policies at the Airport:&lt;/strong&gt; Permission policies are crucial to the safe and efficient operation of an airport because they ensure that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Only authorized individuals have access to specific areas and resources.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Actions taken by employees are monitored and controlled.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compliance with security and operational regulations is maintained.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5. Practical Example:&lt;/strong&gt;&lt;br&gt;
Consider a time when the security team at the gate area &lt;strong&gt;needs to access incident logs&lt;/strong&gt;. The IAM Policies would define:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who Has Access:&lt;/strong&gt; Only members of the &lt;strong&gt;"Security"&lt;/strong&gt; group.&lt;/p&gt;

&lt;p&gt;What Actions Can Be Taken: They can &lt;strong&gt;"view"&lt;/strong&gt; and &lt;strong&gt;"log"&lt;/strong&gt; incidents, but not &lt;strong&gt;"edit"&lt;/strong&gt; or &lt;strong&gt;"delete"&lt;/strong&gt; historical records.&lt;/p&gt;

&lt;p&gt;Okay, but one detail: how are these IAM policies defined?&lt;/p&gt;

&lt;p&gt;We can see these elements within the JSON of a policy document by examining any of the existing policies available to us in our AWS account.&lt;/p&gt;

&lt;p&gt;Let's take a look at the one we're already familiar with – the &lt;strong&gt;AdministratorAccess policy:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note that this policy gives permission to all resources, that is, you can access and use any part of the airport, &lt;strong&gt;create, edit, change and delete&lt;/strong&gt; anything within your account.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MyPolicy"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Sid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"FirstStatement"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"iam:ChangePassword"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Sid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SecondStatement"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"s3:ListAllMyBuckets"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Sid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ThirdStatement"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"s3:List*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"s3:Get*"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:s3:::confidential-data"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:s3:::confidential-data/*"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Condition"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"Bool"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"aws:MultiFactorAuthPresent"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"true"&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this case, we already have a policy, segmented with each action specified and the resources that will receive this policy, directly in the user or within a group, or within a Role.&lt;/p&gt;

&lt;h3&gt;
  
  
  Evaluation logic
&lt;/h3&gt;

&lt;p&gt;After collecting the effective statements using the filters, it uses the policy evaluation logic to decide whether the request is allowed. The AWS documentation has a descriptive image to summarize how it works:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flqekqx808uqerv2s0i0n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flqekqx808uqerv2s0i0n.png" alt="Evaluation logic" width="779" height="344"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Types of policies
&lt;/h4&gt;

&lt;p&gt;There are different types of policies, depending on what they are attached to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SCP: attached to the account via Organizations&lt;/li&gt;
&lt;li&gt;Resource-based policy: attached to the resource being called, such as an S3 bucket&lt;/li&gt;
&lt;li&gt;​​Permission boundary: attached to an identity as a boundary&lt;/li&gt;
&lt;li&gt;Session policy: attached to the assume role session&lt;/li&gt;
&lt;li&gt;Identity-based policy: attached to an identity, such as an IAM user&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frzfd3u8compqkijwexm1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frzfd3u8compqkijwexm1.png" alt="Types of policies" width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SCP, permissions boundary, and session-based policy are specific to a use case and are optional. If you don't use them, they don't affect policy evaluation; IAM ignores them. The two most important types are identity-based policies and resource-based policies. Most policies are of these two types.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The comparison between &lt;strong&gt;AWS IAM&lt;/strong&gt; and an airport clearly illustrates the importance of effective &lt;strong&gt;identity and access management&lt;/strong&gt;. By creating users and groups, defining access policies, and implementing security measures such as multi-factor authentication (MFA), you establish a system of control that protects your data and resources in the cloud.&lt;/p&gt;

&lt;p&gt;Just as an airport relies on rigorous security protocols and efficient processes to ensure the integrity of its operations, AWS IAM plays a critical role in ensuring that only authorized individuals have access to the appropriate resources.&lt;/p&gt;

&lt;p&gt;Meticulous IAM management not only safeguards your infrastructure, but also improves operational efficiency by promoting a secure and optimized cloud environment. In this way, just as an airport is a secure departure point for travelers and cargo, IAM is the gateway that ensures secure and controlled access to valuable AWS resources, enabling organizations to confidently navigate the vast digital landscape.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>learning</category>
      <category>security</category>
      <category>iam</category>
    </item>
    <item>
      <title>How to pass AWS Certifications, an approach to creating a base of studies</title>
      <dc:creator>Weder Sousa</dc:creator>
      <pubDate>Wed, 18 Jan 2023 01:43:20 +0000</pubDate>
      <link>https://dev.to/weder96/how-to-pass-aws-certifications-an-approach-to-creating-a-base-of-studies-3e32</link>
      <guid>https://dev.to/weder96/how-to-pass-aws-certifications-an-approach-to-creating-a-base-of-studies-3e32</guid>
      <description>&lt;p&gt;When I started studying for &lt;strong&gt;AWS certification&lt;/strong&gt;, it was a strange and new moment, as most of the times we start a new study to understand something within our training area, but at that moment I found several materials and also some tips on several websites and also reading the AWS documentation which is excellent, but as we know, knowing what each service does is a start, &lt;strong&gt;but knowing how to do it is what really matters&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So I started to study to find out which services AWS has, and you are faced with hundreds that still talk to each other, making the understanding process even a little more complex, and you need something to interconnect all these services within one specific architecture, then when you are familiarizing yourself with the gallery (&lt;strong&gt;aws services&lt;/strong&gt;), a cloudformation and another external one called terraform appears and gives you other ways to create services and which is super cool.&lt;/p&gt;

&lt;p&gt;So I decided to invest in taking the first AWS certification, as I like to develop, I went straight to the &lt;strong&gt;AWS Certified Developer Associate (DVA-C01)&lt;/strong&gt;, and &lt;strong&gt;I passed on the first attempt&lt;/strong&gt;, but I am one of those people who really like to learn, not just take a &lt;strong&gt;certification by memorizing the issues&lt;/strong&gt;, and this takes time and willingness.&lt;/p&gt;

&lt;p&gt;At that moment I understood another point that everything in &lt;strong&gt;the certification and how much each service will be deepened&lt;/strong&gt;, so I started to create repositories with all the services I needed, for the certification, at that moment I was looking for skills in each one, so &lt;strong&gt;I created my first repository&lt;/strong&gt; &lt;a href="https://github.com/weder96/AWS-Certified-Cloud-Practitioner-Foundational"&gt;https: //github.com/weder96/AWS-Certified-Cloud-Practitioner-Foundational&lt;/a&gt;, &lt;strong&gt;the idea was to unite all the content I found on internet and tips to make my learning faster and easier&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--e3qN6wBN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5joxk6g90h3dguezuibh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--e3qN6wBN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5joxk6g90h3dguezuibh.png" alt="Image description" width="656" height="908"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, when I saw it, I had already &lt;strong&gt;created the second an aggregator&lt;/strong&gt;, with the function of having all the contents, separated by areas that are defined by AWS, so I created &lt;a href="https://github.com/weder96/aws-certification-learning"&gt;https://github.com/weder96/aws-certification-learning&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AxEwGSiE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sy63gx7zqmsy9eunf9nc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AxEwGSiE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sy63gx7zqmsy9eunf9nc.png" alt="Image description" width="880" height="850"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It is divided by modules.&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Do6kT6Pa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pt4tf1gpa9qfqve6wpsp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Do6kT6Pa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pt4tf1gpa9qfqve6wpsp.png" alt="Image description" width="880" height="571"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Each module&lt;/strong&gt;, by session where it has its divisions within the modules,&lt;strong&gt;definitions, Cheat Sheets, References, Videos and Hands On&lt;/strong&gt;, with studied links for &lt;strong&gt;each subject&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SZh3vKTD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0e1lkfpd2zxoi0xp1tsh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SZh3vKTD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0e1lkfpd2zxoi0xp1tsh.png" alt="Image description" width="880" height="686"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But something was standard in all of them, evaluating the &lt;strong&gt;Exam Guide&lt;/strong&gt;, which I left added to each github repository that was for that certification, another was studying with &lt;strong&gt;&lt;a href="https://www.udemy.com/user/stephane%20-maarek/"&gt;Stephane Maarek's&lt;/a&gt;&lt;/strong&gt;, on Udemy, the cost benefit is scary, with it you develop skills, and also read the contents of &lt;strong&gt;&lt;a href="https://portal.tutorialsdojo.com/"&gt;Tutorials Dojo's&lt;/a&gt;&lt;/strong&gt; with &lt;strong&gt;Jon Bonso&lt;/strong&gt; and &lt;strong&gt;&lt;a href="https://digitalcloud.training/"&gt;Digtal Cloud &lt;/a&gt;&lt;/strong&gt; with &lt;strong&gt;Neal Davis&lt;/strong&gt;, remembering here that the &lt;strong&gt;practical questions&lt;/strong&gt; with &lt;strong&gt;Neal Davis and Jon Bonson and Stephane Maarek's&lt;/strong&gt;, already raises your level up there.&lt;/p&gt;

&lt;p&gt;There are also &lt;strong&gt;AWS trainings&lt;/strong&gt; that can be explored, which is &lt;strong&gt;&lt;a href="https://explore.skillbuilder.aws"&gt;explore.skillbuilder.aws&lt;/a&gt;&lt;/strong&gt;, and it has excellent free courses, to help you, aws also has &lt;strong&gt;&lt;a href="https://workshops.aws/"&gt;workshops.aws &lt;/a&gt;&lt;/strong&gt;, which has several labs that help you as a tutorial to develop something, in addition to having the &lt;strong&gt;difficulty levels of each lab&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Another point was getting skills doing concept tests or labs, &lt;strong&gt;&lt;a href="https://www.whizlabs.com/labs/"&gt;whizlabs&lt;/a&gt;&lt;/strong&gt;, which helps you a lot to understand how the services relate, with monitoring, and integrations, but the skills it has to be added to understanding how the questions are collected, how each subject falls into the exam, &lt;strong&gt;then you have to answer questionnaires until you reach between 80% and 90%&lt;/strong&gt;, or &lt;strong&gt;until you feel that you are ready to try to take the exam&lt;/strong&gt;, that you are studying.&lt;/p&gt;

&lt;p&gt;I am currently working on &lt;strong&gt;3 Repositories&lt;/strong&gt; for the exams:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/weder96/AWS-Certified-Cloud-Practitioner-Foundational"&gt;AWS-Certified-Cloud-Practitioner-Foundational&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/weder96/AWS-Certified-Developer-Associate-DVA-C01"&gt;AWS-Certified-Developer-Associate-DVA-C01&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/weder96/AWS-Certified-Solutions-Architect-Associate-SAA-C03"&gt;AWS-Certified-Solutions-Architect-Associate-SAA-C03&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EYnNkajI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3gp8mqj1q1b0gb99oi8x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EYnNkajI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3gp8mqj1q1b0gb99oi8x.png" alt="Image description" width="871" height="628"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the latter, which is the &lt;strong&gt;AWS Certified Solutions Architect-Associate (SAA-C03)&lt;/strong&gt;, which I am currently studying, there is already a lot of content being added, and &lt;strong&gt;it is being evolved every day until it meets 100% of the exam content&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bte4W8fM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pmpwothcmzgemiwpaqu7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bte4W8fM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pmpwothcmzgemiwpaqu7.png" alt="Image description" width="880" height="914"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The three are linked to the first one which is &lt;a href="https://github.com/weder96/aws-certification-learning"&gt;aws-certification-learning&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;But why do it this way?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The idea is to &lt;strong&gt;create a study repositories with links and materials, blogs that when you start studying&lt;/strong&gt; will serve as a basis for studies and helped you today, may help someone in the future who will also walk this path.&lt;/p&gt;

&lt;p&gt;And like the content, it's always the same but with a higher charge at each level of the Certification:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Foundational&lt;/strong&gt; (AWS Certified Cloud Practitioner)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Associate&lt;/strong&gt;(AWS Certified Solutions Architect, AWS Certified Developer, AWS Certified SysOps Administrator)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Professional&lt;/strong&gt;(AWS Certified Solutions Architect, AWS Certified DevOps Engineer)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Specialty&lt;/strong&gt;(AWS Certified Advanced Networking, AWS Certified Data Analytics, AWS Certified Database, AWS Certified Machine Learning, AWS Certified Security, AWS Certified: SAP on AWS)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because we know that companies in the market are demanding that you take &lt;strong&gt;cloud certifications (AWS, Azure and Google)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So creating a study base can help a lot to everyone who doesn't know where to start.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;This then and my contribution&lt;/strong&gt;, I started the same, but if we get &lt;strong&gt;together&lt;/strong&gt; and start to create, evolve and then share, everyone wins, each one can start their journey, a little ahead and with more guidance than when we started.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Certifications&lt;/strong&gt; have a huge weight when a company hires you and if you have skills, they even pay for the entire study and certification process, in addition to paying extra after you pass the exam.&lt;/p&gt;

&lt;p&gt;So let's help each other, &lt;strong&gt;because knowledge&lt;/strong&gt; is something that, if &lt;strong&gt;shared&lt;/strong&gt;, only makes us grow, and soon we will be able to do incredible things within the cloud, paying an amount that is worth the cost benefit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hope this method is of help to you in some way&lt;/strong&gt;. &lt;strong&gt;I would love to hear from you and what other questions you might have for me&lt;/strong&gt;. Good luck on your journey to the cloud!&lt;/p&gt;

</description>
      <category>aws</category>
      <category>tutorial</category>
      <category>cloud</category>
      <category>github</category>
    </item>
    <item>
      <title>Spring Boot: Everything you need to know, and what nobody told you. Part IV</title>
      <dc:creator>Weder Sousa</dc:creator>
      <pubDate>Thu, 12 Jan 2023 00:45:01 +0000</pubDate>
      <link>https://dev.to/weder96/exception-handling-spring-security-exceptions-and-validations-upload-download-test-and-deploy-cloud-3ili</link>
      <guid>https://dev.to/weder96/exception-handling-spring-security-exceptions-and-validations-upload-download-test-and-deploy-cloud-3ili</guid>
      <description>&lt;p&gt;&lt;strong&gt;29. Handling Exceptions with SpringBoot&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;30. Validations with Bean Validation SpringBoot&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;31. Integration Tests&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;32. Security with Spring Security, OAuth2, Saml and JWT&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;33. Uploading and downloading files&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;34. Documentation with OpenAPI(Swagger)&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;35. Deploy to Amazon Cloud Production&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;36. Conclusion&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;29. Exception Handling with SpringBoot&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Here we go to an essential part, which is the handling of exceptions, when we are working with the API, we leave parameters, which will not always work as expected, which will generate errors in our API,&lt;/p&gt;

&lt;p&gt;In this case, there are some ways to solve this, one is throwing custom exceptions annotated with @ResponseStatus, another point that I like and it is also essential and you have your custom exceptions, because they help you in tracking application errors, in my case always I have BusinessException and SystemException.&lt;/p&gt;

&lt;p&gt;But as we know, Springboot has an exception handler called @ExceptionHandler, where when using it together with @ControllerAdvice, we can handle exceptions globally, and you can also customize these exceptions.&lt;/p&gt;

&lt;p&gt;At a lower level, we still have the possibility of enabling errors in the deserialization of nonexistent or ignored properties, handling PropertyBindingException in the deserialization.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;30. Validations with Bean Validation SpringBoot&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Sometimes we need to create validations to verify if any field that was passed to the application meets the business rule or if it exists, in this case we have an aid that are validations with &lt;strong&gt;Bean Validation&lt;/strong&gt;, we can add constraints and validate in the controller itself with &lt;strong&gt;&lt;a class="mentioned-user" href="https://dev.to/valid"&gt;@valid&lt;/a&gt;&lt;/strong&gt;, and still handle the exception of violation of constraints of this validation.&lt;/p&gt;

&lt;p&gt;Here are some legal issues such as validating the associations of an entity in cascade, you can convert groups of constraints to validation in cascade with &lt;strong&gt;@ConvertGroup&lt;/strong&gt;, in addition to being able to customize validation messages.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;31. Integration Tests&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Speaking of testing as the saying goes and "rain in the wet", we always need to be sharp in carrying out tests, here the QA or also known testers, the guy who will always be your best friend (does not contain irony, he will lead you to be better , every sprint).&lt;br&gt;
When running an integration test with Spring Boot, we always think of &lt;strong&gt;JUnit and AssertJ&lt;/strong&gt;, but we have a huge possibility when we are working with tests, below is a list of some that can help you and possibly your next job may have one of them or more, already implanted or waiting for you to do it.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;JUnit&lt;/li&gt;
&lt;li&gt;REST Assured&lt;/li&gt;
&lt;li&gt;Mockito&lt;/li&gt;
&lt;li&gt;Selenium&lt;/li&gt;
&lt;li&gt;TestNG&lt;/li&gt;
&lt;li&gt;Spock Framework&lt;/li&gt;
&lt;li&gt;Cucumber&lt;/li&gt;
&lt;li&gt;Spring Test&lt;/li&gt;
&lt;li&gt;DBUnit&lt;/li&gt;
&lt;li&gt;Testcontainers&lt;/li&gt;
&lt;li&gt;AssertJ&lt;/li&gt;
&lt;li&gt;Awaitility&lt;/li&gt;
&lt;li&gt;Wiser&lt;/li&gt;
&lt;li&gt;Memoryfilesystem&lt;/li&gt;
&lt;li&gt;WireMock&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I could talk about many here, I would even post several, on the subject, but that is another moment.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;32. Security with Spring Security, OAuth2, Saml and JWT&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Security in applications is always a complex part and also due to the great diversity of solutions, in the antiquity of programming, about 12 years ago we follow JAAS (Java Authentication and Authorization Service) a beautiful name, but the complexity of working with this solution and lack of documentation.&lt;/p&gt;

&lt;p&gt;Already in 2008 &lt;a href="https://spring.io/projects/spring-security" rel="noopener noreferrer"&gt;Spring Security&lt;/a&gt; was already evolving and programmers were already looking for this solution, and in its version 4.0.0, in 2015, it was already being applied in most applications, or even more tutorials were being created, this year &lt;a href="https://spring.io/projects/spring-security" rel="noopener noreferrer"&gt;Spring Security&lt;/a&gt; its version reached version &lt;a href="//https:/%20/docs.spring.io/spring-security/reference/index.html"&gt;6 .0.1&lt;/a&gt;, and has major updates since version 4.0.0.&lt;/p&gt;

&lt;p&gt;With more and more applications evolving in terms of security, because today we have several tools (Nexus, Fortify) that help you to discover your application, looking for possible failures that are already known and can be used to corrupt your application, these failures are widely disseminated and often corrected, but your application has not yet updated to that version.&lt;/p&gt;

&lt;p&gt;Today it is necessary for the programmer to have a comprehensive view around security issues, first to understand how the &lt;a href="https://www.bezkoder.com/spring-boot-jwt-mysql-spring-%20security-architecture/" rel="noopener noreferrer"&gt;JWT(JSON Web Token)&lt;/a&gt; and also how Spring Boot's &lt;a href="https://www.baeldung.com/spring-boot-add-filter" rel="noopener noreferrer"&gt;Filters&lt;/a&gt; work.&lt;/p&gt;

&lt;p&gt;At this point, some details are already part of your understanding, but the forms of logging are increasingly evolving and organizations already want to take advantage of a pre-existing registration &lt;a href="https://www.keycloak.org/" rel="noopener noreferrer"&gt;keycloak&lt;/a&gt;, or even a login that Access Lightweight Directory Access Protocol (LDAP) directory services.&lt;/p&gt;

&lt;p&gt;In my &lt;a href="https://github.com/weder96/spring-boot-keycloak" rel="noopener noreferrer"&gt;github&lt;/a&gt; there is a project &lt;a href="https://github.com/weder96/spring-boot-keycloak" rel="noopener noreferrer"&gt;spring-boot-keycloak&lt;/a&gt; , where we work with authentication and authorization using Spring Boot and Keycloak, remembering that here we use &lt;a href="https://docs.docker.com/compose/install/" rel="noopener noreferrer"&gt;docker-compose&lt;/a&gt; to upload mysql and keyCloak.&lt;/p&gt;

&lt;p&gt;You should understand how to work with OAuth2 and with JWT and access control,&lt;/p&gt;

&lt;p&gt;And how do cryptographic algorithms that generate JWT tokens work, such as a symmetric algorithm (HMAC SHA-256), or signing JWT with an asymmetric algorithm (RSA SHA-256), and how spring Security helps you verify user authentication with database data.&lt;/p&gt;

&lt;p&gt;You can add public Claims in the JWT Payload (user name) and understand how you can plan a topology of groups and system permissions, which when used with Method Security can Restricting API access using @PreAuthorize and SpEL&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;33. Uploading and downloading files&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;When we are creating a system, most of the time we will be faced with manipulation of images or files, from just transferring, in other cases even generating or converting from a docx format to PDF, or from pdf to images, and the ways to save these images , currently they go through storage in the cloud (AWS, AZURE, Google Cloud), there are others, but let's just stay, in this one I will be based on AWS and its S3 service (Simple Servive Storage), and you will be in the moment that you are working on a system that already has a ready architecture, and now is faced with an upload and download requirement and save the same in AWS.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fikgl7itb1xcw1cibtsg2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fikgl7itb1xcw1cibtsg2.png" alt="Image description" width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Where you need to upload via API and Save to AWS S3, on my github &lt;a href="https://github.com/weder96/aws-%20image-upload-wsousa" rel="noopener noreferrer"&gt;https://github.com/weder96/aws-image-upload-wsousa&lt;/a&gt;, which is a project that has a frontEnd and a backEnd explaining how you connect via &lt;a href="https://aws.amazon.com/pt/cdk/" rel="noopener noreferrer"&gt;CDK&lt;/a&gt;, and which is intended to be a demo , using the frontEnd you have a clone of the AWS S3 File control.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1xoum92q7ecm07qb7ff1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1xoum92q7ecm07qb7ff1.png" alt="Image description" width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This project was a presentation at Campus party 2022, where we demonstrated how to use CDK and Springboot , to manipulate files in AWS S3.&lt;/p&gt;

&lt;p&gt;But file handling is a little more comprehensive here we are talking about small files and only transport, but issues like transporting hundreds of files (multipart) where we use spring batch, and other points that complicate, but understanding the basis of how to handle files with Spring boot , it already gives you a starting point to understand this discipline that is used a lot in our area.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;34. Documentation with OpenAPI(Swagger)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The famous Swagger, as we are working with APIS, it is always good to document, because who creates and who uses and who does the integrations, in this agile model there are always different professionals, in this case the frontEnd and BackEnd.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdqbyv9o7hfdk3ghtvzj1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdqbyv9o7hfdk3ghtvzj1.png" alt="Image description" width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This image above is just a model that shows us which parameters and which urls are available to be used in the project, so in most projects the swagger will be activated and requested by the analysis and business rules team.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;35. Deploy to Amazon Cloud Production&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Here always comes the question, as a developer why do I have to know how to deploy in the cloud?&lt;/p&gt;

&lt;p&gt;Because the teams have a person specialized in configuring the deploy, yes. Maybe not always.&lt;/p&gt;

&lt;p&gt;Some teams tend to have a Cloud professional, but most are cloud professionals and do not master Springboot and Java and Servers (Tomcat, Jetty, JBoss, WildFly, WebSphere, Glassfish), which in turn is also a lot to learn, so when we know it we can be useful and help unlock some impediments that may occur.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;36. Conclusion&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Being a Spring and Springboot professional&lt;/strong&gt;, using java is a task that requires discipline and also a lot of practice, working in big companies and having good salaries and a search for all professionals, don't fall for the 6 month conversations, you will be a JEDI, in 6 months you will become a good excellent professional.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;There are some that we say were born for this&lt;/strong&gt;, others have more difficulties &lt;strong&gt;but with discipline and focus&lt;/strong&gt;, you will soon reach your goals, but &lt;strong&gt;be patient&lt;/strong&gt;, set &lt;strong&gt;achievable goals&lt;/strong&gt;, never feed your ego, the perfect and enemy of the good and don't get distracted halfway through.&lt;/p&gt;

&lt;p&gt;Another point, &lt;strong&gt;don't want to be a Senior with 2 years or 3 years of experience&lt;/strong&gt;, it gets in the way of your growth, lets things happen naturally.&lt;/p&gt;

&lt;p&gt;Always seek knowledge, this issue is complex, when we touch on this point here and it is very abstract, everything will depend on the team you work with or sometimes even the project, and the capacity for absorption and understanding, but many are faced with other challenges and there they discover what in my opinion is not a bad thing, they face challenges where their skills sometimes haven't reached yet.&lt;/p&gt;

&lt;p&gt;When faced with these moments, take a step back and pick up speed &lt;strong&gt;(knowledge, courses, concept tests, understanding of documentation, videos on Youtube, among others)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Take time to rest, go out with colleagues, family and sleep well (8 hours a night), the best solutions appear at the strangest times, &lt;strong&gt;always leave a notebook and pen next to your bed&lt;/strong&gt;, write down something you he thought, don't try to solve something at the &lt;strong&gt;moment of discovery&lt;/strong&gt;, stop and think better and just &lt;strong&gt;solve it at the right moment&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you work from home, try to have a place that reminds you of an office, on weekends, when you're not doing anything &lt;strong&gt;lock that place&lt;/strong&gt; and remember that &lt;strong&gt;you need to rest&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The CEO of the company I work for said something that always makes me think, &lt;strong&gt;"wear your shirt never the company's"&lt;/strong&gt;, apparently it's a strange thing to say, but when he explains it, you can see that it's something that generates results from two sides, for you who will be a better professional and for the company, because it will always have you at the best level of problem solving.&lt;/p&gt;

&lt;p&gt;Try to seek knowledge, create at each step, &lt;strong&gt;your evolutions on Github&lt;/strong&gt;, so that you can measure your evolution every day, and soon the &lt;strong&gt;achievements will come&lt;/strong&gt;, but always remember we deal &lt;strong&gt;with people&lt;/strong&gt; and people have your &lt;strong&gt;time and feelings&lt;/strong&gt;, before &lt;strong&gt;criticizing or questioning&lt;/strong&gt;, think about how you would say something without it seeming offensive, always put yourself in &lt;strong&gt;the other person's place&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And most importantly you will &lt;strong&gt;take good and bad code&lt;/strong&gt;, you will work with &lt;strong&gt;good and bad people&lt;/strong&gt; and it's natural, so always analyze which one is you within that team, &lt;strong&gt;the one who writes good code and a bad person **, or **the one who writes bad codes, but is a good person&lt;/strong&gt;, remember that you can teach a &lt;strong&gt;person to have excellent codes&lt;/strong&gt;, but for a person to be good there is a &lt;strong&gt;bit complex* *, cultivate friendships, but without being annoying, people don't like people like that, be proactive, but only go as far as you can go learn to **say I don't know&lt;/strong&gt;, but tomorrow &lt;strong&gt;ask me again&lt;/strong&gt;, and the answer will always be different.&lt;/p&gt;

&lt;p&gt;About the bad codes as well and another point to be &lt;strong&gt;analyzed, we don't know the moment&lt;/strong&gt; nor the &lt;strong&gt;pressure&lt;/strong&gt; that occurred at that moment to &lt;strong&gt;deliver&lt;/strong&gt;, so our assumptions are just &lt;strong&gt;speculations&lt;/strong&gt;, so if you are forced to change it, &lt;strong&gt;document it&lt;/strong&gt; , understand, but don't &lt;strong&gt;go talking bad about the programmer&lt;/strong&gt;, because there is a direct and simple sentence:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"Speak and easy show me the code"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This article is divided into 4 parts:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/weder96/spring-boot-everything-you-need-to-know-and-what-nobody-told-you-o4j"&gt;Spring Boot: Everything you need to know, and what nobody told you. #Part01&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/weder96/how-to-start-learning-spring-boot-4df"&gt;Spring Boot: Everything you need to know, and what nobody told you. #Part02&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/weder96/questions-about-microservices-and-asynchronous-services-rabbit-kafka-sqs-4j12"&gt;Spring Boot: Everything you need to know, and what nobody told you. #Part03&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/weder96/exception-handling-spring-security-exceptions-and-validations-upload-download-test-and-deploy-cloud-3ili"&gt;Spring Boot: Everything you need to know, and what nobody told you.#Part04&lt;/a&gt;&lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>Spring Boot: Everything you need to know, and what nobody told you. Part III</title>
      <dc:creator>Weder Sousa</dc:creator>
      <pubDate>Thu, 12 Jan 2023 00:30:49 +0000</pubDate>
      <link>https://dev.to/weder96/questions-about-microservices-and-asynchronous-services-rabbit-kafka-sqs-4j12</link>
      <guid>https://dev.to/weder96/questions-about-microservices-and-asynchronous-services-rabbit-kafka-sqs-4j12</guid>
      <description>&lt;p&gt;&lt;strong&gt;21. But complex processes that require several integrated systems exchanging information, how to understand all this?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;22. Reliability&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;23. Gateway&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;24. Microservices and their Classic Dilemmas&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;25. Data Management&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;26. Transactional Messaging&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;27. But what is in most of these Design Patterns mentioned above?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;28. Observability with Spring Boot&lt;/strong&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;21. But complex processes that require several integrated systems exchanging information, how to understand all this?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;As can be seen in the image below, we have two types of architectures (monolithic and Micro Services)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz4ggrvtd6600c7vjwo1i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz4ggrvtd6600c7vjwo1i.png" alt="Image description" width="700" height="561"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yes, here we have a programming paradigm using microservices, which in the end is nothing less than several SpringBoot projects communicating with each other.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnkj5bv4x5ipmja086o1i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnkj5bv4x5ipmja086o1i.png" alt="Image description" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yes, and we can see what that same architecture would look like inside Service Registry, using an API Gateway:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkgforddx4gwwptc8iqcu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkgforddx4gwwptc8iqcu.png" alt="Image description" width="800" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On my github there is a project &lt;a href="https://github.com/weder96/microServiceDemo" rel="noopener noreferrer"&gt;microServiceDemo&lt;/a&gt; that details how you create a microservice architecture using Eureka Server how to configure it, it's a simple project, but it helps you to understand parts of how to configure a maven project with modules, in addition to &lt;a href="https://spring.io/projects/spring-cloud" rel="noopener noreferrer"&gt;spring-cloud&lt;/a&gt;(Hoxton.SR12) settings, but at the date of this article it is already in V2022 .0.0, due to the version of &lt;a href="https://spring.io/projects/spring-boot" rel="noopener noreferrer"&gt;Spring boot&lt;/a&gt;(2.3.3.RELEASE), but at the date of this article it is already at V3.0.1.&lt;/p&gt;

&lt;p&gt;Another point to be analyzed in this project, because in the &lt;a href="https://github.com/weder96/microServiceDemo/tree/main/order" rel="noopener noreferrer"&gt;Order&lt;/a&gt; Project, we work with the @FeignClient&lt;a href="https://spring%20.io/projects/spring-cloud-openfeign" rel="noopener noreferrer"&gt;openfeign&lt;/a&gt;, which helps you communicate between microservices.&lt;/p&gt;

&lt;p&gt;Another point is that in the &lt;a href="https://github.com/weder96/microServiceDemo/blob/main/delivery/src/main/java/com/wsousa/delivery/http/clients/AccoutingWebClient.java" rel="noopener noreferrer"&gt;Delivery&lt;/a&gt; project, we use the WebCLient to do the communication.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;22. Reliability&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Concept of &lt;a href="https://microservices.io/patterns/reliability/circuit-breaker.html" rel="noopener noreferrer"&gt;circuit-breaker&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;23. Gateway&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;And in the &lt;a href="https://github.com/weder96/microServiceDemo/blob/main/gateway/pom.xml" rel="noopener noreferrer"&gt;Gateway&lt;/a&gt; project, to map calls to microservices.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;dependency&amp;gt;
     &amp;lt;groupId&amp;gt;org.springframework.cloud&amp;lt;/groupId&amp;gt;
     &amp;lt;artifactId&amp;gt;spring-cloud-starter-netflix-zuul&amp;lt;/artifactId&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;24. Microservices and their Classic Dilemmas&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;I always like to quote &lt;a href="https://github.com/asouza/pilares-design-codigo/commits?author=asouza" rel="noopener noreferrer"&gt;Alberto Souza&lt;/a&gt;, on his github to a project &lt;a href="//https://%20github.com/asouza/pilares-design-codigo"&gt;pilares-design-codigo&lt;/a&gt; that I always use as a source to evolve, as a developer, and two of his examples he cites:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"Any indirection increases the difficulty of understanding the application as a whole, it needs to deserve to exist. That is, it needs to help distribute the intrinsic load throughout the system."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"You need to understand what you are using and always look at the negative side of each decision."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Here comes a very relevant point when we are working with microservices, the site &lt;a href="https://microservices.io/" rel="noopener noreferrer"&gt;https://microservices.io/&lt;/a&gt;, already starts with The Patterns, this means that when we read this word someone A lot of anger has already passed and created something to solve (That's what we do, we solve problems using programming).&lt;/p&gt;

&lt;p&gt;Plus what's in the quotes above, here yes all procedures within microservices have to be analyzed the negative points, because here the trace, and the solutions are proportional to their directions, and the more there are, the more difficult it will be to understand the whole, more problems will arise during development, and beware of people who will defend their point of view and are good at rhetoric, but it is inversely proportional when they have to code, save this sentence below:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"Speak and easy show me the code"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;And remember, if you give direction to something you believe in, then consider your point of view as done, because they will all be based on your ideas and actions and will help you to finalize the intended use case, because there is only one objective to deliver customer value, and here I mention one more pillar.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"The top priority is to work according to the use case. Beauty and beauty do not give bread or plenty. "&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Back to Microservices Patterns, here I will detail 2(two) &lt;strong&gt;Data Management&lt;/strong&gt; and &lt;strong&gt;Transactional Messaging&lt;/strong&gt;, because in most cases some solutions will go through messaging (RabbitMQ, ActiveMQ, SQS, KAFKA).&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;25. Data Management&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://microservices.io/patterns/data/database-per-service.html" rel="noopener noreferrer"&gt;Database per Service&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://microservices.io/patterns/data/shared-database.html" rel="noopener noreferrer"&gt;Shared database&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://microservices.io/patterns/data/api-composition.html" rel="noopener noreferrer"&gt;API Composition&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://microservices.io/patterns/data/saga.html" rel="noopener noreferrer"&gt;Saga&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://microservices.io/patterns/data/cqrs.html" rel="noopener noreferrer"&gt;CQRS&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://microservices.io/patterns/data/domain-event.html" rel="noopener noreferrer"&gt;Domain event&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://microservices.io/patterns/data/event-sourcing.html" rel="noopener noreferrer"&gt;Event sourcing&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;26. Transactional Messaging&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://microservices.io/patterns/data/transactional-outbox.html" rel="noopener noreferrer"&gt;Transactional outbox&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://microservices.io/patterns/data/transaction-log-tailing.html" rel="noopener noreferrer"&gt;Transaction log tailing&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://microservices.io/patterns/data/polling-publisher.html" rel="noopener noreferrer"&gt;Polling publisher&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;27. But what is in most of these Design Patterns mentioned above?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In the patterns mentioned above, we have some that use asynchronous processes, that is, they expect a &lt;strong&gt;producer(publish)&lt;/strong&gt; and &lt;strong&gt;subscribe(consumer)&lt;/strong&gt;, which in this case can be another application or just a *&lt;em&gt;listener(listener)&lt;/em&gt; *, which when receiving the command triggers closing the process, in addition to also like everything we do there may be failures and must have their retry or DQL queues (dead-letter queues), such as cloud services as mentioned above the AWS SQS.&lt;/p&gt;

&lt;p&gt;There's no way around it, you'll have to know how this process works, I first uploaded a &lt;strong&gt;RabbitMQ&lt;/strong&gt; with &lt;strong&gt;Docker&lt;/strong&gt; (this one will help your growth a lot), then later I had to deal with &lt;strong&gt;Kafka&lt;/strong&gt; and your style of working with messaging.&lt;/p&gt;

&lt;p&gt;I'll be honest about the work but it looks very nice and good after it's done.&lt;/p&gt;

&lt;p&gt;When I read the book Effective Kafka: A Hands-On Guide, by the Author &lt;a href="https://www.amazon.com.br/Emil-Koutanov/e/B08SLDWLBG%3Fref=dbs_a_mng_rwt_scns_share" rel="noopener noreferrer"&gt;Emil Koutanov&lt;/a&gt;, man it gave a show in this book, it seems that everything becomes simpler and more understandable.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1k32femk4mgwt3i9e88p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1k32femk4mgwt3i9e88p.png" alt="Image description" width="639" height="827"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.amazon.com.br/Effective-Kafka-Hands-Event-Driven-Applications-ebook%20/dp/B0861WN4YS" rel="noopener noreferrer"&gt;Effective Kafka: A Hands-On Guide to Building Robust and Scalable Event-Driven Applications with Code Examples in Java&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'll put two images where it shows how a publish/subscribe(Producer/Consumer) works:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuj1xdqr5rltfacyl747n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuj1xdqr5rltfacyl747n.png" alt="Image description" width="730" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And how the CQRS architecture, defined in the &lt;strong&gt;Data Management&lt;/strong&gt; standards, works&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffswt997gv9yoplugjcs4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffswt997gv9yoplugjcs4.png" alt="Image description" width="760" height="583"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;28. Observability with Spring Boot&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Due to the great possibility of using microservices, the Galerinha do SRE (Site Reliability Engineering), which currently plays a fundamental role in tracking and control, as applications can be affected at any time with a large amount of access, a point of microservices stop and affect everything.&lt;/p&gt;

&lt;p&gt;Spring has an observability team that has been working on adding observability support to Spring applications for some time now and each release is evolving.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://spring.io/blog/2022/10/12/observability-with-spring-boot-3" rel="noopener noreferrer"&gt;&lt;strong&gt;But what is observability?&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In our understanding, it is "how well you can understand the internals of your system by examining its outputs". We believe that the interconnection between metrics, logging and distributed tracing gives you the ability to reason about the state of your system to debug exceptions and latency in your applications. You can watch more about what we think about observability in this episode of Enlightning with Jonatan Ivanov.&lt;/p&gt;

&lt;p&gt;Now it's time to add observability-related features!&lt;/p&gt;

&lt;p&gt;In my github there is a project &lt;a href="https://github.com/weder96/SpringBootActuatorPrometheus" rel="noopener noreferrer"&gt;SpringBootActuatorPrometheus&lt;/a&gt; that I created for studies only with this question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Metrics&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;Micrometer with Prometheus&lt;/strong&gt; metrics,&lt;br&gt;
&lt;strong&gt;Tracking&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For Context Propagation Tracing with &lt;strong&gt;Micrometer&lt;/strong&gt; Tracing, we need to choose a &lt;strong&gt;tracer&lt;/strong&gt; bridge (tracer is a library used to handle the lifecycle of a span).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;logs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Since we have Micrometer Trace in the classpath, the logs are automatically correlated (that is, they contain a unique trace identifier). Now we need to upload the logs. For this demo, we sent them to Grafana Loki. We can achieve this by adding the com.github.loki4j:loki-logback-appender dependency.&lt;/p&gt;

&lt;p&gt;I advise you to read 3 books on the subject:&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;01. Site Reliability Engineering: How Google Runs Production Systems (English Edition)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwk5z8f7tgsoyk67j5jt0.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwk5z8f7tgsoyk67j5jt0.jpg" alt="Image description" width="381" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.amazon.com.br/Site-Reliability-Engineering-Production-Systems-ebook/dp/B01DCPXKZ6/ref=sr_1_2?adgrpid=81898274395&amp;amp;gclid=CjwKCAiA2fmdBhBpEiwA4CcHzSqc8YqyZem-1M7b0Lvw16Whn2XGeNZQ0iXct6PGSeozl9BRv_wKKxoCGYQQAvD_BwE&amp;amp;hvadid=425982498844&amp;amp;hvdev=c&amp;amp;hvlocphy=1031430&amp;amp;hvnetw=g&amp;amp;hvqmt=b&amp;amp;hvrand=11454883084154792729&amp;amp;hvtargid=kwd-299036721296&amp;amp;hydadcr=5620_11235101&amp;amp;keywords=google+sre&amp;amp;qid=1673464129&amp;amp;sr=8-2" rel="noopener noreferrer"&gt;Site Reliability Engineering: How Google Runs Production Systems (English Edition)&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;02. The Site Reliability Workbook: Practical Ways to Implement SRE&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwgpo62hjgcqp07mi05me.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwgpo62hjgcqp07mi05me.jpg" alt="Image description" width="381" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.amazon.com.br/Site-Reliability-Workbook-Betsy-Beyer/dp/1492029505/ref=sr_1_3?adgrpid=81898274395&amp;amp;gclid=CjwKCAiA2fmdBhBpEiwA4CcHzSqc8YqyZem-1M7b0Lvw16Whn2XGeNZQ0iXct6PGSeozl9BRv_wKKxoCGYQQAvD_BwE&amp;amp;hvadid=425982498844&amp;amp;hvdev=c&amp;amp;hvlocphy=1031430&amp;amp;hvnetw=g&amp;amp;hvqmt=b&amp;amp;hvrand=11454883084154792729&amp;amp;hvtargid=kwd-299036721296&amp;amp;hydadcr=5620_11235101&amp;amp;keywords=google+sre&amp;amp;qid=1673464230&amp;amp;sr=8-3&amp;amp;ufe=app_do%3Aamzn1.fos.db68964d-7c0e-4bb2-a95c-e5cb9e32eb12" rel="noopener noreferrer"&gt;The Site Reliability Workbook: Practical Ways to Implement SRE&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;03. Establishing SRE Foundations A Step-by-Step Guide to Introducing Site Reliability Engineering in Software Delivery Organizations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvs0lsic582s41gs6sfys.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvs0lsic582s41gs6sfys.jpg" alt="Image description" width="405" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.amazon.com/Establishing-Foundations-Step-Step-Organizations/dp/0137424604" rel="noopener noreferrer"&gt;https://www.amazon.com/Establishing-Foundations-Step-Step-Organizations/dp/0137424604&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This article is divided into 4 parts:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/weder96/spring-boot-everything-you-need-to-know-and-what-nobody-told-you-o4j"&gt;Spring Boot: Everything you need to know, and what nobody told you. #Part01&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/weder96/how-to-start-learning-spring-boot-4df"&gt;Spring Boot: Everything you need to know, and what nobody told you. #Part02&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/weder96/questions-about-microservices-and-asynchronous-services-rabbit-kafka-sqs-4j12"&gt;Spring Boot: Everything you need to know, and what nobody told you. #Part03&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/weder96/exception-handling-spring-security-exceptions-and-validations-upload-download-test-and-deploy-cloud-3ili"&gt;Spring Boot: Everything you need to know, and what nobody told you.#Part04&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gratitude</category>
    </item>
    <item>
      <title>Spring Boot: Everything you need to know, and what nobody told you. Part II</title>
      <dc:creator>Weder Sousa</dc:creator>
      <pubDate>Thu, 12 Jan 2023 00:24:21 +0000</pubDate>
      <link>https://dev.to/weder96/how-to-start-learning-spring-boot-4df</link>
      <guid>https://dev.to/weder96/how-to-start-learning-spring-boot-4df</guid>
      <description>&lt;p&gt;&lt;strong&gt;7. How to start Spring Boot?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;8. What's the best way to learn Spring Boot a new framework?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;9. But do you recommend any course in Portuguese about Spring boot?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;10. Okay, we have books and courses, but what does the market really want from me as a high-level Developer?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;11. Another question would be that as much as he knew was enough, had he put his hand in the dough enough?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;12. Right, but what matters for the job market, you have to understand well about:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;13. If you didn't have Spring, how would you use this concept (IoC and ID)?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;14. How to study this much Spring Annotation?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;15. But is there any material just about the annotations?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;16. But how do I separate the packages (package) of a Spring Boot project?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;17. But why do you have a package, with dto ?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;18. Right, but speaking of database like Spring Boot, can you help us?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;19. Creating a CRUD&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;20. Have you already created and know how to create an @annotation in Java ?&lt;/strong&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;7. How to start Spring Boot?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;So how to create my first project with spring boot, to begin to understand, and yes springboot helps us, because it created a website where we can create our base application, called Spring Initializr, just access &lt;a href="https://start.spring.io/" rel="noopener noreferrer"&gt;https://start.spring.io/&lt;/a&gt; and enter the required project information.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffuv91skn8g5yupu7b1rw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffuv91skn8g5yupu7b1rw.png" alt="Image description" width="800" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In my dev.to article &lt;a href="https://dev.to/weder96/15-tips-to-become-a-java-expert-1acj"&gt;15 Tips to Become a Java Expert!&lt;/a&gt;, where I quote &lt;a href="https://dev.to/weder96/15-tips-to-become-a-java-expert-1acj#section-10"&gt;https://dev.to/weder96/15-tips-to-become-a-java-expert-1acj#section-10&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And we must understand how &lt;a href="https://mvnrepository.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;maven&lt;/strong&gt;&lt;/a&gt; or &lt;a href="https://gradle.org/" rel="noopener noreferrer"&gt;&lt;strong&gt;gradle&lt;/strong&gt;&lt;/a&gt; works, I always found the maven settings easier (xml) and with a community more active in helping, but there are many good articles about gradle(json).&lt;/p&gt;

&lt;p&gt;I always put &lt;a href="https://projectlombok.org/" rel="noopener noreferrer"&gt;lombok&lt;/a&gt; in my projects because it facilitates code generation issues (Getter. Setter, ToString, Slf4j, Builder) among others that will help you in several quick actions in addition to to leave the classes with only the necessary code (clean).&lt;/p&gt;

&lt;p&gt;The cool thing here at &lt;a href="https://start.spring.io/" rel="noopener noreferrer"&gt;https://start.spring.io/&lt;/a&gt; is that I just check the boxes and look for the libs I want and click on the &lt;strong&gt;Generate&lt;/strong&gt; button and as if by magic your project is ready and configured for your business logic to be developed.&lt;/p&gt;

&lt;p&gt;In the next step you can import this project to develop it in your preferred IDE example &lt;a href="https://www.eclipse.org/downloads/" rel="noopener noreferrer"&gt;Eclipse&lt;/a&gt;, &lt;a href="https://netbeans.apache.org/" rel="noopener noreferrer"&gt;Netbeans&lt;/a&gt; or &lt;a href="https://www.jetbrains.com/idea/download/#section=linux" rel="noopener noreferrer"&gt;IntelliJ&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;And you, which IDE do you prefer?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I've already used all the 3 mentioned above, but on a day-to-day basis &lt;strong&gt;Intellij&lt;/strong&gt; gains space in organizations, so currently I only use the same one and I always like to validate how &lt;strong&gt;Eclipse&lt;/strong&gt; is doing, which in many companies use in development.&lt;/p&gt;

&lt;p&gt;After this theoretical part, which I'm not a fan of a lot of small talk either, I like to get my hands dirty.&lt;/p&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;8. What's the best way to learn Spring Boot a new framework?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;This question at the beginning of my quest for knowledge on the subject was book certainty.&lt;/p&gt;

&lt;p&gt;Well, I'm a big fan of books unconditionally, because they show you a little bit of not only what you're learning, but the author's experience.&lt;/p&gt;

&lt;p&gt;However, with the large number of online courses, I was divided and I always have to analyze it, as there is a course with a higher degree of learning and in most cases it becomes a better choice.&lt;/p&gt;

&lt;p&gt;They are more interactive and you learn a lot of things in a very short time. They are also very cheap nowadays, another reason that is very relevant, even knowing that it is not an expense, it is an investment.&lt;/p&gt;

&lt;p&gt;Some of these Spring Boot courses are spread across various places like Udemy and cost little compared to the content, by the way, if you're still a bookworm like me, here's a list.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;01. Spring Boot in Action (Craig Walls)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjaewz5k0mr1zl4w3tzqs.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjaewz5k0mr1zl4w3tzqs.jpg" alt="Image description" width="800" height="962"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.amazon.com.br/Spring-Boot-Action-Craig-Walls/dp/1617292540" rel="noopener noreferrer"&gt;Spring-Boot-Action-Craig-Walls&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;02. Beginning Spring Boot 2 Applications and Microservices with the Spring Framework&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz05yj08qmrzdqn8wdw9x.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz05yj08qmrzdqn8wdw9x.jpg" alt="Image description" width="800" height="1101"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.amazon.com.br/Pro-Spring-Boot-Authoritative-Microservices/dp/1484236750/ref=sr_1_2?__mk_pt_BR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&amp;amp;keywords=Beginning+Spring+Boot+2+Applications+and+Microservices+with+the+Spring+Framework&amp;amp;qid=1672235731&amp;amp;s=books&amp;amp;sr=1-2&amp;amp;ufe=app_do%3Aamzn1.fos.6121c6c4-c969-43ae-92f7-cc248fc6181d" rel="noopener noreferrer"&gt;BeginningSpring2&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;03. Spring Boot 2.0 Projects Build production-grade reactive applications and microservices with Spring Boot&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq7gwvsvxr1j633lw1pfg.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq7gwvsvxr1j633lw1pfg.jpg" alt="Image description" width="800" height="1038"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.amazon.com.br/Spring-Projects-Mohamed-Shazin-Sadakath/dp/1789136156/ref=sr_1_1?__mk_pt_BR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&amp;amp;crid=1BCLKVRTO3XJC&amp;amp;keywords=Spring+Boot+2.0+Projects&amp;amp;qid=1672235968&amp;amp;s=books&amp;amp;sprefix=spring+boot+2.0+projects%2Cstripbooks%2C273&amp;amp;sr=1-1&amp;amp;ufe=app_do%3Aamzn1.fos.e05b01e0-91a7-477e-a514-15a32325a6d6" rel="noopener noreferrer"&gt;Spring Boot 2.0 Projects Build&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Pro Spring Boot 2 An Authoritative Guide to Building Microservices, Web and Enterprise Applications, and Best Practices Second Edition&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9608ww8nykn28a3r4cuf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9608ww8nykn28a3r4cuf.jpg" alt="Image description" width="800" height="1253"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.amazon.com.br/Pro-Spring-Boot-Authoritative-Microservices/dp/1484236750/ref=sr_1_2?__mk_pt_BR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&amp;amp;keywords=Beginning+Spring+Boot+2+Applications+and+Microservices+with+the+Spring+Framework&amp;amp;qid=1672235731&amp;amp;s=books&amp;amp;sr=1-2&amp;amp;ufe=app_do%3Aamzn1.fos.6121c6c4-c969-43ae-92f7-cc248fc6181d" rel="noopener noreferrer"&gt;Pro Spring Boot 2&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Learning Spring Boot 2.0 Greg L. Turnquist&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv2sliwx0v1y1wadv5i6r.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv2sliwx0v1y1wadv5i6r.jpg" alt="Image description" width="800" height="1030"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.amazon.com.br/Learning-Spring-Boot-Greg-Turnquist/dp/1786463784/ref=sr_1_1?__mk_pt_BR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&amp;amp;crid=3I8DYUSED94ET&amp;amp;keywords=Learning+Spring+Boot+2.0&amp;amp;qid=1672236020&amp;amp;s=books&amp;amp;sprefix=learning+spring+boot+2.0%2Cstripbooks%2C217&amp;amp;sr=1-1&amp;amp;ufe=app_do%3Aamzn1.fos.e05b01e0-91a7-477e-a514-15a32325a6d6" rel="noopener noreferrer"&gt;Learning Spring Boot 2.0&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each has lots of quality content.&lt;/p&gt;

&lt;p&gt;YouTube already has good and free courses like &lt;a href="https://www.youtube.com/watch?v=9SGDpanrc8U" rel="noopener noreferrer"&gt;Spring Boot Tutorial | Full Course&lt;/a&gt;, this follows a more specific context and uses Intellij, demonstrates links and other tools to aid your understanding.&lt;/p&gt;

&lt;p&gt;Another one that draws attention &lt;a href="https://www.youtube.com/watch?v=msXL2oDexqw&amp;amp;list=PLqq-6Pq4lTTbx8p2oCgcAQGQyqN8XeA1x" rel="noopener noreferrer"&gt;Spring Boot Quick Start - Java Brains&lt;/a&gt;, this second one is very didactic, but doesn't focus well on layers (package) , but it gives you an idea of well-structured layered links.&lt;/p&gt;

&lt;p&gt;And at &lt;a href="https://www.udemy.com/courses/search/?src=ukw&amp;amp;q=Spring+boot" rel="noopener noreferrer"&gt;UDemy&lt;/a&gt;, here I leave a &lt;a href="https://medium.com/javarevisited/top-10-courses-to-learn-spring-boot-in-2020-best-of-lot-6ffce88a1b6e" rel="noopener noreferrer"&gt;Post-My Favorite Courses to Learn Spring Boot in 2022 — Best of Lot&lt;/a&gt; Very detailed Spring boot courses &lt;a href="https://www.udemy.com/courses/search/?src=ukw&amp;amp;q=Spring+boot" rel="noopener noreferrer"&gt;Udemy&lt;/a&gt;.&lt;/p&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;9. But do you recommend any course in Portuguese about Spring boot?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A free one and can be found on Youtube, are the DevDojo courses, the guys and no base are beasts, when it comes to distributing a free and quality course &lt;a href="https://www.youtube.com%20/watch?v=bCzsSXE4Jzg&amp;amp;list=PL62G310vn6nFBIxp6ZwGnm8xMcGE3VA5H" rel="noopener noreferrer"&gt;Spring Boot 2 Essentials&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now if you want the Course and are not worried about spending money, you have the best and most complete &lt;a href="https://cafe.algaworks.com/esr-matriculas-abertas-ago/" rel="noopener noreferrer"&gt;Algaworks Rest Specialist&lt;/a&gt; and The course is very strong, there are 25 modules that teach you all the content you need to be a specialist, I'm not advertising here, anyone who has taken the course knows that the cost benefit is worth it, because the course is very good.&lt;/p&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;10. Okay, we have books and courses, but what does the market really want from me as a high-level Developer?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;When I asked that question, a lot changed in my life, and thank God, a lot has changed for the better.&lt;/p&gt;

&lt;p&gt;I started looking for vacancies and seeing what was standard among them, both backEnd and FrontEnd, as I have skills within these areas.&lt;/p&gt;

&lt;p&gt;What caught our attention was that all the vacancies where the salaries were better and there were many people who spoke well of the contractors on &lt;a href="https://www.glassdoor.com.br/member/home/index.htm" rel="noopener noreferrer"&gt;&lt;strong&gt;Glassdoor&lt;/strong&gt;&lt;/a&gt;, I always wanted a Java developer, who knew messaging, who knew about microservices and their design patterns or new architectures aimed at microservices (Spring Cloud).&lt;/p&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;11. Another question will be that as much as he knew was enough, had he put his hand in the dough enough?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We will never be able to answer this question, as it always depends on the type and size of the project, but at that moment I could answer all the questions on the subject with agility and citing examples, as I had already done several POC (Proof of Concept), and I had already passed it on the website &lt;a href="https://microservices.io/" rel="noopener noreferrer"&gt;https://microservices.io/&lt;/a&gt; written by &lt;a href="https://www.oreilly.com/pub/au/2296" rel="noopener noreferrer"&gt;Chris Richardson&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;How I like a good book but the one by &lt;a href="https://www.oreilly.com/pub/au/2296" rel="noopener noreferrer"&gt;Chris Richardson&lt;/a&gt; with title &lt;a href="https://www.amazon.com.br/Microservice-Patterns-examples-Chris-Richardson/dp/1617294543" rel="noopener noreferrer"&gt;Microservices Patterns WITH EXAMPLES IN JAVA CHRIS R ICHARDSON&lt;/a&gt; is one of those pain and "no pain no gain" ones. in &lt;a href="https://github.com/weder96/demoJoinCommunity" rel="noopener noreferrer"&gt;Join Community 2022&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;I highlighted some of this point with the problems we have when leaving the monolith and migrating to a micro service, and we found that if software architecture is not side side by side with the developer, the problems can be catastrophic, and if you as a developer don't understand, there are also two who will be on a boat sailing aimlessly, and anywhere is! worth it, and what we see is that these guys always leave the boat (Job change).&lt;/p&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;12. Right, but what matters for the job market, you have to understand well about:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Object Orientation&lt;/strong&gt; (Pillars of OOP).&lt;/li&gt;
&lt;li&gt;Know the functions of each &lt;strong&gt;Design Patterns (creational, structural, behavioral)&lt;/strong&gt;, and how to use the main examples (&lt;strong&gt;Builder, Factory, Singleton, Adapter, Facade, Proxy, Observer, Chain of Responsibility, Strategy&lt;/strong&gt; ).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Collections&lt;/strong&gt; and the differences between &lt;strong&gt;list, stack, queue and maps&lt;/strong&gt;, remember here not only theory you must master the subject, know all the ways to browse, each type, and how to browse maps &lt;strong&gt;(ForEach, Entry, key, value)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Your ability to create a database (&lt;strong&gt;DDL&lt;/strong&gt;) and (&lt;strong&gt;SQL&lt;/strong&gt;), most of the time just understand the question about the relationship between entities.&lt;/li&gt;
&lt;li&gt;Main, your &lt;strong&gt;ability to solve problems, simple, complex&lt;/strong&gt; or until that moment &lt;strong&gt;almost impossible&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Show, but so far and only work with Java and Database, being primordial, but in the labor market (Java - BackEnd) and a little more is needed, and this little bit is directed to the characteristics of who &lt;strong&gt;"DOMINAS"&lt;/strong&gt; o Springboot.&lt;/p&gt;

&lt;p&gt;To master the knowledge about Spring boot the first and main, and to know how the Spring that is behind, works and starts with what is IOC (Inversion of Control), (ID - Dependency Injection) and what is a &lt;a href="https://medium.com/@decioluckow/explorando-bean-spring-ioc-e640c53d29a9" rel="noopener noreferrer"&gt;@Bean&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;When I say dominate &lt;a href="https://www.baeldung.com/inversion-control-and-dependency-injection-in-spring" rel="noopener noreferrer"&gt;IoC Container(Inversion of Control)&lt;/a&gt;, and &lt;a href="//https://%20www.baeldung.com/inversion-control-and-dependency-injection-in-spring"&gt;ID - Dependency Injection&lt;/a&gt; And having the science of using these in a project, and not just using Spring using some tutorials or already getting a ready-made project. But how do I know if I understand, to know answer the question below.&lt;/p&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;13. If you didn't have Spring, how would you use this concept (IoC and ID)?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Well, when you master the Life Cycle and understand that a Bean is a Singleton and how to &lt;a href="https://www.baeldung.com/spring-show-all-beans" rel="noopener noreferrer"&gt;list my application's Beans&lt;/a&gt;, then you understand how to use spring annotations.&lt;/p&gt;

&lt;p&gt;Since we quoted &lt;strong&gt;annotations&lt;/strong&gt; you should understand all the main &lt;strong&gt;annotations&lt;/strong&gt; of Spring, below a listing:&lt;/p&gt;

&lt;p&gt;@Autowired &lt;br&gt;
&lt;a class="mentioned-user" href="https://dev.to/bean"&gt;@bean&lt;/a&gt;&lt;br&gt;
@Component&lt;br&gt;
@ComponentScan &lt;br&gt;
@Configuration &lt;br&gt;
@ConfigurationProperties&lt;br&gt;
@CookieValue &lt;br&gt;
@CrossOrigin &lt;br&gt;
@DeleteMapping &lt;br&gt;
@EnableAutoConfiguration&lt;br&gt;
@GetMapping &lt;br&gt;
&lt;a class="mentioned-user" href="https://dev.to/lazy"&gt;@lazy&lt;/a&gt; &lt;br&gt;
@PathVariable&lt;br&gt;
&lt;a class="mentioned-user" href="https://dev.to/primary"&gt;@primary&lt;/a&gt; &lt;br&gt;
@PostMapping &lt;br&gt;
&lt;a class="mentioned-user" href="https://dev.to/profile"&gt;@profile&lt;/a&gt; &lt;br&gt;
@PropertySource &lt;br&gt;
@PropertySources &lt;br&gt;
@PutMapping &lt;br&gt;
@Qualifier &lt;br&gt;
@Required &lt;br&gt;
@RestController/@Controller&lt;br&gt;
@Repository &lt;br&gt;
@RequestBody &lt;br&gt;
@RequestMapping&lt;br&gt;
@RequestParam &lt;br&gt;
&lt;a class="mentioned-user" href="https://dev.to/scope"&gt;@scope&lt;/a&gt;&lt;br&gt;
@Service&lt;br&gt;
@SpringBootApplication&lt;br&gt;
@Value &lt;/p&gt;

&lt;p&gt;This article has a &lt;a href="https://github.com/weder96/spring-boot-annotation-tips" rel="noopener noreferrer"&gt;github repository&lt;/a&gt;, where you can find a project whose function is to centralize the use of spring boot annotations, and their benefits , remembering that this project is in a continuous phase of studies and will be updated, with other questions and can be of help to understand the Spring Boot annotations.&lt;/p&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;14. How to study this much Spring Annotation?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We should always look for the first one, which is the &lt;a href="https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#getting-started" rel="noopener noreferrer"&gt;Official Documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But there are people who already like it and see how many questions and answers there are about &lt;a href="https://stackoverflow.com/search?q=spring+boot" rel="noopener noreferrer"&gt;Framework SpringBoot&lt;/a&gt; on Stackoverflow (at the date of this article it had 156,175 results), but why search on Stackoverflow?&lt;/p&gt;

&lt;p&gt;The issue here is that many seek how the community is in tune with the Framework, or if it is active in helping with problems that may happen.&lt;/p&gt;

&lt;p&gt;Spring itself has a &lt;a href="https://github.com/spring-projects/spring-boot" rel="noopener noreferrer"&gt;github&lt;/a&gt;, with projects &lt;a href="https://github.com/spring-projects/spring-boot/tree/main/spring-boot-project" rel="noopener noreferrer"&gt;templates&lt;/a&gt;, which can help you solve some challenges along the way.&lt;/p&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;15. But is there any material just about the annotations?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;There is a YouTube channel by &lt;a href="https://www.youtube.com/watch?v=Pd5tr483No0" rel="noopener noreferrer"&gt;Michelli Brito&lt;/a&gt;, which can help you understand all these Spring boot notes, ok, this one is in Portuguese.&lt;/p&gt;

&lt;p&gt;Don't be sad, our friend &lt;a href="https://www.youtube.com/watch?v=htyq-mER0AE&amp;amp;t=927s" rel="noopener noreferrer"&gt;Java Techie&lt;/a&gt; who never disappoints his followers brings 40+ notes, and explains their use.&lt;/p&gt;

&lt;p&gt;I recommend that the annotation &lt;a href="https://www.baeldung.com/transaction-configuration-with-jpa-and-spring" rel="noopener noreferrer"&gt;@Transactional&lt;/a&gt;, be studied separately, as it has some very relevant and specific issues, in terms of commit, rollback between points that refers to the persistence of objects.&lt;/p&gt;

&lt;p&gt;Now after understanding all this crazy business, let's test your skills in breaking an application's behavior into layers, Oh cool, below is a model. I said model.&lt;/p&gt;

&lt;p&gt;Remember we don't dictate rules just one possibility, you and the architect of your application know the same, you define what you think is right, even if others say the opposite and most of the time we will get into discussions like (Batman defeats Superman ) or (Creating a dev course costs more (money) than developing something) , if you have prepared this &lt;a href="https://github.com/pilhacheia/tretadev/issues?page=2&amp;amp;q=is%3Aissue+is%3Aopen" rel="noopener noreferrer"&gt;github&lt;/a&gt;, has dozens of these "set the playground on fire" questions.&lt;/p&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;16. But how do I separate the packages (package) of a Spring Boot project?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbllh9t8o4cibsnjuluf3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbllh9t8o4cibsnjuluf3.png" alt="Image description" width="348" height="502"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The image above is just a model, which can help you understand how to make a CRUD, you must create the first one, the border in our case will always be &lt;strong&gt;controller&lt;/strong&gt;, here are your methods of GET, POST, PUT , DELETE and PATCH.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;entity&lt;/strong&gt; or &lt;strong&gt;domain&lt;/strong&gt; is where we place our classes that represent a table in our database.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;service&lt;/strong&gt; and &lt;strong&gt;serviceImpl&lt;/strong&gt; have a very specific function the first and an interface the second and a concrete class that implements your interface, here you put the business rules.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;repository&lt;/strong&gt;, keep the direct connection with the database, here you make your queries, remember the mapping is inside the &lt;strong&gt;entity&lt;/strong&gt;, but in the repository that the queries are created.&lt;/p&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;17. But why do you have a package with dto?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;What an excellent question, we must protect our entities, to avoid some security problems and also transfer only the necessary objects that we are looking for via DAO (Data Access Object) so we created DTO (Data Transport Object), to create means to adapt and map our entity in dtos or unlike dtos in entities, here are two libs that you need to know about &lt;a href="https://mapstruct.org/" rel="noopener noreferrer"&gt;Mapstruct&lt;/a&gt; and &lt;a href="http://modelmapper.org/" rel="noopener noreferrer"&gt;ModelMapper&lt;/a&gt;.&lt;/p&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;18. Right, but speaking of database like Spring Boot, can you help us?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;you must add the dependency in the pom.xml&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;spring-boot-starter-data-jpa&amp;lt;/artifactId&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In case I'm using PostgreSQL I have to add it too&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.postgresql&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;postgresql&amp;lt;/artifactId&amp;gt;
    &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and inside your application.properties&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;######## Database Configuration #########
spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
spring.datasource.username=postgres
spring.datasource.password=postgres

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In my github there is a project &lt;a href="https://github.com/weder96/spring-boot-jpa-demo-java19" rel="noopener noreferrer"&gt;spring-boot-jpa-demo-java19&lt;/a&gt;, teaching how to upload a database in postgreSQL, docker, besides to use migrations.&lt;/p&gt;

&lt;p&gt;We should also highlight that here it is necessary to have a knowledge of mapping entities and their relationships (OneToMany, ManyToOne, ManyToMany, OneToOne) and how to do this unidirectional or bidirectional mapping.&lt;/p&gt;

&lt;p&gt;You must also understand about DataSource, because at times you will be working with two connections and it will be necessary to know which one will be manipulated at each moment.&lt;/p&gt;

&lt;p&gt;In many more complex cases it is necessary to use queries with Criterion API.&lt;/p&gt;

&lt;p&gt;The more difficult cases to handle, when creating a composite PK (Primary Key), in this case you will need to create a class specialized in manipulating this PK, being necessary to understand about mapping embeddable classes with &lt;strong&gt;@Embedded and &lt;a class="mentioned-user" href="https://dev.to/embeddable"&gt;@embeddable&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Another point and understanding Eager Loading and Lazy Loading, as these fetching strategies for Lazy Loading or Eager Loading can return different data.&lt;/p&gt;

&lt;p&gt;The need to use &lt;strong&gt;Connection Pools&lt;/strong&gt; as it works, you will need to use &lt;strong&gt;Hikari&lt;/strong&gt; which in turn is the default connection pool solution in Spring Boot.&lt;/p&gt;

&lt;p&gt;The famous data migrations to the database, because in some moments we will be working with complex migrations and data relocation.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;19. Creating a CRUD&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Right now after studying and time for the POC (Proof of Concept), it's always good to create one, so here's that tip that everyone has to do the famous CRUD.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;C - Create&lt;/strong&gt; -&amp;gt; Create an object via Controller(&lt;strong&gt;POST&lt;/strong&gt;), passing through the service and using the &lt;strong&gt;save&lt;/strong&gt; method of your &lt;strong&gt;Repository&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;R - Read&lt;/strong&gt; -&amp;gt; List the data via Controller(&lt;strong&gt;GET&lt;/strong&gt;), passing through the service and using the &lt;strong&gt;findAll&lt;/strong&gt; method of your &lt;strong&gt;Repository&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;U - Update&lt;/strong&gt; -&amp;gt; Change an object via Controller(&lt;strong&gt;PUT&lt;/strong&gt;), going through the service and using the &lt;strong&gt;save&lt;/strong&gt; method of your &lt;strong&gt;Repository&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;D - Delete&lt;/strong&gt; -&amp;gt; delete an Object via Controller(&lt;strong&gt;DELETE&lt;/strong&gt;) , passing through the service and using the &lt;strong&gt;delete&lt;/strong&gt; method of your &lt;strong&gt;Repository&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/weder96/crudApiJava" rel="noopener noreferrer"&gt;Sample Crud with Java&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In the Controllers layer, it is necessary to understand how Http and its verbs work (GET, POST, PUT, DELETE, PATCH), and how @RequestBody, @RequestMapping, @RequestParam, @PathVariable among others that tran=balham works in this layer.&lt;/p&gt;

&lt;p&gt;Here we have to take a close look at some questions &lt;a href="https://spring.io/guides/gs/rest-service-cors/" rel="noopener noreferrer"&gt;CORS(Cross Origin Requests)&lt;/a&gt;, understand how HTTP caching works, know how to enable the cache with the Cache-Control header and the max-age directive.&lt;/p&gt;

&lt;p&gt;The queries can be done with NativeQuery, but it is not indicated so you will have to learn how JPQL (Java Persistence Query Language) works, which already have the main queries and commands ready to be used, and your SQL that you can use together @ Query and remember that you can also customize the Repository, to create queries, using it.&lt;/p&gt;

&lt;p&gt;When dealing with CRUD an important point is that you know how to create DTOs not only using frameworks like &lt;a href="https://mapstruct.org/" rel="noopener noreferrer"&gt;Mapstruct&lt;/a&gt; and &lt;a href="http://modelmapper.org/" rel="noopener noreferrer"&gt;ModelMapper&lt;/a&gt;, but how to initialize a DTO using the query itself and also when necessary to create a RespositoryCustom, and understand about JPQL.&lt;/p&gt;

&lt;p&gt;There's a &lt;a href="https://www.baeldung.com/learn-jpa-hibernate" rel="noopener noreferrer"&gt;baeldung&lt;/a&gt; page, which shows you a pretty cool path in this case:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Defining Entities&lt;/li&gt;
&lt;li&gt;Entity Relationships&lt;/li&gt;
&lt;li&gt;Identifiers&lt;/li&gt;
&lt;li&gt;Read Operations&lt;/li&gt;
&lt;li&gt;Pagination and Sorting&lt;/li&gt;
&lt;li&gt;Query Results&lt;/li&gt;
&lt;li&gt;Write Operations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Okay, but there is no top course that is worth the investment, I am not advertising again, but &lt;a href="https://cafe.algaworks.com/ejpa-conteudo/?gclid=cjwkcaiazkqdbhaneiwaepejklzvquivquioo_l3g_ydo1egsey7" rel="noopener noreferrer"&gt;Expert JPA&lt;/a&gt; it is a complete course and you will have a deep knowledge about how to work with JPA(Java Persistence API).&lt;/p&gt;

&lt;p&gt;Here it is good to point out that in some cases you create &lt;a href="https://www.baeldung.com/database-auditing-jpa" rel="noopener noreferrer"&gt;audit in a table&lt;/a&gt;, before changing or deleting information from your database.&lt;/p&gt;

&lt;p&gt;At this point there are some @Annotations, which should be understood:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@EnableJpaAuditing
@PrePersist
@PreUpdate
@PreRemove
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  &lt;strong&gt;20. Have you already created and know how to create an @annotation in Java ?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Important note&lt;/em&gt;&lt;/strong&gt; :&lt;/p&gt;

&lt;p&gt;If your answer is no, it's ok, but the time has come to learn to understand.&lt;/p&gt;

&lt;p&gt;At &lt;a href=""&gt;Baeldung&lt;/a&gt; there is a nice article &lt;a href="https://www.baeldung.com/java-custom-annotation" rel="noopener noreferrer"&gt;Creating a Custom Annotation in Java&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;That's what I like and video lessons, yes, &lt;a href="https://www.youtube.com/watch?v=DkZr7_c9ry8" rel="noopener noreferrer"&gt;coding with John&lt;/a&gt;, there's a very didactic video on the subject.&lt;/p&gt;

&lt;p&gt;But I like the video with &lt;a href="https://www.youtube.com/watch?v=P5sAaFY3O2w&amp;amp;t=741s" rel="noopener noreferrer"&gt;Java Techie&lt;/a&gt;, he has it too.&lt;/p&gt;

&lt;p&gt;Ok, but I'm not good at English, I get lost in some scenes so let's go from &lt;a href="https://www.youtube.com/watch?v=r86URVdRWpY" rel="noopener noreferrer"&gt;O8K Group&lt;/a&gt;, it explains very well.&lt;/p&gt;




&lt;p&gt;This article is divided into 4 parts:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/weder96/spring-boot-everything-you-need-to-know-and-what-nobody-told-you-o4j"&gt;Spring Boot: Everything you need to know, and what nobody told you. #Part01&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/weder96/how-to-start-learning-spring-boot-4df"&gt;Spring Boot: Everything you need to know, and what nobody told you. #Part02&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/weder96/questions-about-microservices-and-asynchronous-services-rabbit-kafka-sqs-4j12"&gt;Spring Boot: Everything you need to know, and what nobody told you. #Part03&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/weder96/exception-handling-spring-security-exceptions-and-validations-upload-download-test-and-deploy-cloud-3ili"&gt;Spring Boot: Everything you need to know, and what nobody told you.#Part04&lt;/a&gt;&lt;/p&gt;

</description>
      <category>promptengineering</category>
      <category>api</category>
      <category>automation</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Spring Boot: Everything you need to know, and what nobody told you. Part I</title>
      <dc:creator>Weder Sousa</dc:creator>
      <pubDate>Thu, 12 Jan 2023 00:05:46 +0000</pubDate>
      <link>https://dev.to/weder96/spring-boot-everything-you-need-to-know-and-what-nobody-told-you-o4j</link>
      <guid>https://dev.to/weder96/spring-boot-everything-you-need-to-know-and-what-nobody-told-you-o4j</guid>
      <description>&lt;p&gt;For all those who seek to solidify a career in application development using Java, they should also seek all knowledge in OOP (Object Oriented Programming), as I mentioned in my article &lt;a href="https://dev.to/weder96/15-tips-to-become-a-java-expert-1acj"&gt;15 Tips to Become a Java Expert!&lt;/a&gt;, in the tip of learning a framework/lib, we must develop on other fronts that will support us in our career as a developer .&lt;/p&gt;

&lt;p&gt;In the early days of application development using Java, it is known that the process of configuring development environments was a complex, boring and time-consuming moment.&lt;/p&gt;

&lt;p&gt;But, over time, tools were created that had these functions configured and fell in love with developers, and the one that is most used in gigantic environments or even for small projects, this framework is called &lt;strong&gt;Spring Boot&lt;/strong&gt; by Pivotal, it is It's possible to make our life a lot easier, a lot, lol.&lt;/p&gt;

&lt;p&gt;Those of us who are part of a team of developers know that the time to finish our activities is short and of a lot of responsibility, and you can't waste time configuring a project instead of developing it, so in this article we'll go through the points you should know of this Framework, in addition to tips on best practices in its use.&lt;/p&gt;

&lt;p&gt;Our mission here is to try to help you understand SpringBoot, to help you simplify the development of applications (Java), reducing the amount of configurations and optimizations, but remember not to reset the configurations, because they exist, but today we configure an application at a speed that 10 years ago was unthinkable.&lt;/p&gt;

&lt;p&gt;In this article we will cover the following order to master the &lt;strong&gt;Spring Boot&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;This article is divided into 4 parts:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/weder96/how-to-start-learning-spring-boot-4df"&gt;Spring Boot: Everything you need to know, and what nobody told you. #Part02&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/weder96/questions-about-microservices-and-asynchronous-services-rabbit-kafka-sqs-4j12"&gt;Spring Boot: Everything you need to know, and what nobody told you. #Part03&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/weder96/exception-handling-spring-security-exceptions-and-validations-upload-download-test-and-deploy-cloud-3ili"&gt;Spring Boot: Everything you need to know, and what nobody told you.#Part04&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here we will start with Theory, on:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. What is Spring&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;2. What is Spring Boot?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;3. The Spring Components&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;4. Spring Boot Starter&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;5. Spring Boot AutoConfigurator&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;6. Spring Boot Actuator&lt;/strong&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;1. What is Spring&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Spring is a Java framework that was created with the aim of facilitating the development of applications, using the concepts of Inversion of Control and Dependency Injection. Inside it, there's Spring MVC and Core Technologies (it's the base of Spring, inside it's the dependency injection package).&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;2. What is Spring Boot?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Spring Boot is a framework that was born from Spring (MVC), a framework developed for the Java platform based on design patterns, IOC (inversion of control) and ID (dependency injection), both of which are standards for project that helps a lot to leave the code uncoupled.&lt;/p&gt;

&lt;p&gt;Spring framework was created to &lt;strong&gt;simplify&lt;/strong&gt; the &lt;strong&gt;configurations&lt;/strong&gt; for web applications, however you still configured a lot of xml files, which did not manage to meet your objective, but which already helped you in great situations, in addition to the project, come out with your layers well defined.&lt;/p&gt;

&lt;p&gt;Therefore, a new project was added to the framework to change this game and abstract all the complexity that a complete configuration can bring: &lt;strong&gt;O Spring Boot&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So &lt;strong&gt;Spring Boot 1.0&lt;/strong&gt; was released in &lt;strong&gt;April 2014&lt;/strong&gt;. The &lt;strong&gt;Spring Framework 4.2.0&lt;/strong&gt;, in this simpler and more direct development model, this framework was decisive for the use of the &lt;strong&gt;Spring ecosystem to become the darling of Programmers&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But what does it deliver that made it grow so much?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It provides most of the components needed in general applications in a pre-configured way, enabling an application running in production quickly, reducing the configuration and deployment effort, being already coupled to the tomcat Application server.&lt;/p&gt;

&lt;p&gt;In short, Spring Boot is a pre-configured template for developing and running Spring-based applications.&lt;/p&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;3. The Spring Components&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://spring.io/projects/spring-boot" rel="noopener noreferrer"&gt;spring-boot&lt;/a&gt;, at the time of writing this article, is in version 3.0.1, and it is part of other &lt;a href="https://spring.io/projects" rel="noopener noreferrer"&gt;spring. io&lt;/a&gt; with about 23 libs that help you build your applications:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://spring.io/projects/spring-boot" rel="noopener noreferrer"&gt;Spring Boot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://spring.io/projects/spring-framework" rel="noopener noreferrer"&gt;Spring Framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://spring.io/projects/spring-data" rel="noopener noreferrer"&gt;Spring Data&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://spring.io/projects/spring-cloud" rel="noopener noreferrer"&gt;Spring Cloud&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://spring.io/projects/spring-cloud-dataflow" rel="noopener noreferrer"&gt;Spring Cloud Data Flow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://spring.io/projects/spring-security" rel="noopener noreferrer"&gt;Spring Security&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://spring.io/projects/spring-graphql" rel="noopener noreferrer"&gt;Spring for GraphQL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://spring.io/projects/spring-session" rel="noopener noreferrer"&gt;Spring Session&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://spring.io/projects/spring-integration" rel="noopener noreferrer"&gt;Spring Integration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://spring.io/projects/spring-hateoas" rel="noopener noreferrer"&gt;Spring HATEOAS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://spring.io/projects/spring-restdocs" rel="noopener noreferrer"&gt;Spring REST Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://spring.io/projects/spring-batch" rel="noopener noreferrer"&gt;Spring Batch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://spring.io/projects/spring-amqp" rel="noopener noreferrer"&gt;Spring AMQP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://spring.io/projects/spring-credhub" rel="noopener noreferrer"&gt;Spring CredHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://spring.io/projects/spring-flo" rel="noopener noreferrer"&gt;Spring Flo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://spring.io/projects/spring-kafka" rel="noopener noreferrer"&gt;Spring for Apache Kafka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://spring.io/projects/spring-ldap" rel="noopener noreferrer"&gt;Spring LDAP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://spring.io/projects/spring-shell" rel="noopener noreferrer"&gt;Spring Shell&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://spring.io/projects/spring-statemachine" rel="noopener noreferrer"&gt;Spring Statemachine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://spring.io/projects/spring-vault" rel="noopener noreferrer"&gt;Spring Vault&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://spring.io/projects/spring-webflow" rel="noopener noreferrer"&gt;Spring Web Flow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://spring.io/projects/spring-ws" rel="noopener noreferrer"&gt;Spring Web Services&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;But with that many libs, how can I identify what I should understand first?&lt;/em&gt;*&lt;/p&gt;

&lt;p&gt;Let's divide this first part into 3 fragments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Spring Boot Starter&lt;/li&gt;
&lt;li&gt;Spring Boot AutoConfigurator&lt;/li&gt;
&lt;li&gt;Spring Boot Actuator&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;4. Spring Boot Starter&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;When we create an application we want to provide access to this application so we develop REST services; that we are currently using behind libs like Spring MVC, Tomcat and Jackson among many other dependencies for a single application.&lt;/p&gt;

&lt;p&gt;So Spring Boot to help us decrease the number of manually added dependencies just by adding a dependency. Therefore, instead of manually specifying the dependencies, it is only necessary to add the following lib to our pom.xml:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;dependency&amp;gt;
     &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
     &amp;lt;artifactId&amp;gt;spring-boot-starter-web&amp;lt;/artifactId&amp;gt;
&amp;lt;/dependency&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you run the maven command below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mvn dependency:tree
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Result:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm7f2tjap1lhgci9oct5e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm7f2tjap1lhgci9oct5e.png" alt="Image description" width="800" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This command shows us all the dependencies of a lib:&lt;br&gt;
in the case each level shows if it has other internal dependencies or not, in the first level we have:&lt;/p&gt;

&lt;p&gt;org.springframework.boot:spring-boot-starter-json&lt;br&gt;
org.springframework.boot:spring-boot-starter-tomcat&lt;br&gt;
org.springframework:spring-web&lt;/p&gt;

&lt;p&gt;As seen when running the command, Springboot's function is to combine the various dependencies arising from a Spring Boot project into a single dependency, eliminating the need to configure multiple dependencies in Maven or Gradle.&lt;/p&gt;

&lt;p&gt;We noticed that if we had to add one by one this process would be very laborious. Therefore, Spring Boot uses starters in order to significantly decrease it.&lt;/p&gt;

&lt;p&gt;Remember that this lib is the one that enables you to create controllers to use the annotations that we'll see later.&lt;/p&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;5. Spring Boot AutoConfigurator&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Spring Boot autoconfiguration attempts to automatically configure your Spring application based on the jar dependencies you have added.&lt;/p&gt;

&lt;p&gt;For example, if HSQLDB is in your classpath and you haven't manually configured any database connection beans, Spring Boot will automatically configure an in-memory database.&lt;/p&gt;

&lt;p&gt;You need to opt-in to automatic configuration by adding @EnableAutoConfiguration or @SpringBootApplication annotations to one of your @Configuration classes.&lt;/p&gt;

&lt;p&gt;Yes, but all the settings are in the &lt;a href="https://docs.spring.io/spring-boot/docs/2.0.x/reference/html/using-boot-auto-configuration.html#:~:%20text=Spring%20Boot%20auto%2Dconfiguration%20attempts,configures%20an%20in%2Dmemory%20database." rel="noopener noreferrer"&gt;official documentation&lt;/a&gt;, about this process.&lt;/p&gt;

&lt;p&gt;It is responsible for managing the configuration process of a Spring Boot application, providing default settings and merging them with possible custom settings, you can create annotated classes that configure some function of your application.&lt;/p&gt;

&lt;p&gt;In a Spring Boot application, the AutoConfigurator can be seen using the traditional @SpringBootApplication annotation, which is above the application's initialization method.&lt;/p&gt;

&lt;p&gt;Internally, the aSpringBootApplication annotation is a combination of Spring's traditional @Configuration, @ComponentScan, and @EnableAutoConfiguration annotations.&lt;/p&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;6. Spring Boot Actuator&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The Spring Boot Actuator, it provides us with endpoints that make it easier to obtain metrics from our application.&lt;/p&gt;

&lt;p&gt;When configuring maven with the dependency below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;dependency&amp;gt;
     &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
     &amp;lt;artifactId&amp;gt;spring-boot-starter-actuator&amp;lt;/artifactId&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Spring Boot AutoConfigurator defines that the web server should be exposed on localhost on port 8080, but you can redefine this port. But who makes the provision of this configuration on the web server is the Actuator.&lt;/p&gt;

&lt;p&gt;In my github there is a project &lt;a href="https://github.com/weder96/SpringBootActuatorPrometheus" rel="noopener noreferrer"&gt;SpringBootActuatorPrometheus&lt;/a&gt; that teaches how to activate it and interconnect with Prometheus and Kibana, and visualize its graphs with micrometer metrics and spring boot Statistic.&lt;/p&gt;

&lt;p&gt;This article is divided into 4 parts:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/weder96/how-to-start-learning-spring-boot-4df"&gt;Spring Boot: Everything you need to know, and what nobody told you. #Part02&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/weder96/questions-about-microservices-and-asynchronous-services-rabbit-kafka-sqs-4j12"&gt;Spring Boot: Everything you need to know, and what nobody told you. #Part03&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/weder96/exception-handling-spring-security-exceptions-and-validations-upload-download-test-and-deploy-cloud-3ili"&gt;Spring Boot: Everything you need to know, and what nobody told you.#Part04&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
    </item>
    <item>
      <title>15 Tips to Become a Java Expert!</title>
      <dc:creator>Weder Sousa</dc:creator>
      <pubDate>Thu, 15 Dec 2022 15:52:32 +0000</pubDate>
      <link>https://dev.to/weder96/15-tips-to-become-a-java-expert-1acj</link>
      <guid>https://dev.to/weder96/15-tips-to-become-a-java-expert-1acj</guid>
      <description>&lt;h2&gt;
  
  
  Content
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt; Introduction &lt;/li&gt;
&lt;li&gt; 1. Study the basic concepts until you understand the whole basis of the language &lt;/li&gt;
&lt;li&gt; 2. Study, understand and practice, here is a loop, study, understand and practice &lt;/li&gt;
&lt;li&gt; 3. Study Java with a book, I said one &lt;/li&gt;
&lt;li&gt; 4. Learn design patterns, they have a lot to teach us &lt;/li&gt;
&lt;li&gt; 5. Understand generics like there's no tomorrow &lt;/li&gt;
&lt;li&gt; 6. Study collections, until you get to know the whole hierarchy and usage &lt;/li&gt;
&lt;li&gt; 7. Create your projects using java - hands-on &lt;/li&gt;
&lt;li&gt; 8. Go one more level in OOP, learn functional programming in Java &lt;/li&gt;
&lt;li&gt; 9. Learn concepts external to the language with architecture (monolithic and microservice) &lt;/li&gt;
&lt;li&gt; 10. Learn a Java framework/lib &lt;/li&gt;
&lt;li&gt; 11. Support someone who is starting &lt;/li&gt;
&lt;li&gt; 12. Learn Reactive Programming &lt;/li&gt;
&lt;li&gt; 13. Master S.O.L.I.D &lt;/li&gt;
&lt;li&gt; 14. Learn Unit Testing &lt;/li&gt;
&lt;li&gt; 15: Explore the Java programmers Github, there's always something to help you &lt;/li&gt;
&lt;li&gt; Conclusion &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;a id="section-00"&gt;&lt;/a&gt; &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;But why Java?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Java is a language that is already consolidated in the market and has comprehensive documentation, in addition to an active community, and with significant modifications for improvements and security.&lt;/p&gt;

&lt;p&gt;Since it has many developers one of the most used programming languages in the world.&lt;/p&gt;

&lt;p&gt;Because we find Java in different spheres of technology and development: &lt;strong&gt;FrontEnd, Back-End, Mobile, Cloud&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That's why we find so many job openings, whether here in Brazil or abroad, always looking for trained professionals who truly know how to program in Java (translation know Object Orientation and Java ecosystem).&lt;/p&gt;

&lt;p&gt;However, who arrives for the first time and looks at and thinks how to learn Java and still asks for help, some who could not learn Java (Object Orientation),&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;How can I become a Java expert?&lt;/em&gt;&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Is it Complex to learn?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Will I be able to understand Java in a short time?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Where to find good books and courses to become an excellent developer in Java?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Learning Object Orientation is hard?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Well, we will always have questions regarding these and many other questions, today we will try to answer them in this article with tips that helped us to become experts in Java and will certainly help those of you who took the time to read this article.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It's time, let's go!&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a id="section-01"&gt;&lt;/a&gt; &lt;strong&gt;1: Study the basics until you understand the basics of the language&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This tip is interesting, because we all know that, to learn any subject, we need to learn the &lt;strong&gt;basic concepts&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;However, a lot of people end up skipping this part that is so important, remember no matter how much you know a language or already program&lt;/p&gt;

&lt;p&gt;It is always necessary to study the concepts of the language and its &lt;strong&gt;reserved words&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The Study of a new programming language and as if we had to learn a new language (eg French, German, Russian).&lt;/p&gt;

&lt;p&gt;When we are going to learn a new language, we always try to learn basic things, like grammar, pronouns and nouns and adjectives for later, and put&lt;br&gt;
this part in practice, so we add this part to being able to learn more advanced things about that language, such as verb agreement, adverbs.&lt;/p&gt;

&lt;p&gt;It follows the same principle when we want to learn a &lt;strong&gt;new programming language&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It won't do any good to want to learn a new framework/lib in Java, be it: &lt;strong&gt;Spring, Springboot or Micronaut&lt;/strong&gt;, if we don't know the basis of Java (Object Orientation), it doesn't matter which language you want to learn follows the same principle 1. Study the basic concepts until you understand the whole basis of the language ).&lt;/p&gt;

&lt;p&gt;Never skip steps ever, learn and how to climb a ladder each step has its value, If we skip the basic concepts, we will not understand the main scope of the language and consequently, we will not continue with the studies, or we will have more technical difficulties in the next step .&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;But what are the basic concepts in Java?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It involves learning: &lt;strong&gt;variables, data types, functions, looping structures (for, for in, while)&lt;/strong&gt; — how and when to use each one, decision structures, local and global scopes, understanding data structure like &lt;strong&gt;array, list&lt;/strong&gt; and create known algorithms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;But, where can I find materials to learn these basic Java concepts?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A great place to learn about Java from basics to advanced is the official &lt;a href="https://docs.oracle.com/javase/tutorial/java/index.html" rel="noopener noreferrer"&gt;Oracle documentation&lt;/a&gt; official documentation, but not always it has the best didactics.&lt;/p&gt;

&lt;p&gt;But even with the documentation which contents to study there are many and I don't have the lists of this content, here comes a very&lt;br&gt;
cool &lt;a href="https://roadmap.sh/java" rel="noopener noreferrer"&gt;Java roadmap&lt;/a&gt;, it gives you, a structured model, with the content in order to study, both superficially and deeply.&lt;/p&gt;

&lt;p&gt;But the documentation is not in my native language! There's no way not to learn!&lt;/p&gt;

&lt;p&gt;Yes, but today we can translate the same via translate on the page itself, but there is a person who cannot learn by reading or does not enjoy reading,&lt;br&gt;
but prefer to learn by video, I recommend a &lt;a href="https://www.youtube.com/watch?v=AVpLMoTnwM8&amp;amp;list=PLBlnK6fEyqRjKA_NuK9mHmlk0dZzuP1P5&amp;amp;index=9" rel="noopener noreferrer"&gt;course&lt;/a&gt;, from Neso Academy. there is, but I speak Portuguese, don't you have one, in my language?&lt;/p&gt;

&lt;p&gt;In this case, I recommend 2 (two) &lt;a href="https://www.youtube.com/@DevDojoBrasil" rel="noopener noreferrer"&gt;DevDojo courses&lt;/a&gt; and &lt;a href="https://www.youtube.com/@loianegroner/playlists" rel="noopener noreferrer"&gt;Loiane Groner&lt;/a&gt;, excellent courses and this second one will provides the Certificate of Completion.&lt;/p&gt;

&lt;p&gt;Another point that is also nice to understand, but I still don't have a good machine to run java and install online compilers for you to test some&lt;br&gt;
basic concepts, one of which I like and use the most is &lt;a href="https://www.onlinegdb.com/online_java_compiler" rel="noopener noreferrer"&gt;onlinegdb&lt;/a&gt;, but there are other examples:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.jdoodle.com/online-java-compiler/" rel="noopener noreferrer"&gt;jdoodle&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.programiz.com/java-programming/online-compiler/" rel="noopener noreferrer"&gt;programiz&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a id="section-02"&gt;&lt;/a&gt; &lt;strong&gt;2: Study, understand and practice, here is a loop, Study, understand and practice&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The best way for you to become an expert in something, regardless of the area of expertise or the language you are studying, the best way to become an excellent professional and practicing a lot.&lt;/p&gt;

&lt;p&gt;But I already tried to learn Java and I couldn't, it's very complicated, what I saw most in my time as a Professor, teaching the art of programming, in several languages, Python, Javascript, Typescript and Java, was something simple, many had a mastery of logic, but when programming in Java it is not just mastering the logic and basic concepts about Java, you need to learn Object Orientation (OOP), many skip this step, and it is necessary to understand, concepts about &lt;strong&gt;class, inheritance, polymorphism, abstraction, Interfaces&lt;/strong&gt; .&lt;/p&gt;

&lt;p&gt;How to study and practice, today in the heated job market in the development area, companies are creating ways to train and seek talent even at the beginning of their journey, with bootcamps and also as trainers, so always be studying and taking courses and bootcamps and also sign up for company programs, because inside you will already be directed to a specialist who will help you in your professional growth.&lt;/p&gt;

&lt;p&gt;And do intensively &lt;a href="https://www.amazon.com.br/Design-Patterns-Object-Oriented-Addison-Wesley-Professional-ebook/dp/B000SEIBB8/ref=sr_1_1?__mk_pt_BR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&amp;amp;crid=1ZD7WUMUD1A8P&amp;amp;keywords=design+patterns+english&amp;amp;qid=1671106806&amp;amp;sprefix=design+patterns+english%2Caps%2C231&amp;amp;sr=8-1" rel="noopener noreferrer"&gt;Design Patterns: Elements of Reusable Object-Oriented Software (English Edition) &lt;/a&gt; , and its top 23.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fro3qmjn9b62whnuxaql1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fro3qmjn9b62whnuxaql1.jpg" alt="Image description" width="260" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The GoF Design Patterns are divided into three categories:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creational:&lt;/strong&gt; The design patterns that deal with the creation of an object.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structural:&lt;/strong&gt; Design patterns in this category deal with class structure such as Inheritance and Composition.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Behavioral:&lt;/strong&gt; This type of design pattern provides solution for better interaction between objects, such as providing loose coupling and flexibility to easily &lt;br&gt;
extend in the future.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Creational Design Patterns&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;There are 5 design patterns in the category of creational design patterns.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Singleton&lt;/strong&gt;: The singleton pattern restricts the initialization of a class to ensure that only one instance of the class can be created.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Factory&lt;/strong&gt;: The factory pattern shifts the responsibility of instantiating a class object to a Factory class.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Abstract Factory&lt;/strong&gt;: Allows you to create a Factory for factory classes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Builder&lt;/strong&gt;: Creating an object step by step and a method to finally get the object instance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prototype&lt;/strong&gt;: Create a new object instance from another similar instance and modify it according to our requirements.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Structural Design Patterns&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;There are 7 structural design patterns defined in the Gangs of Four design patterns book.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Adapter&lt;/strong&gt;: Provides an interface between two unrelated entities so that they can work together.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Composite&lt;/strong&gt;: Used when we have to implement a part-whole hierarchy. For example, a diagram made up of other parts like a circle, square, triangle, etc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Proxy&lt;/strong&gt;: Provide a placeholder or placeholder for another object to control access to it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flyweight&lt;/strong&gt;: Caching and reuse of object instances, used with immutable objects. For example, string pool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Facade&lt;/strong&gt;: Creating wrapper interfaces over existing interfaces to help client applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bridge&lt;/strong&gt;: The bridge design pattern is used to decouple interfaces from implementation and hide implementation details from the client program.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Decorator&lt;/strong&gt;: The decorator design pattern is used to modify the functionality of an object at runtime.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Behavioral Design Patterns&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;There are 11 behavioral design patterns defined in the GoF design patterns.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Template Method&lt;/strong&gt;: used to create a template method stub and defer some of the implementation steps to subclasses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mediator&lt;/strong&gt;: used to provide a centralized means of communication between different objects in a system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chain of Responsibility&lt;/strong&gt;: Used to achieve loose coupling in software design, where a customer request is passed to a chain of objects to process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Observer&lt;/strong&gt;: useful when you are interested in the state of an object and want to be notified whenever there is any change.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Strategy&lt;/strong&gt;: The Strategy pattern is used when we have multiple algorithms for a specific task and the client decides the actual implementation to use at runtime.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Command Command&lt;/strong&gt;: Pattern is used to implement loose coupling in a request-response model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;State&lt;/strong&gt;: The State design pattern is used when an object changes its behavior based on its internal state.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Visitor&lt;/strong&gt; The Visitor pattern is used when we have to perform an operation on a group of objects of similar type.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Interpreter&lt;/strong&gt;: Defines a grammatical representation for a language and provides an interpreter to handle that grammar.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Iterator&lt;/strong&gt;: Used to provide a standard way to iterate through a group of objects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Memento&lt;/strong&gt;: The memento design pattern is used when we want to save the state of an object so that we can restore it later.&lt;/p&gt;

&lt;p&gt;There are others, but they are creations that are not in the book, in my &lt;a href="https://github.com/weder96/javaaula21/tree/main/ProjectDesignPartners/src/main/java/Pack20DesignPatterns" rel="noopener noreferrer"&gt;github&lt;/a&gt; examples of their use and also I looked for other patterns in java.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a id="section-03"&gt;&lt;/a&gt; &lt;strong&gt;3: Study Java with a book, I said one&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Some people don't like to read books, it seems totally boring to them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;But, I prefer to study by a book on my first connection with the language, but why?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I feel better, because the author carries in the book a point of view and also a direct way that facilitated his learning, you can do something that I call shadow, which would be like imitating speech in a language course, here you will have the opportunity to imitate the way of programming the author of the book, understand a point of view that may or may not be similar to yours.&lt;/p&gt;

&lt;p&gt;Now comes the question which book to choose, this answer is again the answer I heard most in my programming times, it depends...&lt;/p&gt;

&lt;p&gt;Yes, but currently we have excellent books and several authors who have a didactics, excellent, I could leave a list here, but I will only pay attention to two, because they bring the java language in depth and very well written, but the two are a sequence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.amazon.com.br/Core-Java-I-Fundamentals-11th-Horstmann/dp/0135166306/ref=asc_df_0135166306/?tag=googleshopp00-20&amp;amp;linkCode=df0&amp;amp;hvadid=379787788238&amp;amp;hvpos=&amp;amp;hvnetw=g&amp;amp;hvrand=2590381206729414344&amp;amp;hvpone=&amp;amp;hvptwo=&amp;amp;hvqmt=&amp;amp;hvdev=c&amp;amp;hvdvcmdl=&amp;amp;hvlocint=&amp;amp;hvlocphy=1031430&amp;amp;hvtargid=pla-470975090044&amp;amp;psc=1" rel="noopener noreferrer"&gt;Core Java Volume I&lt;/a&gt; – Fundamentals Eleventh Edition (Cay S. Horstmann)&lt;/strong&gt; : this book is a show, it brings all the reasons and explains, step by step, you can go to chapter 10 and 11, kkkkk, where he explains the graphical interface, but if you want to work with a desktop, it's good to go deep in them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fad5bm26bu16szmmnbpxk.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fad5bm26bu16szmmnbpxk.jpg" width="382" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.amazon.com/Core-Java-II-Advanced-Features-Horstmann-ebook/dp/B07NCXJR1M/ref=sr_1_2?crid=JD55BZZP7T0R&amp;amp;keywords=Core+Java+Volume+II&amp;amp;qid=1671106663&amp;amp;s=books&amp;amp;sprefix=core+java+volume+ii%2Cstripbooks-intl-ship%2C212&amp;amp;sr=1-2" rel="noopener noreferrer"&gt;Core Java Volume II&lt;/a&gt; – Advanced Features Eleventh Edition (Cay S. Horstmann)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffmb6zu39oqm6rdw5c9uv.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffmb6zu39oqm6rdw5c9uv.jpg" width="382" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;here as the name refers well and advanced, after exploring Volume I, you will enter the borders phase as I always refer to when, the flow of the program goes beyond its "Country" and calls something in another "Country", example communication with the Network and also a communication with the database and even a producer of an MQ queue (RabbitMQ, ActiveMQ, AWS SQS and Kafka), remembering that this type of MQ queue communication is not dealt with in any of the above books, but is currently common in microservice architectures.&lt;/p&gt;

&lt;p&gt;But there is another very cool factor here and the basis of security, here in this book you already begin to understand how to use it.&lt;/p&gt;

&lt;p&gt;But there is already the 12th version, yes it is, but I like the previous version, I adapted more to it.&lt;/p&gt;

&lt;p&gt;Bearing in mind that this is the foundation and specification in java without using the frameworks that we will talk about later.&lt;/p&gt;

&lt;p&gt;I could mention another one here, but I'll just leave one more, which can help you, but remember the title of this tip, choose one,  &lt;a href="https://www.amazon.com.br/Effective-Java-English-Joshua-Bloch-ebook/dp/B078H61SCH/ref=sr_1_7?__mk_pt_BR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&amp;amp;crid=1BTCGL5AOFIJ8&amp;amp;keywords=java+efetivo&amp;amp;qid=1671106718&amp;amp;s=books&amp;amp;sprefix=java+efective%2Cstripbooks%2C252&amp;amp;sr=1-7" rel="noopener noreferrer"&gt;Effective Java (English Edition) 3rd (Joshua Bloch)&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a id="section-04"&gt;&lt;/a&gt; &lt;strong&gt;4. Learn design patterns, they have a lot to teach us&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If you've come this far, it's because you're finishing your training and you're close to becoming a Java Expert.&lt;/p&gt;

&lt;p&gt;Design Patterns is very important in any language context you are specializing or working with.&lt;/p&gt;

&lt;p&gt;In the tip #2 Study, Understand and Practice, we work on providing a basis for studies on (Design Patterns), but there are only 23 of them, and our area of activity day after day it grows.&lt;/p&gt;

&lt;p&gt;Innovation and creation of other patterns, so I did a study cataloging some, remembering that all studies are materials taken from github, where someone started to seek understanding and grouping in one place.&lt;/p&gt;

&lt;p&gt;I created a &lt;a href="https://github.com/weder96/javaaula21/tree/main/ProjectDesignPartners/src/main/java/Pack20DesignPatterns" rel="noopener noreferrer"&gt;github&lt;/a&gt; on the subject, which so far has 33 and counting.&lt;/p&gt;

&lt;p&gt;There are, but I need to know all the Design Patterns, no, just the main ones, the others just for which purpose the solution was implemented.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a id="section-05"&gt;&lt;/a&gt; &lt;strong&gt;5: Understand Generics like there's no tomorrow&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Why study Generics, yes, because in Object Orientation there is a concept of reuse, and when we create abstractions and interfaces, or even program to&lt;br&gt;
the interface, or when we work with data structures (Collections), the basis of these concepts is to understand that something can be Generic, and can help the developer to abstract and get the most out of Object Orientation.&lt;/p&gt;

&lt;p&gt;Remembering that understanding these principles can be applied to any Object Oriented language, not specifically or only to Java.&lt;/p&gt;

&lt;p&gt;Generics appeared in Java 5, and brought interesting features for code reuse. Now, we can create a single class and, from that class, instantiate objects of different types, according to our choice.&lt;/p&gt;

&lt;p&gt;Generics was born to solve a casting problem in Java, at this point in my studies in 2018, I went deep into some aspects of Java, and a book that helped me a lot was &lt;a href="https://www.amazon.com/Java-Language-Features-Modules-Expressions/dp/1484233476" rel="noopener noreferrer"&gt;Java Language Features&lt;/a&gt; : &lt;strong&gt;With Modules, Streams, Threads, I/O, and Lambda Expressions (Kishori Sharan)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb2buky21hzo5yokrqz70.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb2buky21hzo5yokrqz70.jpg" alt="Image description" width="350" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Being another book directly on this subject &lt;a href="https://www.amazon.com/Java-Generics-Collections-Development-Process/dp/0596527756/ref=sr_1_1?crid=C4HUH8OYVR6W&amp;amp;keywords=Java+Generics&amp;amp;qid=1670941685&amp;amp;s=books&amp;amp;sprefix=java+generic%2Cstripbooks-intl-ship%2C263&amp;amp;sr=1-1" rel="noopener noreferrer"&gt;Java Generics and Collections&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ah2mh2u0eezk1y7g29j.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ah2mh2u0eezk1y7g29j.jpg" alt="Image description" width="389" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In my &lt;a href="https://github.com/weder96/curso-java-generics" rel="noopener noreferrer"&gt;github&lt;/a&gt; there are also some examples on the subject.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a id="section-06"&gt;&lt;/a&gt; &lt;strong&gt;6. Study collections, until you get to know all the hierarchy and usage&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The entire base of Collections in java (list, queue, stack, maps), are created based on &lt;strong&gt;Generics and Inheritance and Interfaces&lt;/strong&gt;, so by mastering these subjects, it becomes simpler to understand and manipulate data using Java Collections.&lt;/p&gt;

&lt;p&gt;But what would this hierarchy be, it starts at the interface, items at the top, and specializes until it reaches concrete classes at the base, each with its own responsibility, and inside it has data manipulation methods.&lt;/p&gt;

&lt;p&gt;Here the tip #2 Study, Understand and Practice , becomes even more demanding, because generally we will be manipulating or transporting data and we will need this to do the same.&lt;/p&gt;

&lt;p&gt;I consider it as if it were a train with several wagons, where we place them, and transport them, change some wagons or even remove them and at other points we add, or load other trains with the replication of wagons or just remove them from one and move to another train , the possibilities here are many.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F03m5vr315y9et1200byy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F03m5vr315y9et1200byy.png" alt="Image description" width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fku6esn7m7zdrrt3voz2m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fku6esn7m7zdrrt3voz2m.png" alt="Image description" width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a id="section-07"&gt;&lt;/a&gt; &lt;strong&gt;7: Create your projects using java - hands-on&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Yes, you've come this far, congratulations, now I think you'll be able to get your hands dirty.&lt;/p&gt;

&lt;p&gt;But don't do it randomly, come up with a project or two, three or more, be creative but set goals.&lt;/p&gt;

&lt;p&gt;Example I want to learn &lt;strong&gt;Java Collections&lt;/strong&gt;, but I don't have a database, create a repository, a class that loads several data and serves as your database and start manipulating the data in your repository, which manipulations listing, filtering, ordering , searching for a specific identifier, creating predicate to filter the data, traversing the data via (for, stream, foreach), creating lists or maps with the data, doing summation, average, minimum and maximum, by a specific filter.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/weder96/LearningJavaProject/tree/main/src/br/com/wsousa/repository" rel="noopener noreferrer"&gt;example&lt;/a&gt; on how to create a repository to perform such actions.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a id="section-08"&gt;&lt;/a&gt; &lt;strong&gt;8: Level Up OOP, Learn Functional Programming in Java&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The whole learning process is cool and like a journey that the coolest not only to where you want to go, but the whole journey, each step, each learning, each mistake and success, shaped your today and you are still evolving, but every step you climb transforms you.&lt;/p&gt;

&lt;p&gt;Here we arrive at one of the steps or steps that I found most interesting.&lt;/p&gt;

&lt;p&gt;Most programmers only work with imperative programming, which is a software programming paradigm that describes computation as actions, statements or commands that change the state (variables) of a program, others see top-down programming, and the Orientation to objects, already transforms your way of thinking, because we will always be bringing the real world to the computational one, so that &lt;strong&gt;inheritance and programming for interfaces&lt;/strong&gt;, reduces the amount of code and in the same principle facilitates maintenance, and now we leave a paradigm from development to Functional Programming.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;But what is Functional Programming?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Functional Programming&lt;/strong&gt; which is a programming paradigm that treats computation as an evaluation of mathematical functions and avoids changing states or data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Functional programming&lt;/strong&gt; values pure functions, that is, functions that do not have side effects, that do not depend on any external information beyond their parameters. Pure functions give us the assurance that they will always respond according to their parameters.&lt;/p&gt;

&lt;p&gt;In languages like Java we have to pay attention and always cherish this rule, using the final reserved word in variables and attributes of objects and generating new results from the expressions.&lt;/p&gt;

&lt;p&gt;In many cases ensuring immutability in Java can be a bit of work, there are libs that make this work easier for us, such as lombok (with the @value annotation) or the immutables lib&lt;/p&gt;

&lt;p&gt;Immutability is important again for having parallel processes, the guarantee that the state of the application data will not change can prevent many errors.&lt;/p&gt;

&lt;p&gt;But here is not the context to explain Functional Programming, but to give you the possibility and the way to study it, below are two books that helped me a lot to understand how this paradigm works in Java:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.amazon.com.br/Functional-Programming-Java-Developers-Wampler/dp/1449311032" rel="noopener noreferrer"&gt;Functional-Programming-Java-Developers&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdbqjblvscwh6jbq0dlr5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdbqjblvscwh6jbq0dlr5.jpg" alt="Image description" width="800" height="1046"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.amazon.com.br/Functional-Programming-Java-Harnessing-Expressions/dp/1937785467/ref=asc_df_1937785467/?tag=googleshopp00-20&amp;amp;linkCode=df0&amp;amp;hvadid=379735814613&amp;amp;hvpos=&amp;amp;hvnetw=g&amp;amp;hvrand=1370407830115897161&amp;amp;hvpone=&amp;amp;hvptwo=&amp;amp;hvqmt=&amp;amp;hvdev=c&amp;amp;hvdvcmdl=&amp;amp;hvlocint=&amp;amp;hvlocphy=1031430&amp;amp;hvtargid9=19&amp;amp;ps405" rel="noopener noreferrer"&gt;Functional Programming in Java Harnessing the Power of Java 8 Lambda Expressions&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0iihmcx9c4dzn6jikcot.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0iihmcx9c4dzn6jikcot.jpg" alt="Image description" width="417" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Both are good, each has its own way of showing Functional Programming, in my &lt;a href="https://github.com/weder96/LearningJavaProject/tree/main/src/br/com/wsousa" rel="noopener noreferrer"&gt;github&lt;/a&gt; there is a project that provides examples of how to program functionally.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a id="section-09"&gt;&lt;/a&gt; &lt;strong&gt;9: Learn concepts outside the language with architecture (monolithic and microservice)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;With the large amount of access to an application, or it receives a number of requests, or even its control cannot be synchronous,&lt;br&gt;
was designed by the software architects, mechanism, to work with this amount of simultaneous accesses.&lt;/p&gt;

&lt;p&gt;But the teams grew, the teams got bigger and also created micro services, where the functionalities were separated by projects, so the monolith that was a giant project became smaller, and when it stopped only a part fell, not affecting 100% of the system.&lt;/p&gt;

&lt;p&gt;However, a rule of system development, every indirection increases the difficulty of understanding the application as a whole, it needs to deserve to exist, in this case every time we have borders or increase the layers more difficulties of understanding and development of the application will be generated, example to the If we create micro services, we will have a problem relating the data, as we will possibly have a database for each application.&lt;/p&gt;

&lt;p&gt;In my &lt;a href="https://github.com/weder96/microServiceDemo" rel="noopener noreferrer"&gt;github&lt;/a&gt;, I deal with the subject of how to implement a microservice solution, and how it starts from the monolithic to become a microservice.&lt;/p&gt;

&lt;p&gt;Also in my Join Community presentation, &lt;a href="https://github.com/weder96/demoJoinCommunity/blob/main/documents/presentation_join_community_2022.pdf" rel="noopener noreferrer"&gt;presentation&lt;/a&gt; about how programming evolved and we got to the current level and all the problems that this model can generate.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a id="section-10"&gt;&lt;/a&gt; &lt;strong&gt;10: Learn a Java framework/lib&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;When we talk about Java and framework, the first that comes to our mind is &lt;strong&gt;Spring and its arsenal of solutions&lt;/strong&gt;, another one that is not far behind and we will also remember &lt;strong&gt;hibernate&lt;/strong&gt;, base of &lt;strong&gt;spring data&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Frameworks are fundamental in terms of helping, solving complex problems that someone has already thought of the solution to, this point makes the developer gain speed and also working with them, the documentation and community gain would already be beneficial, we would not even need to pay attention to productivity.&lt;/p&gt;

&lt;p&gt;There are others like &lt;strong&gt;Quarkus and micronault, jhisper&lt;/strong&gt; and famous libs like &lt;strong&gt;lombok, mapstruct. grails&lt;/strong&gt;, here Java surpasses itself with the possibilities that the Language provides, I could type dozens of libs and even so, there would still be excellent ones that I wouldn't be able to describe.&lt;/p&gt;

&lt;p&gt;But in the spring universe I want to highlight some projects that are excellent, such as &lt;strong&gt;spring-boot, spring-security, spring-data , spring-cloud&lt;/strong&gt; and &lt;strong&gt;spring-web&lt;/strong&gt;, almost all of the projects these libs will be in the pom.xml or in the grid. But a point to study I advise &lt;strong&gt;maven&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In the case of &lt;strong&gt;maven&lt;/strong&gt;, you must understand all its structure, because I must understand, the answer is simple, because &lt;strong&gt;60% of all projects are configured with the repository manager&lt;/strong&gt;, you must learn from proxy configuration, understand &lt;strong&gt;properties, inclusion of dependencies, exclusion&lt;/strong&gt; of libraries that are inside other libs, how to check the &lt;strong&gt;dependency tree&lt;/strong&gt; of a library, how the maven &lt;strong&gt;life cycle&lt;/strong&gt; works, its &lt;strong&gt;goals and Plug-ins&lt;/strong&gt; and how it integrates with CI (Continuos Integration) and how to configure &lt;strong&gt;profiles and repositories&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A book that helped me understand maven better was &lt;a href="https://www.amazon.com.br/Introducing-Maven-Build-Todays-Developers/dp/1484254090" rel="noopener noreferrer"&gt;Introducing Maven: A Build Tool for Today's Java Developers&lt;/a&gt; .&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmh28w8g05do83qvatgy6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmh28w8g05do83qvatgy6.jpg" alt="Image description" width="800" height="1213"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a id="section-11"&gt;&lt;/a&gt; &lt;strong&gt;11: Support someone who is just starting out&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Here is something that seems to sound strange, help someone who is starting if I am too, but remember that each one has already gone through a part of the journey, maybe what he is going through and finding it totally complex, you managed to understand and explain to him or her , but the opposite can also happen, and walking alone is complicated, already accompanied by support and greater.&lt;/p&gt;

&lt;p&gt;I could also say help in open source projects, it would also help you to grow, because here we practice mutual help, if I know something and you don't, when we pass this stage we both will know something.&lt;/p&gt;

&lt;p&gt;But if he doesn't know anything yet, as soon as the leveling happens, everything flows, and you'll have support and, most importantly, a strong colleague by your side, for new challenges.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a id="section-12"&gt;&lt;/a&gt; &lt;strong&gt;12: Learn Reactive Programming&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Reactive programming, I confess that for me here, it was a divider, even though I have been programming for several years in the backEnd(Java and Python) and frontEnd(Javascript and Typescript),&lt;br&gt;
I've always used the standard development model, but today's world doesn't force us to work reactively.&lt;/p&gt;

&lt;p&gt;But what is Reactive Programming?&lt;/p&gt;

&lt;p&gt;Reactive programming can be defined as a programming paradigm based on events that can be expected at different points in the code, serving as &lt;strong&gt;triggers&lt;/strong&gt; for the execution of specific logics.&lt;/p&gt;

&lt;p&gt;This magic word &lt;strong&gt;triggers&lt;/strong&gt; , transforms programming into a totally decentralized process and even more so if we have 10 possibilities, we cannot define the order of this trigger, it will only happen and all 10 will be processed.&lt;/p&gt;

&lt;p&gt;My first experience with reactive programming was in frontEnd &lt;strong&gt;(RxJs)&lt;/strong&gt;, then in backEnd with &lt;strong&gt;RxJava&lt;/strong&gt;, and later I took projects that had asynchronous communications between services and started using the &lt;strong&gt;webClient&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But what a new thing, it's not like that, the basis of reactive programming and the &lt;strong&gt;observer pattern&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here are some books that can help you a lot:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.amazon.com.br/Reactive-Programming-RxJava-Tomasz-Nurkiewicz/dp/1491931655" rel="noopener noreferrer"&gt;Reactive Programming with RxJava Creating Asynchronous, Event-Based Applications&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjv1y81q0pmvk4suh0m28.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjv1y81q0pmvk4suh0m28.jpg" alt="Image description" width="800" height="1049"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.amazon.com.br/Learning-RxJava-Thomas-Nield/dp/1787120422" rel="noopener noreferrer"&gt;Learning RxJava Build concurrent, maintainable, and responsive Java in less time Thomas Nield&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqsfengxjq5zzd4p7rdav.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqsfengxjq5zzd4p7rdav.jpg" alt="Image description" width="800" height="986"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a id="section-13"&gt;&lt;/a&gt; &lt;strong&gt;13: Master S.O.L.I.D&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In Robert C. Martin's book, I joke that this book has sold more copies than any other in the world, &lt;a href="https://www.amazon.com.br/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882" rel="noopener noreferrer"&gt;Clean Code&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0tukosw24milbkf6ckfo.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0tukosw24milbkf6ckfo.jpg" alt="Image description" width="378" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But this book is old, yes, but the subjects in this book do not get old, in this book he deals with S.O.L.I.D - The 5 Principles of OOP (Object Oriented Programming).&lt;/p&gt;

&lt;p&gt;SRP — Single Responsibility Principle&lt;br&gt;
OCP — Open-Closed Principle&lt;br&gt;
LSP — Liskov Substitution Principle &lt;br&gt;
ISP — Interface Segregation Principle&lt;br&gt;
DIP — Dependency Inversion Principle&lt;/p&gt;

&lt;p&gt;In my &lt;a href="https://github.com/weder96/demoJoinCommunity" rel="noopener noreferrer"&gt;github&lt;/a&gt; there is a complete presentation on the topic of development and where we highlight how this model can help in the development and maintenance and understanding of the code.&lt;/p&gt;

&lt;p&gt;Remembering that if you apply the first three, the other two will already be being observed.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a id="section-14"&gt;&lt;/a&gt; &lt;strong&gt;14: Learn Unit Testing&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Some of you now, will think, but tests like this will help me learn Java, tests have a vital function as the name says, testing that an algorithm behaves as it should, with no possibility of ambiguity or even that an error occurs that it was not thought of by the programmer or analyst.&lt;/p&gt;

&lt;p&gt;At the beginning, I always thought of myself for sometimes having demands that didn't go as they should, or that there were mistakes that I didn't understand, as I left them.&lt;/p&gt;

&lt;p&gt;Until I fell into squads, whose quality professionals, I think, were on another level, there, yes, I became another programmer, always asking myself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;What can be improved in this code?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;What would the quality professional be thinking here now?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So when I finished the demand, I did a scan and in my unit tests I tried to improve the functions, verify that they were meeting the principles of S.O.L.I.D, these issues greatly improved my life and also that of the team and the main customer satisfaction, because it had a very low error rate, and much less corrective maintenance and what was most evident, the ease of evolutionary interventions.&lt;/p&gt;

&lt;p&gt;At that moment, yes, the team saw me as a senior, because being a senior is not about having years of experience or a huge resume, but being able to transmit your knowledge for the good of the team and your client, here comes a point where I always disagree with the seniors from 3 to 5 years old, the question is not whether he feels it, but the team and customers see this ability in him or her.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a id="section-15"&gt;&lt;/a&gt; &lt;strong&gt;15: Explore the Java developers Github, there's always something to help you&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In tip  3. Study Java with a Book, I said a , to a question I raise the shadow.&lt;/p&gt;

&lt;p&gt;When I took my higher education course, I was always criticized for doing this, they said I was copying, most of the time I had already finished my algorithms and I wanted to see if anyone thought differently than I was doing, because there are several ways to think and solve something.&lt;/p&gt;

&lt;p&gt;So now think of a complex ecosystem like Object Orientation, there are N ways of thinking, structuring and writing simple codes, don't get alienated just in my way, that's right, I did better.&lt;/p&gt;

&lt;p&gt;Here also comes the tip  11. Support someone who is starting , when you do something cool or are doing a Proof of Concept, upload to github, because you will be helping to who is starting, because when using this tip, he will be learning with his project on github.&lt;/p&gt;

&lt;p&gt;Don't stock your learning tell people you know that subject, not only written in a resume but evidenced by a project and most importantly github will show you &lt;strong&gt;your evolution&lt;/strong&gt;, I always tell my students github not and for others they see what you know when hiring you, &lt;strong&gt;but a timeline of your &lt;br&gt;
learning process so you can understand your evolution&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a id="section-99"&gt;&lt;/a&gt; &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;One of the big considerations I always hear is that many consider Java complicated to learn compared to other languages that are more beginner friendly in a language example Python.&lt;/p&gt;

&lt;p&gt;However, when you go deep, in the base of the Java language this problem starts to not exist anymore, another point that I understood with time and that the majority, never had difficulty with logic or development, their problems were mastering Object Orientation.&lt;/p&gt;

&lt;p&gt;Highlighting this problem, so over time, all my Java courses, with my students, were focused on Object Orientation, and the goal was to master the 4 pillars of OOP, and over time we saw an evolution in the number of developers who changed of ideas on the subject, and many today dominate and work with Java or even put their knowledge about OOP in other languages such as Typescript and PHP.&lt;/p&gt;

&lt;p&gt;Another point to note is that the great blockbusters of current technology, such as:&lt;br&gt;
Netflix, Nasa World Wind, Minecraft, Spotify and IBM among others use Java in their systems.&lt;/p&gt;

&lt;p&gt;The development market is growing fast and there is a lack of qualified people to take on these jobs, in addition to salaries that are very attractive.&lt;/p&gt;

&lt;p&gt;My opinion of someone who has been in the market for a long time, study, dedicate and be patient, your determination added to your skills will soon be seen and you will be in big companies, working with wonderful teams and with a salary that will guarantee you an excellent quality of life and time with your family.&lt;/p&gt;

</description>
      <category>career</category>
      <category>devops</category>
      <category>learning</category>
    </item>
    <item>
      <title>Where to start studying programming?</title>
      <dc:creator>Weder Sousa</dc:creator>
      <pubDate>Wed, 07 Dec 2022 15:29:03 +0000</pubDate>
      <link>https://dev.to/weder96/por-onde-comecar-a-estudar-programacao-32po</link>
      <guid>https://dev.to/weder96/por-onde-comecar-a-estudar-programacao-32po</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This question is normal in the lives of those who are starting in the area of systems development and also when we already have some development time and need to learn something new, where to start?&lt;/p&gt;

&lt;p&gt;We have in our minds that to be a programmer, the person has to be highly expert and that he must know everything about mathematics, but it is a differential and not an obligatory rule.&lt;/p&gt;

&lt;p&gt;In this post we will help you with some tips on how to learn to program that helped me in my +17 years experience in systems development, we will try to summarize and give simple and practical tips.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where to start studying programming?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Everyone, anyone who knows how to read and has a logic of things is capable of learning programming.&lt;/p&gt;

&lt;p&gt;Our life is composed of logic, when we wake up, brush our teeth, make breakfast, go to work, come back from it, our life is a sequence of defined and finite steps, programming logic and in essence that's it, a sequence of logical steps to achieve a goal.&lt;/p&gt;

&lt;p&gt;When we start learning to program, we actually learn a specific language "programming language", think of it as if you were learning a language (eg English, French, Portuguese), only with fewer reserved words.&lt;/p&gt;

&lt;p&gt;During the stages of the learning process it takes some assumptions such as dedication, concentration and patience to study, however, it is an evolutionary process, but calm down that we will help by giving tips on how to learn to program by yourself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And we come to the second question, Why should I learn programming?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The answer is kind of straightforward, lots of spots available.&lt;/p&gt;

&lt;p&gt;But between the lines, there are still other details at the present time almost every company needs a system for control and organization which guarantees tracking of all stages of their workflow and most of the time needs a system or several, which for in turn needs a skilled workforce for creation, maintenance and evolution.&lt;/p&gt;

&lt;p&gt;But with time and vertical growth (+ systems) and also horizontal (+ companies), compared to the number of professionals in the market (qualified) all these issues raised, currently generated a major problem, we do not have qualified professionals for creation and maintain and evolve, knowing that in the future there will be an even worse scenario, due to many people thinking that we will have a shortage of professionals, but we also see another point to be evaluated, many are migrating professions, leaving their training and coming to ours area, it still won't be enough.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And we come to the third question, What about wages and don't come up with it depends?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the field of development, you will hear this word a lot, it depends.&lt;br&gt;
A division by level of experience (Junior, Full and Senior) can have salaries ranging from 2 thousand and often passing 10 thousand reais easily.&lt;/p&gt;

&lt;p&gt;This will depend a lot on your qualification.&lt;/p&gt;

&lt;p&gt;But I can already tell you that programmers' salaries are many times above the market average.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And the Remote Work “Home Office”:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To start with the development of systems, it is only necessary to have a computer or notebook and often without interaction with users.&lt;/p&gt;

&lt;p&gt;In this case, many companies opt for home office work for their developers.&lt;/p&gt;

&lt;p&gt;Another point to be taken into account, as it brings a surprising quality of life and a gain in the speed of deliveries and its qualities (but that is a subject for another post).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What steps are needed to learn programming?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;1. Learn programming logic.&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
First of all, to learn to program, we have to learn about programming logic and its basic principles.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Principle of identity&lt;/li&gt;
&lt;li&gt;Principle of non-contradiction&lt;/li&gt;
&lt;li&gt;Principle of excluded middle.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;2. Choose a programming language.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Secondly, choose a programming language to start your studies, always the simplest one.&lt;br&gt;
In programming logic, there is a more complex language, when starting out, and better typed languages that will help you take the first steps in programming languages, in my case I started in C language and then went to an Object-oriented language in my case Java.&lt;br&gt;
&lt;strong&gt;But always only choose one, only one&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;3. Set a language that has to do with your goal.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For example, if you are going to make a Web System, in this case it is necessary to understand which languages to create this Web System.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;4. Choose more up-to-date languages that have a wide range in the market.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There are hundreds of programming languages, but many are already outdated, others are little used and have little demand.&lt;/p&gt;

&lt;p&gt;A simple internet search for the most used languages for each platform gives you this information easily.&lt;/p&gt;

&lt;p&gt;Then we have which platform to start programming in this case we have (web, mobile or desktop).&lt;/p&gt;

&lt;p&gt;below some examples:&lt;/p&gt;

&lt;p&gt;Web Development: JavaScript, PHP, NodeJS, Typescript.&lt;br&gt;
Mobile development: Java, Kotlin, Javascript&lt;br&gt;
Desktop development: CSharp, Java.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;5. Practice makes perfect, but remember the best is the enemy of the good.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The more you practice something, the better you will be, programming is no different, the more we code the better we will be and the more we learn and the learning curve of something new decreases drastically.&lt;/p&gt;

&lt;p&gt;I created something simple, this enhances your learning model, remember that here is a ladder, and we have to climb step by step, &lt;strong&gt;don't skip a step, this is a mandatory rule&lt;/strong&gt;, because only then will we learn in the best possible way .&lt;/p&gt;

&lt;p&gt;Look for examples on the internet that can help you solve a certain problem.&lt;/p&gt;

&lt;p&gt;There is but I'm copying, yes, but you're also doing something, important, validating ways of solving problems, techniques, this is always beneficial, but just copying and running the code doesn't make you a developer, solving problems does.&lt;/p&gt;

&lt;p&gt;And like a person who has 100 books in PDF, but has never read them, and even reading did not paste the knowledge of reading, in practice, we translate, &lt;strong&gt;we read -&amp;gt; we understand -&amp;gt; we put into practice&lt;/strong&gt;, this is a loop, we go back to the beginning, &lt;strong&gt;we read -&amp;gt; we understand -&amp;gt; we put it into practice&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;6. Study in Community&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Search for groups and people who also have the same goal as you and exchange their experiences, see what each one is going through, which books and courses were beneficial in learning and also a support because your problem today, someone there, has already passed and can help you.&lt;/p&gt;

&lt;p&gt;In social networks there are several communities in which they talk about programming. Join forums, ask questions, and ask group members for help.&lt;/p&gt;

&lt;p&gt;Telegram today has many groups that can help a lot, in addition to sharing a lot of information and knowledge, and if divided by subject, in addition to being able to create your own space with people who want to study focused on just one purpose.&lt;/p&gt;

&lt;p&gt;Twitter also gives you the opportunity to meet people who dominate and are a reference in the object of your study, I remember when I was studying angular, on Twitter I started to follow the exponents and who brought content that helped me a lot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;7. Where to start studying programming – Look for sites with tips.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There are several websites that you can learn programming.&lt;br&gt;
A site that helped me a lot:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.freecodecamp.org/"&gt;https://www.freecodecamp.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Very complete the same:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Responsive Web Design&lt;/li&gt;
&lt;li&gt;Front End Development Libraries&lt;/li&gt;
&lt;li&gt;JavaScript Algorithms and Data Structures&lt;/li&gt;
&lt;li&gt;Data Visualization&lt;/li&gt;
&lt;li&gt;Relational Database&lt;/li&gt;
&lt;li&gt;Back End Development and APIs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;among others, it also has a Completion certificate, which can be added to &lt;strong&gt;Linkedin&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Below tip of two well-known sites for those who are starting.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.codecademy.com/"&gt;https://www.codecademy.com/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.w3schools.com/"&gt;https://www.w3schools.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;8.Try to study English.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If your language is not English, it's good to study, because most of the documentation and commands of programming languages are written in English, and there will always be a delay in the translation into your language.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;9. Study on Youtube&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On youtube there is always someone who can help, in the beginning we always looked for subjects on websites, blogs, or even on Stackoverflow, today we tend to search on youtube, many nice people are taking time there making top tutorials, and we should give them our support , as it is rare for a person that a youtube video did not help.&lt;/p&gt;

&lt;p&gt;I want to leave here two that I'm a fan of, both are Indian:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/@Javatechie"&gt;https://www.youtube.com/@Javatechie&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And when I was learning Angular&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/@LeelaWebDev"&gt;https://www.youtube.com/@LeelaWebDev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And also to a hero in the area of development that I also studied via Youtube:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/@loianegroner"&gt;https://www.youtube.com/@loianegroner&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Conclusion&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Studying programming is fun, we have enough information, on all platforms, what I discovered is that we must be calm and dedicated, concentration and patience, and always seek knowledge, know how to do, programmers are problem solvers, so the main premise is, know how to solve problems using programming.&lt;/p&gt;

</description>
      <category>code</category>
      <category>beginners</category>
      <category>programming</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
