반응형

다음은 이 글의 동영상 강의 입니다.

https://youtu.be/g5LaZ1IPJXE

지난시간에 S3에 업로드가 완료된 파일을 이용해서 Backend API를 이용해 DB에 데이터를 저장하는 것을 진행합니다.

 

S3 파일명 유니크 하게 만들기

frontend 프로젝트에 moment 라는 패키지를 설치합니다.

yarn add moment

moment는 자바스크립트에서 날짜를 핸들링할때 유용한 패키지입니다.

vue에서 moment를 import 합니다.

/admin/index.vue

import moment from 'moment';

다음과 같이 현재 날짜와 시간을 문자열로 만들어주는 function을 methods: 아래에 추가합니다.

genDateTime() {
    return moment().format('YYYYMMDDHHmmss');
},

S3 파일 업로드 모듈을 다음과 같이 변경합니다.

await s3.upload({
    ACL: 'public-read',
    Body: this.genDateTime()+'_'+this.file1,
    Key: this.genDateTime()+'_'+this.file1.name
}

파일을 업로드 하면 다음과 같이 파일명이 생성됩니다.

 

Slider 테이블 생성

우선 MySQL Workbench를 이용해서 테이블을 생성합니다.

id: key값

image_url: S3의 url 정보

created_at: 생성일

updated_at: 수정일

 

Slider 저장용 Backend API 개발

slider-api 프로젝트에서 entity 파일을 다음과 같이 만듭니다.

/domain/slider.entity.ts

import {Column, Entity, PrimaryGeneratedColumn} from "typeorm";

@Entity('slider')
export class Slider {
    @PrimaryGeneratedColumn({type: 'int', name: 'id'})
    id: number;

    @Column('varchar', {name: 'image_url', length: 200})
    imageUrl: string;

    @Column('timestamp', {
        name: 'created_at',
        default: ()=> 'CURRENT_TIMESTAMP'
    })
    createAt: Date;

    @Column('timestamp', {
        name: 'updated_at',
        default: ()=> 'CURRENT_TIMESTAMP'
    })
    updatedAt: Date;
}

nest generator를 이용해서

slider module, controller, service를 추가합니다.

nest g module slider
nest g controller slider
nest g service slider

SliderModule에 entity를 추가합니다.

/slider/slider.module.ts

@Module({
  imports: [
    TypeOrmModule.forFeature([Slider])
  ],
  controllers: [SliderController],
  providers: [SliderService]
})

Controller에 slider api를 post로 추가합니다.

/slider/slider.controller.ts

import {BadRequestException, Body, Controller, Post, Response} from '@nestjs/common';
import {SliderService} from "./slider.service";

@Controller('slider')
export class SliderController {
    constructor(
        private sliderService: SliderService
    ) {}

    @Post('')
    async createSlider(
        @Body() createSliderDTO, @Response() res
    ): Promise<any>{
        const { imageUrl } = createSliderDTO.body;
        if(!imageUrl) throw new BadRequestException();
        await this.sliderService.createSlider({imageUrl});
        res.status(200).json({'message': 'OK'});
        return;
    }
}

Service에 createSlider method를 추가합니다.

/slider/slider.service.ts

import { Injectable } from '@nestjs/common';
import {InjectRepository} from "@nestjs/typeorm";
import {Slider} from "../domain/slider.entity";
import {Repository} from "typeorm";

@Injectable()
export class SliderService {
    constructor(
        @InjectRepository(Slider)
        private sliderRepository: Repository<Slider>
    ) {}
    async createSlider(param: { imageUrl: any }): Promise<any> {
        const {imageUrl} = param;
        await this.sliderRepository.save({imageUrl});
    }
}

 

Frontend 에서 slider API 호출하기

slider-front 프로젝트에서 s3 upload 후에 backend api를 호출하도록 소스를 변경합니다.

async saveImage(imageUrl){
    const headers = {
        'Content-Type': 'application/json',
        'Authorization': `Bearer ${this.accessToken}`
    }
    const body = {
        'imageUrl': imageUrl
    }
    await this.$axios.post(
        '/slider',
        {body},
        {headers}
    ).catch(error =>{
        console.log(error);
    })

},
async upload() {
    if(!this.file1){
        alert('File을 선택해주세요!')
    }else{
        console.log(this.file1);
        AWS.config.region = this.bucketRegion;
        AWS.config.credentials = new AWS.CognitoIdentityCredentials({
            IdentityPoolId: this.identityPoolId,
        });
        const s3 = new AWS.S3({
            apiVersion: '2006-03-01',
            params: {
                Bucket: this.bucketName+'/images'
            }
        });
        await s3.upload({
            ACL: 'public-read',
            Body: this.genDateTime()+'_'+this.file1,
            Key: this.genDateTime()+'_'+this.file1.name
        }, (error)=>{
            if(error){
                this.errorHandler(error);
            }
        }).promise().then((data)=>{
            console.log('File uploaded!!!')
            console.log(data);
            this.saveImage(data.Location);
        })
    }
}

파일 업로드 테스트를 합니다.

 

DB에 다음과 같이 데이터가 들어간것을 볼 수 있습니다.

이렇게 해서 S3 업로드 파일을 Backend API를 통해 DB에 저장하는 기능을 구현해 보았습니다.

반응형
반응형

다음은 이 글의 동영상 강의 링크입니다.
 
요즘은 많은 종류의 프로그래밍 언어들이 있습니다. 개발자가 되려고 할 때 어떤 언어를 선택해야 할지 고민을 많이 하게됩니다. 이럴때 어떻게 선택하면 좋을지와 추천 언어는 어떤것이 있는지 알아보겠습니다.
 
개발자의 종류는 다양하지만, 최근들어 일반적으로 Frontend와 Backend 개발자로 나누고 있습니다.
단어에서 주는 느낌처럼 사용자들이 직접 만나게 되는 부분을 Frontend, 그 뒤의 보이지 않는 부분을  Backend 라고 합니다.
 
그림과 같이 사람이 볼 수 있는 부분이 Frontend, 보이지 않는 부분이 Backend 라고 생각하면 됩니다.

카카오톡에 로그인 하는 예를 들어보면,
  1. 카톡 로그인 창이 보이는 부분이 Frontend입니다.
    여기에서 사용자는 아이디와 패스워드를 입력하고 로그인 버튼을 클릭합니다.
  2. 아이디/패스워드 정보가 Backend로 전달이 되어집니다.
    이것으로 Database를 검색하여 사용자 인증을 처리하고, 정상 사용자일 경우 친구 및 대화 목록을 가져와서 Frontend로 전달을 합니다.
  3. Frontend에서는 Backend에서 온 Data를 이용해서 대화목록 화면을 보여줍니다.

 

정리하면,
Frontend는 사용자에게 보여지는 화면을 주로 처리하는 프로그램을 개발하고,
Backend는 Frontend의 요청에 의해 비즈니스 로직을 처리하고, 데이터를 처리하고 Interface를 처리하는 프로그램을 개발합니다.
 
Frontend의 경우 앱과 웹으로 구분될 수 있습니다.
앱의 경우는 Android와 iOS 개발을 의미합니다.
  • Android는 과거 Java 언어를 사용하였으나 최근엔 Kotlin(코틀린)이라는 언어를 사용합니다.
  • iOS의 경우는 Swift(스위프트)를 사용합니다.
웹의 경우는 자바스크립트 프레임워크를 많이 사용합니다. 현재 많이 쓰이고 있는 것은 다음과 같습니다.
  • React
  • Vue
이 둘의 차이는 다음과 같습니다.
물론 웹의 경우는 html, css도 어느정도 알고 있어야 개발이 가능합니다.
 
Backend의 경우 최근 Java와 NodeJS를 많이 사용합니다.
백엔드의 경우 그 외에 Database는 기본적으로 알고 있어야 합니다.

 

이 외 다른 언어들은
  • Python의 경우는 배우기 쉬운 언어라 많이 사용하고 있습니다.
  • Python은 데이터 분석 영역에서도 많이 사용합니다.
  • Php의 경우는 wordpress라는 브로그 사이트를 만들 수 있는 오픈 소스를 등에 업고 많이 사용되고 있습니다.
  • 시스템적으로 빠른 성능이 필요할 경우는 C나 C++을 사용하는 곳도 있습니다.
 
결론을 말씀 드리면
  • 요즘 개발자로 취업을 하기 좋은 언어를 추천하라고 하면,
  • 당연히 Javascript 기반의 언어입니다. 백엔드와 프론트엔드를 모두 커버할 수 있기 때문이죠.(Full Stack)
  • 먼저 frontend/backend를 결정하시고
  • frontend일 경우는 react, vue 중에서 하나를
  • backend일 경우는 nodejs, java 중에서 하나를 선택하시는 것을 추천드립니다.

반응형
반응형

Vue.js를 사용해서 일렉트론 앱을 만드는 법에 대해 알아봅니다.

 

Vue CLI 설치

우선 Vue cli를 전역으로 설치합니다.

  • 기존 vue/cli가 @vue/cli로 변경되었습니다.
  • 이전버전이 설치되어 있다면 삭제 후에 설치해 주세요(npm uninstall vue/cli)
npm i -g @vue/cli

설치가 완료되면 다음 명령으로 설치 버전을 확인합니다.

vue --version

 

Vue 프로젝트 생성

이제 vue 프로젝트를 만듭니다.

  • 프로젝트명 : elec-vue
vue create elec-vue
  • Vue 버전 선택 : 최신 버전인 Vue 3를 선택합니다.

  • 아래와 같이 설치가 진행됩니다.

  • 잠시 후 설치가 완료됩니다.

  • 다음 명령어로 프로젝트를 실행합니다.
yarn serve

  • http://localhost:8080으로 접속하면 다음과 같은 화면이 나옵니다.

  • ctrl + C를 눌러 실행을 종료합니다.

 

프로젝트에 Electron Builder 추가

Electron Builder는 기존 프로젝트를 Electron으로 바꿔주고 쉽게 build를 할 수 있게 돕습니다.

Vue CLI Plugin으로 제공하는 Electron을 사용하면 쉽게 설치가 가능합니다.

https://nklayman.github.io/vue-cli-plugin-electron-builder/

 

Vue CLI Plugin Electron Builder

 

nklayman.github.io

  • 다음 명령으로 Electron Builder를 추가합니다.
vue add electron-builder
  • Electron 버전 선택 : 13.0.0

  • 설치가 완료되면 package.json에 다음과 같이 스크립트가 추가됩니다.'

 

Electron 실행

  • 이제 Electron이 추가된 프로젝트를 실행합니다.(package.json 참고)
yarn electron:serve
  • 실행 화면은 다음과 같습니다.

 

Electron Build

  • 다음 명령으로 App을 Build 할 수 있습니다.
yarn electron:build
  • 빌드가 완료되면 다음과 같이 dist_electron 폴더에 실행 파일이 생성됩니다.
    • 맥의 경우 dmg 파일로, 윈도우의 경우는 exe 파일로 생성됩니다.

  • 생성된 실행파일을 더블클릭하면 다음과 같이 Application이 실행됩니다.

이렇게 vue 프로젝트에 electron builder를 추가하면 쉽게 electron+vue 프로젝트를 만들 수 있습니다.

 

반응형

+ Recent posts