분류 전체보기 30

TypeORM 간단 사용법

평소 백엔드 개발할 때 자체적으로 개발한 쿼리빌더와 raw Query를 활용해 모델을 개발해왔다. 그러나, 쿼리를 직접 자주 짜야하며, 쿼리용 모듈을 코딩하는 번거로움이 있어서 ORM을 사용하면 코드치는 양을 줄임으로써 이러한 불편함을 극복할 수 있지 않을까 생각했다. 간단한 쿼리들은 ORM으로 빠르게 작업하고, ORM으로 커버되지 않는 복잡한 쿼리에 대해서만 raw Query로 대응하는 것이다. ORM 도입을 검토하고자 typescript + node.js의 대표적인 ORM인 typeORM과 Sequelize를 간단하게 사용해보며 비교해보기로 했다. 이번 포스팅에서는 그중 typeORM에 대해서 다루어보았다. TypeORM typeORM은 typescript, javascript 환경에서 사용하는 OR..

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. 다이나믹하게 검색해보자. 때로는 깊게, 때로는 넓게! 게임 서버 프레임워크 위주로 검색을 하게..