Main Content
Main Content
submitted in partial fulfillment of the requirements for the award of the degree
of
BACHELOR OF TECHNOLOGY
in
INFORMATION TECHNOLOGY ENGINEERING
Submitted by
Piyush Aggarwal
07711503121
1
CANDIDATE’S DECLARATION
This is to certify that the material embodied in this Internship Report titled
submitted in the partial fulfillment of the requirements for the award of the degree of
is further certified that this Internship work has not been submitted in full or in part to
this university or any other university for the award of any other degree or diploma.
My indebtedness to other works has been duly acknowledged at the relevant places.
Piyush Aggarwal
07711503121
1
CERTIFICATE FROM THE COMPANY
This is to certify that Piyush Aggarwal (Enrollment No. 07711503121) has
undertaken internship at NAGARRO, Sector 18, Gurugram, Haryana 122015, India
from 22nd Jan 2025 under the supervision and guidance of Ms Shradha Goswami,
Senior Analyst.
Shradha Goswami
Senior Analyst
Nagarro
2
CERTIFICATE FROM INSTITUTE
This is to certify that the work embodied in this Internship Report titled “Enterprise
Web Application Development using Java, Angular, SQL” being submitted in the
partial fulfillment of the requirements for the award of the degree of Bachelor of
Technology in Information Technology, is original and has been carried out by
Piyush Aggarwal (Enrollment No. 07711503121) under my supervision and
guidance.
It is further certified that this Internship work has not been submitted in full or in part
to this university or any other university for the award of any other degree or diploma
to the best of my knowledge and belief.
Dr Prakhar Priyadarshi
Head of Department
4
ACKNOWLEDGEMENT
I am deeply grateful to Nagarro for providing me the opportunity to pursue my internship as a Java
Trainee.
This experience has played a pivotal role in enhancing my practical knowledge of full stack
dynamic web applications, enabling me to apply both frontend and backend concepts
effectively. The culmination of this training was a hands-on exit test project where I
I would like to extend my heartfelt thanks to my industry mentor, Ms. Akanksha Rastogi, for her expert
guidance, continuous encouragement, and constructive feedback throughout the project. Her support
was instrumental in helping me apply theoretical concepts to practical challenges and refine my
technical skills.
I am also thankful to Dr. Arvind Rehalia and the faculty of Bharati Vidyapeeth's College of Engineering
for their academic guidance and for structuring this internship as a part of the curriculum. Their support
was vital in helping me approach this internship with the right mindset and objectives.
Lastly, I would like to thank my family and peers for their unwavering motivation, patience, and moral
Piyush Aggarwal
(07711503121)
5
ABSTRACT
The development process followed industry best practices for both backend and
frontend implementations, with a focus on security, performance optimization, and
user experience. The platform architecture was designed with scalability in mind,
employing a layered approach that separates concerns and enables future
enhancements.
This internship provided practical exposure to full stack java development using java
and angular, significantly enhancing my understanding of code quality control, and
efficient software delivery.
6
TABLE OF CONTENTS
Declaration i
Certificate from the Company ii
Certificate from the Institute iii
Acknowledgement iv
Abstract v
List of Figures vi
Chapter 1: Introduction of the Company 1
1.1: About the Company 1
1.2: Profile of the Company 2
Chapter 2: Introduction of the Internship 5
2.1: About the Internship 5
2.2: Objectives of the Internship 5
2.3: Roles and Responsibilities 6
Chapter 3: Internship Activities 10
3.1: Task Description 10
3.2: Tools / Technologies / Platform used 12
3.3: Technical Application 18
3.4: Challenges Faced 20
Chapter 4: Contribution to the Organization 21
4.1: Key Activities and Contributions 21
Chapter 5: Learning and Development 25
5.1: Technical Skills Acquired 25
5.2: Professional and Soft Skills Developed 27
Chapter 6: Summary and Conclusion 28
6.1: Summary 28
6.2: Conclusion 29
Chapter 7: Suggestions for the Improvement 30
References 32
xi
15
LIST OF FIGURES
2 Spring Security 13
3 Hibernate 14
xi
16
CHAPTER 1: INTRODUCTION OF COMPANY
In addition to its technical prowess, Nagarro is widely recognized for its people-
first approach. The company emphasizes a flat hierarchy, open communication,
and flexible work arrangements. Its caring policy is designed to ensure employee
well-being through mental health support, work-life balance, diversity and
inclusion programs, learning & development initiatives, and remote work
flexibility. Nagarro’s tagline—"Thinking Breakthroughs"—captures its
commitment to innovation through empowered, well-supported teams.
1
1.2 Profile of the Company
- Founded: 1996
- Healthcare
- Automotive
- Manufacturing
- Public Sector
- Cybersecurity
2
- Data Analytics & Business Intelligence
At the heart of Nagarro’s organizational philosophy is the belief: "We are powered
by caring." This core value drives everything—from how the company interacts with
clients to how it fosters innovation and builds its global workforce. Caring is what
fuels Nagarro’s long-term partnerships, its culture of responsibility, and its continuous
delivery of exceptional results.
Client-Centric: Nagarro prioritizes client success and aims to build strong, long-
term partnerships based on trust, performance, and mutual growth.
3
Intelligent: The company values smart decision-making over rigid processes. It
celebrates boldness, merit, and results over hierarchy or geographic location.
This dynamic, people-focused environment is what defines Nagarro as more than just
a tech company—it is a growing "Nation of Nagarrians", driven by purpose,
innovation, and human connection.
4
CHAPTER 2: INTRODUCTION OF THE
INTERNSHIP
This hands-on experience culminated in a final exit test project, where I applied the
complete stack to build a real-world web application. The program provided a strong
foundation in enterprise-level development practices and helped me bridge the gap
between academic learning and real-world implementation within a corporate
environment.
5
2.2 Objectives of the Internship
6
automating tasks such as testing, building, and serving the app for different
environments.
7
structures. This improved my understanding of how to write clean, less error-
prone code
Date/Time API:
I became proficient with the new Date/Time API introduced in Java 8, which
helped me handle date and time manipulations in a more intuitive and thread-safe
way compared to the old Date and Calendar classes.
Building Web Applications with Spring MVC:
I worked with the Spring MVC framework to develop scalable and secure web
applications. I leveraged Spring's Model-View-Controller (MVC) architecture to
separate concerns and ensure a clean, maintainable codebase.
Dependency Injection and IoC:
I used Spring’s Dependency Injection (DI) to manage object dependencies and
improve testability. This made my applications more modular and easier to scale
and maintain.
Database Integration with Spring Data JPA:
I integrated Spring Data JPA for seamless database interaction and used Hibernate
for ORM mapping, improving the efficiency and ease of managing database
operations
Spring Security:
I implemented authentication and authorization mechanisms using Spring Security
to secure web applications and REST APIs, including role-based access control
(RBAC) and OAuth2 integration.
Understanding Fundamental Data Structures:
I studied and implemented core data structures such as arrays, linked lists, stacks,
queues, trees, and graphs. This gave me a solid foundation for solving algorithmic
challenges and optimizing code performance.
Solving Problems Using Algorithms:
I applied searching and sorting algorithms, including binary search, quicksort,
mergesort, and breadth-first search, to solve real-world problems efficiently.
Time and Space Complexity Analysis:
I analyzed the time and space complexity of algorithms using Big O notation,
ensuring I could optimize solutions for better performance, especially for large
datasets.
8
Dynamic Programming and Recursion:
I mastered dynamic programming techniques to solve problems involving
overlapping subproblems, and I applied recursion to break down complex
problems into manageable parts.
Graph Algorithms and Tree Traversals:
I implemented graph algorithms such as Dijkstra’s and depth-first search (DFS)
and learned different tree traversal techniques like in-order, pre-order, and post-
order.
HTML for Structuring Web Pages:
I gained proficiency in HTML5 to create semantic, well-structured web pages. I
used HTML elements like forms, tables, and links to build user-friendly interfaces.
Styling with CSS:
I used CSS to design visually appealing web pages, leveraging techniques like
Flexbox and Grid for layout, and CSS transitions and animations for interactive
elements.
Responsive Web Design:
I developed responsive web applications by using media queries to ensure that the
UI adapts seamlessly to various screen sizes and devices.
JavaScript for Interactivity:
I wrote JavaScript to add interactivity to web pages, including DOM manipulation,
event handling, and AJAX calls to create dynamic and responsive user
experiences.
ES6+ Features in JavaScript:
I explored modern JavaScript features like arrow functions, template literals,
destructuring, async/await, and classes to write clean, efficient code.
Writing Complex SQL Queries:
I gained proficiency in writing complex SQL queries to retrieve, insert, update,
and delete data from relational databases. I used techniques like joins, subqueries,
and window functions to efficiently handle various data requirements.
Database Design and Normalization:
I applied database design principles such as normalization to create efficient,
scalable schemas, reducing redundancy and ensuring data integrity.
Optimizing SQL Queries:
I learned how to optimize SQL queries for performance, including indexing, query
9
profiling, and understanding execution plans to ensure queries run efficiently on
large datasets.
Stored Procedures and Triggers:
I developed stored procedures and triggers to automate repetitive tasks, ensuring
business logic is executed consistently at the database level.
Data Security and Transactions:
I implemented data security measures such as access controls and encryption. I
also worked with transactions to ensure data consistency and integrity in multi-
step operations.
Building SPAs with Angular:
I developed Single-Page Applications (SPAs) using Angular, utilizing
components, services, and directives to build dynamic and responsive user
interfaces.
Routing and State Management:
I implemented Angular’s router to manage navigation and handle dynamic content
loading. I also explored state management techniques using RxJS and NgRx to
manage application state efficiently.
Forms and Validation in Angular:
I worked with template-driven and reactive forms to handle user inputs and
implemented form validation to ensure data integrity.
Observables and Reactive Programming:
I mastered the use of RxJS observables for handling asynchronous data streams
and implemented reactive programming patterns to improve data flow and UI
responsiveness.
Component Communication and Dependency Injection:
I learned how to manage communication between Angular components and
services using Angular’s dependency injection system, making the app modular
and easier to maintain.
10
CHAPTER 3: INTERNSHIP ACTIVITIES
I applied industry best practices for web development and collaborated with multiple
teams to ensure that the application was robust, maintainable, and scalable. I utilized
several tools and technologies including Java (Spring Boot), Angular, SQL
(MySQL/PostgreSQL), Git for version control, and Jenkins for CI/CD, integrating
them into the overall project workflow to streamline development and deployment
processes.
11
that the data layer was efficient and reliable. I created normalized tables,
implemented relationships, and wrote complex SQL queries to fetch and
manipulate data. By optimizing queries and using indexing, I was able to improve
performance for large datasets.
API Integration:
I integrated the Angular front-end with the Java back-end by calling the REST
APIs to fetch and submit data. I used HTTPClient in Angular to handle
asynchronous requests and displayed dynamic data from the backend on the
frontend. This integration was crucial for making the web application interactive
and functional.
1. Spring Boot
eliminated the need for extensive XML configuration, enabling rapid development
12
Spring MVC: This component facilitated the development of RESTful endpoints
Spring Data: Integration with JPA simplified database operations through repository
2. Java
Type Inference with var: Local variable type inference reduced verbosity while
maintaining type safety.
String API Enhancements: New methods like isBlank(), strip(), and lines()
simplified text processing.
Collection Factory Methods: Methods like List.of() and Map.of() enabled easier
creation of immutable collections.
13
HTTP Client API: The standardized HTTP client simplified API communication for
external services.
Password Encoding: BCrypt password hashing for secure storage of user credentials.
CSRF Protection: Protection against cross-site request forgery attacks for non-GET
endpoints.
The data access layer leveraged Spring Data JPA with Hibernate for object-relational
mapping:
Repository Pattern: Spring Data repositories reduced boilerplate code for database
operations.
14
Specification API: Dynamic query building for complex search operations with
multiple optional filters.
Query Optimization: Eager and lazy loading strategies to optimize database access.
Fig 3: Hibernate
5. MySQL Database
MySQL provided a robust relational database management system for the application:
15
6. Angular
Reactive Forms: Powerful form handling with validation and dynamic form controls.
Semantic HTML: Proper use of HTML5 elements for improved accessibility and
SEO.
CSS Grid and Flexbox: Modern layout techniques for responsive design.
CSS Variables: Custom properties for consistent theming and easier maintenance.
8. VS Code
Visual Studio Code (VS Code) has become the preferred IDE for many Angular
developers due to its lightweight nature, extensive extension marketplace, and
16
excellent support for TypeScript and JavaScript development. Provides rich editor
features like code completion, error checking, and quick info for Angular templates.
Accelerates development with pre-built code fragments for common Angular patterns.
Provides a UI for running Angular CLI commands directly within VS Code.
Intelligent code completion that understands Angular's dependency injection system.
Chrome Debugger extension for real-time debugging of Angular applications
9. Intellij Idea
IntelliJ IDEA, particularly the Ultimate Edition, offers comprehensive support for
Java and Spring Framework development. Its deep understanding of Spring's
architecture makes it an ideal choice for enterprise application development.Spring
Initializr Integration Create new Spring Boot projects directly from the IDE Spring
Boot Dashboard Manage and control Spring Boot applications Spring Tool Support
Visualize and navigate Spring beans, controllers, and services. Advanced code
completion with awareness of Spring annotations and patterns. Robust debugging
with conditional breakpoints and expression evaluation
The system follows a modern client-server architecture with clear separation between
the frontend and backend components. This separation allows for independent scaling
and maintenance of each layer.
The backend is built using Spring Boot, providing RESTful API endpoints that handle
data processing, business logic, and persistence. The frontend, developed with
Angular, communicates with these endpoints using HTTP requests, presenting data to
users through an intuitive interface and collecting user input.
Data flows between these layers in the form of JSON payloads, with the backend
validating all incoming data before processing. Authentication is handled through
JWT tokens, which are generated upon successful login and attached to subsequent
requests.
17
Separation of concerns: Each component has well-defined responsibilities
Statelessness: The backend does not maintain client state between requests
Layered system: Components interact only with adjacent layers
Uniform interface: Communication follows standardized RESTful patterns
Controller Layer :This layer handles incoming HTTP requests, performs basic
validation, and routes requests to appropriate service methods. Controllers are
organized by domain (authentication, questions, comments) and follow RESTful
conventions for endpoint design. They translate between HTTP requests/responses
and the service layer's domain objects.
Service Layer :This layer contains the business logic of the application. Services
validate data more thoroughly, orchestrate operations that might span multiple
repositories, and enforce business rules. They abstract the complexity of operations
from controllers and provide a clean API for the controller layer.
Repository Layer :This layer interfaces with the database, using Spring Data JPA to
translate between Java objects and database records. Repositories provide methods for
basic CRUD operations and more complex queries.
Model Layer :This foundational layer defines the domain entities that represent the
core data structures of the application, such as User, Question, Comment, and Tag. It
also includes Data Transfer Objects (DTOs) that structure the data exchanged
between layers and with the frontend.
18
Core Module :Contains singleton services and components that are loaded once
during application startup, including:
Authentication service
HTTP interceptors for token handling
Guards for route protection
Global error handling
Shared Module :Houses reusable components, directives, and pipes used across the
application:
19
3.4 Challenges faced
Multi-Module Build Pipeline Delays: Managing slow CI/CD pipelines when both
Java and Angular components need to be built, tested, and deployed
Frontend-Backend Version Compatibility: Ensuring API contracts between
Angular frontend and Java backend remain compatible through versioning and
contract testing
Static Analysis Configuration: Configuring SonarQube/SonarCloud for both Java
and TypeScript codebases with appropriate quality gates
Operational Challenges
Separated Logging Systems: Consolidating logs from Java services and Angular
applications into a unified monitoring solution
20
Performance Bottleneck Identification: Determining whether performance issues
originate in the Java backend, Angular frontend, or network communication between
them
Resource Scaling Imbalances: Managing different scaling requirements for stateful
Java services versus stateless Angular applications
21
4.1 Key Activities and Contributions
I also prepared concise notes and summaries from sessions — especially related to
tools like java and angular — and shared them within the group. These documents
were appreciated for their clarity and proved helpful as quick references for others.
The final deployment was executed on Azure Kubernetes Service (AKS) where the
Dockerized applications were orchestrated using Kubernetes. This end-to-end pipeline
not only ensured faster and reliable software delivery but also gave me hands-on
experience in building production-grade CI/CD systems, aligning with industry
standards for modern DevOps workflows.
22
3. Contribution through Assignments, Feedback, and Level-Up Tests: I
performed well in periodic level-up assessments and mentor vivas, and consistently
submitted assignments before deadlines. I actively contributed feedback regarding
pipeline optimizations, security configurations, and improved Terraform workflows.
This proactive approach helped improve workflow efficiency and reduced repetitive
debugging queries to mentors.
While I was not directly involved in frontend development tasks during the internship,
I actively contributed by offering usability feedback during the deployment and
demonstration stages of our applications. As I interacted with the codebase and
observed the outputs during testing and deployment, I identified areas where user
experience and clarity could be improved, especially for developers and reviewers
working with these automation workflows.
23
Such feedback helped create a smoother experience for users interacting with the
automation systems, fostering better collaboration and understanding between
development and operations teams. This experience highlighted the importance of
paying attention to user-centric design even in backend and DevOps workflows,
where ease of use can directly impact productivity and communication.
I consistently maintained disciplined timelines for all assigned tasks and deliverables
throughout the internship. By treating each assignment with a sense of responsibility
and urgency, I ensured that deadlines were met without compromising the quality of
work. I made a conscious effort to adopt and promote best practices in version control,
such as writing clear, meaningful commit messages, organizing commits logically,
and following a consistent formatting standard, especially in configuration files like
YAML. This not only made my own codebase easier to understand and maintain but
also set an example for my peers to emulate.
Over time, these practices began to influence the group culture positively. Fellow
interns and teammates started paying more attention to structured commits, well-
formatted code, and clearer documentation, leading to improved collaboration across
the board. I also placed strong emphasis on code hygiene, routinely reviewing my
scripts and configuration files for clarity and maintainability, and encouraging others
to do the same. My attitude toward peer learning and teamwork was evident in the
way I shared tips, helped others debug pipeline issues, and regularly participated in
team discussions with thoughtful inputs.
24
CHAPTER 5: LEARNING AND DEVELOPMENT
WebApp Development:
Gained an in-depth understanding of the Model-View-Controller (MVC)
architecture by actively working on full-stack web applications built using Java
(Spring MVC) and angular frameworks. This architectural pattern played a critical
role in organizing the application logic by separating responsibilities into three
interconnected components: the Model for handling business logic and data, the
View for managing user interface and presentation, and the Controller for
processing incoming requests and coordinating between Model and View. By
implementing and modifying real-world applications, I learned how this
separation of concerns enhances modularity, simplifies debugging, and promotes
better code reuse. It also made the applications more scalable and maintainable, as
each component could be developed and tested independently. Understanding and
applying the MVC design pattern laid a strong foundation for building clean,
structured, and enterprise-ready web applications.
Scripting Knowledge:
Gained hands-on experience in writing Shell scripts (for Linux environments) and
PowerShell scripts (for Windows) to automate repetitive system tasks, CI steps,
and environment setup. This introduced me to scripting best practices and helped
streamline operations in the pipelines.
Version Control Systems:
Became proficient in using Git for source code management and collaborative
development. Worked with both GitHub and GitLab, understanding branching
25
strategies, pull requests, code merges, and issue tracking in distributed
development environments.
Code Quality Management:
Integrated SonarCloud for static code analysis in CI pipelines and used Trivy and
Grype for container image vulnerability scanning. This helped in maintaining
code quality and security standards across applications before deployment.
Package and Artifact Management:
Used JFrog Artifactory as a central artifact repository to store, manage, and
distribute build artifacts generated during the CI/CD process. This tool played a
crucial role in ensuring consistent versioning, traceability, and repeatable
deployments across different environments. By integrating Artifactory with build
tools like Maven for Java and MSBuild for .NET, I learned how dependencies are
resolved dynamically and how teams manage binary outputs such as .jar, .dll, and
Docker images. This experience gave me a clear understanding of artifact
lifecycle management, from creation to promotion and cleanup. It also
emphasized the importance of maintaining clean, structured repositories to avoid
dependency conflicts and ensure faster, more reliable software delivery. Overall,
working with JFrog Artifactory helped me appreciate how large-scale enterprise
software projects maintain control, security, and consistency in their deployment
pipelines.
CI/CD Pipeline Development:
Built robust pipelines using GitHub Actions for .NET applications and Azure
DevOps for Java projects. These pipelines were configured to automate code
build, test, and deploy steps, promoting the DevOps principle of continuous
integration and delivery.
Docker Containerization:
Learned to create Dockerfiles, build container images, and run applications in
isolated environments. Docker improved consistency between development,
testing, and production environments by packaging code along with dependencies.
Container Orchestration with Kubernetes:
Deployed containerized apps using Kubernetes, which included writing
deployment and service YAML files, managing pods, scaling applications, and
ensuring high availability. This taught me how modern applications are deployed
and managed at scale in production.
26
Infrastructure Provisioning with Terraform:
Applied Infrastructure as Code (IaC) concepts using Terraform to provision
Azure resources such as Azure Web Apps, Container Registry (ACR), and virtual
networks. This improved my understanding of reproducible and automated
infrastructure management.
Configuration Management with Ansible:
Used Ansible playbooks for automating configuration tasks on remote servers,
reducing manual intervention and human error. This introduced me to agentless
configuration management and its role in maintaining server environments
consistently.
27
CHAPTER 6: SUMMARY AND CONCLUSION
6.1 Summary
This internship at Nagarro as a DevOps Trainee proved to be a highly enriching and
transformative journey, bridging the gap between academic learning and practical
industry application. Over the course of the internship, I was immersed in real-world
software delivery environments where I applied my theoretical understanding of
DevOps concepts to actual enterprise-grade projects. This hands-on experience
allowed me to witness firsthand how large-scale software systems are built, tested,
deployed, and maintained using modern DevOps methodologies.
The core objective of my project — “Java & .NET MVC WebApp CI/CD & Code
Quality Management” — centered around streamlining and automating various
phases of the software development lifecycle. From continuous integration and
automated testing to secure and scalable deployments, I built and managed workflows
that ensured smooth delivery pipelines across both Java (Spring MVC) and .NET
MVC applications. This required the integration of a wide array of powerful tools and
technologies, including GitHub, GitLab, Azure DevOps for version control and
pipeline orchestration; Docker and Kubernetes for containerization and orchestration;
Terraform and Ansible for infrastructure provisioning and configuration; and
SonarCloud, Grype, Trivy, and JFrog Artifactory for maintaining code quality,
security, and artifact management.
This internship not only enhanced my technical skills but also gave me valuable
exposure to industry-level practices and expectations. It deepened my understanding
of how DevOps facilitates faster, more reliable software delivery and helped me build
a solid foundation for my future in this field. I now feel more equipped and motivated
28
to take on real-world challenges and continue my journey as a future DevOps
engineer.
6.2 Conclusion
The internship experience significantly contributed to both my technical and personal
development. I improved in areas such as teamwork, communication, time
management, and problem-solving — all essential for success in a collaborative tech
environment. Regular assessments, mentor vivas, presentations, and assignment
deadlines created a structured and growth-oriented learning environment.
This internship served as a strong foundation for launching my career in DevOps and
cloud engineering. It allowed me to transition from an academic learner to an
industry-ready professional, confident in applying technical skills and collaborating in
real-world settings. I now feel prepared to contribute meaningfully in a dynamic and
innovation-driven organization like Nagarro or similar workplaces.
While the internship at Nagarro was an excellent learning experience, it also helped
me identify several areas where I can personally improve to grow further as a DevOps
engineer:
Throughout the internship, I worked with scripting languages like Shell and
PowerShell to automate various tasks, such as deployment and system
configuration. While I became comfortable with the basics, I recognized the need
to write cleaner, more modular scripts that can be reused across different projects.
Writing efficient scripts is a vital skill, as it forms the basis of automation. In the
future, I plan to study scripting best practices, explore advanced scripting use-
cases, and practice writing scripts that are both scalable and easy to maintain.
30
reliability, and performance optimization — completing the end-to-end DevOps
toolchain and making me better equipped to manage real-world production
environments.
I worked with Terraform and Ansible, but mostly at an introductory level. I aim to
build more complex infrastructure-as-code setups and configuration automation in
my future learning.
- Regular Self-Evaluation:
The level-up tests and mentor vivas highlighted the importance of regular self-
assessment. I plan to incorporate weekly learning reviews and personal check-ins
to stay consistent with progress.
31
References
- · Swagger/OpenAPI - https://swagger.io/docs/
34