무지개곰
article thumbnail
[개발 일기] 데드락, 라이브락, 기아 상태
개발일기/Prism 2024. 3. 13. 16:39

목차 데드락 라이브락 기아 상태 데드락 둘 이상의 프로세스가 서로가 가진 한정된 자원을 요청하는 상태 type value struct { mu sync.Mutex value int } func Sum(a, b *value) { defer wg.Done() a.mu.Lock() defer a.mu.Unlock() time.Sleep(2*time.Second) b.mu.Lock() defer b.mu.Unlock() fmt.Printf("%d + %d = %d\n", a.value, b.value, a.value + b.value) } var a, b value wg.Add(2) go Sum(&a, &b) go Sum(&b, &a) wg.Wait() 데드락 발생 조건 상호 배제 동시에 실행되는 프로세스가 어..

article thumbnail
[개발 일기] 채팅 구현 사전 공부
개발일기/Prism 2024. 3. 10. 19:01

목차 1. WebSocket이란? 2. WebRTC란? 3. STOMP란? WebSocket이란? WebSocket은 TCP 위에서 메시지 스트리밍을 가능하게 합니다. 전이중 통신 두 대의 단말기가 데이터를 송수신하기 위해 동시에 각각 독립된 회선을 사용하는 통신방식 WebRTC란? WebRTC는 Web Real-Time Communication의 약자로, 브라우저끼리 통신하여 중간자인 서버 없이 브라우저 간에 P2P 형태로 오디오, 영상, 데이터를 교환할 수 있게 하는 기술 장점 네트워크 지연시간이 짧다 전송 속도가 빠르다 STOMP란? Simple Text Oriented Messaging Protocol의 약자로 간단한 문자 기반 메세징 프로토콜을 의미합니다. 여러 플랫폼 간 메세지를 상호 운영할 ..

article thumbnail
[개발 일기] controller-service-repository 리팩토링
개발일기/Prism 2024. 2. 4. 02:19

목차 controller - service - repository 란? 폴더 참고 자료 controller - service - repository 란? 소프트웨어 디자인 패턴 중 하나로 계층 구조를 활용하여 각 계층이 특정 역할을 수행하도록 구조화하는 방식 controller 사용자의 입력을 받아 해당하는 서비스 메서드를 호출 service 비즈니스 로직을 처리하고 데이터의 가공 및 처리를 담당 repository 데이터베이스나 외부의 데이터에 접근하여 CRUD 연산을 담당 장점 코드의 재사용성이 높아진다. 작업이 분리되어 있기에 유지보수가 쉽다. (ex. DB문제면 repository를 확인, 로직 문제면 service를 확인) 테스트하기 쉽다. (작업 단위로 메서드를 만들었기에 각 메서드를 테스트할..

article thumbnail
[개발 일기] 해시태그, 기술스택 구현
개발일기/Prism 2024. 1. 24. 23:15

목차 트랜잭션 실행 방식 결과 다음 목표 트랜잭션 실행 방식 이전에 받은 피드백이었지만 정확히 집고 적용하고 싶은 마음에 미루었던 것을 이제 적용 문제점 DB에 대한 쿼리문을 실행할 때 rollback과 commit 없이 Exec로 각 쿼리를 바로 실행하는 문제 이유 데이터의 일관성과 안정성을 보장하기 위함 쿼리 작업이 한 줄의 경우는 결국 err를 반환하여 쿼리문이 실패하겠지만 한 메서드에서 쿼리 작업이 여러 작업이 있는 경우 어떠한 쿼리는 작동이 되고 어떠한 쿼리는 작동되지 않는 경우 DB에 저장되는 내용에 문제가 발생할 수 있음 따라서 데이터베이스 작업을 그룹화하고 성공적으로 완료되었을 때 commit을 호출하도록 적용 rollback과 commit 사용 코드의 일부 tx, err := mysql...