Backend 21

Node.js - ORM 및 Sequelize 개념, 사용 방법, 문법 정리

ORM(Object Relational Mapping) 이란? 객체를 통해 간접적으로 데이터베이스를 다루는 방식 직접 SQL 쿼리를 작성하지 않고 프로그래밍 언어를 이용하여 DB에 접근할 수 있음 - 장점 1. 개발 코드와 DB의 종속성 분리 2. 생산성 향상 및 유지보수 용이 3. 특정 DBMS에 종속적이지 않아 Object에만 집중 가능 (= 다른 DBMS간에도 문법이 호환되므로 프로젝트 진행시 다른 종류의 DBMS로 교체할 경우 편리) - 단점 1. 커스터마이징 및 디버깅이 어려움 2. 실행 속도가 raw 방식보다 느림 3. 복잡한 쿼리 작성이 어려움 - Express에서 MySQL ORM 모듈로는 Sequelize와 TypeORM, Knex 등이 있음 ① Sequelize → PostgreSQL,..

Backend/Node.js 2021.10.10

Database - ORDER BY 커스텀 정렬

보통 ORDER BY 절에는 컬럼명 + [ASC | DESC] 형태로 정렬하고자 하는 기준 컬럼을 넣어서 사용한다. 기준 컬럼명만 넣어줄 경우(ORDER BY 컬럼명), 기본적으로 오름차순(ASC)으로 정렬된다. 혹은, 행 번호나 컬럼을 이용한 계산식 혹은 함수를 이용하여 정렬을 할 수도 있다. 계산식이나 함수 사용 예시는 다음과 같다. order by LENGTH(CITY_CONT) --해당 컬럼 길이 기준 오름차순 정렬 order by VAL1/VAL2 -- 수식으로 정렬 order by rand() -- 랜덤 정렬(mysql) order by 2, 1 -- 컬럼명 대신 SELECT 절에서 선택된 컬럼의 위치번호로 지정 가능 order by CITY_NAME LIKE '서%', CITY_NAME LI..

Backend/Database 2021.09.14

Spring 복습 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

이 글은 야매로 스프링을 배운 블로그 주인이 스프링 복습 겸 스프링 부트 학습을 위해 인프런 강의를 듣고 정리한 내용을 적은 글입니다. 학습 영상 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 [무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., 스프링 학습 첫 길잡이! 개발 공부의 길을 잃지 않도록 도와드립니다. 📣 확인해주세 www.inflearn.com 학습 기간 2021.08.27 ~ 2021.08.28 프로젝트 환경 설정 요새는 그냥 스프링을 잘 안 쓰고 스프링 부트를 쓰는 추세 maven 안 쓰고 gradle을 주로 사..

Backend/Spring 2021.08.28

Eclipse - Hot reload(Hot deploy) 설정

스프링 개발을 하다 보면 java 파일을 수정할 때마다 톰캣이 재부팅 되면서 수정 사항이 반영되기 때문에 약 10초 가량을 기다려야 하는 불편함이 있다. 간단하게 Springloaded를 의존성에 추가하여 hot reload 기능을 사용할 수 있다. 아쉽게도 그냥 톰캣 재부팅 없이 수정사항만 반영될 뿐, 자동으로 새로고침까지 해주지는 않는다. eclipse에서 설정 1. maven repository에서 Springloaded 검색 후 jar 파일 다운로드 https://repo1.maven.org/maven2/org/springframework/springloaded/1.2.8.RELEASE/springloaded-1.2.8.RELEASE.jar 2. 다운로드 받은 jar 파일을 적당한 위치에 이동 3..

Backend/Spring 2021.08.22

Spring Mybatis에서 CLOB 데이터 처리

Tibero DB에서 SELECT문으로 데이터를 불러오는 기능을 만들고 있었는데 갑자기 보기 드문 오류가 발생했다. com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class com.tmax.tibero.jdbc.TbClobReader and no properties discovered to create BeanSerializer 가져온 map을 출력해 봤는데, content 요소의 값이 문자열이 아닌 Clob 형태여서 json 형식으로 변환할 수 없다는 것 같다. 해결 방법으로는 mapper에서 resultMap을 만들어 주면 된다. 예를 들어, 쿼리가 다음과 같고 content 컬럼의 datat..

Backend/Spring 2021.08.18

Docker - 간단한 명령어 정리

이미지를 이용하여 컨테이너 생성 # docker run -it -p [외부 접근 포트]:[컨테이너 내부 포트] --name [생성할 컨테이너 이름] -d [이미지 이름] // ex) postgresql 생성 // # docker run -it -p 8432:5432 -- name postgresql -e POSTGRES_PASSWORD=password -d postgres 컨테이너 시작 # docker start [컨테이너 이름] 컨테이너 재시작 # docker restart [컨테이너 이름] 컨테이너 종료 # docker stop [컨테이너 이름] 컨테이너 삭제 # docker rm [컨테이너 이름] 컨테이너 진입 # docker attach [컨테이너 이름] # exit // 진입한 컨테이너 종료 컨..

Backend/Docker 2021.07.12

Tomcat - 외부 폴더 접근

was로 톰캣을 사용하면 프로젝트 폴더가 자동으로 ROOT Path로 지정되기 때문에 접근하려는 폴더가 프로젝트 폴더 외부에 있는 경우에는 접근이 어렵다. (ex 나스) 톰캣 폴더 내 conf/server.xml 파일을 열어서 Host 내에 아래 코드를 추가한 후 톰캣을 재기동하면 http://도메인주소/경로명/파일명 으로 접근이 가능하다. 위 방법을 이용해서 영화 포스터를 가져오는 실습을 해보자. 1. server.xml 파일 수정 2. 톰캣 재기동 후 이미지(혹은 파일) 접근

Backend/Tomcat 2021.06.17

Database - 문자열 포함 여부

MySQL/MsSQL/Oracle INSTR(컬럼명, '문자열') 문자열 대/소문자 구분은 안된다. 그리고 PostgreSQL의 경우에는 instr() 함수를 제공하지 않는다. 그렇기 때문에 위 방법 외에 LIKE 구문을 쓰거나 POSITION() 등의 인덱스 찾기 함수를 써서 하는 방법을 사용해야 한다. (물론 다른 DB에서도 마찬가지다.) SELECT * FROM 테이블명 WHERE POSITION('문자열' in 컬럼명) > 0 // 해당 문자열을 포함하지 않으면 0 반환

Backend/Database 2021.05.16

Database - 날짜 포맷팅

프로그래머스 SQL 문제를 풀다가 날짜 포맷팅 문제가 나왔다. 요새 PostgreSQL만 쓰다보니 MySQL 문법을 다 까먹어서 날짜 포맷팅 관련해서 정리해보려고 한다. MySQL DATE_FORMAT(날짜, '포맷') DATE_FORMAT() 함수를 사용한다. 아래 표에 자주 쓰이는 포맷 종류를 정리했다. 포맷 설명 %Y 년도(4자리) %y 년도(2자리) %c 월 %d 일(2자리) %e 일(1자리) %H 시(24시 기준, 00~23) %h 시(12시 기준, 01~12) %i 분 %s, %S 초 %T hh:mm:ss Oracle/PostgreSQL // 날짜에서 원하는 부분만 추출할 때 주로 사용 TO_CHAR(날짜, '포맷') // 문자열 타입의 컬럼을 날짜 타입으로 변환할 때 사용 TO_DATE(날짜..

Backend/Database 2021.05.16