전체 글 29

AJV(another json validatiror)를 사용하여 JSON 스키마 검증하기(json schema validation)

이전에 스키마에 대해서 다룬 적이 있다. (https://gkqlgkql.tistory.com/83) 스키마는 데이터의 형식을 정의한다. 예를 들어, JSON 스키마는 JSON 의 구조를 정하고, RDBMS의 스키마는 테이블 구조를 정의하는 식이다. 현재 주로 개발하고 있는 node.js REST API 서버에서는 일반적으로 JSON 으로 구성된 리퀘스트를 받게 된다. 이 때 클라이언트에서 보낸 리퀘스트 JSON 형식이 적절한지를 검증하는 과정이 필요한데, 이를 JSON schema validation(JSON 스키마 유효성 검증) 이라고 한다. 이번 포스팅에서는 JSON-schema-validation 라이브러리인 AJV(Another Json Validator)를 사용하는 방법에 대해서 다루어 본다...

스키마란 무엇인가? (json, database, ...)

최근 백엔드 작업을 하다가, “JSON 스키마”를 처음 접했다. 스키마? 데이터의 구조로 알고 있는데… 데이터베이스에서나 쓰던 개념 아니야? JSON에 무슨 스키마가 있다는 거지? 라는 질문에서 스키마에 대해서 잘 모르는 것이 많다는 생각이 들어서, 용어에 대한 정의부터 출발해 스키마가 실제로 어떻게 쓰이고 있는지에 대하여 고민해보았다. 이론 스키마의 사전적 정의는 다음과 같다. Schema : (계획·이론의) 개요[윤곽] 사전적 의미가 크게 와닿지 않아서 구글에 “Schema”를 이미지로 검색해보았다. 이미지를 보니, 복잡하고 큰 개념을 뭔가 형식으로 도식화한 느낌을 준다. 왜 이렇게 규칙을 만들어 도식화하는가? 규칙을 정해 데이터를 다룸으로써 우리가 복잡하고 큰 데이터를 컨트롤할 수 있겠다는 생각이 ..

Database 2020.07.19

프로덕션 환경의 데이터베이스 스키마 변경하기(Online-Schema-change)

OSC(online schema change)가 뭐죠? 서비스 중인 프로덕션 환경의 테이블 스키마를 수정할 때는, 스키마를 수정하는 도중에도 데이터를 READ / WRITE 할 수 있어야 한다. 이렇게 무중단으로 스키마를 수정하는 방법을 Online-Schema-Change, OSC라 한다. OSC를 사용하게 된 배경... alter table로 프로덕션 DB를 수정하다가, table lock으로 인해 일부 테이블 사용이 불가능해진 사고가 발생했다. 문제가 생긴 테이블들은 drop, create 모두 불가능한 교착 상태가 지속되었고 해결에 상당한 시간이 소요되었다. 스키마 변경에 따른 DB 문제 재발 방지를 위해 OSC를 도입하였다. 개념 설명 기존 alter table 방식 해당 테이블을 락으로 새로운..

Database 2020.06.19

[React] Router 란 무엇인가

리액트 라우터 라우터란? 클라이언트에게 정해진 컴포넌트를 전송해주는 클래스. 웹 사이트에서 여기 저기 페이지를 옮겨다닐 때 사용한다. - href와 비슷한 역할이구나 Switch는 한 페이지만 라우팅하고 싶을 때, exact는 정확히 일치하는 페이지만 주고 싶을 때 사용함 예제 코드 import React from "react"; import { BrowserRouter as Router, Route, Redirect, Switch } from "react-router-dom"; import Home from "Routes/Home"; import TV from "Routes/TV"; import Search from "Routes/Search"; //exact 들어가면 반드시 일치해야됨 //Switch..

PHP의 동작 원리 정리

PHP의 동작 원리 정리 와!! PHP 를 1년 넘게 써오고 있었는데,, PHP 웹서버에 보안을 적용하려다 보니까PHP가 어떤 원리로 언어가 동작하는지, db에 접근하는지를 모르고 있었다.부끄럽다. 생활 코딩 영상을 보다 https://www.youtube.com/watch?time_continue=2&v=3CqyUdsB47M 이 영상을 보니, 대략적으로는 이해가 되었다. 그런데, "PHP"에서 MySQL에 접근한다는 말이 이해가 되지 않았다. PHP는 언어잖아? 언어가 DB에 접근한다고? 말이 안되지! PHP와 관련된 어떤 프로그램이 DB에 접근하는게 맞는 거 같은데,그 프로그램이 뭐란 말인가?? PHP 파서가 핵심이다 추가로 검색해보니, 앞에서 언급한 프로그램의 정체는 PHP 파서였다. 이 녀석이 P..

php 2019.01.20

리눅스 환경에서 git 사용법

리눅스 환경에서 git 사용법 링크 깃 기본 사용법https://nolboo.kim/blog/2013/10/06/github-for-beginner/ git init git remote add origin https://github.com/username/myproject.git git commit -m "initial commit" git push origin master 디렉토리 제거하기(푸시 잘못했을 때)https://code.i-harness.com/ko-kr/q/6054a6 git rm -r --cached FolderNamegit commit -m "Removed folder from repository"git push origin master

Infra/git | devOps 2018.10.09

병행 컴퓨팅 모델(Concurrent computing model)에 대한 연구

병행 컴퓨팅 모델(Concurrent computing model)에 대한 연구 1. 연구 배경 서버 네트워크 프레임워크를 검색하던 중 akka 라는 라이브러리를 알게 됐다. akka는 actor 모델로 설계된, scala/java 로 개발할 수 있는 라이브러리다. 이 라이브러리의 목적은 프로그램의 동시성, 분산을 보장하여 서버의 성능을 높이는 것이다. 예를 들어, 소켓 서버에서 akka를 사용하게 되면 더 많은 유저들의 메세지를 동시에 처리할 수 있고,분산 서비스를 어렵지 않게 구현할 수 있다. akka 성능의 핵심은 액터 모델에 있으며, 공식 문서에서도 이 모델을 잘 설명하고 있다.https://doc.akka.io/docs/akka/current/guide/actors-motivation.html ..

Awesome list : 깃헙에서 공유하는 으-썸한 개발 관련 리스트

https://github.com/sindresorhus/awesome#readme 깃허브에서 공유되고 있는, 프로그래밍 및 개발 관련 리스트에 관한 포스팅이다. 서버 프레임워크를 찾다가 우연히 발견했는데, 보면 볼수록 놀랍다. 내가 검색했던 대부분의 라이브러리, 프레임워크가 모두 여기서 검색됐다. 안드로이드만 해도 glide, otto, eventbus, okhttp, retrofit 모두가 플랫폼 라이브러리 리스트에 포함되 있더라 ㄷㄷ.. 내가 몰랐던 라이브러리도 많이 포함되어 있었다. 시간 날 때, 심심할 때 하나 하나 보면 좋을듯 하다. 게임 서버에 사용할 서버 프레임워크에 대한 검색이 필요했는데, 편리하게도 언어별로 정리된 리스트가 있어서 활용했다. 앞으로 개발할 때 자주 써먹을 것 같다. 정말..

자료 검색 방법론에 대한 연구

자료 검색 방법론에 대한 연구 이전에 자료 검색을 너무 편협하게 했다. 게임 서버 프레임워크 이전에 서버 프레임워크를 좀 더 봤어야 한다. 좀 더 폭넓은 시각으로 자료를 검색하기 위해서는 어떤 준비가 필요할지 생각해봤다. 1. "검색" 이전에 생각해야 한다. 검색도 코딩과 마찬가지다. 코딩 이전에 프로그래머는 프로그램 구조가 어떻게 될지, 어떻게 동작할 것인지를 미리 생각해본다. 검색 이전에도 이러한 미리 생각하는 습관이 필요해보인다. 그냥 막 검색하는 게 아니라, 어떻게 효과적으로 검색할 것인지에 대해 고민해봐야 한다. 어떤 아웃풋을 목표로 검색할 것인지, 어느 정도 규모로 검색할 것인지 생각해야 한다. 2. 다이나믹하게 검색해보자. 때로는 깊게, 때로는 넓게! 게임 서버 프레임워크 위주로 검색을 하게..

함수, 라이브러리, 엔진, 프레임워크 그리고 플랫폼

프레임워크와 엔진 용어가 헷깔려서 용어 정의를 찾아보았다. "함수, 라이브러리, 엔진, 프레임워크 그리고 플랫폼"http://egloos.zum.com/adept/v/2329239 위 블로그에서 엔진과 프레임웍의 차이가 모호하여 자료를 더 찾아보았다. 엔진이 단순히 라이브러리의 집합이라고 보기는 어렵기 때문이다.아래의 사이트에서 더 좋은 정의를 찾았다. http://www.gamefromscratch.com/post/2015/06/13/GameDev-Glossary-Library-Vs-Framework-Vs-Engine.aspx 라이브러리 라이브러리는 나중에 재사용하기 위해 모아놓은 코드와 데이터 모음이다. 프레임워크 라이브러리와 툴들을 특정 목적에 사용하기 위해 모아놓은,라이브러리의 모음이 프레임워크다..