-
php8 에 도입되는 annotation (attributes)
php8 에 도입되는 attributes php 8 부터는 attrubutes 라는 기능을 사용할 수 있습니다. 다른 많은 언어에서는 annontation 이라고 불리는 것인데, 이 attributes (aka. annotation) 은 앞서, rman 님께서 작성해주신 Annotation 이해하기 을 참조해주세요. (이미 php8 소개하는 많은 블로그들이 있었서 늦은감이 있네요…) 일단 여기서는 어떻게 사용하는지, 또 어떻게 커스텀 attributes 를 만드는지 등에 대해서 다뤄 보겠습니다. 개요 먼저 attribute 가 작성된 예제를 올려봅니다. use \Support\Attributes\ListensTo; class ProductSubscriber { #[ListensTo(ProductCreated::class)] public function onProductCreated(ProductCreated $event) { /* …...
-
pessimistic lock, optimistic lock
비관적 락(pessimistic lock) 비관적 락이란 트랜잭션의 시작에 S Lock, X Lock 을 걸고 시작하는 방법 입니다. DB 에 write 를 하기 위해서는 X Lock 을 받아야 하는데 이미 S Lock 이 다른 트랜잭션에 걸려 있어 write 를 위한 Lock 을 얻지 못하므로 앞선 트랜잭션이 종료되기 전까지 수정할 수 없습니다. 낙관적 락(optimistic lock) 낙관적 락은 DB 자체에서 제공되는 락이 아닌 Application Level 에서 주어지는 Lock 입니다. 같은 조건의 경우로 두 건의 트랜잭션이 발생한다고 가정 했을 때,...
-
구글이 안드로이드 앱 배포를 AAB로 변경
앱 배포 파일 확장자로 iOS 앱에는 .ipa가, 안드로이드 앱에는 .apk가 붙는다. 작년 2020년 11월, 구글은 2021년 8월부터 ‘구글 플레이에 새로 올라오는 모든 안드로이드 앱은 AAB 형식이어야 한다’며 스토어 정책을 바꿨다 기존 앱들은 똑같이 APK로 배포되어도 상관없지만 새로 업로드되는 앱들은 모두 AAB 형식으로 스토어에 올라와야 한다는 내용이다. 이번 글에서는 AAB가 정확히 무엇인지, 구글의 새 정책이 어떤 변화를 가져올지 살펴보자. AAB는 뭘까? APK(Android Package)는 이미 완성된 안드로이드 앱 파일이고, AAB(Android App Bundle)는 APK를 완성해주는 요소를 담은 패키지다....
-
Annotation 이해하기
들어가기 앞서 자바를 사용하며 봤었던 @Override 표시. 단순히 “부모에 정의된 메소드를 오버라이딩했나보다.” 라며 넘어갔습니다. 어노테이션을 잘 모르는채로 지냈는데, 어느 순간부터 점점 보이기 시작합니다. 큰 의미 없었던 @기호 인줄 알았는데, 아니였습니다. @Getter, @Setter를 쓰면 알아서 아래 코드를 생성시켜주고 @Column 한다음 name에 값을 넣어주면, 테이블 칼럼명에 적히게 됩니다. 이쯤되니 아무 의미 없는 표시가 아님이 느껴졌고, 제대로 공부해봐야겠다는 생각이 들었습니다. Annotation oracle 사이트에는 어노테이션에 대해 아래처럼 적혀있습니다. 이게 도대체 무슨 말이지..? “프로그램에 대한 데이터를 제공한다” 컴파일러라는 프로그램에게 “@Override...
-
브라우저에서 비동기요청을 수행할 때 도움이 될 수도 있는 글 (api wrapping)
API 서버와의 통신 웹 개발 환경이 여러모로 다양해지면서 REST API 서버를 별도로 두고 클라이언트(브라우저)에서 특정 endpoint를 호출해 CRUD를 수행하는 모델이 속속 등장하고 있습니다. 이러한 개발을 진행하다 보면 자연스레 소위 AJAX(Asynchronous JavaScript and XML) 라고 불리우는 기법을 클라이언트단에서 활용하게 됩니다. AJAX 를 이용하기 위해서는 여러가지 방법이 있을 수 있는데, 먼저 js 네이티브단에서 지원하는 XMLHttpRequest (XHR이라고도 불리는)객체를 활용한 방법이 있겠습니다. XMLHttpRequest const xhr = new XMLHttpRequest(); xhr.onreadystatechange = () => { // 콜백은 간략화 if (xhr.status ===...