개발자가 되고 싶은 사람

나의 springboot + vuejs 적용기

|

vuejs와 서버 프레임워크 구축 두가지의 경우

nodejs + vuejs

  • node js api proxytable에 설정
  • vuejs에서 해당 api를 불러오고, 실제로 화면은 3000 포트로 접속해서 웹서비스에서 nodejs api에 접근하게 가능.

springboot + vuejs

  • 내가 읽은 문서상으론.. vuejs에서 webpack으로 프론트코드를 빌드해서 index.html에 번들링하고,
  • 이 index.html을 springboot에서 읽어서, srpingboot 기본 port인 8080으로 호출시, 해당 뷰를 읽어들인다.
  • 그렇다면, 이 view를 spring에서 어떻게 읽지?????

springboot에서 vuejs를 렌더링하는 경우 아래의 두가지 경우가 있을 수 있다.

  • 컨트롤러가 html파일을 렌더링 하려면 뷰리졸버가 있어야 한다. jsp나 타임리프를 읽게 해주는.
1) html파일을 스프링부트가 렌더링 한다.
2) vue를 빌드해서 나온 파일을 (index.html) 스프링부트가 렌더링 하게 한다. (나의 경우)

나의 실수

1. restcontroller를 controller로 바꿨어야 했음

  • @Controller 의 작업은 모델 객체의 Map을 생성하고 뷰를 찾는 것이지만 @RestController는 단순히 객체를 반환하고 객체 데이터는 JSON 또는 XML로 HTTP 응답에 직접 작성됩니다.
  • https://javarevisited.blogspot.com/2017/08/difference-between-restcontroller-and-controller-annotations-spring-mvc-rest.html
  • @RestController 어노테이션은 @Controller 와 @ResponseBody 어노테이션 의 조합 일 뿐이다.
  • 나중에 서비스가 커진다면, view만 처리하는 controller와 API만 처리하는 컨트롤러로 분리한다.

2. springboot의 정적파일 읽는 경로

  • 기본적으로 스프링 부트 리소스는 src / main / resources에 있어야합니다. 예를 들어 js 및 css 파일은 정적 폴더 src / main / resources / static / css에 있어야합니다. 템플릿 폴더에도 동일하게 적용됩니다.

vuejs 기본 개념

|

vuejs를 끄적이면서 간단하게 정리했던 것들 입니다. 전부 vuejs 공식문서에서 발췌함.

vuejs

  • vue 생성자는 미리 정의된 옵션으로 재사용 가능한 컴포넌트 생성자를 생성하도록 확장될 수 있습니다.
  • vue앱은 new Vue를 통해 만들어진 root vue instance로 구성되며, 선택적으로 중첩이 가능하고 재사용 가능한 컴포넌트 트리로 구성된다.
  • 모든 vue 컴포넌트가 본질적으로 확장된 vue instance.

vuejs에서 server side rendering 사용하기

  • vuejs에서 csr 대신 ssr을 사용하고 싶을 경우 Nuxt.js 를 사용
  • https://medium.com/aha-official/%EC%95%84%ED%95%98-%ED%94%84%EB%A1%A0%ED%8A%B8-%EA%B0%9C%EB%B0%9C%EA%B8%B0-1-spa%EC%99%80-ssr%EC%9D%98-%EC%9E%A5%EB%8B%A8%EC%A0%90-%EA%B7%B8%EB%A6%AC%EA%B3%A0-nuxt-js-cafdc3ac2053

속성과 메소드

  • 각 vue 인스턴스는 data 객체에 있는 모든 속성을 프록시 처리 한다.

부모와 자식 컴포넌트 관계

  • 구조상 상-하 관계에 있는 데이터 통신
  • 부모 -> 자식 : props down
  • 자식 -> 부모 : events-up

props

  • 모든 컴포넌트는 각 컴포넌트 자체의 스코프를 갖는다.
    • ex) 하위 컴포넌트가 상위 컴포넌트의 값을 바로 참조할 수 없는 형식.
  • 상위에서 하위로 값을 전달하려면 props 속성을 사용한다.

non paren

  • 컴포넌트간의 직접적인 통신을 불가능하도록 되어 있다. –> vue의 기본 구조.
  • emit event를 통해서 컴포넌트간 데이터 통신?을 가능하게 해준다.

parent - child

  • 같은 레벨에서 다른 컴포넌트로 데이터를 전달할때 불편하다.

event bus

  • 컴포넌트간의 이벤트를 쉽게 하기 위한 것.

***this(중요함).

  • Java : 클래스 인스턴스의 래퍼런스 변수.
  • javascript : 현재 실행 문맥.(호출자가 누구인가에 따라)

vuex

  • 상태관리 개념(state management)

webpack 라이브러리로

  • one source(하나처럼 뭉쳐있음) –> webpack build후 –> .js . html이렇게 나눠서 보여줌..

Reference

  • vuejs 공식 문서

포트번호 80과 8080의 차이가 뭘까?

|

port 80

  • Port 80 is the non-secure incoming/listening port of a webserver.
  • It can be 80 or 8080 (both are not same, but usually not secure).
  • 포트 80은 웹 서버의 보안되지 않은 수신 / 수신 포트입니다.
  • 80 또는 8080이 될 수 있습니다 (둘 다 같지 않지만 일반적으로 안전하지 않습니다).
  • 포트 443은 80의 보안 카운터 파트
  • 8080처럼 보안 포트도 8443 (443 및 8443은 같지 않지만 일반적으로 안전함)
  • http는 일반적으로 기본 포트번호가 80이고,
  • https는 http의 보안 프로토콜로서 443을 뜻..

reference

  • 구글서칭..

pm2 start --env production 실행시 Error, listen EACCES(permission denied 0.0.0.0:80)

|

배포서버에서(ubuntu) sudo pm2 start –env production 실행시 Error: listen EACCES: permission denied 0.0.0.0:80

  • 로컬피씨에선 테스트 완료 후 실행.
  • 권한 문제라고 ..
{ Error: listen EACCES: permission denied 0.0.0.0:80
    at Server.setupListenHandle [as _listen2] (net.js:1239:19)
    at listenInCluster (net.js:1304:12)
    at Server.listen (net.js:1392:7)
    at Function.listen (/home/ubuntu/eosTracker/EOSTracker/node_modules/express/lib/applic$
    at Object.<anonymous> (/home/ubuntu/eosTracker/EOSTracker/server.js:11:5)
    at Module._compile (internal/modules/cjs/loader.js:799:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:810:10)
    at Module.load (internal/modules/cjs/loader.js:666:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:606:12)
    at Function.Module._load (internal/modules/cjs/loader.js:598:3)
  code: 'EACCES',
  errno: 'EACCES',
  syscall: 'listen',
  address: '0.0.0.0',
  port: 80 }

조치한 것

  • sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
  • sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
  • sudo chown ubuntu:ubuntu /home/ubuntu/.pm2/rpc.sock /home/ubuntu/.pm2/pub.sock –> not working…

solved

  • 결국 sudo pm2 start server.js 로 실행해서 올림.
  • 소스코드상 server.js를 실행하면 /dist의 경로를 보고 프로젝트를 올린다.
  • pm2 ecosystem.config.js는 사용하지 못함~~

의문

  • ng serve 실행 vs server.js 실행의 차이???
  • ng serve로 실행할 경우 default port 4200,
  • server.js로 실행할 경우 default port 80~

reference

https://stackoverflow.com/questions/35105100/start-app-as-root-with-pm2

ng serve --prod 모드로 실행시 DON'T USE IT FOR PRODUCTION! 경고

|

ng serve –prod 모드로 실행시 DON’T USE IT FOR PRODUCTION! 경고

  • 서비스는 잘 뜨나 아래 워닝이 뜬다.
$ ng serve --prod
****************************************************************************************
This is a simple server for use in testing or debugging Angular applications locally.
It hasn't been reviewed for security issues.

DON'T USE IT FOR PRODUCTION!
****************************************************************************************
** Angular Live Development Server is listening on 0.0.0.0:4200, open your browser on http://localhost:4200/ **

Date: 2019-04-02T06:07:30.861Z
Hash: b697710c72d81aedcafd
Time: 76981ms
chunk {0} common.9bd9653f0a46706ca794.js (common) 5.56 kB  [rendered]
chunk {1} 1.b515fa1c5c91a79ac93e.js () 16.5 kB  [rendered]
chunk {2} 2.d8a9a259421a895ff913.js () 41.4 kB  [rendered]
chunk {3} 3.917a6cbee324cf942704.js () 101 kB  [rendered]
chunk {4} 4.c7641687c7c68b37042b.js () 20.1 kB  [rendered]
chunk {5} 5.307af7b5a9d5409a7724.js () 37.4 kB  [rendered]
chunk {6} 6.bf5347baf21748cc6ae1.js () 75.2 kB  [rendered]
chunk {7} 7.e11de255895ecc09981f.js () 37.6 kB  [rendered]
chunk {8} 8.37375c6aaf11f3300b0f.js () 173 kB  [rendered]
chunk {9} runtime.dea5043cd53ea7a03964.js (runtime) 2.05 kB [entry] [rendered]
chunk {10} styles.f3a27ab3aa1427652ef8.css (styles) 120 kB [initial] [rendered]
chunk {11} polyfills.431223cad454e6467d58.js (polyfills) 156 kB [initial] [rendered]
chunk {12} main.ffc57ce5ea13426644dd.js (main) 2.03 MB [initial] [rendered]
chunk {scripts} scripts.8ebcda801fb3521135d8.js (scripts) 2.04 kB  [rendered]
ℹ 「wdm」: Compiled successfully.

angular 코드 배포방법

  • https://jodu.tistory.com/38