Fakultas Ilmu Komputer UI

Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
README.md 22.59 KiB

Tutorial APAP

Authors

  • Hilmi Al Biruni - 2006463843 - APAP-B

Tutorial 8

Pertanyaan 1: Apa itu Dockerfile dan docker-compose.yaml? Apa fungsinya?

Dockerfile adalah file environment agar dapat menggunakan Docker pada proyek springboot tersebut.

Sedangkan docker-compose.yaml adalah alat untuk mendefinisikan dan menjalankan satu atau lebih container yang saling terkait pada sebuah command

Pertanyaan 2: Screenshot hasil perubahan anda. Setelah anda menyelesaikan tutorial ini, menurut anda, mengapa kita perlu mengganti port?

Perubahan port pada docker-compose.yml dilakukan agar kita bisa menggunakan cabang port dari 8080, yaitu 10127. Hal ini untuk mengurangi traffic dengan aplikasi yang menggunakan port serupa.

Pertanyaan 3: Mengapa terdapat versi dev dan prod? File apa yang menentukan konfigurasi mana yang dipakai? Apa yang harus dilakukan untuk menjalankan versi prod? (hint: baca file pada langkah 3 dengan teliti)

application-dev.yml berfokus digunakan untuk tahap development dan productivity, sedangkan application-prod.yml berfokus digunakan untuk tahap performance dan scalability. application-prod.yml juga digunakan untuk menentukan konfigurasi yang dipakai karena didalamnya didefinisikan suatu port tertentu, yaitu 8080 untuk prod dan 2020 untuk prod2.

Dalam menggunakan versi prod, kita memanggilnya pada app.env di bagian SPRING_PROFILES_ACTIVE. Lalu, pada docker-compose.yml akan memanggil app.env pada env_file:. Dari docker-compose.yml akan digunakan oleh Dockerfile sehingga application-prod.yml berhasil digunakan.

Pertanyaan 4: Apa saja yang terjadi di langkah ini?

Saya berpindah ke directory belajarbelajar, lalu melakukan build jar agar menggunakan build versi terbaru, kemudian melakukan build image dengan docker-compose up. Command tersebut berfungsi untuk membangun, membuat, memulai, dan melampirkan container untuk service. Secara tidak langsung, container akan dibuat dan langsung dijalankan tanpa tambahan command lainnya

Pertanyaan 5: Sertakan screenshot container yang sedang berjalan (versi gui atau cli, pilih salah satu). Apa itu docker container, images, dan volume?

Docker container adalah sebuah env untuk docker image yang berisikan paket software agar dapat menjalankan aplikasi seperti kode, config, runtime, system tools, dan system libraries.

Docker images adalah sebuah file yang digunakan untuk mengeksekusi kode pada docker container

Docker volume adalah sebuah file untuk menyimpan data pada aplikasi dari docker container

Pertanyaan 6: Apa perbedaan docker-compose down dan stop?

docker-compose down berfungsi untuk memberhentikan container sekaligus menghapus container, sehingga perlu dilakukan docker-compose build.

docker-compose stop berfungsi hanya untuk memberhentikan container tanpa menghapus container.

Pertanyaan 7: Sertakan screenshot mengakses laman kirti milik anda melalui browser (seperti screenshot di atas)

Pertanyaan 8: Ceritakan pengalaman anda melakukan deployment ke Kirti. Kendala apa yang anda alami?

Hasil dari deployment menggunakan Kirti menurut saya cukup menyenangkan karena kita bisa melihat hasil nyata aplikasi lewat link, yaitu apap-127 dengan domain cs.ui.ac.id. Kendala yang saya alami adalah server kawung sering overload sehingga saya selalu overtime saat melakukan build dan deployment. Contoh spesifiknya adalah saat melakukan upload frontend dan backend, hanya frontend saya yang terupload di kawung, sedangkan backend tidak.

Pertanyaan 9: Buka container docker Anda, lalu screenshot. Apa perbedaan tampilan container sekarang dengan tampilan container pada langkah tutorial docker di awal tadi?

maaf, saya tidak sempat menyertakan screenshoot di awal tahap docker

Perbedaannya adalah pada tahap awal docker, hanya terdiri dari tutorial-apap, db-1, dan web-1. Sedangkan di tahap sekarang, bertambah menjadi tutorial-apap, db-1, web2-1, web-1.

Hal ini dikarenakan pada tahap ini saya membuat 2 port sehingga membutuhkan 2 container, yaitu web2-1 dan web-1.

Pertanyaan 10: Sertakan screenshot tampilan web ketika pertama kali menjalankan localhost:9090 dan tampilan web ketika halaman di-refresh.

Port 8080 sebelum melakukan refresh

Port 2020 setelag melakukan refresh

Pertanyaan 11: Kendala apa yang anda hadapi ketika melakukan tutorial bagian nginx?

Kendala saya adalah ketidaktelitian saya saat melakukan configurasi pada docker-compose.yml. Selain itu, tidak ada kendala lain.

Tutorial 7

Pertanyaan 1: Jelaskan secara singkat perbedaan Otentikasi dan Otorisasi! Di bagian mana (dalam kode yang telah anda buat) konsep tersebut diimplementasi?

Otentikasi adalah proses melakukan verifikasi apakah pengguna yang ingin melakukan login dengan username yang dimiliki terlah tersedia di database dan dapat masuk untuk mengakses aplikasi. Sedangkan, otorisasi adalah proses untuk menentukan hak pengguna apakah pengguna tersebut memiliki akses ke halaman tertentu yang telah ditentukan otentifikasinya.

Implementasi otentikasi pada class WebSecurityConfig

@Autowired
    public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(encoder());
    }

Implementasi otorisasi pada class WebSecurityConfig

http
                .authorizeRequests()
                .antMatchers("/css/**").permitAll()
                .antMatchers("/js/**").permitAll()
                .antMatchers("/login-sso", "/validate-ticket").permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin()
                .loginPage("/login").permitAll()
                .and()
                .logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
                .logoutSuccessUrl("/login").permitAll();

Pertanyaan 2: Apa itu BCryptPasswordEncoder? Jelaskan secara singkat cara kerja dan tujuannya.

BCryptPasswordEncoder merupakan sebuah class yang mengimplementasikan PasswordEncoder dan juga menyediakan password hashing. Untuk melakukan register password, tidak mungkin dengan menggunakan plaintext, maka penyimpanan password menggunakan hashing. BCryptPasswordEncoder bekerja dengan menyimpan password yang telah di-hashing terlebih dahulu.

Pertanyaan 3: Apakah penyimpanan password sebaiknya menggunakan encryption atau hashing? Mengapa demikian?

Encryption dan hashing merupakan dua istilah yang berbeda. Encryption adalah proses mengubah sebuah pesan normal (plaintext) menjadi pesan yang tidak mudah dibaca (ciphertext). Ciphertext yang diperoleh dari encryption dapat dengan mudah diubah menjadi plaintext menggunakan encryption key. Hashing adalah proses mengubah informasi menjadi kunci menggunakan hash function. Informasi asli tidak dapat diambil dari hash key dengan cara apapun. Dengan demikian, penyimpanan password akan lebih aman jika dilakukan dengan hashing daripada encryption.

Pertanyaan 4: Jelaskan secara singkat apa itu UUID beserta penggunaannya!

UUID (Universally Unique Identifier) merupakan kode dengan jumlah hashing terbanyak yaitu sebanyak 32 karakter yang akan digunakan untuk keamanan data. UUID di-generate untuk id pengguna. Dibandingkan dengan BCrypt yang merupakan password yang berguna untuk mengamankan id dari hacking. Dapat dipastikan UUID yang tergenerate unik untuk tiap objek yang ada di internet, jadi id yang dimiliki pengguna akan aman.

Pertanyaan 5: Apa kegunaan class UserDetailsServiceImpl.java? Mengapa harus ada class tersebut?

Class UserDetailsServiceImpl.java memberikan informasi mengenai Otentikasi dan Otorisasi akun yang ada pada class lain. Class ini harus diimplementasikan, jika tidak informasi tersebut tidak dapat diberikan. Kemampuan tersebut ada karena class mengimplementasikan UserDetailService. UserDetailService merupakan interface yang ada dari Spring Security. Selain itu, class ini meng-override loadUserByUsername() yang bisa dilakukan kustomisasi untuk pencarian user.


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?

File index.html dipull dari branch tut6-for-cherrypick sehingga index.html ada pada branch feat/tutorial-6-advancedgit-1. Git cherry pick mencari commit-id yang akan mengambil file dari branch tertentu. Dalam melakukan hal itu, perlu dilakuka commit agar dapat terdefinisi commit-id

Pertanyaan 2: Conflict ini terjadi karena pada branch feat/tutorial-6-advancedgit-1 sudah ada kode dengan baris yang sama di index.html dengan branch tut6-for-merge sehingga akan menimbulkan collisons jika dilakukan merging.

Pertanyaan 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!

Log histori pada rebase-1 terdapat juga pada log histori rebase-2.

Pada branch rebase-1

Maka akan terdapat juga pada branch rebase-2

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

Pada "rebase --continue" akan melaksanakan rebase suatu pada perintah jika konflik sudah disolve. Lalu, pada "rebase --skip" akan mengabaikan bagian yang terkena konflik. Kemudian, pada "rebase --abort" akan membatalkan proses rebase.

Pertanyaan 5: Jelaskan perbedaan git rebase dan git merge!

Pada git rebase melakukan penggabungan urutan commit pada suatu branch ke urutan commit pada branch yang dituju. Sebagai contoh, kita mengerjakan kode pada branch B dan melakukan commit disana. Kita dapat memindahkan urutan commit branch B ke urutan branch A tanpa mengubah kode pada branch A. Hal ini digunakan jikalau saat mengerjakan branch A kita membutuhkan sesuatu pada branch B, maka kita tinggal melakukan pull commit-id pada branch A yang terdapat juga di branch B.

Berbeda dengan git merge yang melakukan merge kode dari branch B dengan branch A sehingga kode/file pada branch A akan berubah