Fakultas Ilmu Komputer UI

Skip to content
Snippets Groups Projects

Tutorial APAP

Authors

Muhammad Raihan Adliputra - 2006485680 - A

Tutorial 6

Pertanyaan

  1. Perhatikan apa yang terjadi pada file index.html pada branch feat/tutorial-6-advancedgit-1. Apa yang terjadi setelah git cherry-pick dilakukan? Apakah kita bisa melakukan cherrypick tanpa harus melakukan commit?
    Yang terjadi setelah git cherry-pick dilakukan adalah menghilangkan file index.html pada branch feat/tutorial-6-advancedgit-1. Hal tersebut bisa terjadi karena commit belum dilakukan setelah menjalankan command git cherry-pick. Oleh karena itu, kita perlu melakukan commit terlebih dahulu setelah menjalankan command git cherry-pick.

  2. Oops! terjadi conflict nih. Yap, conflict ini terjadi karena …
    Isi yang ada pada file index.html berbeda pada branch feat/tutorial-6-advancedgit-1 dan branch tut6-for-merge.

  3. Apa yang terjadi pada log history setelah melakukan rebase (branch rebase-1 dan rebase-2)? Sertakan screenshot log history anda pada kedua branch tersebut!
    Yang terjadi pada log history setelah melakukan rebase antara branch rebase-1 dan branch rebase-2 adalah log dari branch rebase-1 hanya memiliki pesan commit "add a.txt". Sedangkan pada branch rebase-2 akan memiliki pesan commit dari log branch rebase-1 dan pesan commit dari log miliknya sendiri. Berikut adalah hasil screenshot dari isi log pada branch rebase-2 saya:

  4. Jelaskan perbedaan dari "rebase –continue", "rebase –skip", dan "rebase –abort"!

  • rebase-continue adalah command yang digunakan untuk melakukan proses rebase setelah menyelesaikan konflik dari proses rebase yang sebelumnya.
  • rebase-skip adalah command yang digunakan untuk melakukan ulang proses rebase dengan men-skip patch yang sedang dijalankan.
  • rebase-abort adalah command yang digunakan untuk menggagalkan proses rebase dan meletakkan ulang HEAD ke cabang asli.
  1. Jelaskan perbedaan git rebase dan git merge
  • git-rebase adalah command yang digunakan untuk menyatukan 2 branch dengan hanya mengambil pesan commit dari branch yang lain tanpa harus membuat pesan commit yang baru.
  • git-merge adalah command yang digunakan untuk menyatukan 2 pesan commit atau lebih menjadi sebuah pesan commit yang baru. Perbedaan antara kedua command tersebut adalah git-rebase akan membuat log commit yang ada lebih mudah dibaca namun akan lebih sulit untuk membenarkan code yang ada ketika terjadi konflik saat menggabungkan antara 2 branch. git-merge adalah kebalikannya dari hal tersebut.
  1. Pada tahap ini apakah yang terjadi pada direktori git-stash?
    Yang terjadi pada direktori git-stash adalah kita akan menghilangkan code yang telah dibuat sebelumnya. Istilahnya, direktori git-stash akan kita "cut" dan nantinya akan kita "paste" ke dalam branch yang lain.

  2. Apa yang terjadi pada file abc.txt setelah melakukan git reset --hard? Bagaimana kondisi lognya? Apa perbedaan git reset dengan git revert?
    Yang akan terjadi pada file abc.txt setelah melakukan git reset --hard adalah string "this is second line from abc file" akan menghilang. Kondisi dari lognya adalah pesan commit untuk "update abc file 2" akan menghilang.

  • git-reset adalah command yang digunakan untuk
  • git-revert adalah command yang digunakan untuk

Tutorial 5

Pertanyaan

  1. Apa itu Postman? Apa kegunaannya?
    Postman merupakan aplikasi yang akan digunakan sebagai REST CLIENT untuk uji coba dari REST API. Kegunaan dari Postman adalah:
  • Menguji API yang sudah dibuat oleh para developer.
  • Menyediakan fitur Sharing Collectionn API, Testing API, Monitoring API, dan lainnya.
  1. Jelaskan fungsi dari anotasi @JsonIgnoreProperties dan @JsonProperty.
  • @JsonIgnoreProperties berfungsi untuk tidak memperhatikan property yang ditentukan dalam serialisasi dan deserialisasi JSON, terutama properti logis.
  • @JsonProperty berfungsi sebagai sebuah method pengambil objek non-static
  1. Apa kegunaan atribut WebClient?
    WebClient digunakan untuk restserviceimpl yang nantinya akan digunakan ketika mengirim dan menerima data dari URI.

  2. Apa itu ResponseEntity dan BindingResult? Apa kegunaannya?

  • ResponseEntity merupakan perwakilan dari HTTP response. ResponseEntity memperbolehkan kita menambahkan sebuah header dan juga kode status.
  • BindingResult berfungsi untuk menyimpan hasil validasi, pengikatan, dan berisi kesalahan yang mungkin terjadi. BindingResult harus ada tepat setelah objek model divalidasi.

Tutorial 4

Pertanyaan

  1. Jelaskan perbedaan th:include dan th:replace!
  • th:include memungkinkan kita untuk memasukkan code yang kita fragment ke dalam tag div agar nantinya konten yang ada dalam fragment juga ditampilkan.
  • th:replace akan digunakan untuk mengubah host tag dengan isi konten yang ada pada fragment.
  1. Jelaskan apa fungsi dari th:object!
    th:object berfungsi untuk menspesifikasikan suatu objek yang akan kita submit pada suatu form. Biasanya akan digunakan ketika menggunakan method POST dan setelah itu diiringi dengan th:action.

  2. Jelaskan perbedaan dari * dan $ pada saat penggunaan th:object! Kapan harus dipakai?

  • *{} merupakan sebuah ekspresi dari sebuah variabel yang akan dipakai ketika ingin mengevaluasi suatu objek yang sudah didefinisikan pada controller.
  • ${} merupakan sebuah ekspresi dari sebuah variabel yang akan dipakai ketika ingin mengevaluasi secara utuh suatu objek atau atribut.

Tutorial 3

What I have learned today

  • Saya baru mengetahui bahwa mengetik isi dari class akan lebih cepat dari mengetik import terlebih dahulu

Pertanyaan

  1. Tolong jelaskan secara singkat apa kegunaan dari anotasi-anotasi yang ada pada model (@AllArgsConstructor, @NoArgsConstructor, @Setter, @Getter, @Entity, @Table)
  • @AllArgsConstructor berfungsi untuk membuat constructor yang nantinya akan membutuhkan argumen pada class.
  • @NoArgsConstructor berfungsi untuk men-generate constructor kosong.
  • @Setter berfungsi untuk men-generate fungsi setter.
  • @Getter berfungsi untuk men-generate fungsi getter.
  • @Entity berfungsi untuk mendefinisikan kelas yang ada berkorelasi dengan tabel pada database.
  • @Table berfungsi untuk mendefinisikan nama tabel database yang akan digunakan.
  1. Pada class CourseDb, terdapat method findByCodeUsingQuery dan findByCode, apakah perbedaan kedua method tersebut? Jelaskan juga kegunaan @Query pada method findByCodeUsingQuery!
  • Method findByCodeUsingQuery berfungsi untuk mencari Objek Course yang sesuai dengan codenya menggunakan Query.
  • Method findByCode berfungsi untuk mencari Objek Course yang sesuai dengan codenya menggunakan method bawaan dari JPA Repository.

    @Query digunakan agar kita bisa menjalankan query sql untuk mencari code yang sesuai dari Course yang ingin kita lihat pada tabel relasi yang sudah kita buat. Atau dalam kata lain method tersebut digunakan untuk meng-execute JPQL dan query native dari SQL nya.
  1. Jelaskan perbedaan kegunaan dari anotasi @JoinTable dan @JoinColumn
  • @JoinColumn berfungsi untuk membuat sebuah kolom baru pada database yang ada dan kolom tersebut digunakan untuk merefer kolom lain menggunakan foreign key.
  • @JoinTable berfungsi untuk membuat pemetaan asosiasi-asosiasi seperti many-to-many, many-to-one, dan lainnya kedalam tabel database.
  1. Pada class Pengajar, digunakan anotasi @JoinColumn pada atribut Course, apa kegunaan dari name, referencedColumnName, dan nullable dalam anotasi tersebut? dan apa perbedaan nullable dan penggunaan anotasi @NotNull
  • referencedColumName adalah sebuah kolom yang akan dirujuk dari kolom lain yang merupakan doreign key.
  • name adalah nama kolom suatu entity.
  • nullable digunakan untuk mencegah adanya data yang bersifat null pada database.
  • Perbedaan antara nullable dan anotasi @NotNull adalah nullable menunjukkan status dari null tersebut, sementara @NotNull digunakan untuk mencegah adanya data yang null untuk masuk kedalam database.
  1. Jelaskan kegunaan FetchType.LAZY, CascadeType.ALL, dan FetchType.EAGER
  • FetchType.Lazy digunakan untuk mengakses sebuah atribut yang saat dibutuhkan.
  • CascadeType.ALL digunakan untuk mengambil atribut yang berelasi ketika parent entity diambil.
  • FetchType.EAGER digunakan untuk menyebarkan operasi seperti PERSIST, REMOVE, REFRESH, MERGE, dan lainnya ke entitas yang terkait.

Tutorial 2

What I have learned today

  • Saya berhasil mencoba dan memahami materi Organizing Domain Logic & Service Layer

Pertanyaan

  1. Cobalah untuk menambahkan sebuah Course dengan mengakses link berikut: Sebuah Link Apa yang terjadi? Jelaskan mengapa hal tersebut dapat terjadi!
    Akan terjadi Whitelabel Error. Error ini akan terjadi karena file controller akan mencoba mengakses file html yang tidak tersedia, yaitu ketika file controller mengembalikan string nama file html yang dimana file html tersebut belum tersedia pada folder template.

  2. Menurut kamu anotasi @Autowired pada class Controller tersebut merupakan implementasi dari konsep apa? Dan jelaskan secara singkat cara kerja @Autowired tersebut dalam konteks service dan controller yang telah kamu buat
    Anotasi @Autowired pada file controller adalah contoh implementasi dari Dependency Injection, yaitu sebuah fitur yang membuat Spring bisa menyelesaikan dan menyuntikkan beans yang berkolaborasi dengan beans lainnya. Reference:

Dependency Injection

  1. Cobalah untuk menambahkan sebuah Course dengan mengakses link berikut:
    Sebuah Link
    Apa yang terjadi? Jelaskan mengapa hal tersebut dapat terjadi!
    Akan terjadi Whitelabel Error. Error ini akan terjadi karena method addCourse membutuhkan sebuah parameter description untuk menambahkan sebuah course ke dalam listCourse, sementara parameter yang dibutuhkan tidak ada.

  2. Jika Papa APAP ingin melihat Course dengan kode APAP, link apa yang harus diakses?
    Link yang dapat diakses oleh Papa APAP adalah sebagai berikut:

  • Link 1 yang akan menggunakan RequestParam.
  • Link 2 yang akan menggunakan PathVariable. Papap APAP bisa mengakses link tersebut karena kedua link itu akan mengarahkan user untuk mampu melihat detail course apapun dengan kode spesifik yang harus dimasukkan.
  1. Tambahkan 1 contoh Course lainnya sesukamu. Lalu cobalah untuk mengakses > Sebuah Link, apa yang akan ditampilkan? Sertakan juga bukti screenshotmu.
    Yang akan ditampilkan adalah detail seluruh course yang akan menampilkan:
  • Code
  • Nama Course
  • Description
  • Jumlah Sks
    Untuk contoh course yang akan saya tambahkan adalah (bukti penambahan bisa diakses melalui link ini Link Bukti):
  • Kode = SOSI
  • Nama Course = APAP Tutorial2
  • Description = 2020 Fasilkom
  • Jumlah Sks = 3

Tutorial 1

What I have learned today

  • Saya berhasil mencoba hands on membuat program BMI sederhana menggunakan Spring Boot
  • Saya berhasil mengingat dan mengoperasikan kembali command-command pada penggunaan GitLab

GitLab

  1. Apa itu Issue Tracker? Apa saja masalah yang dapat diselesaikan dengan Issue Tracker?
    Issue Tracker, merupakan fitur yang ada pada GitHub yang berfungsi untuk memudahkan user untuk tetap on track dan mengerahui perubahan apa saja yang terjadi pada proyek. Selain itu, Issue Tracker juga bisa membantu user untuk menemukan bug yang ada pada proyek. Reference:

About issues

  1. Apa perbedaan dari git merge dan git merge --squash?
    command git merge --squash akan menyatukan semua commit pada suatu branch menjadi 1 commit saja. Sehingga, jika user ingin melakukan merge ke branch main, maka branch tersebut hanya memberikan 1 commit. Reference:

git merge VS git merge -- squash

  1. Apa keunggulan menggunakan Version Control System seperti Git dalam pengembangan suatu aplikasi?
    Fungsi dari Version Control System adalah menyimpan perubahan pada source code, sehingga mampu meminimalisir resiko gagal ada kode yang sudah kita ubah. Reference:

Version Control System

Spring

  1. Apa itu library & dependency?
  • Library merupakan kumpulan code pada sebuah modul yang bisa dipakai oleh user untuk memudahkan pembuatan suatu proyek.
  • Dependency merupakan sebuah kata yang mereferensikan ketika suatu software saling berkaitan dengan software lainnya. Reference:

Library Dependency

  1. Apa itu Gradle? Mengapa kita menggunakan Gradle? Apakah ada alternatif dari Gradle?
    Gradle merupakan automation tool untuk membangun software. Gradle kita gunakan karena Gradle mampu memberikan performa yang sangat baik dan juga Gradle saat ini sudah bisa dipakai oleh user di berbagai macam IDE yang ada di pasar saat ini. Alternatif lain dari penggunaan Gradle adalah Maven, Bazel, dan lainnya. Reference:

About Gradle Gradle altenatives

  1. Selain untuk pengembangan web, apa saja yang bisa dikembangkan dengan Spring framework?
    Spring framewor dapat digunakan untuk Cloud, Reactive, Event Driven, dan sebagainya. Reference:

Spring framework

  1. Apa perbedaan dari @RequestParam dan @PathVariable? Kapan sebaiknya menggunakan @RequestParam atau @PathVariable?
  • @RequestParam digunakan untuk mengakses nilai dari parameter.
  • @PathVariable digunakan untuk mengakses nilai dari template URI. Reference:

RequestParam VS PathVariable

What I did not understand

Saya masih belum terbiasa dengan sistem branch pada gitlab, karena selama ini saya hanya menggunakan branch main pada gitlab. Saya juga baru pertama kali menggunakan spring boot, sehingga saya masih tidak mengerti apa yang saya ketikkan pada kode yang ada pada Tutorial 1 ini.

  • Apakah saya mampu lulus APAP dengan nilai memuaskan? YA. Karena saya mampu dan saya ingin.