[Project] 프로젝트 삽질기4 (feat 마이그레이션) 들어가며 사이드 프로젝트에서 푸시 알림을 활용한 서비스를 개발하고 있습니다. 그 과정에서 생각하고 배웠던 점들을 하나씩 작성하고자 합니다. 먼저 푸시 알림에 필요한 로직을 테스트하기 위해서는 먼저 데이터베이스 세팅을 해야 합니다. 이 글은 NestJS로 배우는 백엔드 프로그래밍 글을 참고한 내용입니다. 링크에서 더 자세하게 내용을 살펴볼 수 있습니다. 마이그레이션 넓은 의미의 마이그레이션은 애플리케이션이 구동되는 OS를 바꾸거나 데이터베이스를 MySQL에서 Oracle로 바꾸는 것과 같이 인프라를 교체하는 것을 포함합니다. 데이터베이스를 다룰 때에도 마이그레이션이라는 용어를 자주 접하게 됩니다. 서비스를 개발하다 보면 데이터베이스 스키마를 변경할 일이 빈번하게 발생합니다. 신기능을 추가하면서 새로운 테이.. [Project] 프로젝트 삽질기3 (feat Docker, PostgreSQL) 들어가며 사이드 프로젝트에서 푸시 알림을 활용한 서비스를 개발하고 있습니다. 그 과정에서 생각하고 배웠던 점들을 하나씩 작성하고자 합니다. 먼저 푸시 알림에 필요한 로직을 테스트하기 위해서는 먼저 데이터베이스 세팅을 해야 합니다. 이 글은 테스트 DB를 구축하기 위해 Docker에 PostgreSQL을 설치해서 활용하는 방법을 알려드리고자 작성된 글입니다. 테스트 DB 구축하기 제가 구축하는 프로젝트는 PostgreSQL를 활용하고 있습니다. Docker에 대해 자세하게 알지 못하지만, Docker를 활용하면 쉽게 PostgreSQL을 활용할 수 있다고 판단하여, PostgreSQL을 Docker에 설치해봤습니다. 먼저 PostgreSQL을 Docker로 설치하기 위해 아래의 명령어를 입력했습니다. do.. [Project] 프로젝트 삽질기2 (feat MySQL, PostgreSQL) 들어가며 사이드 프로젝트에서 푸시 알림을 활용한 서비스를 개발하고 있습니다. 그 과정에서 생각하고 배웠던 점들을 하나씩 작성하고자 합니다. 먼저 푸시 알림에 필요한 로직을 테스트하기 위해서는 먼저 데이터베이스 세팅을 해야 합니다. 이 글은 프로젝트 DB로 어떤 것을 활용해야 할지 고민하며, 우아한형제들의 Aurora MySQL vs Aurora PostgreSQL 글을 참고하며 작성된 글입니다. MySQL? PostgreSQL? 제가 구축하는 프로젝트는 PostgreSQL를 활용하고 있습니다. 왜 다른 RDBMS 중에서도 PostgreSQL를 활용하는가에 대해 작성해보고자 합니다. 먼저 우아한형제들의 글에서는 MySQL에서는 멀티스레드 환경 및 제한된 join 방식 제공으로 복잡한 쿼리나 대량 데이터 처.. [Project] 프로젝트 삽질기1 (feat FCM 공식문서) 들어가며 사이드 프로젝트에서 푸시 알림을 활용한 서비스를 개발하고 있습니다. 그 과정에서 생각하고 배웠던 점들을 하나씩 작성하고자 합니다. 먼저 푸시 알림을 보내기 위해서는 파이어베이스에 대한 이해가 필요합니다. 이 글은 파이어베이스의 공식문서를 제 나름대로 분석해서 활용하고자 작성된 글입니다. FCM 이해하기 지금부터 FCM을 활용하기 위해 FCM에 대해 간단히 알아보겠습니다. 1. FCM 아키텍처 소개 및 개요 Firebase 클라우스 메시징(FCM)은 무료로 메시지를 안정적으로 전송할 수 있는 교차 플랫폼 메시징 솔루션입니다. FCM은 아래처럼 활용한다면, 메시지를 보낼 수 있습니다. 자체 앱 서버를 구현하거나, 또는 Firebase용 Cloud Functions을 활용해서 FCM 백엔드로 메시지를.. [OOP] 추상화 (객체 지향과 디자인 패턴) 들어가며 스타트업의 개발자로서 좋은 설계가 우선인가, 아니면 빠른 기능 개발이 우선인가 항상 고민하곤 했습니다. 제가 다녔던 스타트업은 빠르게 기능 개발을 해서, 시장에서 인정받아야 했기에, 빠른 시간 안에 많은 기능을 개발해야 했습니다. 그러다 문득 추가 기능을 개발하거나, 기존 기능을 수정해야 할 때, 많은 어려움을 겪곤 했습니다. 그렇게 일을 마치고, 더 나은 개발자가 되기 위한 공부를 하면서 제가 작성한 코드는 배려가 부족한 코드였다는 것을 깨달았습니다. 제가 개발한 코드는 당장의 기능 개발은 빠르게 할 수 있더라도, 재사용성이 대단히 떨어졌고, 가독성 또한 대단히 떨어졌습니다. 또한 기능을 수정하거나 추가할 때도 광범위한 코드를 건드려야만 했기에 효율성도 떨어졌습니다. 빠르게 기능을 개발하기 위.. [OOP] 캡슐화 (객체 지향과 디자인 패턴) 들어가며 스타트업의 개발자로서 좋은 설계가 우선인가, 아니면 빠른 기능 개발이 우선인가 항상 고민하곤 했습니다. 제가 다녔던 스타트업은 빠르게 기능 개발을 해서, 시장에서 인정받아야 했기에, 빠른 시간 안에 많은 기능을 개발해야 했습니다. 그러다 문득 추가 기능을 개발하거나, 기존 기능을 수정해야 할 때, 많은 어려움을 겪곤 했습니다. 그렇게 일을 마치고, 더 나은 개발자가 되기 위한 공부를 하면서 제가 작성한 코드는 배려가 부족한 코드였다는 것을 깨달았습니다. 제가 개발한 코드는 당장의 기능 개발은 빠르게 할 수 있더라도, 재사용성이 대단히 떨어졌고, 가독성 또한 대단히 떨어졌습니다. 또한 기능을 수정하거나 추가할 때도 광범위한 코드를 건드려야만 했기에 효율성도 떨어졌습니다. 빠르게 기능을 개발하기 위.. [OOP] 절차 지향과 객체 지향 (객체 지향과 디자인 패턴) 들어가며 스타트업의 개발자로서 좋은 설계가 우선인가, 아니면 빠른 기능 개발이 우선인가 항상 고민하곤 했습니다. 제가 다녔던 스타트업은 빠르게 기능 개발을 해서, 시장에서 인정받아야 했기에, 빠른 시간 안에 많은 기능을 개발해야 했습니다. 그러다 문득 추가 기능을 개발하거나, 기존 기능을 수정해야 할 때, 많은 어려움을 겪곤 했습니다. 그렇게 일을 마치고, 더 나은 개발자가 되기 위한 공부를 하면서 제가 작성한 코드는 배려가 부족한 코드였다는 것을 깨달았습니다. 제가 개발한 코드는 당장의 기능 개발은 빠르게 할 수 있더라도, 재사용성이 대단히 떨어졌고, 가독성 또한 대단히 떨어졌습니다. 또한 기능을 수정하거나 추가할 때도 광범위한 코드를 건드려야만 했기에 효율성도 떨어졌습니다. 빠르게 기능을 개발하기 위.. [OOP] 배려가 담긴 코드 (객체 지향과 디자인 패턴) 들어가며 스타트업의 개발자로서 좋은 설계가 우선인가, 아니면 빠른 기능 개발이 우선인가 항상 고민하곤 했습니다. 제가 다녔던 스타트업은 빠르게 기능 개발을 해서, 시장에서 인정받아야 했기에, 빠른 시간 안에 많은 기능을 개발해야 했습니다. 그러다 문득 추가 기능을 개발하거나, 기존 기능을 수정해야 할 때, 많은 어려움을 겪곤 했습니다. 그렇게 일을 마치고, 더 나은 개발자가 되기 위한 공부를 하면서 제가 작성한 코드는 배려가 부족한 코드였다는 것을 깨달았습니다. 제가 개발한 코드는 당장의 기능 개발은 빠르게 할 수 있더라도, 재사용성이 대단히 떨어졌고, 가독성 또한 대단히 떨어졌습니다. 또한 기능을 수정하거나 추가할 때도 광범위한 코드를 건드려야만 했기에 효율성도 떨어졌습니다. 빠르게 기능을 개발하기 위.. [Web] 안전하게 로그인 처리하기 들어가며 항상 프로젝트를 진행하면서, 회원가입 기능을 만들 때, JWT를 무지성으로 활용했습니다. 왜 JWT를 사용해야 하는지, JWT를 사용하면 어떤 문제가 있는지, 왜 세션은 고려하지 않았던 것인지 단 한 번도 제대로 생각해본 적 없다는 생각이 들었습니다. 기본적인 부분도 모르는 개발자라는 생각이 들었습니다. 이번 기회에 JWT는 어디에 저장해야 하며, JWT를 잘 활용하는 방법은 무엇인지에 대해 정리해보려 합니다. 세션과 토큰 탈취 웹 서비스에서 인증 인가를 구현하기 위해 쿠키/세션 또는 JWT를 활용합니다. 세션과 JWT는 다양한 공격 방식으로 인해 노출이 될 수 있는데, 이에 대해 크게 두 가지 공격 방식을 알아보겠습니다. XSS(Cross Site Scripting) 여기서 XSS(Cross .. [네트워크] TCP/IP 이해하기 들어가며 개발자가 되기 위해서는 정말 다양한 지식을 알아야 합니다. 그중에서도, 네트워크는 필수적으로 알아야 하는 분야라고 생각했지만, 막상 네트워크를 제대로 공부한 적은 드물었습니다. 이번 기회에 네트워크에 대해 조금씩이라도 공부하면서 개발자로서의 기본을 쌓기 위해 노력하고 싶습니다. IP (Internet Protocol) TCP/IP란 데이터가 의도된 목적지에 닿을 수 있도록 보장해주는 통신 규약을 말합니다. TCP와 IP 두 가지의 프로토콜로 이루어져 있습니다. 그중에서도 먼저 IP에 대해 살펴보겠습니다. 컴퓨터 간 복잡한 인터넷 망을 통해 메시지를 보내기 위해서는 정해진 규칙이 필요합니다. 클라이언트와 서버는 각각 IP 주소를 가지고 지정한 IP 주소에 패킷(출발지 IP, 목적지 IP와 전송 데.. 이전 1 ··· 8 9 10 11 12 13 14 ··· 19 다음