본문 바로가기

개발

Django에서 Replica DB가 있을 때의 테스트 코드 문제 해결하기 Django에서 ReplicaDB (ReadonlyDB)가 있을 때 테스트 코드를 작성하면 다음과 같은 문제가 발생할 수 있습니다. 분명 데이터베이스 쓰기에 성공했는데, 해당 데이터를 읽어보면 데이터가 없는 경우가 있습니다. 데이터를 default DB에 입력했는데, 읽는 것은 readonly DB에서 읽으려고 해서 해당 문제가 발생합니다. 테스트 코드를 작성하는 상황에서는 보통 로컬에서 DB를 생성하기 때문에 replica DB를 따로 사용하지 않을 가능성이 크기 때문입니다. Django의 공식문서를 확인하면 replicaDB에 대해서는 MIRROR를 defaultDB로 설정하여 replica DB에 대해서 DB생성을 막는 방법을 알려줍니다. 아래는 Django 공식문서의 예제입니다. DATABASES..
[TIL] Rust에서 자동화된 테스트 작성하기 Rust에서 테스트코드 작성하는 법 lib 프로젝트 생성한다. cargo new adder --lib lib 프로젝트를 만들면 아래와 같이 src/lib.rs에 아래와 같은 테스트 코드가 작성되어 있다. #[cfg(test)] mod tests { #[test] fn it_works() { assert_eq!(2 + 2, 4); } } test 돌리기 cargo test 테스트 하고 싶은 함수는 함수 위에 #[test]라고 붙여주면 된다. 일단 mod포함 상단 부분은 신경쓰지 말자. #[cfg(test)] mod tests { #[test] fn exploration() { assert_eq!(2 + 2, 4); } } assert! Macro로 결과 확인하기 assert!매크로는 값이 true인지 확인..
Django ELB ALLOWED HOSTS 에러 수정 *AWS Elastic Load Balancer를 사용해서 Django 애플리케이션에 로드밸런싱을 하면 Health Check가 계속 실패하고, 로그를 확인해보면 아래와 같은 문제가 생기는 경우가 있습니다. Invalid HTTP_HOST header: . You may need add to ALLOWED_HOSTS Health Check를 시도하는 IP주소가 Django Settings 중의 하나인 ALLOWED_HOSTS에 등록되어 있지 않아서 발생하는 문제이다. ALLOWED_HOSTS = ["*"]로 해결할 수 있지만 이는 보안상 좋지 않습니다. 해당 IP를 ALLOWED_HOSTS에 등록하는 것도 해결책은 아닙니다. ELB의 Private IP가 계속 바뀌기 때문입니다. 이를 해결하는 솔루션은 ..
프로그래밍 폴더 구조에 대한 생각정리 코딩을 할 때 가장 고민을 많이 했던 부분이 바로 폴더 구조이다. 어떤 폴더들이 있어야 할지 그리고 해당 폴더들에는 어떤 파일들이 들어가야 할지가 정리가 잘 되지 않았다. 예를 들면 utils폴더와 libs폴더, core폴더의 차이점들은 뭔지, 현재 작업하고 있는 파일들은 utils로 봐야 할지 core로 넣어야 할지 등이 굉장히 애매했다. 얼마 전 팀원들이랑 관련해서 이야기를 나눴는데 역시 모두 다 해당 부분에 대해서 고민을 하고 있었다. 많이 고민해보고 여러 오픈소스들을 참고하면서 나름의 정리를 하게 되었고 해당 부분을 기록한다. 1. 정해진 정답은 없다. ⭕❌ 잘나가는 오픈소스들도 기준이 달랐다. utils.py나 utils.js처럼 utils를 파일로만 관리하는 곳도 있고, utils를 폴더로 관..
[TIL] JWT 로그인 구현과 보안 용어정리 XSS 공격: 사이트 내에 HTML에 자바스크립트를 삽입하는 공격. 로그인 과정에서 이를 통해 사용자 토큰을 갈취할 수도 있음 CSRF 공격: 정말 유사한 다른 사이트를 만들어서 이용자를 속임. 로그인 과정에서 이를 통해 토큰을 갈취할 수 있음 REST API를 통해 사이트를 구현할 때, JWT 인증 방식을 구현하고 이를 브라우저에 저장하는 방식은 크게 두가지가 있음 1번: 토큰을 로컬 스토리지에 저장 2번: 토큰을 쿠키에 저장 (httponly) 1번의 경우에는 XSS 공격의 위험에 노출됨 2번의 경우에는 XSS 공격에는 안전하지만 CSRF 공격의 위험에 노출됨 (단, httponly 속성이 true가 아닌 경우에는 XSS 공격에 취약함 하지만, CSRF 공격을 막을 수 있는 방법이 있음 쿠키..
[TIL] Namespace, Scope, Claim이란 (feat. oAuth) # What I Learned Namespace 서비스의 custom claim이 다른 서비스나 예약된 claim과 충돌하는 것을 방지하기 위해 사용 주료 도메인을 사용함 e.g. https://engster.co.kr Scope 어떤 클레임들에 접근을 요청하고 있는지를 명시할 때 사용 Claim 유저정보나 메타정보에 관해 정보를 가지고 있는 Key/Value 짝(Pairs) 특정한 entity가 특정한 property를 가지고 있음을 나타냄 클레임들은 scope에 맵핑됨 (아래의 클레임들은 profile scope에 맵핑) { "family_name": "Silverman", "given_name": "Micah", "locale": "en-US", "name": "Micah Silverman", "p..
프로그래밍 언어 선택의 5가지 기준 '어떤 프로그래밍 언어를 선택해야할까?' 위의 질문은 개발자들이 가장 고민하는 문제 중 하나입니다. 해당 주제를 가지고 굉장히 많은 블로그 포스트나 유튜브 영상이 있고, 해당 콘텐츠들의 조회수 역시 높습니다. 해당 문제를 가지고 커뮤니티들에서 논쟁이 벌어지기도 합니다. 저 역시 프로그래밍 언어 선택에 있어서 많은 고민을 했고, 아직도 하고 있습니다. 그렇다면 어떤 프로그래밍 언어를 선택하는 것이 좋을까요? 가장 완벽한 프로그래밍 언어가 있다면 좋겠지만, 아쉽게도 그러한 언어는 존재하지 않습니다. 특정한 분야에서 강점을 가지면, 다른 분야에서 약점을 가지기 마련입니다. 예를 들어, C나 C++ 같은 언어는 속도는 빠르지만, 배우기 어렵고 개발하는데 시간이 다른 언어들에 비해 오래 걸립니다. ..
AWS에서 ECS 도입을 시도하면서 경험한 것들... 이 글을 쓰는 목적 우선, 저는 ECS를 적용하지 않았습니다. 다만, ECS 도입을 시도하면서 굉장히 많은 것들을 알게 되었고 해당 경험을 정리하고 싶었습니다. 서버 개발에 대한 지식이 별로 없는 상태에서 'AWS 공식 문서', 'Medium', '국내의 각종 블로그'를 보면서 ECS 적용법을 공부하려니 어려움을 많이 겪었습니다. 간단하게 적용해보는 예제들은 많이 있었지만 실제 서비스에 적용하려니 막히는 부분이 많았습니다. 그래도 약 80시간의 사투 끝에 어느 정도 구조를 이해하게 되었고, 지금 우리 상황에서는 ECS를 도입하는 것이 좋지 않겠다는 결론에 도달했습니다. 혹시나 비슷한 고생을 하시는 분들에게 도움이 되길 바랍니다. 단, 해당 글에서 ECS에 대한 튜토리얼을 제공하지는 않습니다. 글 중간중간..