본문 바로가기

Programming

Spring Boot - 스케줄러 사용해보기 1. FixedDelay vs FixedRate 들어가며 최근에 있었던 일입니다. 제가 만든 컴포넌트를 코드 리뷰를 통해 팀원들과 공유하는 자리를 가졌었는데, 스케줄링 된 작업에 대해서 이런 질문이 들어왔었습니다. 어라.. 저 작업이 0.5초마다 실행되게 설정되어 있는데요, 만일 작업의 수행속도가 0.5초를 넘기면 어떻게 되나요? 다음 작업이 무시되나요? 아니면 스레드가 하나 더 생겨서 어떻게든 0.5초마다 계속 실행되도록 하나요? 아니면 밀린 만큼 연달아 실행하나요? 이 질문은 중요했습니다. 왜냐하면 해당 작업은 무조건 순차적으로, 동시가 아닌 딱 1번씩만 실행되어야만 하는 작업이었기 때문이죠. 저는 스프링의 스케줄링에 대해 대략적인 조사를 해 보았을 때의 기억에 의존해서, "제가 알기로 기본 설정이 싱글 스레드이기 때문에, 수행 시간이 밀린다고 멀..
디자인 패턴 2. 스트래티지 패턴(Strategy Pattern) 스트래티지 패턴이 뭔가요? 세상 모든 지식을 알고 있는 위대하신 위키 백과님은 스트래티지 패턴(== 전략 패턴)을 아래와 같이 정의하고 있습니다. 전략 패턴 또는 정책 패턴은 실행 중에 알고리즘을 선택할 수 있게 하는 행위 소프트웨어 디자인 패턴이다. 전략 패턴은 특정한 계열의 알고리즘들을 정의하고 각 알고리즘을 캡슐화하며 이 알고리즘들을 해당 계열 안에서 상호 교체가 가능하게 만든다. 저 글귀를 읽고 '아! 그렇구나, 스트래티지 패턴 공부 끝!' 하고 잠자러 들어갈 수 있는 사람은 애초에 이 포스팅을 읽고 있지 않겠죠. 저 설명에서 캐치하고 가야할 포인트는 두 가지입니다. 실행 중에 알고리즘을 선택한다. 이 두 가지가 스트래티지 패턴의 골자입니다. 이제부터 스트래티지 패턴이 무엇이며, 어떻게 쓰일 수 ..
디자인 패턴 1. 소개 디자인 패턴이 뭔가요? Design Pattern이란 말만 들었을 때에는, 뭔가 그림을 그려야 할 것 같지만 사실 디자인은 단순히 그림을 그리는 의미가 아니라 '설계'의 의미를 가지고 있습니다. 즉, 디자인은 설계에 해당합니다. 그렇다면 프로그래밍에서 디자인 패턴은 어떤 의미일까요? '프로그램 설계 유형' 정도로 풀어서 쓸 수 있지 않을까요? 프로그램을 설계한다는 의미는 단순히 코딩을 하는 것 그 이상의 문제를 이야기합니다. 진부하지만 회원가입의 예를 들어보고자 합니다. 회원가입에는 보통 성별을 남/녀로 받습니다. 그렇다면 회원 정보를 담을 클래스를 만들 때, 어떻게 해야할까요? 일단 첫 번째 예를 봅시다. ManMember와 WomanMember를 각각 Class로 만들었습니다. 이름과 나이를 각각 멤..
디자인 패턴 0. 공부 시작 들어가며 작년부터 디자인 패턴의 필요성을 느끼고 있었습니다. 단순한 계기는 취직 준비에 필요하단 생각이었고, 현재는 개인 개발 역량을 향상시키는 데에 도움을 줄 수 있을 것이라 여기고 있습니다. 주위에서 가끔 어떤 사람들이 '디자인 패턴을 굳이 공부할 필요는 없다'고 말하기도 합니다. 경력직에서도 디자인 패턴을 잘 모르는 사람들이 있다면서요. 그러나 동시에 '비록 디자인 패턴을 모르더라도, 막상 그 사람들이 작업하는 것을 보면 디자인 패턴을 체화하고 있더라'는 말까지 덧붙였습니다. 즉, 디자인 패턴을 따로 시간을 내서 공부를 하든, 하지 않든, 결국에는 필요한 만큼은 스스로 습득하게 된다는 내용이었습니다. 이 말을 종합해보았을 때, '꼭 안해도 된다.' '하면 좋다' '하면 안 되는 건 아니다' 정도의 ..
왜 자바 Spring만 뽑나요? 꼭 배워야 하나요? 들어가며 취준생 시절 때부터도 쭉 간직해 온 의문이 있었습니다. 내로라하는 대기업들의 구직 공고를 보면, 항상 따라오는 조건들이 있었죠. Java 언어 사용이 능숙한 분 Spring Framework 개발 경험이 있으신 분 Java를 배우긴 했지만, 백엔드에 사용해본 적은 없었기에 이 부분은 항상 지원에 걸림돌이 되곤 했습니다. 도대체 자바 스프링이 뭐하는 녀석이길래 이 기업 저 기업에서 다 찾을까요? 나름대로 정리한 내용을 글로 옮겨보기로 했습니다. 그리고 '그렇다면 Spring을 배워야만 할까?' 하는 고민에 빠지신 분들께 제 의견을 전달해보고자 합니다. 주의사항 : 필자는 백엔드 개발에 이제 막 뛰어든 초짜입니다. 백엔드의 유구한 역사에 대해서는 당연히 잘 모르며, 제가 추측한 이유들도 잘못된 부분..
라즈베리파이로 집에서 서버 구축하기 5. 유동 IP로 DNS 설정하기 - Cloudflare 들어가며 정말 오랜만의 포스팅입니다. 이번 글은 집에서 서버를 구축할 때, 유동 IP로 어떻게 하면 DNS를 설정할 수 있을지 그 방법에 대해서 작성해봤습니다. 들어가기 전에, 이 글은 이미 공유기에서 포트포워딩 설정이 끝나있으며, 서버 도메인을 하나 가지고 있다는 것을 가정하고 작성되었습니다. 포트포워딩에 대한 개념, 설정 방법은 검색하셔서 참고하시면 될 것 같습니다. 유동 IP의 한계 유동 IP란, 고정 IP의 반대되는 개념이며, 중간에 인터넷 공급자에 의해 언제든지 다른 IP로 바뀔 수 있는 IP를 말합니다. 현재 대세인 IPv4 체계로는 이론적으로 4,294,967,296개의 IP가 존재할 수 있으나, 어디까지나 이론일 뿐이고, 실제로는 이보다 더 적은 IP가 사용되고 있고, 현재 인터넷 이용량에..
파이썬을 이용해서 유튜브 플레이리스트 동영상을 받아보기 3 - ffmpeg 사용 (1080p 이상 영상, 인코딩) 들어가기 전에 YouTube에 공유되는 영상들은 모두 저작권을 가지고 있는 영상입니다. 이를 다운로드 받아 무단으로 배포하거나, 저작권자의 허락 없이 임의로 수정하여 사용할 경우 법적 책임을 물을 수 있습니다. 이 포스트에서 YouTube 영상을 다운로드 받는 방법을 설명하고는 있으나, 이에 대해 발생하는 문제에 대해서는 저는 책임지지 않습니다. Pytube로 1080p 이상 동영상 받기 지난 포스팅에서 progressive와 DASH(or adaptive) 방식을 전부 소개했습니다. progressive는 video와 audio가 전부 들어간 영상을 받을 수 있지만, 최대 720p까지밖에 다운로드가 안되는 문제점이 있다고 말했습니다. 대신 DASH(adaptive) 방식은 720p 이상의 영상들도 받을..
라즈베리파이로 집에서 서버 구축하기 4. MariaDB 설치 1. MariaDB 설치 MariaDB는 MySQL의 포크 DB입니다. 한 때 오픈소스 DB의 대명사나 마찬가지였던 MySQL이 오라클에 인수되면서, 이에 대한 반발로 생겨난 진정한 오픈소스 DB죠. 애초부터 MySQL과의 호환성을 염두에 두고 만들었기에, 설치 후에 MySQL 쓰듯이 사용하면 거의 100% 모든 것이 다 호환됩니다. MariaDB 설치 방법은 여러가지가 있습니다. 직접 소스를 받아서 build해도 상관 없고, 패키지 매니저로 받아도 됩니다. 그런데 전자는 한번 시도해봤었는데 생각보다 build할 때 자원 소모량이 좀 됩니다. aws 상에선 제대로 빌드가 되지 않아서 결국 apt-get으로 받았습니다. 설치 영상 들어가겠습니다. $ apt-cache search mariadb $ sudo..