본문 바로가기

전체 글

(103)
REST API 최근 REST API를 개발하는 프로젝트를 진행하고 있었다. Controller 코드를 작성하며 URI를 어떻게 설정할지에 대해 고민을 하는 나의 모습을 보며 REST API에 대한 개념이 부족하다는 것을 느끼게 되었다. 그래서 REST API의 개념을 확실히 잡고자 본 글을 포스팅하게 되었다. API 먼저 REST API를 말하기 전에 API가 무엇인지 짚고 넘어가보자. API(Application Programming Interface)란 소프트웨어간 통신할 수 있게 하는 매커니즘이다. 예를들어 날씨 어플을 사용 한다면 날씨 어플은 기상청 소프트웨어에서 제공하는 API를 통해 기상청의 날씨 정보를 얻을 수 있다. REST 다음으로 REST에 대해서 알아보자. Representational State ..
프로젝트에 vault 적용하기 프로젝트를 진행하며 OAuth 2.0을 적용해 소셜 로그인을 적용했다. 이때 API호출에 대한 키와, 비밀번호가 필요한데, 이러한 설정 파일을 깃허브에 올리지 않고 협업하는 사람들과 어떻게 공유할 수 있을까에 대해서 고민하게 되었다. 그러던 중 vault라는것에 대해서 알게 되었고 vault를 이용해 보안상 중요한 데이터들을 관리해보게 되었다. vault를 처음 적용시키다 보니 많은 어려움을 겪었지만 적용시키는데 성공하였고 적용시키는 과정을 정리한 자료가 많지 않아 이를 정리해보고자 한다. Vault란? 우선 적용하는 과정을 설명하기에 앞서 Vault가 무엇인지부터 알아보도록 해보자. 글의 첫부분을 읽으면 예상할 수 있듯이, vault란 문서와 파일을 저장하는 저장소로, ID기반 비밀 및 암호화 관리 시..
정규화 정규화에 대해서 공부하기에 앞서 우리는 정규화를 왜 할까? 다음과 같은 특정 학생이 수강한 과목에 대해 테이블이 있다고 하자 이름 번호 과목명 과목번호 철수 1 수학 2 훈이 2 수학 2 철수 1 영어 1 짱구 3 수학 2 맹구 4 국어 3 이렇게 본다면 중복되는 데이터들이 있다. 철수와 철수의 번호에 대해서는 2번 중복이 되고, 수학과목은 3번 영어과목은 2번 중복이 된다. 이렇든 하나의 릴레이션에 여러 앤티티의 속성이 들어가게 된다면 데이터의 중복이 일어나게 된다. 이렇게 되면 저장 공간도 낭비이고, 갱신 이상도 발생할 가능성이 있다. 갱신이상은 다음과 같이 이루어져 있다. 삽입이상 불필요한 정보를 함께 저장하지 않고는 저장이 불가능한 것을 말한다. 예를들어 위의 릴레이션에서 수강신청을 하지 않았고,..
프로젝트를 시작하며(docker) 프로젝트를 시작할때 협업을 하는 동료와 같은 db환경을 사용하면 좋겠다라는 생각에 docker를 이용해 각각의 로컬에서 mysql 서버를 띄워서 같은 db환경을 맞췄다. docker를 처음 사용해 봤는데 이번 기회에 docker에 대해서 정리해보고자 한다. 도커란? 컨테이너 기반의 가상화 도구 가상화? 그렇다면 가상화란 무엇이고 가상화의 등장 배경은 어떻게 될까? 예를들어 6천만원짜리 좋은 성능의 서버가 있다고 가정해보자. 이 서버에 쇼핑몰이 있다고 생각하고 고정 사용자는 1000명이 있다고 가정하면 서버의 성능에 비해 실제로 하는일은 부족해 성능이 아까운 셈이 된다. 이러한 점이 아까워 해당 서버에 새로운 프로젝트를 올리려고 한다. 하지만 앞전에서 사용하던 쇼핑몰 프로젝트와 충돌이 일어나는 상황이 발생..
데이터베이스 인덱스 방대한 양의 데이터중에서 원하는 데이터를 찾으려면 하나씩 찾아봐야 해서 굉장히 많은 시간이 걸린다. 이러한 상황 때문에 검색의 효율을 늘리기 위해서 인덱스라는 자료구조를 사용한다. 책을 보면 앞에 목차를 통해 효율적으로 원하는 카테고리에 들어갈 수 있는데 다음 그림과 같이 index 또한 이와 비슷하다고 볼 수 있다. 인덱스의 특징 위와 같다면 인덱스를 사용하는것이 항상 옳다고 느껴질수도 있다. 하지만 다음과 같은 인덱스의 특징을 이해하고 사용한다면 더 좋은 성능의 데이터 베이스를 사용할 수 있을것이다. 데이터 베이스에 인덱스를 만들다 보니 필연적으로 인덱스가 차지하는 공간이 생기게 된다. 이는 약 DB의 10%에 해당되는 공간이다. 그럼에도 불구하고 인덱스를 사용하면 쿼리의 부하가 줄어들어서 결국 시스..
http 상태코드 앞전에 http가 무엇이고 http의 동작원리에 대해서 학습했다. 기본적으로 http는 클라이언트 서버 구조로 클라이언트가 요청을 보내면 서버는 요청에 맞춰 응답을 한다. 이때 서버는 각 요청에 따른 상태코드를 start-line에 넣어서 응답해준다. 이 상태 코드를 통해 어떠한 응답을 하는지 유추할 수 있는데, 백엔드 개발을 하다보면 이를 이해하고 있는것이 도움이 돼서 정리를 하고자 한다. 1xx 요청이 수신되어 처리중 (Informational) * 거의 사용하지 않는다. 2xx 요청 정상 (Successful) 200 OK 요청이 성공적으로 되었다. 201 Created 요청이 성공적이었으며 그 결과로 새로운 리소스가 생성되었다. 이 응답은 일반적으로 POST 요청 또는 일부 PUT 요청 이후에 따..
데이터 베이스의 시작 우리는 데이터 베이스에 대해서 간단하게 알고 있다. 그치만 보통 데이터 베이스가 왜 생겼고 왜 이러한 특징을 가지고 있는지에 대해서 알지는 못한다. 그저 사용하기만 할 뿐 호기심이 많은 사람이 아닌 이상 왜 데이터 베이스를 사용할까 라는 생각을 하기는 어렵다. 한번 공부를 할때 왜라는 질문을 가지며 공부를 하면 자연스레 이것이 가진 특징을 외우는것이 아닌 자연스레 익히게 되고 쉽게 잊어먹지 않을 것이다. 데이터 베이스의 유래 데이터 베이스는 무엇이고 왜 생겨났을까? 먼저 데이터베이스가 나오기 전에 우리는 파일 시스템을 사용했다. 우리가 독립적인 애플리케이션에서 파일시스템에 접근을 해서 데이터를 읽어와야 하는데, 이때 파일 시스템에 접근하는 방식이 응용프로그램 내에서 표현이 되어 응용프로그램과 파일시스템에..
프로젝트를 시작하며(branch 전략) 앞서 merge 전략에 이어 내가 앞으로 할 프로젝트의 branch 전략과 왜 이러한 branch 전략을 선택했는지에 대해 정리를 해보겠다. 우리는 개발을 진행하면서 우리가 구현한 소스코드를 git이라는 버전 관리 시스템을 통해 관리한다. git을 사용함으로써 우리는 시시각각 코드를 전송할 수 있으며, commit 내역을 통해 어떤 작업이 이루어졌는지 확인할 수 있다. 협업을 할때에도 git을 이용해 각각의 환경의 branch에서 작업을 하고 메인 저장소에 merge를 하며 협업을 할 수 있는데 우리는 어떠한 방식으로 branch를 나누고 개발할수 있을까에 대해서 말해보려고 한다. 대표적인 전략인 git flow, git lab flow, github flow에 대해서 설명하고자 한다. git flow ..