본문 바로가기

분류 전체보기68

[대규모 시스템 설계] 동시성 처리 동시성 처리, 왜 중요할까? 동시성 처리는 대규모 시스템 설계에서 중요한 부분이다. 왜냐하면 대규모 시스템에서는 엄청나게 많은 사용자가 동시에 접근할 것이고, 그러면 여러 스레드가 동시에 한 값에 접근하는 상황이 많이 발생할 것이다. 예시로, 외국민 프로젝트에서 게시글의 조회수/추천수를 증가시키는 기능이 있다고 해보자. 이 부분은 단지 “DB로 부터 값 읽기 → 값 증가” 이 과정이다보니 Race Condition이 발생할 가능성이 매우 크다. 100명이 추천을 동시에 눌렀는데, 실제 값은 82명 정도로 100명에 못미치는 값이 될 가능성이 매우 높다.  혹시 해당 현상이 발생하는 이유는 잘 모르겠다면, 아래 운영체제 동시성에 관련된 개념을 한번 읽어보길 바란다. [OS/OSTEP] 26.threads-.. 2024. 7. 4.
[배포] Route 53 + Nginx + Certbot으로 Https 적용하기 0. 시작하기전에도메인 관련 서비스는 좋은 것이 꽤 많다. 예를 들어, DNS로는 유명한 것이 AWS Route 53이 있고, ACM 같은 것을 이용하여 손쉽게 인증서를 구입하고 적용할 수 있을 것이다. 하지만, 이런 서비스들은 꽤나 비싸다.... (Route 53은 싸긴함) 그래서 학생들도 부담없이 HTTPS를 적용할 수 있는 방법인 Route 53 + Nginx + Certbot 방법을 소개하고자 한다. 일단 ACM 같은 인증서 관리 서비스에 들어가보면, 인증서마다 가격이 천차만별이다. 왜 그럴까? 인증서도 여러가지 종류가 있기 때문이다. 인증서 종류는 크게 DV/OV/EV 3가지로 나눌 수 있다. DV : Domain Validation, 즉 도메인 소유 정보만 검증하는 인증서이다. 그래서 발급하기.. 2024. 6. 23.
[회고] 캡스톤 졸업 프로젝트를 마치며 (feat. 외국민 프로젝트) - (2) 해당 글에서는 내가 백엔드 개발을 하면서 고려했던 것과 아쉬웠던 점을 다루고자 한다. 해당 내용은 우리 프로젝트 소개 페이지에도 서술되어있다.  💾 Backend 기술 문서외국인 유학생을 위한 앱서비스kookmin-sw.github.io 일단 내가 담당한 기능들에 대해 소개해보고자 한다.공지사항 크롤링 및 커서 기반 페이지네이션 기능로그인/회원가입 기능JWT 토큰 발급 기능채팅 기능발음평가 관련된 치명적인 오류 수정전반적인 시스템 아키텍처 설계API Gateway 구축 (JWT Token 확인 및 API Rate Limiter 구축)Https 적용Docker Container화Git Actions을 이용한 CI/CD 적용Test Container를 활용한 테스트 환경 구축캐싱을 통한 응답시간 향상전반적.. 2024. 6. 23.
[회고] 캡스톤 졸업 프로젝트를 마치며 (feat. 외국민 프로젝트) - (1) 외국민 프로젝트2024학년도 1학기캡스톤 디자인 프로젝트인원 : 6명 (FE(2), BE(2), AI(2))담당한 역할 : 백엔드수상 : 장려상 Github 링크 GitHub - kookmin-sw/capstone-2024-30: 외국인 유학생을 위한 앱서비스외국인 유학생을 위한 앱서비스. Contribute to kookmin-sw/capstone-2024-30 development by creating an account on GitHub.github.com  소개페이지 💻 캡스톤 30조 결과물 소개외국인 유학생을 위한 앱서비스kookmin-sw.github.io 플레이스토어 링크 외국민 - Google Play 앱국민대학교 외국인 유학생을 위한 정보제공앱입니다.play.google.com길고 길었.. 2024. 6. 22.
[프로젝트 진행하기 #5] Git 프로젝트 진행하기 5탄이다. 이번 포스팅에서는 개발 협업에서 정말 중요한 Git에 대해서 다뤄보고자 한다.  🗨️ 시작하기 전에...프로젝트 진행하기 1탄에서 내가 " 무엇보다 가장 중요한 것은, Git을 다룰줄 알아야된다. 다같이 개발할 때 가장 필수적인 것이 Git인데, 쓸줄 모르는 사람은 절대 택하지 말자."라고 언급했었다. 프로젝트 협업의 시작은 Git이고, 이에 대한 이해가 부족한 사람들은 협업 과정이 귀찮기만하고 왜 해야하는지 잘 이해를 못할 것이기 때문이다. 또한, Github을 사용할 줄 모르면 다같이 개발 진행이 어렵기 때문이다. 어쨋든 이번 포스팅에서는 Git을 어떻게 다뤄야하고, 체계를 구축해야되는지, Git 협업은 어떤식으로 진행하면 좋을지에 대해서 다뤄보고자 한다.  💡 Git.. 2024. 6. 19.
[프로젝트 진행하기 #4] 회의 진행 프로젝트 진행하기 4탄이다. 이번 포스팅에서는 이제 회의를 어떤식으로 진행하면 좋을까에 대해 다뤄보고자 한다. 회의 부분은 생각보다 글이 짧을 것이다. 🗨️ 회의는 대면? 비대면?본론부터 말하자면 회의는 대면을 강력 추천한다. 물론 비대면으로 회의를 진행하면 장점이 있긴하다. 이동 시간을 줄이고, 직접 얼굴을 마주보면서 하는게 아니다보니깐 피로감도 덜든다. 하지만 내가 느꼈을 때, 비대면 회의는 생각보다 진도가 잘 나가지 않는다. 왜냐하면, 비대면으로 진행하면 팀원들이 딴짓을 할 가능성이 높아져서 의견 소통이 잘 안되고, 의견도 잘 내지 않는다. 또한, 사람이 적으면 괜찮지만, 사람이 6명만 되더라도 굉장히 사운드가 많이 겹쳐서 잘 전달이 되지 않는다. 반대로 대면으로 진행하면 이 사람이 무엇을 하고 .. 2024. 6. 17.
[프로젝트 진행하기 #3] 기획의 고도화 프로젝트 진행과정 3탄이다. 이번 포스팅에서는 2탄에서 한 기획을 바탕으로 고도화를 하는 과정을 간단히 다뤄보고자 한다.  🗨️시작하기전에기획의 고도화가 왜 필요할까? 2탄에서도 말했지만, 명확한 기획이 아주 중요하다. 기획이 부실하면, 서로 이해한 내용이 다르고, 혼란스러워지고, 우리가 지금 하고 있는 프로젝트가 왜 필요한지 의문도 들 것이다. 💡Use Case 그려보기Use case란 시스템이 사용자와 상호작용을 어떻게 하는지 방식을 설명하는 그림이다. 이를 통해, 서비스의 요구사항을 명확히 알 수 있고, 또한 사용자가 우리 서비스를 이용하는 시나리오를 알 수 있다. 위 그림은 제가 "국민대학교를 위한 스트리밍 플랫폼, Kwitch"를 개발할 때 그렸던 Use case Diagram이다. 이런식으.. 2024. 5. 31.