전체 글 74

nodejs 서버는 언제 사용할까?

글을 쓴 배경 저는 제가 사용하는 기술을 왜 사용하는지 스스로에게 되묻는 편입니다. 저는 주도적으로 개발하기 위해선 왜 why가 중요하다고 생각하기 때문이에요. 단순히 기술을 좇아가는 맹목적인 개발자가 되기를 지양합니다. (자바 스프링이 유명하다더라~, 남들이 다쓰닌까 써볼까? 등등.) 남들이 한다고 해서 하는것도 좋아하지 않습니다. 그래서 전 제가 사용하는 기술을 왜 사용하는지 고민한답니다! 저는 주로 nodejs 런타임에서 서버개발을 했어요! 그래서 저 나름, nodejs 환경에서 서버개발을 하며 nodejs는 어떤 상황에서 언제 사용하는게 좋은지 고민을 해보았습니다. 부족하지만 하나하나 적어보겠습니다. 그 전에, nodejs의 특징을 간단하게 적어볼게요! nodejs 특정 javascript는 싱글..

개발 2023.09.23

한 방의 다중 조인을 어플리케이션 레벨에서 여러 쿼리로 분할하여 쿼리 개선하기

안녕하세요! 많은 분들이 기다려 주셔서 드디어 돌아왔습니다앍! 제가 실무에서 경험한 좋은 경험을 다른 분들에게도 공유하고 싶어서 오랜만에 블로그에 글을 올립니다! 다들 쿼리를 개선한 경험이 있으신가요? 쿼리 개선의 글을 찾다보면.. 쿼리만으로 해결하려하지 말고 어플리케이션 레벨로 가져와서 쿼리를 개선할 수 있다라는 글을 많이 보셨을 겁니다아.!! 그런데 어떤 경우에 그래야 할지 감이 잘 안 잡히죠? 왜냐면, mysql RDBMS를 이용한다면, 옵티마이저가 여러 실행계획들 중 현재 데이터 상황(테이블 정보, 인덱스 정보, 데이터 분포도 - 히스토그램)에 맞는 최적의 실행계획을 선택해서 실행하기 때문입니다. 그리고 mysql innodb storage 엔진을 사용한다면, B-Tree 구조로 저장된 인덱스를 ..

개발 2023.07.31

HTTP 진화 (HTTP/0.9 -> HTTP/1.0 -> HTTP/1.1 -> HTTP/2.0 -> HTTP/3.0 - QUIC)

웹개발을 한다면 알아야할 프로토콜인 HTTP. 시대에 흐름에 맞게 어떻게 진화해 왔는지 알아보자. 스스로 공부하고 정리한 내용으로 잘못된 내용이 있을 수 있습니다. 잘못된 내용이 있으면 지적 바랍니다. 🙂 HTTP/0.9 최초의 HTTP 버전이다. 원-라인 프로토콜이라고도 한다. 요청이 단일 라인으로 구성되어 있어서. request GET /mypage.html response A very simple HTML page 요청과 응답 메시지를 보면 매우 simple하다. GET메서드만 존재 별다른 헤더도 없음 HTML파일만 전송가능 -> 확장성 부족 따로 버전이 0.9로 시작한게 아니고, HTTP 1을 기준으로 이전의 버전이라는 것을 의미한다 HTTP/1.0 HTTP/0.9는 확장이 어렵기에 만들어진 버전..

computer science 2023.05.13

Dependency Injection

Nestjs의 프로바이더는 프로바이더 컨테이너에서 프로바이더를 DI받을수있고... Spring의 스프링 컨테이너에서 스프링빈을 DI받을수있고... 개발하면 평소에 자주 접하는 용어이고, 많은 개발블로그에서 다루는 주제이다. 또한, 많은 웹 프레임워크에서 DI를 지원하는데 뭐가 좋길래 지원하는걸까!? 어렵지만 직접 작성하면서 공부하면 이해가 잘 될것이다! nodejs환경에서, DI가 뭔지 한번 알아보자. 그리고 jest 라이브러리를 이용해 테스트코드도 작성해보자.🐈 주사위 게임 주사위에 값에 따라, 위치를 몇칸움직일지에 대한 게임이다. export class RandomDice{ private readonly _min: number; private readonly _max: number; construct..

개발 2023.03.21

백준 2108(JAVA)

문제 https://www.acmicpc.net/problem/2108 2108번: 통계학 첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다. www.acmicpc.net 풀이 산술평균 더해서 나누면 되는데, -1.8인 경우 반올림하면 -1이아닌 -2가 되어야함. 이 부분을 처리하기 위해 나는 나눈 값 절대값으로 바꾼 뒤, Math.round를 이용 오랜만에 자바를 해서 그런지 나눌때 auto casting되는걸 까먹었당. int / int => int가 된다. 그래서 피연산자 둘중 하나를 명시적으로 double로 casting 후 나눠야한다. 중앙값 ArrayList를 이..

algorithm 2022.06.15

맵드 타입(Mapped Type)

유틸리티 타입인, Partial이 어떻게 구현되어있지? 유틸리티타입 Partial가 내부적으로 어떻게 되어있는지 궁금해서 선언파일 가서 확인했다. /** * Make all properties in T optional */ type Partial = { [P in keyof T]?: T[P]; }; ??? [P in keyof T] ?? 이게 뭐지? 타입스크립트에서도 자바스크립트의 for...in 문법의 in을 지원하나? 찾아보니 이건 타입스크립트의 맵드타입 이란다. 뭔지 알아보고, 실습을 해보자아 mapped type 타입스크립트 맵드타입 에 가면 맨위에 When you don’t want to repeat yourself, sometimes a type needs to be based on anoth..

개발 2022.06.13

백준 11723(JAVA)

문제 https://www.acmicpc.net/problem/11723 11723번: 집합 첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다. www.acmicpc.net 풀이 처음에는 21 length를가진 boolean 배열을 이용했는데, 그냥 집합 자료구조를 이용하면 쉽다. 집합은 중복이 되지 않고, 집합의 특정 값에 접근할때, 값을 해쉬하여, 특정 버킷에 바로바로 접근가능하여 빠르다. 집합은 순서 X, 정렬 X, 중복 X 코드 배열 이용 package baekjoon.구현; import java.io.*; import java.util.Arrays; import java.util.Stri..

algorithm 2022.06.13

컴공생의 긴 대학생활을 마치고....

안뇽하세요! 저는 20살 부터, 재수 1년, 군대 2년, 대학 4년을 모두 마친 27살 입니다! 😎😎 드디어 긴 대학생활을 마쳤는데요! (사실 22년 8월에 졸업.. 학점이 늦게들어와서 그렇지 사실상 졸업임! ㅎㅎ 모든 조건을 충족함!) 현재 저는 2월 초에 백엔드 개발자로 입사 예정인데요! 취업을 준비하며, 또 긴 대학생활을 보내며 느낀 감정과 배운점 등을 적으려 해요. (끄적끄적..) 사실 글을 쓰는걸 좋아하진 않지만 구정이라 본가에 내려와서 시간이 남아 적으려합니다. (그냥 누워서 유튜브보기엔 시간이 아까워서) 회사에 최종합격을 했다고 마냥 놀순없는데.. (개발자는 평생 공부해야한다!!) 공부가 요새 잘 되지 않아, 오랜만에 글을 포스팅 하려합니다. 맨날 개발, 알고리즘, CS, 개발서적등에 대해서..

일상 2022.01.28

[위코드 X 원티드 ] 프리온보딩 백엔드 - 카닥 기업과제 후기

나혼자.. 한다 이번 과제는 개인과제로, 나 혼자 개발했다. 팀원과 함께 고민하며 소통하며 개발하던게 정말 재밌었는데, 너무 아쉬웠다. 그렇다고 대충한건 아니다! 나 스스로 생각하고, 내 스스로 기능을 판단하여 구현하였다. 데이터베이스 설계부터 배포 까지.. 이제 개발하면서 느낀점, 고민들 혹은 해결법 등의 회고를 적어보겠다. 개발 고민 요구사항이 정확하지 않는데 나 스스로 판단하는 건가? 내가 볼땐, 요구사항이 분명치 않은 부분이 몇개 있었다. 타이어 저장은 인증 처리가 필요한데, 다른 유저의 타이어도 저장할 수 있다?? 이 부분이 너무 헷갈렸다. 아니면 직원임을 인증해서 사용자의 타이어 정보를 저장하는건가? 라는 생각도 하였다. 생각해보니, '모두 사용자일 거라는 것은 착각이다'라는 생..

액티비티 2021.11.29

[위코드 X 원티드] 프리온보딩 백엔드 - 여섯 번째 기업과제 후기

마지막 팀과제 이번 과제는 마지막 팀과제로 좋은 팀과 협업할 수 있는 마지막 기회였다.(이 프로그램 내에선 그렇다!) 이번 기업은 디어코퍼레이션으로 전동 킥보드관련 회사이다. 이번 과제는 어려운 점이 몇가지 있다. 변경에 유연한 설계 공간데이터타입 위 두가지 핵심 문제를 팀과 고민하여 해결하는 것이 중요하였다. 어떻게 해결하였는지, 그리고 또 팀과 협업할 때 어떤걸 느꼈는지 하나하나 써보겠습니다!! 문제에 대한 접근법 우리는 변경에 유연한 설계에 대한 해결을 어떻게 할지 고민하였다. 처음에 든 생각으론 기존에 아는 정보에서 확장하는 수밖에 없었다. 객체지향프로그래밍 OOP에 나는 전부터 관심이 있었고, 객체지향의 사실과 오해, 일명 토끼책이라고 불리는 책을 두번 정독한 경험이 있다. 그래서 나는 얼핏 어..

액티비티 2021.11.23