한화 Beyond SW 캠프

한화 Beyond SW 캠프 7기 12주차 회고

방감자 2024. 8. 5. 00:54

배운점

  • 이니셜 데이터 로더
    Spring Boot 애플리케이션이 시작될 때 특정 로직을 실행할 수 있게 해주는 기능이다. 개발을 할 때마다 테스트 데이터 넣는 것 때문에 엄청 귀찮고 힘들었는데 이니셜 데이터 로더라는 것을 알게 되어 정말 기뻤다.. 🤩모르던 기능을 많이 알게되어 기쁜 요즘이다
  • 동시성 이슈 해결
    DB 배울 때부터 나는 언제 동시성 이슈 해결해 보나 했는데 그날이 벌써 왔다 .. 충격 왜냐면 벌써 12주차가 끝났기 때문 ..
    처음 동시성 이슈를 해결하기 위한 코드를 짜기 위해서 redis를 통한 분산락을 구현했었다.
    충격적이게도 아무리 테스트 코드를 돌려봐도 테스트 실패의 쓴맛을 보았고 .. 로그를 열심히 찍어본 결과
INFO 46378 --- [pool-2-thread-4] c.e.d.r.ReservationDetailService         : Lock acquired with key: reservationLock
INFO 46378 --- [pool-2-thread-4] c.e.d.r.ReservationDetailService         : 현재 진행중인 사람 : pool-2-thread-4 & 현재 남은 인원 : 8개
INFO 46378 --- [pool-2-thread-4] c.e.d.r.ReservationDetailService         : Lock released with key: reservationLock
Hibernate: update reservation set available_people=?, coach_id=?, date=?, maximum_people=?, time=? where id=?
INFO 46378 --- [pool-2-thread-2] c.e.d.r.ReservationDetailService         : Lock acquired with key: reservationLock
WARN 46378 --- [pool-2-thread-4] o.m.jdbc.message.server.ErrorPacket      : Error: 1213-40001: Deadlock found when trying to get lock; try restarting transaction
Hibernate: select member0_.id as id1_0_0_ from member member0_ where member0_.id=?
WARN 46378 --- [pool-2-thread-4] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 1213, SQLState: 40001
ERROR 46378 --- [pool-2-thread-4] o.h.engine.jdbc.spi.SqlExceptionHelper   : (conn=905) Deadlock found when trying to get lock; try restarting transaction
INFO 46378 --- [pool-2-thread-2] c.e.d.r.ReservationDetailService         : 현재 진행중인 사람 : pool-2-thread-2 & 현재 남은 인원 : 8개

 

락을 해제한 후에 update 쿼리문이 나가기 때문에 다음 락이 select문이 update문의 커밋 후가 되는 순서를 보장하지 못하게 되고 동시성 제어가 안되는 것 같다.
thread-4가 락을 해제한 후 update 쿼리를 실행하는 동안 thread-2가 락을 획득하고, thread-4의 update 쿼리 실행이 지연되면서 데드락이 발생하는 것 같다.
이렇게 삽질하다보니 수업에서 동시성 이슈를 다뤄보게 되었다. redis를 통해서 예약가능한 인원을 관리하고 rabbitMQ를 사용하여 rdb에도 동시성 이슈없이 데이터를 업데이트시킬 수 있었다.

잘한 점

  • 수업내용 정리
    스프링 심화의 핵심 기능들에 대한 진도를 나가다보니 흥미롭기도 하고 배우는 내용들을 바로 팀프로젝트에 적용시켜야 하기 때문에 수업 내용 정리를 열심히 할 수 있었다.
  • 해커톤 !!!
    강사님이 팀프로젝트만해서는 수업시간에 배운 중요한 내용들을 개개인이 다 실제로 써보기는 힘들 것 같다며 해커톤을 제안하셨다. 처음엔 팀프로젝트로 너무너무 정신없는 와중에 해커톤까지 한다고 하니 반갑진 않았다. 하지만 정말 딱 수업시간 안에 집중해서 만들고 끝내니 하루 만에 서비스를 완성했다는 기분이 들며 뿌듯하기도 했다. 그리고 거의 수업 시간 내용 그대로이지만 token 로그인, s3를 통한 이미지 처리, smtp 서버를 통한 이메일 전송 기능, redis를 통한 캐싱 기능과 같이 여러 기능을 구현해 본 것도 좋았다. 아마도 학원 다니는 12주 중 가장 재밌는 시간이 아니었을까 하하

아쉬운 점

  • 발표공포증 혹은 과민성대장증후군 그 어디쯤
    해커톤이 끝나고 몇몇 사람들이 발표를 하게 되었는데 내가 거기에 당첨이 됐다 .. 😵‍💫 발표하기 전까진 생각보다 괜찮은데 발표를 시작하는 순간부터 전달력 0인 인간이 되고 .. 말을 절면서.. 배가 아프기 시작한다… 흑 그렇게 주기자보다 못한 발표를 마치고 3시간동안 배를 부여잡고 있었던 아주 웃긴 사건이다. 사실 안 웃기다
  • 백엔드 시험
    하하 위의 사건으로 해커톤이 끝나고 시험 준비할 수 있는 시간이 있었음에도 공부를 하나도 하지 못했다. 그래 수업을 잘 들었는지 체크하는 마음가짐으로 시험에 임했는데 아무래도 수업을 잘 안 들었나 보다. 다다음주에 또 시험을 보니 그때는 수업을 더 열심히 들어서 시험을 잘 볼 수 있도록 ᕕ( ᐛ )ᕗ

다음 주 할 일

  • 팀플 프론트 들어가기 ..😢
  • 프론트 수업 열심히 듣기
  • 밥 잘먹기
  • 평일에 제발 운동 한 번이라도 가기