일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- taint
- 자원부족
- JanusWebRTCGateway
- JanusGateway
- VARCHAR (1)
- kotlin
- 달인막창
- preemption #
- 헥사고날아키텍처 #육각형아키텍처 #유스케이스
- 코루틴 컨텍스트
- 깡돼후
- terminal
- 개성국밥
- JanusWebRTCServer
- Spring Batch
- JanusWebRTC
- k8s #kubernetes #쿠버네티스
- 코루틴 빌더
- 오블완
- vfr video
- pytest
- 티스토리챌린지
- mp4fpsmod
- PytestPluginManager
- python
- 겨울 부산
- PersistenceContext
- tolerated
- Value too long for column
- table not found
목록분류 전체보기 (583)
너와 나의 스토리
상황: 코드는 다음과 같다. board 삭제 시, 이와 관련된 image들을 한 번에 삭제시키기 위해 orphanRemoval을 true로 설정했다. 그럼에도 불구하고 board를 삭제하면 다음과 같은 에러 메시지와 함께 삭제가 진행되지 않았다. Caused by: org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: NULL not allowed for column "BOARD_ID"; SQL statement: cascade하는 과정에서 board_id가 null이 되어 생기는 문제이다. cascade 과정은 다음과 같다. UPDATE: 해당 board에 포함된 image들의 board_id를 모두 null로 만든 후 DELETE: board_id가 ..
FOREIGN KEY 제거가 안 되는 문제 해결 상황: board라는 테이블이 있고, 이 테이블의 컬럼 중 하나인 imageId는 현재 foreign key로 설정되어있다. 이때, foreign key를 제거하기 위해 다음과 같이 쿼리를 작성 및 실행하였다. $ ALTER TABLE board DROP FOREIGN KEY imageId 그 결과, 다음과 같은 에러 메시지가 나오며 foreign key 설정이 제거되지 않는다. Can't DROP 'imageId'; check that column/key exists 해결책: foreign key symbol을 이용하여 foreign key 설정을 제거해야 한다. 다음 명령어로 foreign key symbol을 조회한다. $ SHOW CREATE TAB..
서버의 상태를 확인할 수 있는 health check API를 추가해보자. 1. dependency 추가 spring-boot-actuator 모듈은 스프링 부트의 production-ready features의 모든 것을 제공한다. Maven org.springframework.boot spring-boot-starter-actuator Gradle dependencies { implementation 'org.springframework.boot:spring-boot-starter-actuator' } 2. Endpoints Acuator endpoints를 사용하여 애플리케이션을 모니터링하고 상호 작용할 수 있다. Spring boot에는 여러 가지 기본 제공 endpoints가 포함되어 있으며 이..
위임 프로퍼티 위임은 객체가 직접 작업을 수행하지 않고 다른 도우미 객체가 그 작업을 처리하게 맡기는 디자인 패턴을 말한다. '클래스 위임' 참고 문법: class Foo { var p: Type by Delegate() } p 프로퍼티는 접근자 로직을 다른 객체(Delegate 클래스)에게 위임 Delegate 클래스에 위임하기 위해서는 Delegate 클래스에 getValue와 setValue 메서드가 있어야 한다. 예제: class Delegate(var value: String) { operator fun getValue(foo: Foo, property: KProperty): String { return value } operator fun setValue(foo: Foo, property: K..
프로토콜 스택 프로토콜 스택은 내부에 제어 정보를 기록하는 메모리 영역을 가지고 있으며, 여기에 통신 동작을 제어하기 위한 제어 정보를 기록한다. 대표적인 정보: 통신 상대의 IP 주소&포트 번호, 통신 동작의 진행 상태 이러한 제어 정보를 기록한 메모리 영역이 소켓의 실체라고 생각해도 좋다. 프로토콜 스택: TCP vs UDP DNS 서버는 UDP 프로토콜을 사용하여 데이터를 송수신하고 웹 서버는 TCP 프로토콜을 이용해 데이터를 송수신한다. Socket programming with UDP and TCP TCP 프로토콜을 이용하여 메시지를 송신하는 동작 4단계 소켓을 생성 서버에 접속 데이터를 송/수신 서버에서 연결을 끊어 소켓을 말소 그 후 IP와 이더넷의 패킷 송수신 동작 UDP 프로토콜을 이용한..
연산자 오버로딩 자바에는 표준 라이브러리와 밀접하게 연관된 언어 기능이 몇 가지 있다. 예를 들어 for ... in 루프에 java.lang.Iterable을 구현한 객체를 사용할 수 있다. 코틀린에서는 이러한 언어 기능이 어떤 타입(클래스)과 연관되기보다는 특정 함수 이름과 연관된다. 예를 들어 어떤 클래스 안에 plus라는 이름의 특별한 메서드를 정의하면 그 클래스의 인스턴스에 대해 + 연산자를 사용할 수 있다. 이런 식으로 어떤 언어 기능과 미리 정해진 이름의 함수를 연결해주는 기법을 코틀린에서는 관례(convention)라고 부른다. 예: Point 클래스 data class Point(val x: Int, val y: Int) 산술 연산자 오버로딩 이항 산술 연산 오버로딩 Point에서 지원하..
컬렉션과 배열 코틀린 컬렉션은 자바 라이브러리를 바탕으로 만들어졌고 확장 함수를 통해 기능을 추가한다. 널 가능성과 컬렉션 변수 타입 뒤에 ?를 붙이면 그 변수에 널을 저장할 수 있다는 뜻인 것처럼 타입 인자로 쓰인 타입에도 같은 표시를 사용할 수 있다. val numbers1 = ArrayList()? // numbers1이 null이 될 수 있다. val numbers2 = ArrayList() // 컬렉션 안에 null 값을 넣을 수 있다. val numbers3 = ArrayList()? // 널이 될 수 있는 값으로 이뤄진 널이 될 수 있는 리스트 filterNotNull(): 컬렉션에서 널 값을 걸러내는 함수 fun addValidNumbers(numbers: List) { val validN..
코틀린의 원시 타입 코틀린은 원시 타입과 래퍼 타입을 구분하지 않는다. 원시 타입: Int, Boolean 등 자바는 원시 타입(primitive type)과 참조 타입(reference type)을 구분한다. 원시 타입 예: Int, Boolean 등 원시 타입의 변수에는 그 값이 직접 들어간다. 참조 타입 예: String 등 참조 타입의 변수에는 메모리상의 객체 위치가 들어간다. 원시 타입의 값에 대해 메서드를 호출하거나 컬렉션에 원시 타입 값을 담을 수 없다. 자바는 참조 타입이 필요한 경우 특별한 래퍼 타입으로 원시 타입 값을 감싸서 사용한다. 예: Int를 java.lang.Integer로 래핑 [Java] // ArrayList lists = new ArrayList(); -> error A..