반응형
반응형

Web-development

 You Might Not Need that Framework
 Catching Up on the WordPress 🚫 WP Engine Sitch
 Web Components Are Not the Future — They’re the Present
 Web components are okay
 The continuing tragedy of emoji on the web
 Tauri adoption guide: Overview, examples, and alternatives
 Your Accessibility Questions Answered by a Blind Person
 Five Ways to Lazy Load Images for Better Website Performance

CSS

 How to create Shapes with Inner Curves using CSS Mask
 Feature detecting Scroll-Driven Animations with @supports: you want to check for animation-range too
 Open & Close Transitions with <details>
 Introducing TODS — a typographic and OpenType default stylesheet
 The problem with superscripts and subscripts
 Slide Through Unlimited Dimensions With CSS Scroll Timelines
 How to Make a “Scroll to Select” Form Control
 Color Mixing With Animation Composition
 Bad CSS-Dad Jokes (III)
 Developing modals using only CSS and the Popover API
 Solved by CSS Scroll-Driven Animations: hide a header when scrolling down, show it again when scrolling up.

JavaScript

 A guide to destructuring in JavaScript
 null, but also not null
 What are Durable Functions? A visual JavaScript primer
 How to use the Reddit API for a JavaScript application

 

https://frontender-ua.medium.com/frontend-weekly-digest-382-23-29-september-2024-0bbcff95cde9

 

 
반응형
반응형

https://medium.com/@PurpleGreenLemon/php-isnt-that-bad-so-why-the-hate-c7b374b87ee4

 

PHP isn’t that bad, so why the hate?

Because it’s currently 77% of the internet right now

medium.com

PHP는 진화하고 레벨을 올리느라 바빴지만 우리가 사용하는 도구도 마찬가지입니다. 다른 활성 생태계와 마찬가지로 PHP는 끊임없는 개발로 가득 차 있기 때문입니다.

실제로 2023년 개발자 설문조사에 따르면 PHP 개발자의 64.8%가 정기적으로 프레임워크를 사용하는 것으로 나타났습니다. 모든 PHP 개발자의 절반 이상이 이러한 도구를 신뢰하고 있습니다!

그렇다면 왜 그렇게 인기가 있습니까? 글쎄, 몇 가지 큰 선수를 살펴 보겠습니다.

  • Laravel : 이것은 PHP 프레임워크의 수퍼맨입니다. 2023년 중반 현재 GitHub 에서 60,000개 이상의 별표를 받은 현재 가장 인기 있는 PHP 프레임워크입니다Laravel의 명성은 우아한 구문과 개발 속도입니다. ORM, 라우팅, 보안, Blade라는 놀라운 템플릿 엔진 등이 있습니다. Laravel은 PHP의 많은 단점을 해결하여 안전하고 유지 관리 가능한 PHP 코드를 더 쉽고 빠르게 작성할 수 있도록 합니다.
  • Symfony : Symfony는 PHP 프레임워크의 배트맨과 같습니다. 한동안 사용되어 왔으며 매우 유연하며 많은 대규모 웹 사이트 및 응용 프로그램에서 사용됩니다. 재사용 가능한 PHP 라이브러리를 사용하여 양식 생성, 개체 구성, 라우팅, 인증 등과 같은 작업을 완료할 수 있습니다. Symfony는 GitHub 에서 25,000개 이상의 별을 보유하고있으며 안정성과 수명으로 유명합니다.
  • CodeIgniter : CodeIgniter는 가볍고 설치가 간단하므로 슈퍼 히어로 비교의 플래시입니다. 모든 기능을 갖춘 웹 애플리케이션을 만들기 위해 간단하고 우아한 툴킷이 필요한 개발자에게 적합합니다. 2023년 현재 GitHub 에서 19,000개 이상의 별을 자랑합니다 .

이러한 프레임워크와 Yii , CakePHP  Zend Framework 와 같은 다른 프레임워크는 모두 PHP를 작업하기에 더 즐겁고 생산적인 언어로 만드는 데 기여했습니다. 그들은 좋은 코딩 관행을 시행하고, 재사용 가능한 코드를 제공하고, 프로그래밍의 반복적인 부분을 많이 처리하여 재미있는 일에 집중할 수 있도록 합니다. 요컨대, 그들은 당신의 PHP 생활을 훨씬 더 좋게 만듭니다.

오늘의 PHP: 평판, 현실 및 미래 가능성

PHP의 명성에 관해서는 험난한 여정이었습니다.

"프로그래밍의 핵심"에서 "웹 개발의 다크호스"가 되기까지 PHP의 여정은 헐리우드의 약자 이야기에 불과합니다. 하지만 기억하세요. 헐리우드가 좋은 보상을 좋아하는 것처럼 프로그래밍 세계도 마찬가지입니다.

따라서 몇 가지 신화를 없애자.

오해 #1: PHP는 구식이다.

그렇게 빠르지 않아, 친구! PHP 8의 도입으로 언어는 장갑을 끊는 것과는 거리가 멀다는 것을 보여주었습니다. 사실, 그것은 단지 따뜻해지고 있습니다. PHP는 여기에 있으며 동시대 제품과 경쟁할 수 있는 현대적인 기능으로 상당한 근육을 갖추고 있습니다.

오해 #2: PHP는 느리다.

옛날 옛적에 아마도. 그러나 오늘? 절대적으로하지. PHP 7 이후의 속도 향상은 엄청났습니다. 벤치 마크 테스트는 이전 버전보다 최대 3배 빠른 PHP 8 실행 스크립트를 보여줍니다. 따라서 PHP가 느리다고 말하는 사람이 있으면 캘린더를 확인하도록 요청하세요. 우리는 더 이상 2009년이 아닙니다!

신화 #3: PHP는 안전하지 않습니다.

모든 언어는 잘못 사용하면 안전하지 않습니다. 신뢰할 수 있는 프레임워크 사용을 포함하여 PHP 개발의 최신 모범 사례를 통해 PHP는 다른 언어만큼 안전할 수 있습니다. 구부러진 못에 대해 망치를 탓하지 마십시오!

PHP에 대한 보다 공정한 평가를 위한 간청

PHP는 그렇게 나쁘지 않습니다 .

그러나 농담과 비판의 대상이 되었던 PHP가 더 이상 PHP가 아니라는 점을 인식하는 것도 중요합니다 .

수년에 걸쳐 PHP는 성숙해졌습니다. 겸손한 시작에서 웹의 거의 80%를 지원하는 수준으로 성장했습니다. 과거의 비판을 해결하고 다른 최신 프로그래밍 언어와 정면으로 맞서는 기능을 도입했습니다.

다른 언어와 마찬가지로 PHP도 만병통치약이 아닙니다.

단점, 장점 및 단점이 있습니다. 그러나 이제 오래된 밈을 뒤로 할 때입니다. 다음에 웹 개발 프로젝트에 착수할 때 과거의 명성에 따라 PHP를 할인하지 마십시오.

PHP에 공정한 기회를 주고 현재 장점에 대해 평가하면 PHP 팬이 될 수 있습니다.

PHP 커뮤니티에서 말했듯 이 방 안의 코끼리가 아니라 ElePHPants 에 관한 것입니다.

따라서 조롱에도 불구하고 웹을 더 나은 곳으로 만들기 위한 사명을 지속적으로 적용하고 개선하고 지속한 이 언어의 탄력성을 축하합시다.

반응형
반응형

Web Speech API  - TTS , not API 

https://developer.mozilla.org/en-US/docs/Web/API/Web_Speech_API

 

Web Speech API - Web APIs | MDN

The Web Speech API enables you to incorporate voice data into web apps. The Web Speech API has two parts: SpeechSynthesis (Text-to-Speech), and SpeechRecognition (Asynchronous Speech Recognition.)

developer.mozilla.org

To run the demo, navigate to the live demo URL in a supporting mobile browser (such as Chrome).

 

 window.speechSynthesis.getVoices();

 

 

https://github.com/mdn/web-speech-api

반응형
반응형

[HTML] 24 Powerful HTML Attributes Every Senior Web Engineer Should Master!

https://javascript.plainenglish.io/24-powerful-html-attributes-every-senior-web-engineer-should-master-ad8a4df0776e

 

24 Powerful HTML Attributes Every Senior Web Engineer Should Master!

There are many HTML attributes, in addition to some basic attributes, there are many useful and particularly powerful attributes;

javascript.plainenglish.io

There are many HTML attributes, in addition to some basic attributes, there are many useful and particularly powerful attributes;

This article will introduce 24 powerful HTML attributes that can make your website more dynamic and interactive, and make users feel more comfortable and happy.

Let’s explore these 24 powerful HTML attributes together!

1. Accept

The Accept attribute is used to specify a list of MIME types that the browser can handle.

Tips:

A MIME type is a standard for identifying the type of document,

For example, text/html represents an HTML document, image/jpeg represents a JPEG image, and so on.

By including the Accept attribute in the HTTP request header, the browser can tell the server which MIME types it can accept in response. Based on this information, the server can choose the most appropriate response type and return it to the browser. The value of the Accept attribute is a comma-separated list of MIME types, wildcards can be used to represent a class of MIME types, for example text/* represents all text types.

2. Autofocus

The Autofocus property is used to automatically set the focus to the specified element when the page loads.

Tips:

Autofocus attributes can be applied to various HTML elements such as text boxes, buttons, drop-down lists, and more.

In HTML5, the Autofocus attribute can omit the attribute value, indicating that the focus is set to the first element with the Autofocus attribute.

When the page is loaded, if there is an element with the Autofocus attribute, the browser will automatically focus the cursor on the element, so that the user can directly interact with the element without manually clicking or using the Tab key to switch focus.

3. Input mode

The Inputmode attribute is an attribute for specifying the type of content entered in the text box.

It can help the browser to better optimize the input experience, such as automatically popping up the appropriate virtual keyboard on mobile devices.

  • text: The default value, which means input any text.
  • none: indicates that no input is required.
  • tel: Indicates to enter a telephone number.
  • url: Indicates the input URL address.
  • email: Indicates to enter an email address.
  • numeric: Indicates the input number.
  • decimal: Indicates inputting a number with a decimal point.
  • search: Indicates to enter a search keyword.

The level of support for the Inputmode attribute may vary in different browsers.

Therefore, compatibility testing is required when using the Inputmode property.

4. Pattern

The Pattern attribute is a regular expression pattern used to specify the input content in the text box. It can help the browser to verify whether the content entered by the user conforms to the specified format requirements.

If the content entered by the user does not conform to the regular expression pattern specified by the Pattern attribute, the browser will display a default error message.

Tips:

  • The value of the Pattern attribute must be a valid regular expression.
  • The Pattern property can only be applied to elements that can enter text, such as text boxes, text fields, and password boxes.
  • The Pattern attribute will not prevent users from entering illegal characters, but will verify that the input content meets the specified format requirements when submitting the form.
  • The error message of the Pattern attribute can be customized using the title attribute.

The Pattern attribute is usually used together with the required attribute to ensure that the content entered by the user conforms to the specified format requirements and is not empty. For example, you can use the Pattern property to validate user input for zip codes, phone numbers, email addresses, and so on.

5. Required

The Required attribute is an attribute used to specify whether a form element is required.

If a form element has the Required attribute set, then when the form is submitted, if the value of the element is empty, the browser will prevent the form from being submitted and prompt the user to fill in the field.

Tips:

  • The Required attribute can only be applied to form elements, not to other HTML elements.
  • The Required attribute does not verify whether the content entered by the user meets the specified format requirements, only whether the element is empty.
  • The Required attribute does not prevent users from submitting spaces or whitespace characters, so some other means of validating user input is required.
  • The Required attribute can be used together with the Pattern attribute to verify that the user-entered content conforms to the specified format requirements.
  • The Required attribute can be used in conjunction with the Autofocus attribute to ensure that when the user enters the form page, the focus is automatically on the required field.

The Required attribute is often used with the type attribute of form elements, such as text boxes, drop-down lists, radio boxes, check boxes, and so on.

6. Autocomplete

The Autocomplete attribute is an attribute used to specify whether the form element has auto-complete enabled.

Autocomplete helps users fill out forms faster and reduces the chance of typing errors.

Tips:

  • on: The default value, which means that the auto-completion function is enabled.
  • off: Indicates that the auto-completion function is disabled.
  • name: Indicates that the name attribute of the form element is used as the keyword for automatic completion.
  • email: Indicates to use the most recent email address entered by the user as the autocomplete keyword.
  • username: Indicates that the user name recently entered by the user is used as the keyword for auto-completion.
  • current-password: Indicates that the password recently entered by the user is used as the keyword for auto-complete.
  • new-password: Indicates that the new password recently entered by the user is used as the keyword for auto-complete.
  • tel: Indicates to use the last phone number entered by the user as the keyword for autocomplete.
  • address-level1: Indicates that the country or region name recently entered by the user is used as the keyword for auto-completion.
  • address-level2: Indicates that the province or state name recently entered by the user is used as the keyword for auto-completion.
  • address-level3: Indicates that the city or region name recently entered by the user is used as the keyword for auto-completion.
  • address-level4: Indicates that the most recent street name entered by the user is used as the keyword for auto-completion.
  • country: Indicates that the country name recently entered by the user is used as the keyword for auto-complete.

The degree of support for the Autocomplete attribute may vary in different browsers. Therefore, compatibility testing is required when using the Autocomplete property.

7. Multiple

The Multiple attribute is an attribute used to specify whether a form element allows multiple selections.

The Multiple attribute is typically applied to form elements such as dropdown lists, file uploads, and checkboxes.

Tips:

  • The Multiple attribute can only be applied to form elements such as drop-down lists, file uploads, and check boxes, and cannot be applied to form elements such as radio boxes and text boxes.
  • The value of the Multiple property must be a Boolean value, true or false.
  • The default value of the Multiple attribute is false, which means that multiple selections are not allowed.
  • When the value of the Multiple attribute is true, the drop-down list will be displayed as a multi-selectable list box, the check box will be displayed as a multi-selectable check box list, and the file upload will allow the user to select multiple files.
  • When using the Multiple attribute, it is necessary to process the multi-selected values ​​in the background program, for example, use an array to store the multi-selected values.

If a form element has the Multiple attribute set, the user can select multiple options, not just a single one.

8. Download

The Download attribute is an attribute for specifying a file name when a link downloads a file.

If a link is set with the Download attribute, then when the user clicks the link to download the file, the browser will save the file locally and use the file name specified by the Download attribute to name the file.

Tips:

  • The value of the Download attribute can be any string, which represents the file name used when downloading the file.
  • The Download attribute can only be applied to tags, not to other HTML elements.
  • The Download attribute doesn’t change the actual name of the file, it just uses the specified filename when downloading.
  • The value of the Download attribute can be dynamically generated, for example using JavaScript to generate the filename.
  • When using the Download attribute, you need to ensure that the downloaded file is legal and does not violate the copyright and privacy of others.

The Download attribute is usually used in tags to download PDF, image, audio, video and other files.

9. Content editable

The Contenteditable attribute in HTML is an attribute used to specify whether an element is editable.

Tips:

  • The value of the Contenteditable attribute can be true, false or inherit.
  • The default value of the Contenteditable property is false, indicating that the element is not editable.
  • When the value of the Contenteditable property is true, the element is editable.
  • When the value of the Contenteditable attribute is inherit, the editability of the element is inherited from the parent element.
  • The Contenteditable attribute does not change the default behavior of the element, eg tags can still jump to other pages.
  • When using the Contenteditable attribute, you need to pay attention to security issues to avoid XSS attacks and malicious script injection.

If an element sets the Contenteditable attribute, then the user can enter text, insert pictures, modify styles, etc. in the element. The Contenteditable attribute is usually applied to, and other elements are used to implement functions such as rich text editors and editable tables.

10. Readonly

The Readonly attribute in HTML is an attribute used to specify whether a form element is read-only.

Tips:

  • The value of the Readonly attribute must be a Boolean value, true or false.
  • The default value of the Readonly attribute is false, indicating that the form element is editable.
  • When the value of the Readonly attribute is true, the form element is read-only.
  • The Readonly attribute does not prevent users from modifying the value of form elements via JavaScript.
  • The Readonly attribute is different from the Disabled attribute, which disables the form element so that it cannot submit data.
  • When using the Readonly attribute, it is necessary to process the read-only value in the background program, such as using a hidden field to store the read-only value.

If a form element has the Readonly attribute set, the user can see the value of the element, but cannot modify the value of the element. The Readonly attribute is usually applied to form elements such as text boxes, drop-down lists, and date pickers to display data or prevent users from modifying data.

11. Hidden

The Hidden attribute is an attribute used to specify whether an element is hidden.

Tips:

  • The value of the Hidden property must be a Boolean value, either true or false.
  • The default value of the Hidden property is false, indicating that the element is not hidden.
  • When the value of the Hidden property is true, the element is hidden.
  • The Hidden attribute is different from the display:none attribute of CSS. The display:none attribute will completely remove the element from the page, and the element cannot be accessed through JavaScript or other methods.
  • When using the Hidden attribute, the hidden value needs to be processed in the background program, such as using a hidden field to store the hidden value.

If an element has the Hidden attribute set, the element will not be displayed on the page, but it still exists on the page and can be accessed through JavaScript, etc. The Hidden attribute is usually applied to elements such as form elements, buttons, images, etc., to pass data or control page behavior without affecting the page layout.

12. Spellcheck

The Spellcheck attribute in HTML is an attribute used to specify whether to enable spell checking for an element.

Tips:

  • The value of the Spellcheck property must be a Boolean value, true or false.
  • The default value of the Spellcheck attribute is false, indicating that the element does not enable spell checking.
  • When the value of the Spellcheck attribute is true, the element enables spell checking.
  • The extent of support for the Spellcheck attribute varies by browser, and different browsers may have different spellcheck algorithms and dictionaries.
  • When using the Spellcheck attribute, you need to pay attention to security issues to avoid XSS attacks and malicious script injection.

If an element sets the Spellcheck attribute, then when the user enters text in the element, the browser will automatically check for spelling errors and display a red wavy line under the incorrect word. The Spellcheck attribute is usually applied to elements such as text boxes and text fields to improve the accuracy of user input.

13. Translate

The Translate attribute in HTML is an attribute used to specify whether an element should be translated.

Tips:

  • The value of the Translate attribute must be a Boolean value, yes or no.
  • The default value of the Translate property is yes, indicating that the element needs to be translated.
  • When the value of the Translate attribute is no, the element does not require translation.
  • The degree of support for the Translate property varies from browser to browser, and different browsers may have different translation algorithms and dictionaries.
  • When using the Translate attribute, you need to pay attention to security issues to avoid XSS attacks and malicious script injection.

If an element has the Translate attribute set, the browser will decide whether to translate the content of the element according to the value of the attribute. The Translate attribute is usually used in multilingual versions of websites to control which elements need to be translated and which elements do not.

14. Loading

The attribute in HTML loadingis a new attribute that can be used to specify the browser's priority when loading resources.

This attribute can be applied to tags such as <img>, <iframe>, <script>, <link>and <audio>.

Tips:

  • lazy: Indicates that the resource should be lazily loaded after the page loads. It's the default value.
  • eager: Indicates that the resource should be loaded immediately on page load.
  • auto: Indicates that the browser should decide when to load the resource by itself.

loadingAttributes are not supported by all browsers, so a compatibility check is required when using them.

15. Onerror

onerroris a JavaScript event handler that fires on JavaScript errors.

onerrorEvent handlers can be added windowto objects to catch JavaScript errors globally.

Tips:

  • message:wrong information.
  • source: The URL of the script where the error occurred.
  • lineno: The line number where the error occurred.
  • colno: The column number where the error occurred.
  • error: An Error object containing detailed information about the error.

onerrorEvent handlers can only catch JavaScript errors that are not caught by other error handlers.

It is best to use try-catch statements in your code to catch and handle JavaScript errors.

16. Poster

posteris an attribute of the HTML5 <video>tag that specifies an image to display before the video loads and before it plays.

Tips:

posterAttributes only apply to <video>tags, not <audio>labels.

It is commonly used to provide a preview image or thumbnail of a video.

17. Controls

controlsIs an attribute of the neutral tag in HTML5 <video>, <audio>which is used to specify whether to display the controls of the media player.

If controlsthe property is set to controls, controls are displayed on the media player, such as a play/pause button, volume control, progress bar, etc.

<!DOCTYPE html>
<html>
<head>
<title>Controls Example</title>
</head>
<body>
<video width="320" height="240" controls>
<source src="video.mp4" type="video/mp4">
<source src="video.ogg" type="video/ogg">
Your browser does not support the video tag.
</video>
</body>
</html>`

controlsAttributes are only available in browsers that support HTML5. If the browser does not support HTML5, the control will not be displayed.

18. Autoplay

autoplayis an attribute of the neutral tag in HTML5 <video>that <audio>specifies whether the media should play automatically on page load.

If autoplaythe property is set to autoplay, the media will play automatically on page load.

<!DOCTYPE html>
<html>
<head>
<title>Autoplay Example</title>
</head>
<body>
<video width="320" height="240" autoplay>
<source src="video.mp4" type="video/mp4">
<source src="video.ogg" type="video/ogg">
Your browser does not support the video tag.
</video>
</body>
</html>`

Autoplay can negatively impact the user experience, so use autoplayattributes with caution. In some cases, browsers may block autoplay, such as on mobile devices, where the user must first interact with the page to allow autoplay.

19. Loop

loopis an attribute of the <video>neutral <audio>tag in HTML5 that specifies whether the media should loop after playback ends.

If loopthe property is set to loop, the media will loop after playback finishes.

<!DOCTYPE html>
<html>
<head>
<title>Loop Example</title>
</head>
<body>
<video width="320" height="240" loop>
<source src="video.mp4" type="video/mp4">
<source src="video.ogg" type="video/ogg">
Your browser does not support the video tag.
</video>
</body>
</html>`

Looping can negatively impact the user experience, so use loopattributes with care.

20. Cite

citeis a global attribute in HTML that can be used to specify the source of the citation.

citeThe value of the attribute should be a URL pointing to the source of the reference.

Tips:

citeAttributes can be applied to tags such as <blockquote>, <q>, <del>, etc.<ins>

If the source of the referrer is not a URL, citethe value of the property can be set to a string describing the referrer.

<!DOCTYPE html>
<html>
<head>
<title>Cite Example</title>
</head>
<body>
<blockquote cite="https://www.example.com/quote">
This is a quote from an external source.
</blockquote>
<q cite="https://www.example.com/quote">
This is a short quote from an external source.
</q>
<del cite="https://www.example.com/deleted">
This text has been deleted from an external source.
</del>
<ins cite="https://www.example.com/inserted">
This text has been inserted from an external source.
</ins>
</body>
</html>

citeAttributes do not automatically create links, so if you need to create a link, you need to use <a>a tag and hrefset the attribute as citethe value of the attribute.

21. Datetime

datetimeIs an attribute of tags in HTML <time>, used to specify the date and time.

datetimeThe value of the attribute should be a valid date and time format, eg YYYY-MM-DDThh:mm:ss.

datetimeAttributes do not automatically format dates and times, so you need to use JavaScript or other tools to format dates and times.

22. Async

asyncis an attribute of the tag in HTML <script>that specifies whether the script should be loaded asynchronously.

If asyncthe property is set to async, the script will be loaded asynchronously and will not block parsing and rendering of the page.

Scripts loaded asynchronously may execute before the rest of the page loads, so use with caution. This can cause errors if the script depends on other parts of the page.

23. Defer

deferis an attribute of the tag in HTML <script>that specifies whether scripts should be lazy-loaded.

If deferthe property is set to defer, the script will delay loading until the page has been parsed before executing it.

<!DOCTYPE html>
<html>
<head>
<title>Defer Example</title>
<script defer src="script.js"></script>
</head>
<body>
<p>This is a paragraph.</p>
</body>
</html>

In the example above, we deferset the property to defer, which will cause the script to be lazy loaded. In this case the script will be executed after the page has been parsed and will not block the page from loading.

24. Draggable

Draggableis an attribute in HTML5 that allows users to move elements by dragging them. draggableWhen an element is set to , the user can drag the element with the mouse or by touching the screen. When dragging an element, a series of events will be triggered, such as dragstart, , dragand dragend, and these events can be used to implement the drag-and-drop function.

반응형
반응형

아직도 PHP를 사용하는 사람들은 누구입니까?

 

https://medium.com/@PurpleGreenLemon/who-are-the-people-still-using-php-36a720ef50f0

 

Who are the people still using PHP?

The current state of PHP for 2023

medium.com

저는 PHP 개발자로 개발 생활을 시작했습니다. 수년 동안 JavaScript의 모든 것에 중점을 두었습니다. 부분적으로는 프런트엔드 웹이 어떤 식으로든 JavaScript에서 실행되기 때문입니다. 지난 10년 동안 제가 살았던 곳입니다.

최근에 저는 PHP와 관련된 일을 했습니다. 처음에는 PHP가 받는 나쁜 평판 때문에 놀랐습니다. 대부분은 구식 WordPress 설치와의 오랜 연관성 때문입니다. 그러나 그것은 PHP가 아닌 WordPress입니다.

그래서 궁금해졌습니다. 실제로 PHP를 사용하는 사람들은 누구입니까? 그들은 왜 그것을 사용하고 있습니까? JavaScript 서버 측 백엔드의 작은 세계와 어떻게 비교합니까?

PHP가 곧 죽을까요?

PHP의 진화와 세계에서의 현재 상태

PHP는 원래 "Personal Home Page"를 의미했지만 지금은 "PHP: Hypertext Preprocessor"를 의미하며 1994년 Rasmus Lerdorf가 만들었습니다 . 처음에 PHP는 Lerdorf의 개인 홈페이지를 유지하기 위한 간단한 Perl 스크립트 세트로 설계되었습니다. 수년에 걸쳐 완전한 기능을 갖춘 스크립팅 언어로 발전하여 전 세계 수백만 개의 웹 사이트를 지원합니다.

처음부터 PHP는 몇 가지 주요 버전 릴리스를 거쳤습니다.

수년에 걸쳐 PHP는 최신 코딩 방식을 채택하여 보다 다재다능하고 개발자 친화적인 언어로 만들었습니다. PHP 5의 객체 지향 프로그래밍(OOP) 채택은 게임 체인저였으며 개발자가 유지 관리 및 재사용 가능한 코드를 더 많이 만들 수 있도록 했습니다.

또 다른 중요한 발전 은 PHP 프로젝트에서 타사 라이브러리를 사용하는 프로세스를 간소화한 의존성 관리자인 Composer 의 도입이었습니다 . Composer를 사용하면 개발자가 보다 쉽게 ​​종속성을 관리하고 서로 다른 라이브러리 버전 간의 충돌을 피할 수 있습니다.

PHP 커뮤니티는 모범 사례 및 코딩 표준을 장려하기 위해 PSR(PHP Standard Recommendations) 도 제정했습니다. PSR은 코딩 스타일, 자동 로딩 및 미들웨어와 같은 PHP 개발의 다양한 측면을 다루므로 PHP 프로젝트의 일관성과 상호 운용성을 보장합니다.

PHP의 현재 상태(PHP 8.x 기능 및 채택)

적시 컴파일러(JIT)

PHP 8의 가장 주목할만한 기능 중 하나는 JIT(Just-In-Time) 컴파일러 입니다 . JIT 컴파일러는 런타임 중에 PHP 코드를 기계 코드로 컴파일하므로 계산 집약적인 작업 또는 오래 실행되는 CLI 스크립트와 같은 특정 유형의 애플리케이션에 대해 상당한 성능 향상을 가져올 수 있습니다. JIT 컴파일러는 웹 기반 애플리케이션의 성능에 큰 영향을 미치지 않을 수 있지만 PHP의 진화에서 한 걸음 더 나아가 현대화에 대한 노력을 보여줍니다.

속성

PHP 8에는 개발자가 클래스, 메서드, 속성 및 기타 언어 구성에 메타데이터를 추가할 수 있는 주석이라고도 하는 속성이 도입되었습니다 . 속성은 번거로운 docblock 주석을 대체하고 보다 표현력이 풍부한 코드를 활성화하여 코드를 단순화하고 정리할 수 있습니다. 특성은 일반적으로 라우팅, 유효성 검사 및 종속성 주입과 같은 작업을 위해 프레임워크 및 라이브러리에서 사용됩니다.

Union 유형 및 기타 새로운 기능

PHP 8의 또 다른 추가 기능인 Union 유형을 사용하면 개발자가 단일 변수, 매개변수 또는 반환 값에 대해 여러 유형을 지정할 수 있습니다. 이 기능은 유형 힌트를 개선하고 코드를 더 읽기 쉽고 강력하게 만듭니다.

PHP 8의 다른 새로운 기능에는 명명된 인수 , 생성자 속성 프로모션  nullsafe 연산자가 포함되며 , 이 모든 기능은 PHP를 보다 현대적이고 표현력이 풍부한 언어로 만드는 데 기여합니다.

PHP

PHP의 장점

간단히 말해서 PHP의 장점은 다음과 같습니다.

단순성과 학습 용이성

PHP의 가장 중요한 장점 중 하나는 단순성과 학습 용이성 입니다 . 이 언어는 기능 코드를 빠르게 선택하고 작성하기 쉽게 만드는 간단한 구문을 사용하여 초보자가 쉽게 접근할 수 있도록 설계되었습니다. 이 낮은 진입 장벽은 웹 개발자들 사이에서 PHP의 광범위한 채택과 인기에 기여했습니다.

광범위한 내장 기능

PHP 는 개발자가 문자열 조작, 날짜 및 시간 계산, 파일 처리와 같은 일반적인 작업을 쉽게 처리할 수 있도록 하는 풍부한 내장 함수 세트를 자랑합니다 . 이 광범위한 내장 기능은 외부 라이브러리의 필요성을 줄이고 개발을 단순화하여 개발자가 애플리케이션의 핵심 기능을 구축하는 데 집중할 수 있도록 합니다.

대규모 커뮤니티 및 풍부한 리소스

PHP는 크고 활동적인 개발자 커뮤니티의 혜택을 받습니다. 즉, 학습 및 문제 해결에 사용할 수 있는 리소스가 풍부합니다. 공식 문서 및 자습서에서 포럼, 블로그 및 Stack Overflow에 이르기까지 개발자는 풍부한 정보와 지원에 액세스할 수 있습니다. 또한 PHP 커뮤니티는 개발을 간소화하고 생산성을 향상시키는 데 도움이 되는 라이브러리, 프레임워크 및 도구의 방대한 생태계에 기여합니다.

광범위한 호스팅 옵션 및 호환성

PHP는 모든 PHP 기반 프로젝트의 요구 사항을 충족하는 호스팅 솔루션을 쉽게 찾을 수 있도록 웹 호스팅 제공업체 로부터 탁월한 지원을 받고 있습니다. 플랫폼과 서버 전반에 걸친 광범위한 호환성을 통해 PHP 개발자는 번거로움을 최소화하면서 애플리케이션을 배포할 수 있습니다. 이 광범위한 호스팅 옵션은 소규모 프로젝트와 대규모 프로젝트 모두에 대해 비용 효율적인 솔루션을 쉽게 찾을 수 있음을 의미합니다.

고성능 프레임워크(Laravel, Symfony, Yii 등)

PHP의 에코시스템 에는 개발자가 강력하고 확장 가능하며 유지 관리 가능한 응용 프로그램을 만드는 데 도움이 되는 여러 고성능 프레임워크가 포함되어 있습니다. Laravel, Symfony 및 Yii와 같은 프레임워크는 웹 애플리케이션 구축을 위한 견고한 기반을 제공하고 라우팅, 데이터베이스 액세스 및 양식 처리와 같은 작업을 단순화하는 도구 및 추상화를 제공합니다. 이러한 프레임워크는 PHP 개발자가 깨끗하고 유지 관리 가능한 코드를 작성하는 데 도움이 되는 최신 코딩 관행 및 표준도 따릅니다.

PHP Core 팀의 지속적인 개발 및 지원

언어 개발 및 개선에 대한 PHP 코어 팀의 지속적인 노력은 PHP의 또 다른 장점입니다. 이전 섹션에서 살펴본 바와 같이 PHP는 언어를 더욱 강력하고 표현력 있게 만드는 기능을 도입하는 새 릴리스가 출시될 때마다 수년에 걸쳐 크게 발전했습니다. 이러한 지속적인 개발 및 지원을 통해 PHP는 웹 개발자를 위한 실행 가능한 옵션으로 유지되어 최신 기술 및 모범 사례를 따라잡을 수 있습니다.

당신의 혈액형은 무엇입니까?

PHP의 단점

그러나 단점은 어떻습니까? 다음은 빠른 실행입니다.

레거시 문제 및 오래된 관행

PHP의 단점 중 하나는 레거시 문제와 이전 PHP 프로젝트에서 구식 사례가 널리 퍼져 있다는 것 입니다. 오랜 역사와 광범위한 채택으로 인해 PHP는 상당한 양의 "잘못된 코드"와 레거시 응용 프로그램에서 지속되는 구식 기술을 축적했습니다. PHP를 처음 사용하는 개발자는 이전 프로젝트로 작업할 때 이러한 문제에 직면할 수 있으며, 이는 실망스럽고 생산성을 저해할 수 있습니다.

보안 문제

PHP는 보안 취약점에 취약하다는 평판을 얻었지만 이는 언어 자체에 내재된 결함이 아니라 잘못된 코딩 관행 때문인 경우가 많습니다 . 그러나 구식 PHP 프로젝트가 많고 WordPress와 같은 콘텐츠 관리 시스템에서 PHP가 광범위하게 사용되면서 PHP가 안전하지 않다는 인식이 생겼습니다. PHP로 작업하는 개발자는 애플리케이션에 취약성이 도입되지 않도록 보안 모범 사례에 대해 주의를 기울여야 합니다.

함수 이름 지정 및 매개변수 순서의 불일치

PHP의 내장 함수는 명명 규칙과 매개변수 순서의 불일치로 인해 개발자에게 혼란을 줄 수 있습니다. 이러한 불일치는 수년에 걸친 PHP의 유기적 성장과 다양한 소스의 기능 포함의 결과입니다. 딜 브레이커는 아니지만 개발자가 보다 일관된 언어를 사용할 때보다 더 자주 문서를 참조해야 합니다.

최신 언어(Go, Node.js 등)에 비해 성능에 대한 비판

PHP는 Go 및 Node.js 와 같은 최신 언어와 비교하여 성능에 대한 비판에 직면해 있습니다 . PHP의 성능은 특히 PHP 7의 출시와 PHP 8의 JIT 컴파일러 도입으로 수년에 걸쳐 크게 향상되었지만 특정 사용 사례에서 일부 최신 언어보다 여전히 뒤쳐질 수 있습니다. 성능이 중요한 응용 프로그램을 구축하는 개발자는 원하는 결과를 얻기 위해 대체 언어 또는 기술을 고려해야 할 수 있습니다.

현대성의 부족 인식

마지막으로, PHP는 때때로 새로운 언어와 프레임워크에 비해 현대성이 부족하다는 인식을 가지고 있습니다. PHP는 현대 코딩 관행을 수용하고 새로운 기능을 도입하는 데 상당한 진전을 이루었지만 "오래된" 언어라는 명성은 흔들리기 어려울 수 있습니다. 이러한 인식은 일부 개발자의 눈에는 PHP가 최신 기술과 경쟁하는 것을 어렵게 만들 수 있으며 새 프로젝트를 시작할 때 새로운 언어를 선호하게 만들 수 있습니다. 그러나 이전 섹션에서 살펴본 것처럼 PHP는 현대 웹 개발의 요구 사항에 맞게 계속 발전하고 적응하는 강력하고 다양한 언어로 남아 있습니다.

프로그래머 유머

그렇다면 오늘날 누가 실제로 PHP를 사용하고 있을까요?

W3Techs 에 따르면 2023년 5월 현재 알려진 서버 측 프로그래밍 언어를 사용하는 모든 웹사이트의 78.9%에서 PHP를 사용하고 있으며 이는 웹 개발 커뮤니티에서 널리 채택되고 있음을 보여줍니다. 또한 PHP는 2,200만 개 이상의 라이브 웹사이트에서 PHP를 사용하고 있음을 보여주는 BuiltWith 통계 에서 알 수 있듯이 서버 측 프로그래밍 언어 사이에서 상당한 시장 점유율을 유지하고 있습니다 . 2021 스택 오버플로 개발자 설문조사 에서도 PHP가 개발자들 사이에서 8번째로 인기 있는 언어로 나타났으며, 응답자의 26.2%가 PHP를 사용한다고 보고했습니다.

많은 잘 알려진 회사와 웹사이트는 서버 측 프로그래밍 요구 사항을 위해 PHP를 사용합니다.

  • Facebook : Facebook은 Hack이라는 자체 PHP 파생 언어와 HHVM(HipHop Virtual Machine) 런타임을 만들었지만 초기 인프라는 PHP를 사용하여 구축되었습니다 .
  • Wikipedia : 전 세계에서 가장 많이 방문하는 웹사이트 중 하나인 온라인 백과사전은 PHP 및 오픈 소스 MediaWiki 소프트웨어 에서 실행됩니다 .
  • Slack : PHP는 Slack 기술 스택의 일부이며 StackShare에 설명된 대로 메시징 플랫폼을 강화하는 데 중요한 역할을 합니다 .
  • MailChimp : 인기 있는 이메일 마케팅 서비스 제공업체는 Quora에서 언급한 것처럼 백엔드 개발을 위해 PHP를 사용합니다 .
  • Etsy : 수제 및 빈티지 제품을 위한 전자 상거래 시장에서도 StackShare에서 볼 수 있듯이 PHP를 사용하여 웹 애플리케이션을 구동합니다 .

PHP는 또한 다음과 같은 다양한 목적을 위해 다양한 산업에서 널리 사용됩니다.

  • 콘텐츠 관리 시스템(CMS) : PHP는 WordPress, Drupal, Joomla와 같이 널리 사용되는 콘텐츠 관리 시스템의 기반입니다. 이 시스템은 WPBeginner가 설명하는 것처럼 전 세계 수백만 개의 웹사이트를 지원합니다 .
  • 전자 상거래 : Magento, WooCommerce(WordPress 플러그인) 및 PrestaShop과 같은 PHP 기반 전자 상거래 플랫폼은 Cloudways에서 설명한 대로 모든 규모의 기업에서 온라인 상점을 만드는 데 사용됩니다 .
  • 맞춤형 웹 애플리케이션 : 개발자는 PHP를 사용하여 의료 및 금융에서 교육 및 엔터테인먼트에 이르기까지 다양한 산업을 위한 맞춤형 웹 애플리케이션을 구축합니다. PHP의 다재다능함과 강력함은 웹 애플리케이션 개발을 위한 대중적인 선택입니다.

NodeJs 대 PHP: 2023년 통계, 기능 및 성능 비교

PHP 대 JavaScript 서버 측 백엔드

성능은 모든 웹 애플리케이션의 중요한 측면입니다. PHP는 PHP.net에 설명된 대로 JIT(Just-In-Time) 컴파일러를 도입한 PHP 7 및 PHP 8의 출시와 함께 상당한 성능 향상을 이루었습니다 . PHP의 성능은 이제 Node.js와 같은 JavaScript 서버 측 백엔드의 성능에 훨씬 더 가깝습니다. 그러나 V8 JavaScript 엔진을 사용하는 Node.js는 종종 특정 시나리오에서 PHP를 능가합니다. 이것은 주로 비차단 I/O와 RisingStack에서 설명한 것처럼 많은 동시 연결을 효율적으로 처리할 수 있는 능력 때문입니다 . 높은 동시성과 실시간 처리가 필요한 상황에서는 Node.js가 더 나은 선택일 수 있습니다.

PHP와 JavaScript 모두 광범위한 생태계와 라이브러리를 가지고 있습니다. PHP는 개발을 간소화하는 다양한 라이브러리, 프레임워크 및 도구에 기여하는 대규모 커뮤니티의 이점을 제공합니다. PHP의 종속성 관리자인 Composer를 사용 하면 패키지와 종속성을 쉽게 관리할 수 있습니다. 반면에 JavaScript는 거의 모든 요구에 맞는 대규모 패키지 모음을 제공하는 npm 레지스트리를 자랑합니다. PHP의 생태계는 웹 개발에 더 중점을 두고 있지만 JavaScript의 생태계는 더 광범위하며 프런트엔드 및 백엔드 개발 모두에 적합합니다. 이것은 JavaScript를 더 다재다능하게 만들지만 언어를 처음 접하는 개발자에게는 더 가파른 학습 곡선을 제공합니다.

구문 및 언어 기능 측면에서 PHP와 JavaScript는 크게 다릅니다. PHP는 강력한 내장 함수 및 기능 세트를 갖춘 성숙한 언어입니다. 최근 몇 년 동안 PHP는 유형 힌트, 속성 및 짧은 클로저와 같은 최신 언어 기능을 채택했습니다 . JavaScript는 일급 함수 및 비동기 프로그래밍과 같은 기능을 갖춘 보다 동적이고 유연한 언어입니다. JavaScript의 광범위한 콜백 및 약속 사용은 강력한 프로그래밍 패러다임을 가능하게 하지만 "콜백 지옥"으로 알려진 복잡하고 중첩된 코드 구조로 이어질 수 있으므로 강점이자 약점이 될 수 있습니다. 그러나 async/await의 도입은 이 문제를 완화하는 데 도움이 되었습니다 .

각 언어의 장단점을 고려할 때 특정 사용 사례 및 시나리오에 대한 적합성을 평가하는 것이 중요합니다. PHP는 종종 전통적인 웹 애플리케이션, 콘텐츠 관리 시스템(예: WordPress, Drupal, Joomla) 및 전자 상거래 플랫폼(예: Magento, WooCommerce, PrestaShop)에 더 나은 선택입니다. 단순성과 학습 용이성으로 인해 웹 개발을 막 시작하는 개발자에게 탁월한 선택입니다. 반면에 Node.js와 같은 JavaScript 서버 측 백엔드는 실시간 애플리케이션(예: 채팅 애플리케이션, 온라인 게임), 단일 페이지 애플리케이션(SPA) 및 프런트엔드 모두에 대해 통합 언어가 필요한 프로젝트에 더 적합합니다. 그리고 백엔드. Node.js는 애플리케이션이 많은 동시 연결 및 비차단 I/O 작업을 처리해야 하는 상황에서 탁월합니다.

재미있는 개발자

이제 뭐? PHP는 수많은 다른 백엔드 기술 중에서 하나의 옵션이어야 합니까?

PHP는 최신 코딩 방식, 성능 향상 및 최신 버전의 강력한 기능 추가를 통해 수년에 걸쳐 크게 발전했습니다. 레거시 문제와 시대에 뒤떨어진 관행에도 불구하고 PHP는 웹 개발을 위한 인기 있는 선택으로 전 세계 웹사이트의 상당 부분을 지원하고 있습니다. 단순성, 학습 용이성 및 광범위한 생태계는 모든 경험 수준의 개발자에게 매력적인 옵션입니다.

반면에 Node.js와 같은 JavaScript 서버 측 백엔드는 특정 시나리오에서 뛰어난 성능, 다양한 생태계, 프런트엔드 및 백엔드 개발을 위한 통합 언어를 자랑하는 웹 개발 환경에서 강력한 경쟁자로 부상했습니다. JavaScript의 경우 학습 곡선이 더 가팔라질 수 있지만 JavaScript의 유연성과 강력한 언어 기능으로 인해 다양한 응용 프로그램에서 매력적인 선택입니다.

그렇다면 PHP는 수많은 다른 백엔드 기술 중에서 하나의 옵션이어야 할까요? 대답은 프로젝트의 특정 요구 사항, 언어에 대한 친숙도 및 구축 중인 애플리케이션 유형에 따라 다릅니다. PHP는 여전히 전통적인 웹 응용 프로그램, 콘텐츠 관리 시스템 및 전자 상거래 플랫폼을 위한 강력한 선택인 반면 JavaScript 서버 측 백엔드는 실시간 응용 프로그램, 단일 페이지 응용 프로그램 및 높은 동시성과 비차단 I/C가 필요한 시나리오에서 탁월합니다. O 작업.

궁극적으로 결정은 프로젝트 맥락에서 각 언어의 장단점, 강점 및 약점을 평가하는 것입니다. PHP 코어 팀의 지속적인 개발과 지원으로 PHP는 계속해서 성장하는 백엔드 기술 환경에서도 웹 개발을 위한 적절하고 실행 가능한 옵션으로 남아 있습니다.

반응형
반응형

브라우저에서 모바일 애플리케이션 열기. 

Open Mobile Application From The Browser( web) , intent, deeplink, url scheme

https://vhudyma-blog.eu/open-mobile-application-from-the-browser/  

 

딥링킹 유형

딥 링크에는 두 가지 주요 유형이 있습니다.

  • 기본
  • 링크는 응용 프로그램이 설치되어 있으면 열리고 그렇지 않으면 오류 메시지가 표시됩니다.
  • 연기
  • 링크는 애플리케이션이 설치되어 있으면 열리고, 그렇지 않으면 사용자가 Play 또는 App Store(또는 선택한 다른 위치)로 리디렉션됩니다.

이 외에도 Contextual Deep Linking 에 대해 들어보셨을 것입니다 .

상황별 딥 링크는 일반적으로 사용자에 대한 추가 정보를 수집하기 위해 추가된 일부 추가 매개변수와 함께 기본이거나 지연됩니다.


 

웹 브라우저에서 앱 열기

 

URL Scheme

사용자를 앱의 특정 콘텐츠로 바로 연결하는 URL 이다.

ex) naversearchapp://

위와 같은 URL Scheme를 이용하면 브라우저에서 해당 Scheme를 읽고 그 Scheme에 해당하는 앱이 있는 경우 (앱에서 설정) 열어준다.

하지만 다음과 같은 한계가 있다.

  • naversearchapp 같이 앞에 붙는 스키마는 유니크한 값이 아니기 때문에 같은 이름이 있을 경우 어떤앱을 열지 물어보게된다.
  • 앱이 미설치되어있는 경우 동작하지 않는다.

Android

intent filter

https://developer.android.com/guide/components/intents-filters?hl=ko

이 intent filter의 역할은 앱 열기에 한정된 것이 아니고 특정 앱으로의 메시징을 처리하는 객체인데, 이걸 딥링크처럼 활용할 수 있다.

앱에서 intent관련 설정을 지정하고, 웹에서 intent:// 와 같이 실행하면 앱을 실행할 수 있다.

이 방법은 위 URL 스키마 방식의 한계를 없애준다.

패키지명을 이용하기 때문에 유니크하고, 앱이 미설치되어있는 경우 해당 패키지에 해당되는 playstore로 이동한다.

https://developer.android.com/training/app-links/verify-site-associations?hl=ko

위 인텐트 필터 방식을 활용하여 웹사이트 URL 기반으로 앱을 여는 방식 (android 6.0 이상지원)

예를들어 https://medium.com 를 방문하는 경우 해당하는 앱을 열 수 있다.

웹에서는 무엇을 해주어야 하나?

기본적으로 인텐트 필터 설정은 앱쪽에서 해주지만, 웹에서도 해줘야할 것이 있다.

앱링크를 제공할 도메인이 특정 앱과 매칭된다는 것을 알려주기 위해 앱쪽에서 생성하는 assetlinks.json  https://{도메인}/.well-known/assetlinks.json 에 제공해줘야한다.

여기에는 몇 가지 제약이 따르게 되는데,

  1. HTTPS만 지원한다.
  2. assetlinks.json 를 가져오는데에 있어서 리디렉션이 일어나지 않아야하고 application/json 타입으로 응답되어야한다.
  3. 서브도메인이 다른 경우 모두 assetlinks.json 제공이 필요하다. 예를들어 www.medium.com  m.medium.com 가 존재한다면, assetlinks.json 를 모두 제공해야한다.
  4. robot.txt 가 접근가능해야한다. 즉, VPN 등이 있어야 접근가능한 경우 적용 불가능하다.

테스트는 어떻게하지?

이부분이 제일 골치아팠는데, 위와 같은 제약사항이 있기 때문에 VPN을 사용하거나 사내망이 따로 있는 경우 테스트하기가 번거롭다.

예를들어, 개발환경인 dev.aa.com 가 있고, 실제환경인 aa.com 이 있다고 했을 때 위 제약사항이 있기 때문에 assetlinks.json을 두 환경을 제공하는 서버 각각 넣어줘야한다.

대부분에 개발환경 서버는 VPN 뒤에 있기 때문에 위 4번 제약사항에 걸리게 된다.

이 때 찾아보았던 해결할 수 있는 방법은

  1. 만약 dev.aa.com  aa.com 과 같이 서브도메인 / 루트도메인의 관계라면 루트도메인에 assetlinks를 *.aa.com 과같이 설정함으로써 적용이 가능하다.
  2. app.dev.aa.com 과 같은 서버를 실제환경에 열어두고 여기서 테스트를 진행한다.

앱이 설치되어있지 않은 경우는?

기본적으로 앱링크 / 유니버셜링크는 앱이 설치되어있지 않은 경우 단순히 웹에서 해당 url을 표시하게 된다. 이런 경우 보통 "앱으로 이동" 과 같은 버튼을 표시하고, 클릭시 위에서 말한 인텐트 필터를 사용하게 된다.

iOS

ios의 경우 deffered deep link나 intent 필터 등의 기법은 없고 universal 링크만 이용 가능하다. (ios 9 이상)

https://developer.apple.com/ios/universal-links/

기본적으로 app link와 동일하다. 웹사이트 URL 기반으로 앱을 열게 동작해준다.

웹에서는 무엇을 해주어야 하나?

안드로이드와 마찬가지로 .well-known 하위에 파일 추가가 필요하다. (다른점은 루트 디렉토리에 넣어도 무방)

앱쪽에서 생성한 apple-app-site-association 파일을 넣어주게되는데, 마찬가지로 application/json 타입 제공이 필요하다.

주의할 점은, 안드로이드의 경우 assetlinks.json 의 파일 포맷이 json 이라 브라우저가 알아서 json 으로 처리해주는 반면, 해당 파일은 파일 포맷이 없으므로, 명시적으로 제공이 필요하다.

기본적인 제약사항 (VPN X, redirect X, 서브도메인지원 X)은 앱링크와 동일하다.

따로 문서에 명시되어있지는 않은데, 테스트 결과 앱링크와 마찬가지로 앱쪽에서 *.루트도메인 과 같이 설정한 경우 루트도메인에 넣은 설정파일로 서브도메인 지원이 가능하다.

앱이 설치되어있지 않은 경우는?

마찬가지로 앱열기버튼을 제공할 수 있다. (특히 유니버셜링크는 safari의 경우 앱열기버튼을 네이티브에서 제공하고 있다)

다만, iOS에서는 인텐트 필터처럼 앱의 설치여부를 구분해서 동작할 수 없기 때문에 조금 추가작업이 필요하다.

다음과 같은 방법을 고려할 수 있다.

  • firebase 다이나믹링크, 브랜치 등 외부 서비스를 이용하는 방식 (ex ) Medium, reddit )
    • 위 서비스들이 앱 설치/미설치시 분기처리를 제공해준다. Android의 경우 내부적으로 인텐트 필터를 이용하는 것으로 보인다.
  • 직접 처리하는 방식
    • 라우트를 https://aa.com/launchApp 과 같이 지정해놓고, 해당 라우트로 리디렉션 시킨다.
    • 만약 앱이 설치되어 있다면 유니버셜링크를 통해 서버에 접근하지않고 바로 앱이 열릴테고, 앱이 설치되어있지 않다면 해당 라우트로 들어오고 fe 서버에서 app store로 리디렉션 시킬 수 있다.

 

* https://godsenal.com/posts/%EC%9B%B9-%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80%EC%97%90%EC%84%9C-%EC%95%B1-%EC%97%B4%EA%B8%B0/

반응형

+ Recent posts