![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/B0fz9/btsL4L4eUzf/myAtwb0OjavFvUTMlSCeIk/img.png)
WebDAV WebDAV는 HTTP 1.1 프로토콜의 확장 프로토콜이다.DAV는 Distributed Authoring and Versiong의 약자로, HTTP보다 세부적인 웹 기반의 자원 관리와 관련된 표준이다. 아래의 예시처럼 HTTP에서는 볼 수 없는 특별한 메서드들이 존재한다.LOCK / UNLOCK: 자원에 대한 락 취득 / 해제MKCOL: 디렉터리 생성MOVE / COPY: 자원 이동 / 복사PROPFIND / PROPPATCH: 자원에 정의된 프로퍼티 조회 / 수정 WebDAV의 장점 HTTP 1.1과 호환되므로 익숙한 HTTP 관련 구현 기술들을 그대로 사용 가능보통 구현 기술들이 웹 서버와 같은 포트(80, 443)를 사용하여 웹 서버에 적용한 보안 등의 인프라를 그대로 적용 가능특정 ..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/xpqEa/btsKDhpaLHv/ljEoQUqfcWaViGpcr9rK2K/img.png)
일을 하면서 OneToMany 관계를 여럿 가지는 부모 엔티티를 자식과 함께 가져와야만 하는 경우들을 마주친다.때로는 비즈니스 제약으로 규모는 크지 않으나 부모 - 자식1 - 자식2 등의 2개 이상의 계층을 한 번에 가져와야 하는 경우도 있다. 왜 hibernate는 단일 쿼리로의 다중 List 초기화를 방지하며,왜 부모는 자식을 항상 Set이 아닌 List로 초기화할까? 환경: hibernate-core 6.5.3 Final MultipleBagFetchException하나의 쿼리에서 둘 이상의 List를 Fetch Join으로 초기화하는 것은 불가하다. Lazy Loading으로 Parent의 두 Child 컬렉션을 설정해둔 뒤 두 개의 Fetch Join으로 한 번에 연관된 데이터를 가져오려 하면 ..
결제 서비스를 만들고 테스트하던 중 인덱싱 되지 않은 컬럼을 검색 조건으로 활용한 Update에서, 단건의 요청 처리에 대해 문제가 없었으나 다수의 요청 동시 처리 시 데드락이 발생하는 상황을 경험했다. 1. 데드락 확인 org.springframework.dao.TransientDataAccessResourceException: execute; SQL [UPDATE payment_ordersSET payment_order_status = :status, updated_at = CURRENT_TIMESTAMPWHERE order_id = :orderId]; Deadlock found when trying to get lock; try restarting transaction 스프링을 통해 어떤 로직을..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/dMioqW/btsK3wsfyPg/9lkAQKScHTeazJHbUmRUy0/img.png)
최신의 스프링 부트 애플리케이션에서 Async, Scheduled 등을 사용하면 가상 스레딩을 활용하지 않는 이상 ThreadPoolTaskExecutor가 구현체로 선택된다. 기본적인 설정, 종료 시점의 예약 작업 핸들링 설정 등을 설명한다. Task Executor 스프링 어플리케이션에서 @EnableAsync 설정을 추가하고 @Async가 붙은 메서드를 런타임에 호출 시 Runnable 혹은 Callable의 형태로 스레드 풀의 Blocking Queue에 작업을 등록한 뒤 비동기로 처리된다. 비동기 처리 시 작업을 등록할 스레드 풀이 필요한데, 스프링 부트가 아닌 순수 스프링 환경에서는 별도의 설정이 없다면 AsyncExecutionInterceptor에 의해 요청마다 스레드를 새로 생성하는 ..
회사에서 한 장비에 수십 개의 도커 컨테이너를 동시에 운용할 상황이 생겼다.컨테이너 각각에서 작업이 이루어지고 ssh를 통해 접속해서 확인할 수 있도록 구성하였는데,컨테이너가 많아지자 모든 컨테이너로의 ssh 접속이 불가해졌다는 연락을 받았다.ssh -vv로 로그를 확인하니 접속 시 인증 단계는 정상적으로 넘어가나, 셸 할당이 실패하는 상황이었다. 결론적으로는 ssh 접속 시의 사용자에 대한 프로세스 제한을 늘려주어 임시로 해소하였고,각 컨테이너에서의 사용자 UID를 구분해 주어 근본적인 문제를 해결하였다. 컨테이너에서의 ulimit -a로 프로세스 제한을 확인했을 때는 분명 unlimited로 표시되었고,서버 자원은 충분하며 각 컨테이너에서의 프로세스/스레드는 수백 개 수준이었는데도 프로세스 생성이 불..
사내에서 diff와 patch를 다룰 일이 잦아 관련 내용을 정리해보고자 한다. git version 2.39.2 (Apple Git-143), patch 2.0-12u11-Apple에서 확인한 내용이며 버전에 따라 출력 형식은 조금 변할 수 있다. diff? git diff라는 명령으로 사용 가능하다. 깃의 워킹 디렉토리와 스테이징 영역을 비교하거나, 특정 커밋과 비교하거나, 로컬과 원격 깃 레포지토리를 비교하는 명령이다. diff 사용법 diff라는 폴더에 first.txt라는 파일을 생성해 임의의 최초 커밋을 생성한 다음, second.txt라는 파일을 생성한 뒤 git log를 확인한 결과는 아래와 같다. # git log commit 8d475c23f8ac7f857ca6f1ab7790f03446..
- Total
- Today
- Yesterday
- MySQL
- springboottest
- stubbing
- 우테코 프리코스
- 우테코
- GitHub Discussion Template
- Java
- JPA
- 스프링
- multiplebagsfetchexception
- 람다식
- Jenkins 예약 배포
- invokedynamic
- JPA JSON
- Fromtail
- Payload 암호화
- 생성자 주입
- RandomPort
- 의존성 주입
- GitHub Discussion 템플릿
- MySQL 이벤트 스케줄
- 자바
- Spring Boot Monitoring
- logback-spring.xml
- Spring 테스트
- java switch case
- GitHub Discussion
- 우테코 5기
- Spring
- 함수형 인터페이스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |