분류 전체보기
-
Sequelize - 시퀄라이즈 시작 (설정,모델만들기,관계설정)FrameWork/ORM 2024. 3. 21. 15:52
Sequelize(시퀄라이즈) 시작 MySQL 테이블 생성 CREATE TABLE[데이터베이스명.테이블명]으로 테이블 생성 댓글 정보를 생성하는 테이블 create table comments( id int not null auto_increment, commenter int(11) not null, comment varchar(100) not null, created_at datetime not null default now(), primary key (id), INDEX commenter_idx (commenter ASC), CONSTRAINT commenter foreign key (commenter) references users(id) ON DELETE CASCADE ON UPDATE CASCAD..
-
ExpressJS - express.js 활용2(Multer, Router, req와 res객체)FrameWork/Express.js 2024. 3. 20. 08:54
express.js 파일 업로드 하기 multer 이미지, 동영상등을 비롯한 여러가지 파일들을 멀티파트 형식으로 업로드할 때 사용하는 미들웨어이다. 멀티파티 형식이란 enctype이 multipart/form-data인 폼을 통해 업로드하는 데이터의 형식을 의미한다. form 태그의 enctype이 multipart/form-data인 경우 body-parser로는 요청 본문을 해석할 수 없음 multer 패키지 필요 업로드 multer 함수를 호출 storage는 저장할 공간에대한 정보 diskStorage는 하드디스크에 업로드 파일을 저장한다는 것 destination은 저장할 경로 filename은 저장할 파일명(파일명+날짜+확장자 형식) Limits는 파일 개수나 파일 사이즈를 제한할 수 있다. ..
-
ExpressJS - express.js 활용1(next활용법, 자주 쓰는 미들웨어)FrameWork/Express.js 2024. 3. 19. 14:57
express.js 활용 next 활용법 res.json과 return의 차이 // 라우터에 return이 없는 경우 app.get('/',(req, res) =>{ res.json({hello:'express'}); console.log('hello express'); }); // 라운터에 return이 있는 경우 app.get('/',(req, res) =>{ return res.json({hello:'express'}); console.log('hello express'); }); res.json(), res.send()메서드를 return과 동일시 하기 쉬운데 엄밀히 말하면 res.json과 return은 다르다. 우선 res.json()은 응답을 보낼 뿐이지 함수를 끝내는 것은 아니다. 그래서 ..
-
ExpressJS - express.js 서버 시작하기(setting, 미들웨어)FrameWork/Express.js 2024. 3. 18. 15:55
express.js 서버 시작하기 ExpressJS로 HTML 서빙하기 index.html 익스프레스 배워봅시다. app.js const express = require('express'); const app = express(); // 서버에 port라는 변수를 심는다. // 전역 변수의 개념 app.set('port',process.env.PORT||3400); app.get('/',(req, res) => { res.sendFile('./index.html'); }); app.listen(app.get('port'),() => { console.log(app.get('port'),'번 포트에서 대기 중') }); sendFile() 메서드를 사용하면 express에서 알아서 fs 패키지를 사용해서 ..
-
NodeJS - Typescript를 활용한 express서버 구축개발언어/TypeScript 2024. 3. 18. 11:18
TypeScript를 활용한 express 서버 구축 ts 파일 node 명령어로 실행하기 위와 같이 간단한 디렉토리 구조에 ts 파일을 생성하고 안에는 간단한 console.log를 찍는 코드를 적는다. 그 다음에 해당 파일을 node 명령어로 실행하면 보통의 js 파일을 실행하듯 실행해도 ts 파일의 코드대로 로그가 찍히는 것을 확인할 수 있다. 그러면 노드로 타입스크립트를 실행할 수 있는 것 일까? → 🙅♀️그렇지는 않다. 노드는 파일 확장자를 신경 쓰지 않고 파일안의 내용을 일반적인 자바스트립트로 처리한다. 위 코드에서는 타입스크립트의 기능이 하나도 없기 때문에 실행된 것이다. Typescript의 기능이 추가된 ts파일 node 명령어로 실행 이번에는 타입스크립트의 기능을 활용한 코드를 작성한..
-
Spring Core - 동적 프록시 (리플렉션)FrameWork/Spring&Spring-boot 2024. 3. 12. 14:20
동적 프록시 - 리플렉션 지금까지 프록시를 사용해서 기존 코드를 변경하지 않고, 로그 추적기라는 부가 기능을 적용할 수 있었다. 그런데 문제는 대상 클래스 수 만큼 추적을 위한 프록시 클래스를 만들어야 한다는 점이다. 자바가 기본으로 제공하는 JDK 동적 프록시 기술이나 CGLIB 같은 프록시 생성 오픈소스 기술을 활용하면 프록시 객체를 동적으로 만들어낼 수 있다. 쉽게 이야기해서 프록시 클래스를 이전의 예시에서 처럼 계속 만들지 않아도 된다는 것이다. 프록시를 적용할 코드를 하나만 만들어두고 동적 프록시 기술을 사용해서 프록시 객체를 찍어 낼 수 있다. JDK 동적 프록시를 이해하기 위해서는 먼저 자바의 리플렉션 기술을 이해해야 한다. 리플렉션 기술을 사용하면 클래스나 메서드의 메타정보를 동적으로 획득..
-
Spring Core - 구체 클래스 기반 프록시(예제1, 예제2,적용)FrameWork/Spring&Spring-boot 2024. 3. 12. 12:45
구체 클래스 기반 프록시 - 예제1 이번에는 구체 클래스에 프록시를 적용하는 방법을 학습해보자 다음 보이는 ConcreteLogic은 인터페이스가 없고 구체클래스만 있다. 이렇게 인터페이스가 없어도 프록시를 적용할 수 있을까? 먼저 프록시를 도이바기 전에 기본 코드를 작성해보자. ConcreteLogic package com.core.springproxy.pureproxy.concreteproxy.code; import lombok.extern.slf4j.Slf4j; @Slf4j public class ConcreteLogic { public String operation(){ log.info("ConcreteLogic 실행"); return "data"; } } ConcreateLoic은 인터페이스가 ..
-
Spring Core - 인터페이스 기반 프록시(V1)FrameWork/Spring&Spring-boot 2024. 3. 11. 15:28
인터페이스 기반 프록시 - 적용 인터페이스와 구현체가 있는 V1 App에 앞서 학습한 프록시를 도입해서 LogTrace를 사용해보자. 프록시를 사용하면 기존 코드를 전혀 수정하지 않고 로그 추적 기능을 도입할 수 있다. V1의 App의 기본 클래스 의존 관계와 런타임시 객체 인스턴스 의존 관계는 다음과 같다. V1 기본 클래스 의존 관계 V1 런타임 객체 의존 관계 여기에 로그 추적용 프록시를 추가하면 다음과 같다. V1 프록시 의존 관계 추가 Controller , Service , Repository 각각 인터페이스에 맞는 프록시 구현체를 추가한다.(그림에서 Repository는 생략되었다.) V1프록시 런타임 객체 의존 관계 그리고 애플리케이션 실행 시점에 프록시를 사용하도록 의존 관계를 설정해주어..