개발 9

nodejs 서버는 언제 사용할까?

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

개발 2023.09.23

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

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

개발 2023.07.31

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

맵드 타입(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

eslint, prettier 그리고 github action

안녕하세유! 자바스크립트나, 타입스크립트를 이용하는 프로젝트를 협업할 때 코드 포멧팅때문에 머지시 충돌이 많이 일어나 골치아프신적 없나요? 전 있어요 ㅠ.ㅠ eslint, prettier 설정을 팀원들과 같게 적용한다음 깃헙 액션을 통해서 풀리퀘시 eslint에러 났는지 확인하고 에러났으면 머지를 막는 방법을 알아볼게요!! eslint, prettier가 뭔지, 깃헙 액션이 대체 뭔지 하나하나 적용해나가며 알아봅시다!(nestJS기준으로 살펴봅세다!) prettier 코드 포멧터입니다! 자스같은 경우는 'abcd'같은 싱글쿼터, "abcd"같은 더블쿼터(쌍따음표)가 구분이 없어서 누군 싱글쿼터를 이용하고 누군 더블쿼터를 이용하면 머지할때 충돌이 일어나고 복잡하겠쥬? 이런 코드 포멧팅을 도와..

개발 2021.11.14

ec2에 mysql server를 이용해서 spring boot서버를 배포해보자.

안녕하세요. 다들 aws의 RDS제품을 이용해서 DB서버를 구축하지만, 저는 하나의 인스턴스에 mysql 서버와, spring boot서버를 배포해 보겠습니다. 글이 많이 없기도하고, 특히 ./gradlew build시 발생하는 에러를 해결하기 위해 삽질을 많이해서 해결법 등을 적어볼게요. ec2에 인스턴스 만들기 저는 unbuntu 18(프리티어) 인스턴스를 만들었구요! 보안규칙은 ssh는 왠만하면 본인 ip로하구, http, https는 anywhere로 하였습니다! 이 과정은 너무간단하기에 생략합니다.(모르시면 생활코딩을 참고하세요!) ubuntu 18에서 mysql-server 설치하구 외부에서 mysql-server에 접속하기 sudo su 를 통해서 슈퍼유저로 접속합니다. apt-get upd..

개발 2021.09.16

thymeleaf에서 th:field와 th:selected 중복사용

타임리프에서 th:field와 th:selected를 중복으로 사용하면 둘중 하나가 적용이 되질않는다. 상황 th:field로 th:object에서 감싼 필드를 사용하고있었는데, th:selected가 계속 되질 않는 것이다.. 찾아보니 th:field와 th:selected는 동시에 적용이 되지 않는다는것을 알게되었다. 카테고리 기타 category name 해결 th:field는 name, id 속성과 필드가 매핑되어 값이 적절하게 들어간다. 그냥 직접 풀어서 사용하여 th:field를 사용하지않고 th:selected만 사용하여 해결 카테고리 기타 category name 뭐가문젠지 모르겠어서 해결하는데 꽤 걸렸다.. https://stackoverflow.com/questions/32206849/..

개발 2021.08.03

spring security를 살짝 적용해보자!

프로젝트를 진행하는데, 인증과 인가필요해서 찾아보다 spring security를 적용하면 접근하는 사용자가 누구인지에 대한 인증과 어떠한 자원에대한 접근이 가능한지에 대한 인가를 쉽게 적용할수 있다는 사실을 깨닫고 스프링 부트에서 spring security를 적용해려 했다. 그런데 너무 어려웠다. 설정도 복잡하고, spring security만의 기능을 이해하는데 힘들었다. 그래서 내가 스프링 시큐리티를 적용할 때 기억이 나지않을 경우 복기할 용도와, spring security를 처음 적용하는 사람에게 도움이 될까하고 포스팅을 하게되었다. 매우 간단하게 프로젝트를 진행할것이다! 초점은 스프링 시큐리티의 사용법이다. (본인도 스프링 시큐리티의 제대로된 매커니즘을 알지못한다.) 가자! 구현할 기능 어플..

개발 2021.07.30

springboot + jpa + mysql

spring boot에서 mysql을 이용해서 spring data jpa를 사용해보자아아 dependencies application.yml spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:(포트번호)/(DB이름)?serverTimezone=Asia/Seoul username: (사용자이름) password: (사용자비밀번호) jpa: hibernate: ddl-auto: create properties: hibernate: format_sql: true logging.level: org.hibernate.SQL: debug mysql의 url이라던가 username, password에 ..

개발 2021.07.19