express로 프로젝트 세팅

express --view=pug [projectName]

 

실시간 렌더링을 위한 nodemon설치

npm i nodemon

package.json > scripts: { "dev": "nodemon app.js" }

 

사용할 db 설치

npm i mysql2 --save

 

orm사용을 위한 knex 설치

npm i knex --save

 

env파일 로딩을 위한 dotenv설치

npm i dotenv --save

 

app.js와 같은 depth에 .env생성

HOST=localhost
USER=root
PASSWORD=1234
DATABASE=apiTest

app.js와 같은 depth에 dbconfig.js생성

require('dotenv').config()
module.exports = (require('knex')({
  client: 'mysql',
  debug: true,
  connection: {
    host: process.env.HOST,
    user: process.env.USER,
    password: process.env.PASSWORD,
    database: process.env.DATABASE
  },
  log: {}
}))

 

env를 통해 테스트서버와 운영서버를 나누고싶다면

require('dotenv').config()
module.exports = (server) => (require('knex')({
  client: 'mysql',
  debug: true,
  connection: {
    host: `${process.env.HOST}_${server}`,
    user: `${process.env.USER}_${server}`,
    password: `${process.env.PASSWORD}_${server}`,
    database: `${process.env.DATABASE}_${server}`
  },
  log: {}
}))

위의 코드와 같이 dbconfig를 설정해 준 뒤 env에서 _local / _global 이런식으로 작성해주면 된다

사용은 아래와 같이 사용할 수 있다.

const db = require('./dbconfig')

db('local').select~~~~~

 

실행이 안될때

npm install

[ Brew ]

brew를 사용해서 설치를 진행함으로 Brew가 필요합니다!

brew를 이미 사용 중이라면 update 해주고 사용 중이지 않다면 다운로드해줍니다.

brew update

 

[ PHP설치 ]

맥에는 기본적으로 설치가 되어있지만 최신 버전 혹은 설치가 안되어있다면 설치를 위해 다음 명령어를 입력해 주세요

brew search php
brew install php

php를 brew에서 검색 후 설치를 진행해 줍니다.

 

[ composer ]

php의 의존성 관리 도구로 스프링에서 흔히 쓰는 maven 혹은 gradle과 같은 역할을 한다.

 

- 설치

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '906a84df04cea2aa72f40b5f787e49f22d4c2f19492ac310e8cba5b96ac8b64115ac402c8cd292b8a03482574915d1a8') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

위의 명령어를 차례대로 입력하면 컴포저의 설치가 끝난다.

 

- 전역 설정

sudo mv composer.phar /usr/local/bin/composer

전역에서 사용할 수 있도록 sudo 명령어를 통해서 설정을 완료한다.

 

[ laravel ]

이제 라라 벨을 설치하자

 

- installer

composer global require "laravel/installer"

라라벨을 사용하기 위해 먼저 인스톨러를 설치해준다.

 

- path설정

vi ~/.zshrc

zsh를 사용하는 경우 vi를 사용해 path를 변경해준다.

위의 명령어 입력 후 해당 파일로 진입 후 i를 누르면 insert모드로 변경이 되며

확인하기 편한 공간에 밑의 path를 추가해주자.

export PATH="$PATH:$HOME/.composer/vendor/bin"

추가가 끝났다면 esc버튼을 누르고 :wq를 입력해 vi에디터를 빠져나온다.

 

source ~/.zshrc

방금 설정한 파일을 적용하기 위해 위의 명령어를 입력해 새 로고 침해 주자.

 

- valet설치

< macOS 미니멀리스트를 위한 개발 환경입니다. 라라 벨 발레은 시스템이 시작될 때 항상 백그라운드에서 Nginx를 실행하도록 Mac을 구성합니다. 그런 다음 발레은 DnsMasq를 사용하여. test 도메인의 모든 요청을 프락시 하여 로컬 컴퓨터에 설치된 사이트를 바라보게 만듭니다. >라고 공식 홈페이지에 나와있습니다.

간단하게 프로젝트 이름. test로 모든 프로젝트에 접근할 수 있게 만들어주는 기술입니다.

 

* tomcat이 이미 설치가 돼 있는 경우 php artisan serve 명령어를 통해 실행하는 방법도 있습니다.

 

다음 명령어를 통해 valet을 설치해 줍니다.

composer global require laravel/valet
valet install

* valet을 사용하는 경우 valet park 명령어를 실행해야 됩니다.

 

- 프로젝트 생성

laravel new board

다음 명령어를 통해 프로젝트 생성이 가능하며 php artisan serve혹은 valet을 통해 실행을 하면 laravel을 사용할 수 있게 됩니다.

[ IoC(Inversion of control) ]

  • 제어의 역전
  • 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 제어의 역전이라고 한다.
  • 클라이언트 클래스가 직접 구현체를 컨트롤하는 것이 아닌 외부의 Config클래스를 통해 구현체를 받고 클라이언트 클래스는 실행에만 신경을 쓰는 것을 의미한다.

[ DI(Dependency Injection) ]

  • 의존관계 주입
  • 정적인 클래스 의존관계와, 실행 시점에 결정되는 동적인 인스턴스 의존관계 둘을 분리해서 생각해야 됨
  • 정적인 클래스 의존관계를 보면 import코드만 보고 의존 관계를 쉽게 판단할 수 있다.(실행하지 않아도 파악이 가능함)
  • 동적인 인스턴스 의존관계는 애플리케이션 실행시점에 실제 생성된 객체 인스턴스의 참조가 연결된 의존관계
    • 애플리케이션 실행 시점에 외부에서 실제 구현 객체를 생성하고 클라이언트에 전당 해서 클라이언트와 서버의 실제 의존관계가 연결되는 것을 의존관계 주입이라고 함
    • 클라이언트 코드를 변경하지 않고 클라이언트가 호출하는 대상의 타입 인스턴스를 변경할 수 있다.
    • 정적인 클래스 의존관계를 변경하지 않고, 동적인 객체 인스턴스를 쉽게 변경할 수 있다.

[ 컨테이너(IoC & DI Container) ]

  • 객체를 생성하고 관리하면서 의존관계를 연결해주는 것을 Container라고 한다.
  • 의존관계 주입에 초점을 맞추어 최는 에는 주로 DI컨테이너라고 함
  • 또는 어셈블러, 오브젝트 팩토리 등으로 불리기도 함

 

[ 스프링 컨테이너 ]

  • ApplicationContext를 스프링 컨테이너라고 한다.
  • @Configuration 이 붙은 class를 설정 정보로 사용하며, 클래스 안에 @Bean이라고 적힌 모든 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록하며, 이렇게 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 한다.
  • 등록된 빈을 applicationContext.getBean()메서드를 통해 가져올 수 있다.
  • 관례상 @Bean이 붙은 메서드의 명을 스프링 빈의 이름 그대로 사용한다.

'Back-end > Spring' 카테고리의 다른 글

스프링이란?  (0) 2022.02.04
File Download  (0) 2021.11.05
  1. Single Responsibility Principle(단일 책임원칙)
    • 하나의 클래스는 하나의 책임만 가져야 한다
    • 하나의 책임이 모하 하기 때문에 클 수도, 작을 수도 있으며 문맥과 상황에 따라 다르다
    • 중요한 기준은 변경으로 변경 시에 파급효과가 적으면 단일 책임원칙을 잘 따른 것이다
  2. Open/Closed Principle(개방 폐쇄 원칙)
    • 소프트웨어 요소는 확장에는 열려있으나 변경에는 닫혀있어야 한다.
    • 다형성을 예로 들 수 있을 것 같다.
      • 인터페이스를 사용해서 기능을 구현한다면 확장에는 열려있지만 인터페이스 자체의 변경에는 닫혀있기 때문
      • 그것만으로는 해결이 불가능하기 때문에 별도의 연관관계를 맺어주는 별도의 조립, 설정 자기 필요함
  3. Liskov Substitution Principle(리스 코프 치환 원칙)
    • 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
    • 다형성에서 하위 클래스는 인터페이스 규약을 다 지켜야 한다는 것, 다형성을 지원하기 위한 원칙, 인터페이스를 구현한 구현체는 믿고 사용하려면 이 원칙이 필요하다.
    • 단순히 컴파일 단계를 의미하는 것이 아님
  4. Interface Segregation Principle(인터페이스 분리 원칙)
    • 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
    • 인터페이스가 명확해지고, 대체 가능성이 높아짐
  5. Dependency Inversion Principle(의존관계 역전 원칙)
    • 프로그래머는 "추상화에 의존해야지, 구체화에 의존하면 안 된다." 의존성 주입은 이 원칙을 따르는 방법 중 하나.
    • 구현 클래스에 의존하는 게 아닌, 인터페이스에 의존하라는 뜻
    • 클라이언트가 구현 클래스를 직접 선택한다면 DIP를 위반한 것이다.

 

 

* 다형성 만으로는 OCP, DIP를 지킬 수 없다.(때문에 스프링을 사용)

'Back-end > JAVA' 카테고리의 다른 글

23. 예외 처리  (0) 2021.07.24
22. 추상클래스와 인터페이스  (0) 2021.07.24
21. Class - 상속  (0) 2021.07.24
20. Class - final(상수)  (0) 2021.07.24
19. Class - 멤버와 패키지, 접근 제한자  (0) 2021.07.24

- 2002년 로드 존슨이 EJB의 문제점을 지적하면서 EJB 없이도 충분히 고품질의 확장 가능한 애플리케이션을 개발할 수 있음을 보여주면서 30,000라인 이상의 기반 기술을 예제 코드로 선보인 책을 출간함.

 

로드 존슨의 책 출간 직후 유겐 휠러, 얀 카로프가 로드 존슨에게 오픈소스 프로젝트를 제안했고 그때 만들어진 오픈소스가 스프링의 기반이 됨

 

[ 스프링 생태계 ]

- 필수

  • 스프링 프레임워크
  • 스프링 부트

- 선택

  • 스프링 데이터
  • 스프링 세션
  • 스프링 시큐리티
  • 스프링 Rest Docs
  • 스프링 배치
  • 스프링 클라우드
  • 등...

 

[ 스프링 프레임워크 ]

  • 핵심 기술 : 스프링 DI 컨테이너, AOP, 이벤트 기타
  • web 기술 :  스프링 MVC, 스피링 WebFlux
  • 데이터 접근 기술 : 트랜잭션, JDBC, ORM, XML
  • 기술 통합 : 캐시, 이메일, 원격 접근, 스케줄링
  • 테스트 : 스프링 기반 테스트 지원(JUnit)
  • 언어 : 자바, 코틀린, 그루비

 

[ 스프링 부트 ]

  • 스프링을 편리하게 사용할 수 있도록 지원하며 tomcat 같은 웹 서버를 내장하고 있으므로 웹 서버를 별도로 설치하지 않아도 됨
  • 스프링과 3rd parth라이브러리 자동 구성
  • starter 종속성 제공
  • 관례에 의한 간결한 설정
  • 최근 추세는 스프링 부트를 사용하는 방향으로 가고 있다.

 

스프링은 DI(Dependency Injection)과 DI 컨테이너를 제공하기 때문에 객체지향의 5가지 원칙 중 OCP, DIP를 잘 지킬 수 있게 만들어 준다. 클라이언트 코드의 변경 없이 기능 확장이 가능하며 쉽게 부품을 교체하듯이 개발을 할 수 있다는 점이 스프링의 장점이다.

'Back-end > Spring' 카테고리의 다른 글

IoC, DI, 컨테이너  (0) 2022.02.07
File Download  (0) 2021.11.05

모든 언어에서 무조건 사용이 되는 반복문과 조건문을 코틀린에서는 어떻게 사용하는지, 또 다른 언어와의 차이점이 있는지 확인해보자.

 

  • 반복문
    • 특정 로직을 반복적으로 작성해야 할 때 주로 사용된다.
    • 간단한 while문 먼저 살펴보자.
      • var cnt: Int = 0
        while(cnt <= 10) {
        	cnt++
        }
        
        do{
        	cnt++
        } while(cnt <= 20)
      • while과 do-while로 사용할 수 있는데 do-while의 경우 먼저 실행 후 while(조건)을 확인한다는 특징이 있다.
    • 코틀린에서는 for문의 사용방법이 매우 다양하다. 필요에 따라 알맞게 사용하면 될 듯하다.
      • val size: Int = 10
        
        for(i: Int in 1..10)
        for(i: Int in i..size)
        for(i: Int in 1 until size + 1)
        • 위의 for문은 모두 1~10까지 반복하게 된다. (until의 경우 우측의 값 전까지 반복하게 된다.)
      • for(i: Int in 1..10 step(2))
        • step키워드를 통해서 2씩 증가시킬 수 있다.(i 에는 1, 3, 5, 7, 9가 차례대로 할당됨)
      • for(i: Int in 10 downTo 1)
        for(i: Int in 10 downTo 1 step(2))
        • downTo를 사용하면 좌측의 값부터 우측의 값까지 1씩 감소하면서 i에 할당된다.
        • step을 사용할 경우 step의 값만큼 빼면서 할당한다.(10, 8, 6, 4, 2)
      • val array: IntArray = intArraysOf(1, 2, 3, 4, 5)
        
        for(i: Int in array)
        • for문을 제일 많이 사용하는 배열의 경우 in을 통해 넣어주면 하나씩 꺼내서 할당해 준다.
        • 자바의 향상된 for문 혹은 자바스크립트의 for-in을 생각하면 좋다.
    • 파이썬, 자바스크립트와 같은 동적 언어를 많이 다뤄봤다면 매우 익숙한 문법이겠지만 자바와 같은 동적 언어로 프로그래밍에 입문을 했다면 다소 불편할 수도 있지만 적응하면 잘 사용할 수 있다고 생각한다.
  • 조건문
    • if(true)
      else if(false)
      else
      • 일반적으로 많이 사용하는 조건문이다. 코틀린에서도 동일하게 사용이 가능하다.
    • val foo: String = when(value) {
      	1..5 -> {"hello"}
          10 -> {"hi"}
          else -> {"bye"}
      }
      • 다른 언어가 가지고 있는 switch case문과 매우 유사하지만 {}를 통해 범위를 제어하기 때문에 break가 필요하지 않다.
      • 또한 결과를 바로 리턴 받아 사용이 가능하다.

 

'Back-end > Kotlin' 카테고리의 다른 글

2. 변수  (0) 2022.01.27
1. 코틀린이란?  (0) 2022.01.21

코틀린에서는 자바보다는 자바스크립트와 비슷하게 변수를 사용한다.(더 자세하게는 타입 스크립트와 닮은 듯하다)

변수를 선언할 때는 크게 두 가지를 사용할 수 있다.

  • val
    • 자바스크립트의 const를 생각하면 이해하기 쉽다.
    • 자바에서는 final. 즉, 상수를 생각하면 된다.
    • 재할당이 불가능하다.
  • var
    • 자바스크립트의 let을 생각하면 이해하기 쉽다.
    • 자바에서는 일반 변수를 생각하면 된다.
    • 재할당이 가능하다.

 

  • 사용 방법
    • val a: String = "hello"
      var a: String = "hello"
    • 제일 기본적으로 변수를 선언하는 방법이며 val의 경우 재할당은 불가능하다.
    • 타입은 값을 할당했을 경우에는 생략이 가능하다.
    • val a = "hello"
      var a = "hello"
    • 할당된 값을 코틀린이 확인 후 자동으로 타입을 매치해주기 때문에 위의 경우는 가능하지만 값을 처음에 입력하지 않는 경우에는 불가능하다.
    • var a: String? = null
      a = "hello"
    • null은 다음 포스팅에서 설명...

'Back-end > Kotlin' 카테고리의 다른 글

3. 반복문과 조건문  (0) 2022.01.28
1. 코틀린이란?  (0) 2022.01.21
  • 탄생 배경
    • 2011년 7월 Intellij를 만든 JetBrains사에서 JVM위에서 작동하는 크로스 플랫폼 오픈소스 프로그래밍 언어를 공개했다.
    • 파일의 확장자는. kt 혹은. kts를 사용한다.
    • 스칼라를 제외한 대부분의 언어들에는 몇몇 기능이 없었고, 스칼라에는 느린 컴파일 시간이 단점으로 있었다.
    • 코틀린의 이름은 러시아의 섬 중 하나인 코틀린 섬에서 따왔다.
  • 장점
    • 자바와 같은 환경에서 개발이 가능하다.
    • 객체지향이면서 동시에 함수형 프로그래밍이 가능하다.
    • 널처리가 안정적이다.
    • 동시성 프로그래밍
  • 단점
    • 자바에비해 컴파일 속도가 상대적으로 느리다.
    • 학습 생태계가 작다.(정보를 얻을 수 있는 커뮤니티 등이 부족하다.)
    • 자바의 기존 라이브러리 활용이 어려울 수 있다.

'Back-end > Kotlin' 카테고리의 다른 글

3. 반복문과 조건문  (0) 2022.01.28
2. 변수  (0) 2022.01.27

+ Recent posts