'ITWeb'에 해당되는 글 799건

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

[Java] jenv 구성

ITWeb/개발일반 2021. 4. 19. 20:13

참고문서)
https://brew.sh/index_ko

 

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ brew install jenv

$ brew tap AdoptOpenJDK/openjdk

 

    # Shell: bash
    echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
    echo 'eval "$(jenv init -)"' >> ~/.bash_profile

    $ source ~/.bash_profile
    
    # Shell: zsh
    echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
    echo 'eval "$(jenv init -)"' >> ~/.zshrc

    $ source ~/.zshrc

 

jdk version 별 설치 하기)
$ brew install --cask adoptopenjdk8
$ brew install --cask adoptopenjdk11
$ brew install --cask adoptopenjdk15
$ brew install --cask adoptopenjdk16

 

jenv 추가)
$ jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
$ jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home
$ jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-15.jdk/Contents/Home
$ jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-16.jdk/Contents/Home

 

jenv 사용)

Usage: jenv <command> [<args>]

Some useful jenv commands are:
   commands    List all available jenv commands
   local       Set or show the local application-specific Java version
   global      Set or show the global Java version
   shell       Set or show the shell-specific Java version
   rehash      Rehash jenv shims (run this after installing executables)
   version     Show the current Java version and its origin
   versions    List all Java versions available to jenv
   which       Display the full path to an executable
   whence      List all Java versions that contain the given executable
   add         Add JDK into jenv. A alias name will be generated by parsing "java -version"

See `jenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/jenv/jenv/blob/master/README.md

 

$ jenv versions

  system
  1.8
* 1.8.0.242 (set by /Users/mzc02-henryjeong/.jenv/version)
  11.0
  11.0.6
  13.0
  13.0.2
  15
  15.0
  15.0.2
  16
  openjdk64-1.8.0.242
  openjdk64-11.0.6
  openjdk64-13.0.2
  openjdk64-15.0.2
  openjdk64-16

JAVA_HOME 변경을 위한 plugin 설치)

$ jenv enable-plugin export

(주의 : eval "$(jenv init -)" 설정이 빠져 있으면 동작 하지 않습니다.)

 

jenv global 설정)

/Users/henryjeong/.jenv/version

 

$ jenv global 11.0
$ jenv global
11.0

 

jenv local 설정)

$ jenv local 16
$ jenv local
16
$ java -version
openjdk version "16" 2021-03-16
OpenJDK Runtime Environment AdoptOpenJDK (build 16+36)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 16+36, mixed mode, sharing)

 

로컬 설정은 해당 버전이 필요한 Application 에 들어가서 실행 하시면 됩니다.

:

[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 사업자들이 제공하는 서비스를 사용해도 됩니다.

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

: