2024-04-26-TIL
2024-04-26-TIL
Today I Learned
WebRTC(Web Real-Time Communication)
- https://webrtc.org/?hl=ko
- https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API
- https://en.wikipedia.org/wiki/WebRTC
- https://wormwlrm.github.io/2021/01/24/Introducing-WebRTC.html
Virtual Thread and MySQL
Java의 Virtual Thread로 작성해도 MySQL에서는 synchronized로 인식한다.
- https://jaeyeong951.medium.com/virtual-thread-synchronized-x-6b19aaa09af1
- https://d2.naver.com/helloworld/1203723
따닥방지
디바운싱과 쓰로틀링
- https://medium.com/%EC%98%A4%EB%8A%98%EC%9D%98-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%EB%94%94%EB%B0%94%EC%9A%B4%EC%8B%B1%EA%B3%BC-%EC%93%B0%EB%A1%9C%ED%8B%80%EB%A7%81-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-e02f6bb14627
Executors
- https://learn.microsoft.com/ko-kr/dotnet/api/java.util.concurrent.executors?view=net-android-34.0
@TransactionalEventListener
트랜잭션이 끝나면 메시지를 보내도록 하고싶다면? 보통은 @Service가 붙은 서비스 클래스위에 상위 클래스를 두어서 주입받는 형태로 구현할 수 있고, 또 다른 방법으로는 @TransactionalEventListener를 붙인 이벤트 리스너를 구현하고 해당 이벤트를 통해서만 메시지를 전송하도록 하는것이다.
하지만 엄밀히 말하면 이 방법은 안티패턴이라고 볼 수 있다. 왜냐하면 이 방법에서는 메시지의 전송 보장수준까지 트랜잭션으로 묶을수는 없기 때문이다. 하지만 보통의 범용 애플리케이션에서는 DB 트랜잭션이 끝나는 시점(commit되는 시점) 이후에 메시지를 전송하기만 하면 충분하므로 위의 두 가지 방법으로도 충분하다.
- https://docs.spring.io/spring-boot/docs/2.0.x/reference/html/boot-features-jta.html
- https://www.ibm.com/docs/vi/i/7.3?topic=classes-jdbc-xa-distributed-transaction-management
File Upload with …
우선 파일 업로드 API를 별도로 구현할지 or 엔티티의 등록 및 수정 API와 동시에 요청할지를 고려해야한다. HTTP 규격 상 파일을 JSON 요청과 함께 전송하려면 Content-Type은 application/json으로는 용량제한상 불가능하다. 그래서 가장 많이 사용하는 유형이 multipart/form-data이다. 하지만 application/json 요청을 무조건 별도로 구성하고, 파일업로드는 별도의 API로 구성하고 싶다면?
파일 업로드 API를 별도로 구성하고 싶은데, 파일 경로에 ID가 반드시 들어간다면? 수정 시 해당 엔티티의 ID를 미리 조회해서 그 ID를 포함한 요청으로 파일 업로드 API를 호출할 수 있다. 하지만 등록 시에는 엔티티의 ID가 발급되기 이전이므로 파일 업로드 API를 바로 호출할수가 없다. 따라서 엔티티 등록 API를 먼저 호출하고 즉시 파일 업로드 API를 호출하거나, 파일 업로드 시 엔티티 ID가 필요없도록 구성해야한다. (파일 경로에 ID가 들어가는 등)
최근에는 FE에서 파일 업로드 API를 서버를 통해서 요청하지않고, 브라우저에서 AWS의 S3 버킷에 직접 업로드 하고 S3 Path를 받아와서 엔티티 등록 및 수정 API를 요청해서 Path를 매핑하는 경우가 많다.
- https://www.youtube.com/watch?v=v2yJLMltX1Y
Cassandra vs Scylla
- https://activewizards.com/blog/scylla-vs-cassandra/#:~:text=These%20databases%20use%20the%20same,when%20Cassandra%20is%20in%20Java.
동시성 문제 해결
- https://velog.io/@this-is-spear/%EB%8F%99%EC%8B%9C%EC%84%B1-%EB%AC%B8%EC%A0%9C-%ED%95%B4%EA%B2%B0-%EA%B2%BD%ED%97%98
ReentrantLock
- https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/ReentrantLock.html
PostgreSQL Vacuum
PostgreSQL에는 Vacuum이라는 기능이 있는데, 이는 일종의 백업같은 기능이다. Dead Tuple이 누적되어서 성능이 저하되는 이슈가 발생할 수 있다고 한다. 따라서 PostgreSQL의 좋은 기능들이 많지만 반드시 잘 알고 사용해야하며 지속적인 모니터링이 필요하다.
- https://techblog.woowahan.com/9478/
- https://www.postgresql.org/docs/current/routine-vacuuming.html
- https://nrise.github.io/posts/postgresql-autovacuum/
- https://tech.inflab.com/202201-event-postmortem/