오늘은 동기와 비동기에 대해 알아보았다. 동기와 비동기는 프로그램에서 작업을 처리하는 방식에 따라 나뉘며, 각각 장단점이 있다.
1. 동기(Synchronous)
동기 방식은 하나의 작업이 끝난 후에야 다음 작업이 시작되는 방식이다. 작업이 순차적으로 진행되기 때문에 결과를 예측하기 쉽지만, 시간이 오래 걸리는 작업이 있으면 전체 처리가 느려질 수 있다. 예를 들면, 동네 우체국에서 사람들이 순서대로 업무를 처리하는 방식이다. 첫 번째 사람이 끝나기 전에는 두 번째 사람이 기다려야 한다. 특징은 작업이 순차적으로 실행되고, 한 작업이 끝나기 전에는 다음 작업이 대기하며, 구현이 간단하지만 효율성은 떨어질 수 있다는 것이다.
2. 비동기(Asynchronous)
비동기 방식은 작업이 서로 독립적으로 처리되며, 하나의 작업이 끝날 때까지 기다리지 않고 다른 작업을 수행하는 방식이다. 효율적이지만, 구현이 비교적 복잡하다. 예를 들면, 음식점에서 손님이 음식을 주문한 후, 음식이 나올 때까지 기다리지 않고 다른 일을 할 수 있는 방식이다. 음식이 준비되면 직원이 알려준다. 특징은 여러 작업이 동시에 실행되며, 대기 시간이 길어도 다른 작업에 영향을 주지 않고, 효율적이지만 코드 작성이 복잡할 수 있다는 것이다.
3. 요약
동기 | 비동기 |
작업을 순서대로 처리 | 작업을 동시에 처리 |
한 작업이 끝나야 다음 작업 실행 | 다른 작업을 기다리지 않고 진행 |
구현이 단순 | 효율적이지만 복잡 |
동기와 비동기의 개념을 이해하며, 작업 처리 방식의 선택이 프로그램의 성능에 큰 영향을 줄 수 있음을 알게 되었다. 앞으로 상황에 따라 동기와 비동기를 적절히 활용해야겠다.
또 AWS CloudFront의 캐시 무효화 방법에 대해 알아보았다. 배포한 React와 DRF 기반 웹사이트에서 변경 사항이 반영되지 않는 문제가 발생했는데, 이 문제는 CloudFront가 캐싱된 오래된 파일을 제공하고 있었기 때문이다. 이를 해결하기 위해 캐시 무효화 작업을 진행했다.
1. AWS CLI를 이용한 캐시 무효화
AWS CLI를 사용하면 CloudFront 캐시를 무효화할 수 있다. 이를 위해 다음 단계를 진행했다.
- AWS CLI 설치 여부 확인
aws --version 명령어로 CLI가 설치되어 있는지 확인했다. 설치되어 있지 않은 경우, AWS CLI 설치 가이드를 참고해 설치했다. - AWS CLI 인증 정보 설정
aws configure 명령어를 실행해 Access Key ID, Secret Access Key, Region 등을 입력했다. 이 작업을 통해 CLI가 AWS 계정과 연결되도록 설정했다. - CloudFront 캐시 무효화 명령 실행
다음 명령어를 사용해 캐시를 무효화했다.aws cloudfront create-invalidation --distribution-id YOUR_DISTRIBUTION_ID --paths "/*"
2. AWS Management Console을 이용한 캐시 무효화
AWS 웹사이트를 통해서도 캐시 무효화를 진행할 수 있다. CLI 없이도 GUI 환경에서 쉽게 작업할 수 있다는 점이 장점이다.
- CloudFront 콘솔 접속
AWS Management Console에서 CloudFront 서비스를 선택했다. 무효화하려는 배포 ID를 클릭해 세부 정보 페이지로 이동했다. - Invalidations 탭 선택
상단 메뉴에서 Invalidations 탭으로 이동했다. - 무효화 생성
Create Invalidation 버튼을 눌러 새로운 무효화 작업을 생성했다. 무효화할 경로로 /*를 입력해 모든 파일을 무효화했다. 무효화 작업이 완료될 때까지 기다렸다.
3. CLI와 Console의 차이점
- CLI : 빠르고 여러 작업을 스크립트로 처리하기 적합하다.
- Console : 그래픽 인터페이스로 직관적이며, 무효화 작업 진행 상황을 시각적으로 확인할 수 있다.
배포 환경에서의 캐시 문제는 자주 발생할 수 있는 상황이므로, CloudFront 캐시 무효화 방법을 잘 알아두는 것이 중요하다. CLI와 Console 중 상황에 맞는 방법을 선택해 사용하면 효율적이다. 무효화 작업이 완료된 이후에는 변경 사항이 정상적으로 반영되었다. AWS CloudFront와 캐시 관리에 대해 더 잘 이해하게 된 하루였다.
오늘은 역사적인 첫 배포의 날이었다. 팀원들과 함께 만든 서비스를 AWS를 통해 배포했다. 배포하자마자 몇몇 분이 들어왔다 나가셨고, 팀원들과 바로 테스트를 해보니 바로 수정해야 할 사항들이 나왔다. 충분히 팀원끼리 배포한 상태에서 테스트를 하고 공지에 링크를 뿌렸다고 생각했는데, 바로 문제점을 발견해서 당황스럽기도 했다. 이메일로 회원가입을 인증하는데, 인증 메일 링크에 접속하면 에러가 발생하는 문제였다. 곧바로 팀원들과 에러를 수정하여 다시 배포하였다.
우리 서비스에는 웹소켓으로 구현한 단체 채팅이 가능한 페이지가 있다. 그 페이지는 POP QUIZ 페이지로, 채팅창에 AI가 정해진 시간마다 문제를 내고, 채팅을 통해 사용자들이 문제를 풀 수도 있고 대화를 나눌 수도 있다. 팀원 모두가 그 페이지에 접속해서 문제가 잘 출력되는지 확인하고 있었는데, 진솔하고 진중한 피드백을 해주신 사용자분을 만나게 되었다. 실시간으로 채팅을 통해 피드백을 받을 수 있었다. 단체 채팅방을 구현한 게 매우 뿌듯한 순간이었다.
전체적으로 배포한 후에도, 오늘 많은 기능들을 개발했다. 이전에는 단순히 5지선다 문제만 출제하던 단체 채팅방을, 주관식으로 바꾸고 전체적인 스타일도 개선했으며, 점수를 만들어서 점수별로 등수를 확인할 수 있는 공간도 만들었다. 기능적으로 이미 거의 구현했다고 생각했는데, 오늘 실시간으로 받았던 유저 피드백을 통해 추가로 기능을 구현하게 되었다. 원래도 점수제로 등수를 확인하는 기능을 구현할지 고민을 했는데, 유저에게 그런 기능이 있으면 좋겠다는 피드백을 받아서 오늘 바로 구현하게 되었다. 다른 버그나 에러가 크게 추가로 발생되지 않아서 가능했던 것 같다. 추가로 받은 피드백으로는 단체 채팅방에서 퀴즈가 생성될 때까지 대기하는 시간이 있는데, 그 대기 시간이 너무 길다는 내용이었다. 이는 주관식으로 문제를 바꾸면서 체감 문제 난이도를 높여서 문제를 푸는 시간을 늘리고 대기 시간을 줄이는 방향으로 수정했다. 오늘 수정한 사항들을 바탕으로 새벽에 한 번 더 배포를 진행하고 알림을 띄울 예정이다.