전체 글 48

Springboot 레이어드 아키텍처에서 테스트 코드 작성하기

개요 Layered Architecture에 대해 간략하게 내용을 정리한 후 테스트하기 좋은 상태로 변환해 가는 과정에 대해서 보여주고자 한다. Layered Architecture 란? 가장 일반적인 아키텍처 패턴으로, n-tier 아키텍처 패턴이라고도 알려져 있다. 계층화 아키텍처 패턴은 각각의 수평적인 계층으로 구성된 컴포넌트들을 가지고 있으며, 각 계층은 애플리케이션 내에서 특정한 역할을 수행한다. 계층화 아키텍처 패턴은 몇 개의 표준 계층으로 구성되어 있는데, 주로 프레젠테이션, 비즈니스, 영속성, 데이터베이스 등의 계층으로 구성된다. 프레젠테이션 계층, 비즈니스 계층, 영속성 계층, 데이터베이스 계층이라는 네 가지 계층이 일반적으로 존재한다. - 프레젠테이션 계층은 사용자 인터페이스와 브라우저..

Project 2023.07.12

엔티티의 컬럼은 어떤 타입을 써야할까?

개요 @Entity @Table(name = "USER") public class User { @Id @Column(name = "user_id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "user_name") private String name; @Column(name = "phone_number") private Integer phoneNumber; } 엔티티를 작성하다가 문득 컬럼 타입을 원시형으로 쓰지않고 참조형으로 사용하는지 궁금증이 생겼다. 단순한 생각으로는 참조형으로 사용할때 Null이 허용된다는 점인데 각각의 특징을 간략하게 알아보고 타입 선택 전략에 대해 생각해보았다. 요약 불리..

Web/JPA 2023.05.30

다양한(?) 동시성 제어 방법 맛보기

개요 5월쯤이었을까 특정 항공사에서 10000명 정도에 한해 선착순으로 홍콩 무료 항공권 이벤트를 했다. 링크 무료 항공권에 혹해서 이벤트를 참여했는데 뉴스기사에서 10만 명 넘는 사람의 신청자가 몰렸다고 한다. 꽤 많은 사람들이 몰린 이벤트였고 항공사에서 이벤트를 처리하는 방식이 신기했다. 해당 항공사에서 처리한 방식은 클라이언트 요청에 대해 요청비율(RPS)로 제한하는 방식으로 Nginx 같은 웹서버를 통해 요청비율을 넘는 IP주소들은 Queue에 대기시키고 조금씩 그리고 순차적으로 이벤트 페이지에 접속하도록 하는 트래픽 제어하는 방식을 사용한 것 같다. 이는 물론 동시성 제어하는 방식과는 분명히 다른 케이스이지만 많은 사람들이 몰릴 때 어떻게 동시성 제어를 하는 게 좋고 각 특징 그리고 최적의 방법..

Project 2023.05.30

쿠버네티스 - 미니쿠베와 큐브 컨트롤

요약 minkube는 실 운영용 k8s은 너무나도 설정할 것들이 많고 여러개의 서버가 존재하기때문에 개발 환경 및 테스트용으로는 적합하지않다. 그렇기때문에 나온게 minkube(+ k3s) 단 하나의 서버에서 master와 node를 관리할 수 있도록 해줌 kubectl은 쿠버네티스에 명령을 전달하기위한 프로그램 k8s를 활용하기위해서는 마스터 서버 3개 그리고 노드가 다중으로 있어야하기때문에 초기설정이 나무나도 할게 많아서 연습하기에 어렵다 그렇기 때문에 하나의 서버안에서 마스터서버와 노드를 함께 활용하는 즉 마스터서버 (api server, etcd , controller, scheduler) + 노드(proxy, kubelet)를 함께 운영 준비 2 CPUs or more 2GB of free me..

DevOps/Kubernetes 2021.10.25

nvm windows에 설치하기

nvm은? nodejs를 커맨드로 빠른 설치와 다양한 버전을 사용할 수 있게 도와주는 버전 관리 도구 nvm 설치 nvm 설치전 정석적인 nodejs 프로그램은 삭제해주고 진행해야함 nvm-setup.zip을 다운로드 https://github.com/coreybutler/nvm-windows/releases Releases · coreybutler/nvm-windows A node.js version management utility for Windows. Ironically written in Go. - coreybutler/nvm-windows github.com 설치 루트는 반드시 C:\특정경로\nvm으로 설정할 것 기본 제공경로로 설치시 node버전을 변경못하는 오류 있음 nvm Example ..

Web/Node.js 2021.10.24

몽고DB 초기 설정

몽고DB 설치 몽고DB 포트번호 변경 sudo vi /etc/mongod.conf # network interface net: port: 27027 -> 임의의 포트번호로 변경 bindIp: 127.0.0.1 -> 0.0.0.0 ---------------------------- sudo service mongod restart 몽고DB 접속 계정만들기 몽고DB 인증 mongo --port portNumber 계정 추가 > use admin switched to db admin > db.createUser( ... { ... user: "admin", ... pwd: "adminPW", // or cleartext password ... roles: [ { role: "root", db: "admin" ..

DB/Mongo 2021.05.26

node, npm 버전 관리

버전 확인 및 캐시 제거 //버전확인 $ node -v v6.0.0 // 기존에 사용 했을수도 있는 npm cache값을 제거해줍니다. $ sudo npm cache clean -f n 모듈 설치 [ npm n ] n 은 Node.js 버전을 관리해주는 플러그인 //n모듈 설치 $ sudo npm install -g n // node 안정버전 설치 $ sudo n stable //lts버전 설치 $ sudo n lts //특정버전 설치 ex> $ n $ sudo n 10.0.0 //버전삭제 $ sudo n rm 10.0.0 npm 업데이트 //npm 버전 확인 $ npm -v 3.1.0 $ sudo npm i -g npm /usr/local/bin/npm -> /usr/local/lib/node_modu..

Web/Node.js 2021.03.04

Docker - Mysql DB 정보 옮기기

Mysql DB정보를 다른 서버로 옮기려고 할 때는 저장된 데이터를 추출해야 한다. DB dump를 도와주는 프로그램이 되어줄 MySQL Workbench 직관적으로 DB를 사용하고 있었지만 이런 기능도 있는 줄은 몰랐다. 쉽고 빠르게 DB 정보를 전달할 수 있으니 같이 보자 1. 정보를 가져오려는 DB에 접속하고 아래와 같이 Data Export를 클릭한다 Data Import는 데이터를 가져올 수 있다. 일단 추후에 공부해보겠다. 2. 가져올 DB 스키마 선택하고 테이블 선택, 아래와 같이 옵션을 클릭해준다. Export to Self-contained File 옵션을 사용해야 하나의 sql파일 안에 모든 DB정보가 담긴다. Export to Dump Project Folder 옵션은 하나의 디렉터리..

DevOps/Docker 2020.09.10

자바스크립트 비동기처리에 대한 promise 사용법

Promise() 사용법 위 링크에 들어가서 보면 Promise를 통한 비동기 처리에 대한 사용법이 두 가지가 나온다. 하나는 Promise를 객체에 담아서 사용하는 방법이고 하나는 return Promise를 사용하는 방법이다. 처음엔 상세히 공부하지않고 예제대로 Promise를 객체선언하고 사용했었다. 또한 Promise를 리턴해서나오는 값을 사용하기 위한 콜백 함수 then()을 정확하게 명시할 수 있어서였다. 처음엔 문제없이 처리했었는데 AJAX요청이 포함된 비동기 처리가 필요할 때 생겼다. AJAX로 비동기 요청을 하고 처리된 값을 어딘가에 대입해야 하는 상황에서 Async와 Await를 사용하게 됐는데 구체적인 모든 코드가 작성되어있지는 않지만 그 문제의 코드다. const detectLng ..

Web/JavaScript 2020.07.08

Moment.js 시간표기와 시간 차이 구하기

import moment from 'moment'; require('moment-timezone'); // import timezone from 'moment-timezone'; moment.tz.setDefault("Asia/Seoul"); //시간 비교 표기하기위해서 moment.updateLocale('ko', { relativeTime : { future: "%s 후", past: "%s 전", s : "%d 초", ss : "%d 초", m: "%d 분", mm: "%d 분", h: "%d 시간", hh: "%d 시간", d: "%d 일", dd: "%d 일", M: "%d 달", MM: "%d 달", y: "%d 년", yy: "%d 년" } }); // result는 select query의..

Web/Node.js 2020.07.05