2024-12-05 TIL
오전 수업
그룹화
sql의 with문을 배웠다.
with 문은 임시 테이블을 만드는 방법으로, 일정 버전 이후의 서브쿼리를 사용하게 하는 방법이라고 한다.
이 부분은 문법이 익숙치 않음으로 예시를 들어보겠다.
WITH player_total_hours AS (
SELECT player_id, SUM(hours_played) AS total_hours
FROM player_activity
GROUP BY player_id
)
SELECT pa.player_id, q.quest_name, q.difficulty, pa.hours_played
FROM player_activity pa
INNER JOIN quests q ON pa.quest_id = q.quest_id
INNER JOIN player_total_hours pth ON pa.player_id = pth.player_id
WHERE pth.total_hours >= 5;
오후 작업
내가 맡은 작업
이적 시장 테이블에 플레이어(캐릭터)를 집어 넣고 빼고 하는 작업을 완료했다.
이 작업에서 중요했던 건 많은 작업을 트랜잭션으로 처리하면서 데이터의 일관성을 유지하는 것이었다.
이전 작업에서 완료가 되었다고 생각했으나 실행해보고 보니 변수 문제라던가 이미 지워진 데이터베이스에 접근을 할 때의 예외처리 등을 생각하지 못했었다.
해당 작업들의 트러블슈팅도 한 번 적어보도록 하겠다.
발단
이전 작업들에 비하면 이적 시장은 쉬운 편에 속했다.
등록의 경우 팀 테이블에서의 삭제와 이적 시장의 등록 같은 것이 동시에 처리되어야 하기에 트랜잭션을 써야 하는 문제는 있지만, 반대로 트랜잭션으로 대부분 쓰면 될 일이었다.
조회 같이 하나만 검색하면 되는 일이라면 안 써도 되는 식이었다.
전개&위기
이전 작업에선 강화 기능을 추가할지말지를 정하지 않았기에 별도로 이적시장에 강화 수치를 넣지 않았다.
이전엔 teams에서 데이터를 삭제한 뒤 테이블에 집어 넣는 방식을 택했는데 이 방식이 아닌 teams에 별도의 상태를 넣는 방식으로 작업하자는 말이 나왔다.
결말
전체 테이블을 마이그레이션 한 다음에 새로 로직을 짜게 되었다.
결과적으론 코드가 간결해질 것으로 사료된다.