'ITWeb'에 해당되는 글 798건

  1. 2021.04.19 [Python] 비동기 요청 예제
  2. 2021.03.03 [Spring] Event Pub/Sub 기능 예제
  3. 2021.02.22 [Spring] 멀티모듈 프로젝트 jar SKIPPED
  4. 2021.02.15 [JQuery] Selectors 링크
  5. 2021.02.03 [Intellij] 가끔 Dependency Lib 빨갱이 발생
  6. 2021.01.28 [Spring] Springboot @RestController 404 에러 발생 시
  7. 2021.01.27 [Gradle] Dependency Lib 이상 할 때.
  8. 2021.01.27 [Chrome] https 강제 리다이렉팅
  9. 2021.01.21 [IoT] 참고 문서 링크.
  10. 2020.10.22 [Python] pyenv 구성 하기 on Mac

[Python] 비동기 요청 예제

ITWeb/개발일반 2021. 4. 19. 18:47

비동기 처리 하는거 예제가 필요해서 급조 합니다.

 

참고문서)

docs.python.org/ko/3/library/asyncio.html

docs.python-requests.org/en/master/

$ pyenv virtualenv 3.8.6 helloworld
$ pyenv activate helloworld
(helloworld) $ pip install requests asyncio
(helloworld) $ python asyncio.py

(helloworld) $ vi asyncio.py
import requests
import string
import random
import asyncio

async def requestAsyncio(content, cid, aid):
    url = "http://localhost:8080/helloworld"

    payload={}

    headers = {
      'accept': 'application/json, text/plain, */*',
      'accept-encoding': 'gzip, deflate, br',
      'accept-language': 'ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7,ja-JP;q=0.6,ja;q=0.5,zh-MO;q=0.4,zh;q=0.3',
      'content-type': 'application/x-www-form-urlencoded',
      'origin': 'http://localhost:8080',
      'referer': 'http://localhost:8080/helloworld',
      'sec-fetch-dest': 'empty',
      'sec-fetch-mode': 'cors',
      'sec-fetch-site': 'same-site',
      'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
    }

    response = requests.request("POST", url, headers=headers, data=payload)

    print(response.status_code)
    print(response.text)

if __name__ == "__main__":
    letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

    cid = "helloworld"
    aid = "python"
    content1 = random.choice(letters)
    content2 = random.choice(letters)

    loop = asyncio.get_event_loop()
    loop.run_until_complete(asyncio.gather(requestKhan(content1, cid, aid), requestKhan(content2, cid, aid)))
    loop.close()
    
(helloworld) $ python asyncio.py

(helloworld) $ pyenv deactivate helloworld
$

 

:

[Spring] Event Pub/Sub 기능 예제

ITWeb/개발일반 2021. 3. 3. 11:23

Spring 을 이용해서 간단한 Pub/Sub 기능을 구현 할 수 있는 예제 입니다.

 

관련 Class & Annotation)

ApplicationEventPublisher

@EventListener

 

Pub & Sub 을 위한 Topic Payload)

CustomEventTopicPayload

 

Subscriber Class)

CustomEventSubscriber

 

Code Example)

HelloController : Publisher

@Controller
public class HelloController {

  @Autowired
  ApplicationEventPublisher eventPublisher;

  @GetMapping ("/poc/hello")
  public String hello() {

    eventPublisher.publishEvent(new CustomEventTopicPayload(this, 100));

    return "poc/hello";
  }
}

 

CustomEventSubscriber - Subscriber

@Component
@Log4j2
public class CustomEventSubscriber {

  @EventListener
  public void onEventListener(CustomEventTopicPayload topic) {
    log.debug("{} Topic payload: " + topic.getData(), Thread.currentThread().toString());
  }
}

 

CustomEventTopicPayload - Topic Payload

@Getter
@Setter
public class CustomEventTopicPayload {
  private Object source;
  private int data;

  public CustomEventTopicPayload(Object source) {
    this(source, 0);
  }

  public CustomEventTopicPayload(Object source, int data) {
    this.source = source;
    this.data = data;
  }
}

 

아래 간략한 코드 스니핑은 스프링 4.2 이전 방식 입니다.

public class CustomEventTopicPayload extends ApplicationEvent {}

public class CustomEventSubscriber implements ApplicationListener<CustomEventTopicPayload>{}

 

:

[Spring] 멀티모듈 프로젝트 jar SKIPPED

ITWeb/개발일반 2021. 2. 22. 18:24

intellij community 를 사용하고 있는데 다른 사람은 다 되는게 나만 안되어서 설정을 고쳐서 해결 했습니다.

다른 사람들은 intellij ultimate 사용 하고 있습니다.

 

Multi module web 프로젝트 실행 시 submodule 만 동작해서 원인을 찾아 보고 해결했습니다.

 

원인은)

> Task :base:compileJava UP-TO-DATE
> Task :base:processResources NO-SOURCE
> Task :base:classes UP-TO-DATE
> Task :base:jar SKIPPED
> Task :custom:compileJava UP-TO-DATE
> Task :custom:processResources NO-SOURCE
> Task :custom:classes UP-TO-DATE

 

해결은)

project(":base") {
  jar{
    enabled = true
  }
}

 

근데 왜 나만 저렇게 설정을 해줘야 하는지는 못 찾았습니다.

아시는 분은 제보 좀...

:

[JQuery] Selectors 링크

ITWeb/개발일반 2021. 2. 15. 11:03

https://www.w3schools.com/jquery/jquery_ref_selectors.asp
http://gregfranko.com/jquery-best-practices/#/5

 

저는 주로 id selector 를 사용 합니다.

 

:

[Intellij] 가끔 Dependency Lib 빨갱이 발생

ITWeb/개발일반 2021. 2. 3. 10:55

Intellij 를 이용해서 개발을 진행 하다 보면 가끔 dependency lib 설정과 다운로드가 정상적으로 되어 있음에도 불구 하고 관련 클래스를 못찾거나 lib 을 못찾을 때가 있습니다.

그럴 때는 그냥 리셋 한번 하는게 맘 편할 때가 있습니다.

최근 제가 두 번이나 발생을 해서 기록해 봅니다.

 

[Gradle]
https://docs.gradle.org/current/userguide/what_is_gradle.html

.gradle 폴더 안에 들어 있는 것들 다 삭제 합니다.

 

[Maven]
https://maven.apache.org/what-is-maven.html

.m2 폴더 안에 들어 있는 것들 다 삭제 합니다.

 

:

[Spring] Springboot @RestController 404 에러 발생 시

ITWeb/개발일반 2021. 1. 28. 15:11

분명 유저 불량입니다.

보통 Annotation 선언하고 빨갱이도 없고 정상적으로 실행도 되었는데 REST API 호출 시 404 Not found 가 떨어 지는 경험을 해 보신 분들이 계실 것 같습니다.

 

특히 쥬니어 분들 중에 많을 것 같고요.

 

딱 봐도 Component Scan 이 정상적으로 되지 않았기 때문인데 코드를 보면 아무 문제가 없어 보입니다.

제가 본 이슈는 Main Application Class 파일의 위치가 잘못 되어 있는 것을 확인 했습니다.

 

tree 구조로 예를 들면) 틀린 예

ㄴ com.abc.app

MainApplication.java

ㄴ com.abc.api

ApiRestController.java

 

이렇게 되면 MainApplication 상위에 있는 class 는 scan 이 되지 않습니다.

반드시 MainApplication  하위로 패키지와 클래스를 이동 시켜 주셔야 합니다.

그게 아니라면 별도 @ComponentScan 이용해서 수동 등록을 해주시는 것도 방법 일 것 같습니다.

 

tree 구조로 예를 들면) 맞는 예

ㄴ com.abc.app

MainApplication.java

ㄴ com.abc.app.api

ApiRestController.java

 

:

[Gradle] Dependency Lib 이상 할 때.

ITWeb/개발일반 2021. 1. 27. 14:25

가끔 제 맥북만 이상 할 때가 있습니다.

그래서 간혹 dependency 오류가 발생을 하게 되면..

  1. cd ~/.gradle 에 들어가서 rm -rf * 로 받아 놓은거 삭제 합니다.
  2. 주의 해서 rm -rf * 하세요… ㅋㅋㅋ
  3. 해당 브랜치에 가서 git stash; git pull 해서 최신 코드로 유지를 시켜 주세요.
  4. gradle refresh 해주시면 됩니다.
:

[Chrome] https 강제 리다이렉팅

ITWeb/개발일반 2021. 1. 27. 12:38

http://DOMAIN:PORT 와 같이 접속 해야 할 일이 있는데 크롬에서는 강제로 https 로 redirect 시켜 버립니다.

아래 페이지에서 강제 redirect 를 해제할 도메인을 등록 하고 사용 하면 문제를 해결 할 수 있습니다.

 

chrome://net-internals/#hsts

 

왼쪽 메뉴에서 "Domain Security Policy" 를 클릭 합니다. (위 링크로 들어 가면 바로 나옵니다.)

본문 제일 아래 "Delete domain security policies" 에서 Domain 입력 후 Delete 버튼을 누르면 추가 됩니다.

 

버튼 이름이 Delete 라 이게 된게 맞아? 할 수 있는데 된게 맞습니다.

www.xxxxx.com  이면 xxxxx.com 을 입력

123.xxxxx.com 이면 123.xxxxx.com 을 입력

 

참 쉽죠.

:

[IoT] 참고 문서 링크.

ITWeb/개발일반 2021. 1. 21. 13:13

https://mosquitto.org/
https://ko.wikipedia.org/wiki/CoAP
https://ko.wikipedia.org/wiki/MQTT

 

Message Broker 로 Mosquitto 를 사용 하면 되고, 아니면 Pub/Sub 기반 통신을 지원 하는 Kafka 를 사용 해도 되고...

CoAP 은 저전력 디바이스에서 사용하기 위해서 그냥 일반 HTTP 기반으로 통신 하면 되고...

 

굳이 잘 만들어서 제공 하고 있는 엔진들 많으니까 운영할 인력이 없다면 MSP 사업자들이 제공하는 서비스를 사용해도 됩니다.

잘 사용 하면 비용 많이 안나옵니다.

:

[Python] pyenv 구성 하기 on Mac

ITWeb/개발일반 2020. 10. 22. 11:51

기존 Mac 에 설치 되어 있던 2.7.x 를 사용하지 않으려면 User 계정의 .bash_profile 이나 .zshrc 등에 alias 설정을 통해서 3.x 만 사용 하도록 하면 됩니다.

 

$ vi .zshrc

alias python=/usr/bin/python3
alias pip=/usr/bin/pip3


python 으로 개발 시 버전별로 다르게 해야 하는 경우가 많이 발생 합니다.

예전에는 virtualenv 를 사용 했었는데 pyenv 라는 좋은 툴이 있으니 이걸 그냥 사용하는게 좋겠죠.

 

# 설치하기

$ brew install pyenv
$ brew upgrade pyenv

# bash 환경

$ vi ~/.bash_profile
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"


eval "$(pyenv init -)"


$ source ~/.bash_profile

# zsh 환경
$ vi .zprofile or .zshrc
PYENV_ROOT="$HOME/.pyenv"
PATH="$PYENV_ROOT/bin:${PATH}"

export PYENV_ROOT
export PATH

eval "$(pyenv init -)"

 

$ source ~/.zprofile

$ pyenv install --list
$ brew install zlib
$ pyenv install 3.8.6
$ pyenv versions

# pyenv commands
https://github.com/pyenv/pyenv/blob/master/COMMANDS.md#pyenv-commands

# 버전 변경 쉘
$ pyenv shell 3.8.6
$ python3.8.6 --version

or

$ python --version

# shell 변경
$ python --version
Python 3.8.1


$ pyenv shell 3.8.6
$ python --version
Python 3.8.6


$ pyenv shell --unset
$ python --version
Python 3.8.1

# virtualenv 설치
$ brew install pyenv-virtualenv

# bash 환경
$ vi ~/.bash_profile

eval "$(pyenv virtualenv-init -)"

 

$ source ~/.bash_profile

# zsh 환경
$ vi .zprofile or .zshrc

eval "$(pyenv virtualenv-init -)"

 

$ source ~/.zprofile

# virtualenv 생성
$ pyenv virtualenv 3.8.6 helloworld
$ pyenv activate helloworld
(helloworld) $
$ pyenv deactivate helloworld

# virtualenv 삭제
$ pyenv virtualenvs
$ pyenv uninstall helloworld

 

: