λλ λμμ μ
λ‘λκΈ°λ₯μ ꡬννλ©΄μ, λ°±κ·ΈλΌμ΄λ μ€λ λ κ΄λ¦¬μ μ€μμ±μ λν΄μ μκ² λμλ€.μ λ°±κ·ΈλΌμ΄λ μ€λ λλ₯Ό κ΄λ¦¬ν΄μΌ ν κΉ?λ©μΈ μ€λ λλ‘ νλ©΄, κ°λ°μ μ
μ₯μμ μ½λ μ§κΈ°λ μ¬μ΄λ°...λ°λ‘ 'μ¬μ©μ κ²½ν' λλ¬Έμ΄λ€.μλ₯Όλ€μ΄, http λ νΈλ‘ν μμ²μΌλ‘ μλ²μ λμμ νμΌμ μ
λ‘λ νλ©΄ 짧κ²λ 20μ΄~1λΆ κ°λ μκ°μ΄ κ±Έλ Έλ€.μ΄λ° κ²½μ°μ httpμμ²μ μλ΅μ΄ μ¬λκΉμ§ κΈ°λ€λ¦¬λ νΉμ±μ΄ μμ΄μ, μ‘ν°λΉν°μμ http μμ²μ λ³΄λΈ κ²½μ°μ κ³μ λκΈ°λ₯Ό ν΄μΌ νλ€.μ¬μ©μ μ
μ₯μμλ μΈμ κΉμ§ κΈ°λ€λ €μΌ νλμ§ μκΈΈμ΄ μκΈ° λλ¬Έμμ±μ λκ³ μΆμ΄μ§λ€... λ°λΌμ, λ©λν μ±μ΄ λ μ μλλ‘(1)λμμ μ
λ‘λ μμ²μ λΉλκΈ°μ μΌλ‘ μ²λ¦¬(μμ²μ λ³΄λΈ ν μλ΅κ³Ό κ΄κ³μμ΄ λ€μ λμμ μ€ν)νκ³ , (2)λμμμ΄ μ μ
λ‘λ λ..
μ 체 κΈ
π©π» java, mysql, android, php, javascriptλ₯Ό λ€λ£Ήλλ€λ보기 ubuntu@ip-172-31-46-103:/var/www/html$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php -r "if (hash_file('sha384', 'composer-setup.php') === 'dac665fdc30fdd8ec78b38b9800061b4150413ff2e3b6f88543c636f7cd84f6db9189d43a81e5503cda447da73c7e5b6') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" php composer..
s3λ? aws s3λ μ€ν λ¦¬μ§ μλΉμ€(Storage Service)μ΄λ€. μ½κ² λ§νμλ©΄ νΉμ ν μ¬μ§,λμμ λ±μ νμΌμ μ μ₯νκΈ° μν΄ μ¬μ©ν μ μλ μλΉμ€μ΄λ€. s3μμ κ°μ²΄(Object)λ μ μ₯λλ νμΌμ μλ―Ένκ³ , λ²ν·(Bucket)μ νμΌμ΄ μ μ₯λ νλ‘μ νΈλ₯Ό μλ―Ένλ€ s3λ ν€(κ³ μ μλ³μ)μ κ°(λ°μ΄ν° μ체)λ‘ κ΅¬μ±λ λ°μ΄ν° μ‘°κ°μΈ κ°μ²΄μ κ°λ
μ κΈ°λ°μΌλ‘ νλ€. κ°μ²΄λ ν
μ€νΈ νμΌμμ μ΄λ―Έμ§ λ° λΉλμ€ κ°μ λ©ν°λ―Έλμ΄ μ½ν
μΈ μ μ΄λ₯΄κΈ°κΉμ§ 무μμ΄λ λ μ μλ€. ν¬κΈ°λ μ΅λ 5TBκ° λ μ μλ€. λμμ μ
λ‘λ μκ°μ μ€μ¬λ³΄κ³ μ, λμμ νμΌμ ffmpegλ‘ μμΆνμ¬, s3 bucketμ μ
λ‘λ νλ€. 220MB => 13.5MBλ‘ νμ€ν μμΆλκΈ΄ νμ§λ§ μμΆνλλ° μκ°μ΄ λ무 μ€λ κ±Έλ¦°λ€. /..
μ°λ¦¬κ° php serverμμ fcm serverλ‘ μλ¦Ό λ°μ΄ν°λ₯Ό 보λΌλλ, php serverμμ server keyλ₯Ό 첨λΆν΄μ λ°μ΄ν°λ₯Ό 보λ΄μ€μΌ νλ€. server keyλ λͺ¨λκ° μλ―μ΄ νμ΄μ΄λ² μ΄μ€ μ½μμμ λ°κΈλ°μ ν νμΈν μ μλ€ λ€μ λ§ν¬λ μλ²ν€ λ°κΈμ΄ μλ£λ ν, νμΈν μ μλ λ§ν¬μ΄λ€. https://console.firebase.google.com/project/tiki-taka-22f76/settings/cloudmessaging λ‘κ·ΈμΈ - Google κ³μ μ΄λ©μΌ λλ ν΄λμ ν accounts.google.com κ·Έλ°λ°, μ΄ λ§ν¬μμ μλ²ν€λ₯Ό νμΈν μ μλ κ²½μ°κ° μλ€.... μλ²ν€λ₯Ό νμΌλ‘λ§ κ°μ§κ³ μκ³ , ννμ΄μ§μ λ°λ‘ μλ²ν€κ° μλ¨λ κ²½μ°μ΄λ€. ν΄κ²°λ°©λ² Cloud Mess..
public class FirebaseCloudMessageService { // μλ¦Ό λ©μμ§μ λ°μ΄ν° νμ΄λ‘λ ν¬ν¨ public static void sendMessage(String registrationToken, String content, int messageId, int roomId, String name, String userProfile) throws Exception { // λ°μ΄ν° λ©μΈμ§ // ν¬κ·ΈλΌμ΄λ, λ°±κ·ΈλΌμ΄λμμλ μ§μ μΌκ΄λκ² μ²λ¦¬ Message message = Message.builder() // λ©μμ§ κ΅¬μ±μ μμν μ μλ Builder κ°μ²΄κ° λ°ν .putData("title", name) // μλ¦Ό μ λͺ©μ λ°μ΄ν° νμ΄λ‘λμ μΆκ° .putData("userProfile..
fcmμ μ¬μ©νλ €κ³ μ¬λ¬ μΈν
μ νλ λμ€μ, μλ‘μ΄ ν ν°μ λ°κΈ λ°μμΌλ μ ν ν°μ΄ λΆλ¬μμ§μ§ μλ λ¬Έμ κ° λ°μνλ€. public class MyFirebaseMessagingService extends FirebaseMessagingService { String CHANNEL_ID; String CHANNEL_NAME; int userId; ChatApiService service; private static final String TAG = "FCM Service"; // μλΉμ€κ° μμ±λ λ νΈμΆλλ©°, μ¬κΈ°μ FCM ν ν°μ μμ²νλ κ²μ΄ μ’μ΅λλ€. @Override public void onCreate() { super.onCreate(); userId = SharedPreferencesHelper..
λ€μμ λ‘λ²νΈ C. λ§ν΄ Clean Code(ν΄λ¦° μ½λ)λ₯Ό μ½κ³ , μ 리ν λ΄μ©μ
λλ€. μ μ ν ν κΈΈμ΄λ₯Ό μ μ§νλΌ 500μ€μ λμ΄κ°μ§ μκ³ λλΆλΆ 200μ€ μ λμΈ νμΌλ‘λ 컀λ€λ μμ€ν
μ ꡬμΆν μ μλ€λ μ¬μ€μ΄λ€. λ°λμ μ§ν¬ μ격ν κ·μΉμ μλμ§λ§, λ°λμ§ν κ·μΉμΌλ‘ μΌμμΌλ©΄ μ’κ² λ€. μΌλ°μ μΌλ‘ ν° νμΌλ³΄λ€ μμ νμΌμ΄ μ΄ν΄νκΈ° μ½λ€. μμ§κ±°λ¦¬ μλ‘ λ°μ ν κ°λ
μ μΈλ‘λ‘ κ°κΉμ΄ λ¬μΌ νλ€. λ¬Όλ‘ λ κ°λ
μ΄ μλ‘ λ€λ₯Έ νμΌμ μνλ€λ©΄ κ·μΉμ΄ ν΅νμ§ μλλ€. νμ§λ§, νλΉν κ·Όκ±°κ° μλ€λ©΄, μλ‘ λ°μ ν κ°λ
μ ν νμΌμ μν΄μΌ λ§λ
νλ€. μ΄κ² λ°λ‘ protected λ³μλ₯Ό νΌν΄μΌ νλ μ΄μ μ€ νλλ€. (protected λ³μ : μμ ν΄λμ€κ° λΆλͺ¨ ν΄λμ€μ λ©€λ²(λ³μλ λ©μλ)μ μ κ·Όνκ±°λ μμ ν΄μΌ ν ..