무지개곰
article thumbnail
반응형

목차

  1. 트랜잭션 실행 방식
  2. 결과
  3. 다음 목표

트랜잭션 실행 방식

이전에 받은 피드백이었지만 정확히 집고 적용하고 싶은 마음에 미루었던 것을 이제 적용

문제점

DB에 대한 쿼리문을 실행할 때 rollback과 commit 없이 Exec로 각 쿼리를 바로 실행하는 문제

이유

데이터의 일관성과 안정성을 보장하기 위함
쿼리 작업이 한 줄의 경우는 결국 err를 반환하여 쿼리문이 실패하겠지만 한 메서드에서 쿼리 작업이 여러 작업이 있는 경우 어떠한 쿼리는 작동이 되고 어떠한 쿼리는 작동되지 않는 경우 DB에 저장되는 내용에 문제가 발생할 수 있음
따라서 데이터베이스 작업을 그룹화하고 성공적으로 완료되었을 때 commit을 호출하도록 적용

rollback과 commit 사용

  • 코드의 일부
tx, err := mysql.DB.Begin()
if err != nil {
  return err
}

// 에러 발생 시 롤백
defer func() {
if r := recover(); r != nil {
tx.Rollback()
}
}()

// Hashtags 테이블에서 해당 ProfileID에 해당하는 레코드 삭제
_, err = tx.Exec("DELETE FROM profile_has_tech_list WHERE profile_id = ?", id)
if err != nil {
tx.Rollback()
return err
}

// 트랜잭션 커밋
err = tx.Commit()
if err != nil {
return err
}

 


결과


다음 목표

GIF 변환 응용 프로그램 만들기

ffmpeg을 사용하여 gif로 변환하는 웹 페이지를 만들어서 결과물을 촬영한 영상을 gif로 변환하여 사용 중입니다.
매번 서버를 열어서 작업을 하는 번거로움을 줄이고자 golang을 활용하여 응용프로그램을 만들어 사용할까 합니다.

채팅 기능 구현

원래 계획이었던 채팅기능을 만들면서 webSocket과 gRPC를 공부하려고 합니다.
gRPC의 경우 실시간 스트리밍, 채팅 시스템, 게임 서버에서 실시간 통신이 중요할 때 사용할 수 있다고 알고 있습니다.
채팅을 구현하면서 두 방식의 차이도 공부하고 gRPC를 배우는 시간을 가지려고 합니다.

반응형
profile

무지개곰

@무지개곰

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!