목록CS 지식 (169)
개발놀이터
요즘 여러 회사들의 장애대응 회고를 보면서 드는 생각은 '요즘 PostgreSQL많이쓰네...' 였습니다. 어떤 회사들은 AWS RDS를 PostgreSQL로 한 회사도 있더라구요. 그걸 보면서 어떤 점이 다른 RDBMS를 대체할만큼 매력적이었을까 의문이 들어서 PostgreSQL에 대해서 간단한 개요수준으로 공부해봤습니다. 이번 포스팅에선 PostgreSQL이 다른 RDBMS와 차별점을 가지는 점에 대해서 포스팅을 할 생각입니다. PostgreSQL이 기존 RDBMS와 뭐가 다를까?제가 아는 PostgreSQL은 Postgres라는 프로젝트에서 시작해 QUEL ('큐엘'이라고 발음하는 것 같습니다) 이라는 언어를 지원한다는 의미에서 PostgreSQL이 되었다고 알고 있습니다. 때문에 발음이 포..
제목이 꽤나 자극적이지만 아무리 생각해도 이거만큼 좋은 제목은 떠오르지 않았습니다. 제가 오늘 포스팅을 하게된 계기가 되는 포스팅도 저자분이 "@Transactional의 해로움" 이라고 할 정도이니 말 다한 것이죠. 우선 원래의 글을 올려드릴테니 자세한 내용은 아래의 링크를 참고해주세요! https://channel.io/ko/blog/bad-transactional?fbclid=IwZXh0bgNhZW0CMTEAAR0Atxir0WzSFcBMLmVjDXNLrUoiUl_qX93JPUPoo6EIRqP3irVoc22JEM4_aem_Gt65sDAFShcRmzIYKpla4w @Transactional의 해로움들어가며: 23.12.31 Database outage 새해를 하루 앞둔 12월 31일 자정을 얼마 지나지..
리눅스에선 rm 명령어를 이용해서 파일이나 폴더를 삭제합니다. rm -f deploy.sh파일 삭제rm -rf deploy폴더 삭제 근데 문제는 이제 진짜 컴퓨터에서 완전히 삭제된다는 것입니다. 개인적으로 너무 위험해보여서 윈도우처럼 휴지통으로 이동하는 기능이 있으면 좋겠다싶었습니다. 찾아보니까 alias라고 별칭을 만들어주는 기능이 있어서 그 기능을 이용해서 그 기능을 한번 적용해서 안전장치를 하나 둬보겠습니다. Alias리눅스에선 자신이 많이 사용하는 명령어를 alias로 만들 수 있습니다. alias를 사용하는 방법은 두가지 방법이 있습니다. 현재 사용자만 alias 등록모든 사용자의 alias 등록먼저 현재 사용자의 alias를 등록해보겠습니다. 현재 사용자 alias 등록현재 사용자..
리눅스에는 파일 혹은 폴더에 권한을 부여하고 관리할 수 있습니다. 정확히는 유닉스라고 해야겠네요. 이번 포스팅에선 파일 혹은 폴더에 권한을 부여하고 관리하는 방법에 대해서 공부한 내용을 정리해보도록 하겠습니다. 파일, 폴더 권한 부여파일, 폴더에 권한을 부여하는 방법에는 두가지 방법이 있습니다. 777과 같이 숫자로 부여하는 방법과 u+x와같이 문자로 부여하는 방법입니다. 먼저 숫자로 부여하는 방법에 대해서 알아보도록 하겠습니다. 기본적으로 파일이나 폴더를 만들면 상태는 rwxr-xr-x입니다. 폴더를 소유한 ec2-user와 폴더를 소유한 그룹인 ec2-user는 이 파일에 대한 권한을 나눠받습니다. 소유자인 ec2-user는 읽고, 쓰고, 실행할 권한이 있고, 그룹인 ec2-user는 읽고..
리눅스를 공부하다보니 리눅스 커널이라는 것을 공부하면 좋다고 하더군요. 원래 이론공부는 나중에 하는 편이지만 이론공부도 좋아하기 때문에 한번 공부해봤습니다. 리눅스 커널우선, 커널이 뭔지 개념을 잡고 넘어가면 좋을 것 같습니다. 커널은 컴퓨터에 장착되어 있는 하드웨어 제품들 (하드디스크, 메모리, CPU, 키보드, 마우스, 모니터 등등...) 을 소프트웨어로 추상화하여 OS가 사용할 수 있도록 하는 것입니다. 즉, 쉽게 말해 커널은 OS가 하드웨어 디바이스를 제어하기위한 중계자 역할을 한다는 것입니다. 우리는 그 중에서 리눅스 커널에 대해서 알아볼 것입니다. 윈도우도 커널이 있습니다! 하지만 우리는 윈도우로 개발할 것은 아니기 때문에 리눅스로 한번 알아봤습니다. 리눅스 커널에는 크게 다섯가지 관리..
저는 현재 소규모 스타트업에서 일하고 있는데요. 회사에서 큼직하지 않은 잡다한 인프라 담당을 겸하고 있습니다. 사용자 권한 관리하고 서버 내리고 올리고 라우팅이나 포트 관리하고 이런 서버관리 업무가 제 업무에 포함되어있습니다. 그러다보니 평소에 안그래도 부족했던 리눅스관련 지식이 더 티가 잘나더군요... 그래서 이번 기회에 리눅스 명령어부터 리눅스 커널에 대해서 좀 공부를 할 생각입니다. 평소의 제 방식처럼 일단 사용법부터 들이박아보고 이론은 조금 시간이 지나고 배워보도록 하겠습니다. 리눅스 사용자 추가서버 컴퓨터는 대부분 리눅스로 되어있습니다. 보통 제가 프로젝트를 할 때는 AWS에서 제공해주는 기본 사용자를 사용하곤 했었죠. 회사에선 개발전용 사용자가 있고 루트 사용자가 있더군요. 이 사용..
약 2년전 시작했던 프로젝트인 온라인 쇼핑몰 프로젝트는 제가 취직을 함으로써 종료되었고 더이상 건드리지 않았습니다. 하지만 사이드프로젝트로서 나중에 이직할때 도움이 되고자 코드 리팩토링을 진행하게 되었습니다. 리팩토링을 진행하던 중에 조회수를 증가시킴과 동시에 쿠키에 조회했다는 정보를 넣어 조회수 중복 증가를 방지하는 로직을 발견했고 그 부분에서 리팩토링할 부분이 있었습니다. 바로 @Transcational 의 남용이었죠. @Servicepublic class ClickDuplicationPreventService { @Transactional public void viewCountUp(Item item, HttpServletRequest request, HttpServletResponse r..
오늘은 WebRTC와 미디어서버에 대해서 알아보도록 하겠습니다. 회사에서 미디어서버를 도입하여 공부하는김에 포스팅까지 해보려고합니다. 우선 WebRTC에 대해서 설명하고 넘어가야겠죠? WebRTC WebRTC를 설명하기 전에 TCP와 UDP에 차이에 대해서 짚고 넘어가도록 하겠습니다. 취준생 단골 질문이기도 한 TCP와 UDP에 차이는 조금만 깊이있게 공부하면 머리가 어지러워지는 상황에 봉착합니다. 제가 TCP의 흐름제어와 혼잡제어에 대해서 올린 포스팅도 있으니 한번 참고해주세요! https://coding-review.tistory.com/466 네트워크 흐름제어와 혼잡제어 (Flow Control, Congestion Control) 우리가 흔히 말하는 네트워크 통신은 TCP 3way handshak..
이번에도 Redis에 관한 내용...은 아니고 JWT에 대한 내용입니다. Redis는 조연입니다. 많은 분들이 회원 인증에 JWT를 사용하곤 하십니다. 실제로 저도 프로젝트에 JWT와 Spring Security를 접목시켜 회원 인증을 진행했습니다. 프로젝트에 JWT로 인증을 진행하는건 좋은데 그 뒤가 궁금했습니다. 만약에 Redis에 장애가 발생하면 JWT인증은 어떻게 될까? JWT와 Redis 구글링 한번이면 나오는 내용이기 때문에 자세히 다루지는 않겠습니다. JWT는 stateless한 인증 방식이라고 알고들 계시겠지만 이는 반은 맞고 반은 틀린 이야기입니다. 보통 JWT로 인증을 진행할 때 Access Token은 쿠키에 Refresh Token은 Redis에 저장하곤 합니다. 쿠키에 HTTP o..
만약 캐싱 솔루션으로 Redis를 사용하고 있다면 Redis가 장애상황으로 죽어버리는 경우 RDBMS에 부하가 심하게 발생하여 RDBMS까지 연쇄적으로 장애가 발생하는 상황이 충분히 있을 수 있습니다. 저는 프로젝트를 진행하면서 Redis를 이용해서 캐싱 솔루션을 도입했고 결과적으로 RDBMS의 부하를 30퍼센트 이상 줄이기도 하였습니다. 이 30퍼센트라는 수치는 결코 무시할 수 없기 때문에 Redis의 장애상황에 대한 대비책이 있어야합니다. 이번 포스팅에선 Redis가 장애시 RDBMS의 연쇄적인 장애를 대응하기 위해 어떤 전략을 사용하는지 알아보도록 하겠습니다. Redis의 가용성을 높이자! 흔히 생각할 수 있는 방법으로 Redis를 죽지않게 관리하는 것입니다. Redis에는 두가지 배포 방식이 있습..