전체 글 11

[django] raw 함수를 사용해서 쿼리 직접 호출하기

Django 에는 ORM 을 이용해서 편리하게 DB에서 데이터를 가져올 수 있으나, 쿼리가 너무 복잡해서 직접 DB 쿼리를 사용해 데이터를 호출하는 방법이 필요했다. Manager.raw() 를 사용하면 가능하다. 먼저 models.py 에 모델을 선언한다. 이 모델의 구조는 쿼리의 결과가 담길 틀을 만든다고 생각하면 된다. 여러 테이블간의 Join 을 하더라도, 결국 어떤 출력되는 쿼리의 구조만 생각하면 된다. class Person(models.Model): first_name = models.CharField(...) last_name = models.CharField(...) birth_date = models.DateField(...) 이렇게 models.py 에 선언하고, views.py 에서..

코딩 2022.02.01

[AWS] EC2 인스턴스 지키기 (나도모르는 사이에 인스턴스가 삭제된다)

보통 개발용 인스턴스는 스케줄러가 켜고 꺼서 손 댈 일이 없는데, 오랜만에 야근하려고 개발서버를 켰다가 일을 마무리 하고 껐는데, 다음날 보니 개발 인스턴스가 사라졌다. 볼륨만 남은 아주 황당한 상황이 벌어졌는데, 어제 무슨일이 있었나를 곰곰히 곱씹어 보니 인스턴스 중지를 해야했는데 종료를 누른것 같다. 예전에 윈도우를 쓸 때 시스템 종료 버튼을 누르면 컴퓨터가 꺼졌는데 무의식적으로 인스턴스 종료를 눌렀나보다. 애석하게도 하필 한국어 버전의 AWS 콘솔을 쓰고 있었는데, 영어버전에서는 Stop, Terminate 로 아주 잘 구분이 되었는데, 왜 한국어는 이리 헷갈리게 써져있는지... 이런 참사를 막는 방법이 있는데, 종료 방지 기능이라는게 있습니다. 실수로 종료를 눌렀을 때 인스턴스가 삭제되는 것을 방..

코딩/모음 2022.01.23

[Google Play] Issue: Need login credentials for app review (리뷰용 계정 미제공으로 인한 앱 삭제)

갑자기 구글 플레이에서 입이 삭제되었다는 통보를 받았다. 그 이유는 Need login credentials for app review, 앱에서 계정 인증을 통해 접근해야 하는 페이지가 있는 경우, 리뷰를 위한 계정을 제공해야 한다는 것이었다. 이미 Apple AppStore에서는 빌드를 올리는 화면에 이 정보를 기입할 수 있는 필드가 있기 때문에 정보를 제공하고 있었는데, 구글에 이 기능이 있는지 조차도 몰랐던 나는 2가지 이류로 굉장히 당황스러웠다. 첫째로는, 앱을 출시한 지 만 2년이 되는 상황에서 이 사유로 앱을 삭제했다는 것이었다. 이제 와서?라는 생각이 들 수밖에 없었다. 중간에 정책이 변경되었을 수는 있지만, 좀 더 쉽게 알아볼 수 있는 UI/UX를 제공했다면 어땠을까 하는 아쉬움이 든다. ..

코딩/모음 2021.12.25

Session Fixation Attack

유효한 Session Id를 탈취해서 마치 인증된 사용자 인 것 처럼 행동할 수 있는 방법이다. OAuth 1.0 의 취약점으로 알려져있다. 서버가 공격자인지 일반 사용자인지를 구분할 수 없게 된다. 대략의 시나리오 공격자가 사이트에 접속해서 로그인 하여 Session Id를 생성한다. 여기서 생성한 Session Id 를 사용자에게 전달한다. 사용자는 이 Session Id 를 가지고 본인의 정보로 로그인을 시도하고 성공한다. 이렇게 되면 공격자와 사용자는 동일한 Session Id 를 공유하게 된다. 공격자는 사용자 처럼 행동할 수 있게 된다. 공격자가 자신의 Session Id 를 사용자에게 전달하는 방법은 다양한데, 일단 피싱 사이트에 접속하게 하여 자신의 Session Id 를 써서 로그인 하도..

코딩/모음 2021.05.30

OAuth

인증 사용자 인증은 서버와 클라이언트의 통신 사이에서 상대방, 보통은 사용자의 신원을 확인하는 매우 중요한 단계다. 대부분의 웹/앱 서비스는 사용자 인증을 위해 아이디, 비밀번호 등의 조합을 통해 사용자의 신원을 확인한다. 웹사이트에서 페이지를 이동하는 행위는 완전히 새로운 요청을 서버에 보내는 행위이기 때문에 어떤 사용자의 요청인지는 매번 확인해야 한다. 이 때 페이지를 이동할 때 마다 아이디, 비밀번호를 받는 것은 사용성을 해치기 때문에 보통 두 가지 방법을 통해 사용자 인증을 처리한다 Session 기반 인증 Token 기반 인증 여기서 OAuth 는 Token 기반 인증 방식이다. Session 기반 인증 방식 사용자가 로그인을 하게 되면 서버의 메모리에 세션이 저장된다. 식별자인 Session ..

코딩/모음 2021.05.29

[SQL] PostgreSQL Join 에 대해서

두 개 이상의 테이블에 동시에 접근하여 쿼리를 실행할 때 JOIN을 사용한다. JOIN의 종류로는 INNER JOIN OUTER JOIN LEFT RIGHT FULL SELF JOIN 이 있다. 벤다이어그램으로 보면 아래와 같다. 아래 user와 address 라는 테이블이 있다고 하면 name age 제임스 25 마크 34 크리스 29 name city 제임스 서울 마크 경기 줄리엔 부산 INNER JOIN INNER JOIN 은 user 에도 존재하고 address 에도 존재하는 제임스, 마크 데이터만 보여준다. JOIN은 FROM 절 뒤에 붙여주고, ON 절에서 JOIN 하는 조건을 쓴다. SELECT * FROM user INNER JOIN address ON user.name = address...

코딩/모음 2021.05.16

[Jenkins] Github webhook을 이용해서 자동 빌드하기

레포지토리에 푸시가 되었을 때 젠킨스에 빌드를 해라! 라는 웹훅을 보내서 자동으로 빌드하는 환경을 구축하려고 한다. 전체 단계는 아래와 같다. GitHub 에서 push 이벤트가 발생했을 때 Webhook을 보낸다. Jenkins 에서 Webhook 을 수신한다. (Generic Webhook Trigger 플러그인 사용) Job이 실행 된다. Jenkins에 Generic Webhook Trigger 설치 이 플러그인을 Jenkins에 설치한다. plugins.jenkins.io/generic-webhook-trigger/ Generic Webhook Trigger Can receive any HTTP request, extract any values from JSON or XML and trigger..

Jenkins 2021.03.03

[Jenkins] 젠킨스 파보기 Prologue

CI(Continuous Integration) tool 개발을 시작할 때 부터 빌드 도구로 사용했었다. 처음에는 단순히 빌드, 배포 하는 도구 정도로 생각했었고, 이전 직장에서는 젠킨스를 가지고 배포작업을 했었다. 다른 직장에서는 Travis CI를 사용하기도 했었는데 직접 설치해서 사용하는 젠킨스에 마음이 좀 더 갔다. 친숙한 자바로 만들어지기도 했고, 무엇보다 젠킨스를 사용해서 잡무를 최대한 줄여보자는 생각이 들었다. 그리하여 2021년은 젠킨스를 마스터 해보기로 결심했다. 이 글을 쓰는 시점의 최신버전은 2.263.3 이다. 모든 시작은 Document로부터. 공식 문서에 있는 내용을 아주 간단하게 정리했다. www.jenkins.io/doc/ Jenkins User Documentation Je..

Jenkins 2021.01.28

[코딩잡학] Cron expression

Cron expression(크론 표현식)은 유닉스 운영체제에서 스케줄 작업을 실행할 때 작업 주기를 표현하기 위해 사용되었다. 자바의 Quartz 프레임워크에서도 사용된다. docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm Cron Expressions A Cron Expressions Cron expressions are used to configure instances of CronTrigger, a subclass of org.quartz.Trigger. A cron expression is a string consisting of six or seven subexpressions (fields) that describe ..

코딩 2020.12.11

[실전 코딩] 무한 스크롤 (Infinite scrolling)

소셜 미디어 피드를 보다 보면 페이지를 하단으로 스크롤 하면 끝없이 컨텐츠가 나온다. 처음부터 무한에 가까운 데이터를 읽어오는 것이 아니고 어느정도 페이지의 종단에 다다르면 다음 페이지의 컨텐츠를 미리 불러와 보여준다. 이번 포스팅에서는 무한 스크롤(Infinite scrolling) 구현 시 주의할 점에 대해 알아보겠다. 코드 순서 1. 다음 페이지 호출 트리거 2. 데이터 불러오기 3. 데이터 표시하기 4. 마지막 페이지 도달 1. 다음 페이지 호출 트리거 화면이 스크롤의 최 하단에 도착했을 때 다음 페이지를 호출할 수도 있지만(a), 이렇게 하면 데이터를 불러오는 찰나의 시간을 기다려야 한다. 따라서 페이지의 최 하단에 도착하기 전에 다음 페이지를 불러오는 것이 좋다(b).(UX 측면의 문제이므로 ..

코딩 2020.10.14
반응형