2020년 11월 23일 월요일

git merge 되돌리기 다시 메모

 Merge 된 브랜치 취소하기

 git reset --merge 60f3339(<-머지된 커밋)
git push -f origin HEAD:머지를 하기전 브랜치이름, 머지를 수행한 브랜치

2020년 11월 17일 화요일

Mysql Explain 다시 생각하기

 회사 꼬맹이 한테  explain 해보라고 하고선,

정작 나는 다 까먹었다.


http://www.24w.jp/blog/?p=250

 type 에 index라고 되어있으면 index 테이블을 풀스캔하고 있는거라 느린거라고함.

key_len이 생각한대로 수치가 나오는지(int는 4바이트) 호가인


쿼리 뒤에 \G 를 넣어서 세로로 출력


그리고 팁으로

MySQL 성능 죽이는 17가지 방법

https://denodo1.tistory.com/310?category=357842

에서 "- 타입 컬럼에 index 써있는거랑 Extra 컬럼에 index 써있는거랑 “매우 큰” 차이 있음" 가 위에 type 에 대한 말임.

정규화는 필수. 그냥 막 테이블에 새칼럼 쑤셔넣는짓은 하지마.

정규화화 더불어 쿼리 캐시를 위해서 해야할일이

* 자주 변하는 것과 변하지 않는 것을 쪼개는게 중요하다 이 말임.


2020년 10월 17일 토요일

Redmine in Docker 에서 Slack 연동하기

도커로된 레드마인에 슬랙을 연동해보자.

참고 : https://jhb.kr/397 

쉽다.

도커로 공식 레드마인 컨테이너 띄우고,
컨터이너쉘로 들어가서 plugin 으로 이동한다.


wget https://github.com/sciyoshi/redmine-slack/archive/master.zip
또는 
git clone https://github.com/sciyoshi/redmine-slack.git redmine_slack


해서 플러그인을 가져온다.
bundle install

하고 컨터이너를 재가동한다.

레드마인에 admin으로 접속해서 plugin메뉴에 가보면 아까 추가한 슬랙이 있다.


슬랙에서 add apps -> Incoming WebHooks 를 선택한다. 거기서 나오는 hook주소를 복사해서 위의 설정에 넣는다.

레드마인에서 이슈를 생성해본다.

잘간다.

이건 정말 심플한 플러그인이지만 좀 더 좋은 플러그인도 많다.(다만 설정이 복잡)




NuxtJs, VueJs 로 프론트엔드 구축시 정리했던 자료

새로운 프로젝트에서 기존의 springboot + thymeleaf 보다 VueJs를 사용하려고 했더니 NuxtJs라는 놈이 있어서 서버구축까지 간단하게 된다는 것을 알게되었다.

NextJs라는 ReactJs의 프레임워크를 VueJs로 포팅(?) 했다는 건데 사용법이 매우 간단했다.

thymeleaf 는 html에 이런저런 지저분한 자체태그옵션과 문법, 그리고 Jquery 등을 이용해서 정말 구린방식으로 개발해야되었는데, 콤포넌트 기반의 VueJs로 개발해보니 정말 내가 원했던 프레임워크였다는 생각이든다.


개발 소프트웨어 요구사항에 작업하면서 간단히 정리 한것을 올려보겠다.

1 NuxtJS Framework

  • 공식홈페이지 (https://nuxtjs.org/guide)

  • Server Side Rendering (SSR)이 가능한 FrontEnd Framework

  • VueJs의 장점을 SSR로 구축가능하도록 해줌

  • 자동으로 webpack 빌드

  • 직관적인 스캐폴딩

  • MIT 라이센스

  • Plug-in(node 모듈) 사용목록 [ 바로가기 ]

  • 개발팁
    • NuxtJS의 SSR 렌더링 기능을 활용하여 프론트엔드측은 자체 호스팅이 가능하도록 구성한다.
    • Server Side Rendering ( https://medium.com/@rubyblack/why-we-use-nuxt-js-seo-1-ssr-%ED%8E%B8-d5e8f02e64e0)
    • Javascript ( TypeScript 아님) 으로 개발한다.
    • 프로젝트의 스캐폴드는 NuxtJS의 기본 구조를 따르되, 하위 폴더는 프로젝트에 맞게 추가한다.
    • 직접 구현 하기 보다는 검증된 모듈/플러그인 을 사용한다.
    • 설정을 편집 및 개발은 VSCODE 편집기를 사용한다.
    • 통신모듈은 NuxtJs에서 추천하는 https://http.nuxtjs.org/ 모듈을 사용


2 VueJS

3 HTML5 & SEO

  • HTML5 란 https://ko.wikipedia.org/wiki/HTML5

  • META TAG를 페이지별로 적절하게 수정하기 위해서 NuxtJs 의 head 속성을 오버라이드 한다. (https://vue-nuxt.gitbook.io/nuxt/tutorials/making-blog/undefined) (https://medium.com/vue-mastery/best-practices-for-nuxt-js-seo-32399c49b2e5)

4 SCSS & SASS

https://heropy.blog/2018/01/31/sass/

2020년 10월 8일 목요일

Cocos2dx 4.0 맥에서 실행시 에러

 -- The C compiler identification is unknown

-- The CXX compiler identification is unknown

CMake Error at CMakeLists.txt:30 (project):

  No CMAKE_C_COMPILER could be found


가 나오면 

Xcode Commandline Tools 가 미쳐서 그런거니

sudo xcode-select --reset 

하면 됨.


물론 CMake는 최신판으로다가 받앙

2020년 9월 28일 월요일

Go, Go, Go, Golang ...

GOPATH 에 대한 이해

http://amazingguni.github.io/blog/2016/05/go-chapter-2-1-%EC%84%A4%EC%B9%98_%EB%B0%8F_%EC%8B%9C%EC%9E%91

초간단 웹서버 제작

http://amazingguni.github.io/blog/2016/06/go-chapter-6-%EC%9B%B9-%EC%96%B4%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EC%9E%91%EC%84%B1%ED%95%98%EA%B8%B0


-계속 추가중-

2020년 9월 27일 일요일

Jenkins Docker 내에서 docker build 하기

 도커안의 젠킨스 루트로 들어가서

wget -O /tmp/docker.tgz https://download.docker.com/linux/static/stable/x86_64/docker-19.03.8.tgz

tar -xzf /tmp/docker.tgz -C /tmp

mv /tmp/docker/* /usr/bin/


groupadd -o -g $DOCKER_GROUP_GID docker

usermod -g docker jenkins


하여 도커설치 
service docker start 하면 에러가 떠서 
curl -sSL https://get.docker.com/ | sh
를 해서 서비스는 추가되는데, 도커가 안올라옴. 

--> 도커안의 젠킨스에서 도커를 구동하기 위해서는 별도의 조치가 필요
https://coders-shelf.com/jenkins-docker-agent/

2020년 9월 26일 토요일

Jenkins 에 slack연동

슬랙에서 app추가에서  Jenkins CI를 추가함. 그러면  인터그레이션 설정토큰과 채널명,설정방법이나옴.


젠킨스에 슬랙 플러그인을 설치한다.

젠킨스설정(configure)에 가서 

워크스페이스를 슬랙의 워크스페이스이름으로

인증을 kind: SectetText , Secret: 슬랙에서 준 토큰, ID: 워크스페이스이름 이름으로 저장

채널명은 알림할 채널명으로 지정

테스트해보면 메시지가 감.

젠킨스 프로젝트 설정에 가보면

빌드후조치->Slack notification 이 적당한 것들을 체크하면 빌드시에 슬랙에 문자옴

fuck-curtaincall - #13 Started by user kim (Open) 


Dokcer 내의 Jenkins 에서 nodejs , npm , nuxtjs, vuejs 빌드하기

 일단 Docker 에 jenkins/jenkins  이미지를  다운로드 받는다.

* 주의 kitematic 에서의 jenkins는 잘안됨

docker pull jenkins/jenkins:lts <- lastest도 괘안

받아서 기동후 쉘로 들어가서 암호찾아내서 일단 스탠다드 인스톨.

인스톨이 다 되었다면 /var/jenkins_home 폴더는 로컬폴더에 연결하고 다시 기동.

왠지 jenkins에서 nodejs 플러그인을 설치하면 될것같지만, 안된다.

그래서 젠킨스 컨테이너의 쉘을 root 권한으로 들어간다.

$ docker exec -it --user root YourContainer /bin/bash

애네들을 실행한다.

apt-get update

apt-get install -y git curl vim sudo apt-utils

curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -

apt-get install -y nodejs

rm -rf /var/lib/apt/lists/*

또는

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.0/install.sh | bash

를 실행해서 nvm 을 설치하고

nvm install 12.6.3

해서 node를 설치하면

/root/.nvm/versions/node/v12.16.3

이딴 폴더가 생기지만 root 폴더밑에 있어서 jenkins가 읽지 못함.

단순무식으로 v12.16.3 의 모든 내용을 /var/jenkins_home/nodes/ 밑에 복사하자.

그리고나서 젠킨스 빌드시의 execute shell 에서

cd /var/jenkins_home/workspace/Fuck-curtaincall

/var/jenkins_home/nodes/bin/npm install

/var/jenkins_home/nodes/bin/npm run build

하면 nuxtjs 가 빌드된다.

그걸 웹서버에 올리고 재가동 하면 끄읕.


참. 젠킨스설정에서

이 빌드는 매개변수가 있습니다 . 에서

매개변수 branch 기본밸류 master

하고  소스코드관리에서 branch to build 항목에서

*/${branch} 하면됨

Nuxtjs, Springboot docker 이미지 만들기

 1.  nuxtjs 

Dockerfile 생성후

FROM node:12

WORKDIR /app
ADD . /app/

# global install & update
RUN npm i -g npm
#&& npm i -g yarn

RUN rm yarn.lock
RUN yarn
RUN yarn build

ENV HOST 0.0.0.0
EXPOSE 80

# start command
CMD [ "yarn", "start" ]

#sudo docker build --tag web-front:1.0.0 .
#docker run --name web_80 -p 80:80 web-front:1.0.0
#docker run --name web_8081 -p 8081:80 web-front:1.0.0

2.springboot
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE=target/*.war
COPY ${JAR_FILE} web-backend.war
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Dspring.profiles.active=local","-jar","/web-backend.war"]
#docker build --build-arg "JAR_FILE=build/libs/*.war" -t web-backend:1.0.0 .
#docker run --name hehe3 -p 8081:8081 web-backend:1.0.0

2020년 8월 26일 수요일

Vujs , Nuxt 를 해보다.

 Vuejs 와 Nuxtjs 는 문서화가 잘 되어있으니까 그냥 쓰면 되고,


컴퍼넌트라는 단위로 만드는 것은 좋으나, 컴퍼넌트에 너무 많은 비지니스 로직이 들어가지 않도록 하는게 좋을거 같다.

또 컴퍼넌트에서 직접 서버와 통신하여 자료를 for 로 출력하는것은 테스트를 어렵게 만들기 때문에 되도록 Repositry 를 이용하여 컴퍼넌트에 props 나 mixin 형태로 주입(?) 하는 것이 좋다.

참고 : https://markus.oberlehner.net/blog/tight-coupling-vs-loose-coupling-in-vuejs/

혹시 화면단에서 i18n 지원이 필요하면 다음을 참고하자

https://dev.to/astagi/how-to-build-a-jamstack-multi-language-blog-with-nuxt-js-3gah

SEO  대응도 하고싶다면 이거.

https://vuedose.tips/optimize-seo-and-social-media-sharing-in-a-nuxt-blog

2020년 7월 7일 화요일

aws 자격증 관련

AWS 대략적인 이용가격

정리잘되어 있는 사이트 


그런데...

https://calculator.aws/ 에서 돌려보니 천문학적(?) 가격대가 형성이...

게다가 내보내기 하면 대충 되어있어서....


2020년 7월 2일 목요일

Vue.js 를 VSCODE 에서 디버그 하기(브레이크 포인트잡기)

Vue.js 를 VSCODE 에서 디버그 하기(브레이크 포인트잡기)

 js 는 브레이트포인트 잡는게 썅. 
 일단 Vue.js (이름참 좃같...) 의 작업을 한다.

"That basically acts as the magic goo that enables the rest of this to work." WTF NUXT!

https://github.com/in28minutes/spring-boot-vuejs-fullstack-examples
예제를 기준으로!

1.프론트쪽 폴더에서 npm run serve 실행
2.프론트쪽 폴더 선택후 VSCODE 에서 실행하면 launch.json 만들라고 하니까 만듬
3.런쳐는 크롬을 띄워서 디버그 해야 되니까 다음과 같이 입력

{
    "version": "0.2.0",
    "configurations": [
     {
        "type": "chrome",
        "request": "launch",
        "name": "[Debug] Vue.js: chrome",
        "url": "http://localhost:8080",
        "webRoot": "${workspaceFolder}/src",
        "breakOnLoad": true,
        "sourceMapPathOverrides": {
            "webpack:///src/*": "${webRoot}/*"
        }
      }
    ]
  }
4.브레이크 잡고 확인

어이없는 이런 방식이 맞는가 싶네...

참고.

https://medium.com/@changjoopark/visual-studio-code%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-vue-js-%EC%95%B1-%EB%94%94%EB%B2%84%EA%B9%85%ED%95%98%EA%B8%B0-6a402fefafe

2020년 7월 1일 수요일

Slack 에 슬래시 커맨드(/명령한다 , /밥줘..) 사용하기

Heroku 는 한개 정도는 공짜니까 단순 응답용 앱을 만들어 슬랙에서 슬래시 커맨드 요청시 자동응답하게 한다.

1.일단 헤로쿠 가입
2.좀편하게 쓸라면 Heroku CLI 설치
3.일단 헤로쿠 사이트에서 앱을 만든다.
4.컴터의 프롬프트에서 heroku git:clone -a slackresponsor 등의 명령어로 아까 만든 앱이름을 지정한다.
5.해당폴더에서 npm설치, package.json설정

package.json
{
  "name": "xxx",
  "description": "",
  "version": "1.0.0",
  "main": "src/index.js",
  "scripts": {
    "start": "node ./src",
    "test": "standard"
  },
  "author": {},
  "bugs": {},
  "dependencies": {
    "body-parser": "^1.15.0",
    "express": "^4.13.4"
  },
  "keywords": [
    "xxx"
  ],
  "license": "MIT",
  "engines": {
    "node": "6.11.1"
  }
}

src/index.js

'use strict'

const express = require('express')
let app = express()

app.get('/', (req, res) => { res.send('뭐뭐뭐') })

const PORT = process.env.PORT || 3000;

app.listen(PORT, (err) => {

})

6.별도로 슬랙하고 연동하고 싶다면 slack 모듈을 추가해서 필요한 작업한다.
7.일단 작업한거 push (git push heroku master) 하면 자동으로 서버가 구동
8.heroku open 하면 사이트 열림
9.슬랙 슬래시커맨드 사이트에서 해당 주소 지정 해서 생성
10.슬랙에서 /응답해 등등 치면 헤로쿠서버에 지정했던 응답이 슬랙에 표시

무료.무료.무료

참고


2020년 6월 29일 월요일

springboot 에 swagger 설치해서 api 확인하자

swaggerConfig.java (이름이야뭐..아무거나..) 를 만들어서

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration@EnableSwagger2public class SwaggerConfig {

@Bean public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any()) //모든 url 리스트 찾아내줘 스웍 .paths(PathSelectors.any()) // 모든 패스 전부. .build();
}
}
이것만으로 잘 안되서..


@Overridepublic void addViewControllers(ViewControllerRegistry registry) {
registry.addRedirectViewController("/api/v2/api-docs", "/v2/api-docs");
registry.addRedirectViewController("/api/swagger-resources/configuration/ui", "/swagger-resources/configuration/ui");
registry.addRedirectViewController("/api/swagger-resources/configuration/security", "/swagger-resources/configuration/security");
registry.addRedirectViewController("/api/swagger-resources", "/swagger-resources");
}

@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/api/swagger-ui.html**").addResourceLocations("classpath:/META-INF/resources/swagger-ui.html");
registry.addResourceHandler("/api/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
...
}

했더니 localhost:8080/api/swagger-ui.html 에서 보게 되었다. 
http://localhost:8081/swagger-api/swagger-ui.html#/

오랜만에 cocos2d 폴더를 정리하다가 맥에서 실행해볼까 했더니, 에러가 났다. Cocos2dx compilation problem: Argument value 10880 is outside the valid range [0, 255] btVector3.h

코코스원본소스를 풀어놓은곳(현재 생성되어 복제본이 있는곳이 아니고!) 에 external/bullet/include/bullet/LinearMath/btVerctor3.h 놈이 있다. 이놈의 40 라인 근처에서 아래대로 수정해주면된다.

또 맥에서는 아이폰용으로 컴파일 끝자리에 (The application's Info.plist does not contain CFBundleShortVersionString.)가 뜬다.
cocos2dx 3.x 가 옛날꺼라 ios6 으로 지정되어있는데 일단 그걸 8또는그이상으로 한다.
project->build setting에서 CFBundleShortVersionString 로 검색해서 버전(예,1.0.0) 을 넣어준다. 그리고 재빌드한다.(엿)

http://theeye.pe.kr/archives/2475


https://stackoverflow.com/questions/58064487/xcode-11-cocos2dx-compilation-problem-argument-value-10880-is-outside-the-vali