천객만래 [千客萬來] (It has an interminable succession of visitors)

go lang convert struct to interface{}

p := Person{"John", 21}
var v interface{} 
v = p


go lang convert interface{} to struct

type Person struct {
	name string
    age	 uint
}

func convToStruct(v interface{}) Person {
  p := v.(Person)
  
  return p
}

 




반응형
Posted by 사용자 SB패밀리

댓글을 달아 주세요

Go 루틴 (goroutine)

IT-개발,DB 2021. 8. 23. 19:23

1. Go rountine

Go routine은 Go 런타임이 관리하는 Lightweight 논리적 (혹은 가상적) 쓰레드(1이다. Go에서 “go” 키워드를 사용하여 함수를 호출하면, 런타임시 새로운 go routine을 실행한다. go routine은 비동기적으로(asynchronously) 함수루틴을 실행하므로, 여러 코드를 동시에(Concurrently) 실행하는데 사용된다. 동시성을 제공하고 있다.

go routine의 특징
  - 비동기
  - 동시성

(1  go routine은 OS  쓰레드보다 훨씬 가볍게 비동기 Concurrent 처리를 구현하기 위하여 만든 것으로, 기본적으로 Go 런타임이 자체 관리한다. Go 런타임 상에서 관리되는 작업단위인 여러 go routine들은 종종 하나의 OS 쓰레드 1개로도 실행되곤 한다. 즉, Go rountine들은 OS 쓰레드와 1 대 1로 대응되지 않고, Multiplexing으로 훨씬 적은 OS 쓰레드를 사용한다. 메모리 측면에서도 OS 쓰레드가 1 메가바이트의 스택을 갖는 반면, go routine은 이보다 훨씬 작은 몇 킬로바이트의 스택을 갖는다(필요시 동적으로 증가). Go 런타임은 Go rountine을 관리하면서 Go 채널을 통해 Go rountine 간의 통신을 쉽게 할 수 있도록 하였다.

OS Thread에 비해 go routine의 장점
1) 쓰레드보다 가볍다.
2) 메모리 사용량이 적다.

아래 예제에서 main 함수를 보면, 먼저 say()라는 함수를 동기적으로 호출하고, 다음으로 동일한 say() 함수를 비동기적으로 3번 호출하고 있다. 첫번째 동기적 호출은 say() 함수가 완전히 끝났을 때 다음 문장으로 이동하고, 다음 3개의 go say() 비동기 호출은 별도의 Go rountine들에서 동작하면서, 메인루틴은 계속 다음 문장(여기서는 time.Sleep)을 실행한다. 여기서 goroutine들은 그 실행순서가 일정하지 않으므로 프로그램 실행시 마다 다른 출력 결과를 나타낼 수 있다.

아주 간단한 go routine 예제

package main
 
import (
    "fmt"
    "time"
)
 
func say(s string) {
    for i := 0; i < 10; i++ {
        fmt.Println(s, "***", i)
    }
}
 
func main() {
    // 함수를 동기적으로 실행
    say("Sync")
 
    // 함수를 비동기적으로 실행
    go say("Async1")
    go say("Async2")
    go say("Async3")
 
    // 3초 대기
    time.Sleep(time.Second * 3)
}

결과

Sync
Async1
Async3
Async2

# Async# 값은 순서가 일정하지 않다.


2. 익명함수 Go rountine

출처 : https://blog.learngoprogramming.com/



Go goroutine은 익명함수(anonymous function)에 대해 사용할 수도 있다. 즉, go 키워드 뒤에 익명함수를 바로 정의하는 것으로, 이는 익명함수를 비동기로 실행하게 된다.

아래 예제에서 첫번째 익명함수는 간단히 Hello 문자열을 출력하는데, 이를 goroutine으로 실행하면 비동기적으로 그 익명함수를 실행하게 된다. 두번째 익명함수는 파라미터를 전달하는 예제로 익명함수에 파라미터가 있는 경우, go 익명함수 바로 뒤에 파라미터(Hi)를 함께 전달하게 된다.

여기서 sync.WaitGroup을 사용하고 있는데, 이는 기본적으로 여러 Go rountine들이 끝날 때까지 기다리는 역활을 한다. WaitGroup을 사용하기 위해서는 먼저 Add() 메소드에 몇 개의 Go rountine을 기다릴 것인지 지정하고, 각 Go rountine에서 Done() 메서드를 호출한다 (여기서는 defer 를 사용하였다). 그리고 메인루틴에서는 Wait() 메서드를 호출하여, Go rountine들이 모두 끝나기를 기다린다.

- go routine의 개수를 지정
- go routine을 종료

package main
 
import (
    "fmt"
    "sync"
)
 
func main() {
    // WaitGroup 생성. 2개의 Go rountine을 기다림.
    var wait sync.WaitGroup
    wait.Add(2)
 
    // 익명함수를 사용한 goroutine
    go func() {
        defer wait.Done() //끝나면 .Done() 호출
        fmt.Println("Hello")
    }()
 
    // 익명함수에 파라미터 전달
    go func(msg string) {
        defer wait.Done() //끝나면 .Done() 호출
        fmt.Println(msg)
    }("Hi")
 
    wait.Wait() //Go rountine 모두 끝날 때까지 대기
}

결과에서 "Hello"와 "Hi"순서는 일정하지 않다.

3. 다중 CPU 처리

Go는 디폴트로 1개의 CPU를 사용한다. 즉, 여러 개의 Go rountine을 만들더라도, 1개의 CPU에서 작업을 시분할하여 처리한다 (Concurrent 처리). 만약 머신이 복수개의 CPU를 가진 경우, Go 프로그램을 다중 CPU에서 병렬처리 (Parallel 처리)하게 할 수 있는데, 병렬처리를 위해서는 아래와 같이 runtime.GOMAXPROCS(CPU수) 함수를 호출하여야 한다 (여기서 CPU 수는 Logical CPU 수를 가리킨다).

  - CPU 사용 수를 지정

package main
 
import (
    "runtime"  
)
 
func main() {
    // 4개의 CPU 사용
    runtime.GOMAXPROCS(4)
 
    //...
}

 

출처 : https://medium.com/@Oskarr3










반응형
Posted by 사용자 SB패밀리

댓글을 달아 주세요

go channel을 사용하는 좋은 예제

이 코드에서는 go channel을 exit할 수 있는 예제가 포함되어 있습니다.
기본적인 예제 중 select 문을 사용해서 채널값을 받게 되면 루틴을 종료하는 예제입니다.
이 기본 go channel을 사용하는 design pattern 만 알고 있으면 대부분을 고 채널을 사용할 때 응용할 수 있습니다.

var quit chan struct{}

func startLoop() {
    quit := make(chan struct{})
    go loop()
}

func stopLoop() {
    // As mentioned by Kaedys
    //close(quit)
    // permits signalling everyone havins such a `case <-quit:`
    // statement to be stopped at once, which might be even better.
    quit <- struct{}{}
}

// BTW, you cannot call your function main, it is reserved
func loop() {
    for {
        select {
        case <-quit:
            return # better than break
        default:
            // do stuff. I'd call a function, for clarity:
            do_stuff()
        }
    }
}

go channel

반응형
Posted by 사용자 SB패밀리

댓글을 달아 주세요

Error 1452 : Cannot add or update a child row: a foreign key constraint fails

에러메시지와 함께 외래키 참조 필드가 표시된다.
무슨 문제를 일으켰는지 잘 모르겠다. 
변수나 구조체 SQL 관련 정의와 구현상에는 문제가 없어보인다.

위와 같이 생각할 수 있습니다.
문제는 참조무결성 문제입니다.
참조무결성에는 다음의 3가지가 있습니다.


외래키 참조 무결성
도메인 참조 무결성

위의 내용대로 디버깅 하면 문제를 찾을 수 있습니다.



반응형
Posted by 사용자 SB패밀리

댓글을 달아 주세요

Github Token, 소스트리와 연동

소스트리 사용자분들에게 공유합니다
.
요즘 이슈 되었던 깃허브 토큰사용건입니다.
해당 오류가 나오면 풀,패치,푸시 기능을 사용할수없습니다.
오류가 나시면 아래 작업을 진행해주시면 작동합니다!


1. 깃허브 우측상단 - settings- Developer settings - personal access tokens - generate new token에 노트와 유효기한,범위항목을 체크하여 토큰을 발행합니다.
(2번 항목 작업안해도 잘됩니다.)
3. 소스트리 -설정(우측상단 ) - 원격 - 경로(https://{깃허브닉네임} :{토큰정보}@github.com/grooo-company/spice.git)
정상적으로 기능이 작동합니다

 

 
반응형
Posted by 사용자 SB패밀리

댓글을 달아 주세요

MYSQL TABLE 변경하기 DDL

ALTER문을 이용하여 이미 만들어진 테이블의 구조와 속성 등을 변경할 수 있다.
따라서, 칼럼의 구조나 속성을 변경하기 위해 ALTER명령을 사용한다. 
ALTER 명령어는 다음과 같다. 

  1. 테이블 형식 변경 
- Engine 사용 : ALTER TABLE 테이블명 ENGINE=속성; 
- type 사용 : ALTER TABLE 테이블명 TYPE=속성; 

  2. 테이블 이름 변경 
- ALTER TABLE 테이블명 RENAME 바꿀이름
- RENAME TABLE 테이블명 TO 바꿀이름

  3. 칼럼 추가 
- 마지막에 추가 : ALTER TABLE 테이블명 ADD COLUMN 칼럼이름 칼럼속성 
- 지정 칼럼 뒤에 : ALTER TABLE 테이블명 ADD COLUMN 칼럼이름 칼럼속성 AFTER 칼럼이름
- 제일 앞에 : ALTER TABLE 테이블명 ADD COLUMN 칼럼이름 칼럼속성 FIRST

  4. 칼럼 삭제 
- ALTER TABLE 테이블명 DROP COLUMN 칼럼이름

  5. 칼럼 변경 
- ALTER TABLE 테이블명 MODIFY 컬럼이름 새컬럼속성
- ALTER TABLE 테이블명 CHANGE 컬럼이름 새컬럼이름 새컬럼속성

  6. 인덱스에 새항목 추가 
- ALTER TABLE 테이블명 ADD INDEX(컬럼이름)

  7. 인덱스 삭제 
- ALTER TABLE 테이블명 DROP INDEX 컬럼이름
- DROP INDEX 인덱스이름 ON 테이블명 

  7. 기본키(Primary Key) 지정하기 
- ALTER TABLE 테이블명 ADD PRIMARY KEY(칼럼이름) 컬럼이름

  8. 기본키 삭제
- ALTER TABLE 테이블명 DROP PRIMARY KEY

MYSQL TABLE 변경하기 DDL


반응형
Posted by 사용자 SB패밀리

댓글을 달아 주세요

프로젝트 방법론, 관리를 위한 유용한 툴

 

GitHub : Web용 프로젝트관리 시스템 ( https://github.com/ )

Source Tree : GUI용 버전관리 시스템 ( https://www.sourcetreeapp.com/ )

Trac : Web용 버전관리, 버그추적 시스템 ( https://trac.edgewall.org/ )

South Django : DB 마이그레이션 Tool ( https://south.readthedocs.io/en/latest/ )

Redmine : 도입 장벽이 비교적 낮은 오픈소스 티켓 관리 시스템 ( https://www.redmine.org/ )

Mockito : DB와 연계된 테스트가 가능한 오픈소스 테스트 프레임 워크 ( https://site.mockito.org/ )

Vagrant : 가상화 소프트웨어를 고 관리하는 도구 ( https://www.vagrantup.com/ )

Chef : 원하는 환경을 구성하기 위해 서버나 미들웨어를 설정하는 도구 ( https://docs.chef.io/cookbooks/ )

Jenkins : 지속적 통합을 제공하는 툴 ( https://jenkins.io/ )

Selenium : 웹 어플리케이션 기능 테스트나 통합 테스트를 자동화하는 도구 ( https://www.selenium.dev/ )

 

반응형
Posted by 사용자 SB패밀리

댓글을 달아 주세요

장고 쿼리셋 API 가이드가 잘 설명되어 있습니다.

QuerySet 을 작성하는데 단순한 것은 자주 사용되며 문제없이 작동하지만
SQL이 복잡해지는 경우에 난감해 지는 순간을 맞이 하게 됩니다.

이 때 이 페이지를 이용해서 SQL Query와 QuerySet의 변환을 자연스럽게 하면서 확인할 수 있습니다.

이 페이지를 참조해서 시원스럽게 문제를 해결했습니다.

docs.djangoproject.com/en/2.2/ref/models/querysets/

 

QuerySet API reference | Django documentation | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

 

반응형
Posted by 사용자 SB패밀리

댓글을 달아 주세요

장고 웹서버 백그라운드 실행

  1. 우선 서버를 실행시킵니다.

  2. control + Z를 통해 해당 프로그램을 정지합니다.

[8]+ Stopped python3 manage.py runserver 0.0.0.0:8000 --settings=config.settings.deploy

  1. 아래 명령어를 통해 프로그램을 백그라운드로 보냅니다.

bg

  1. 아래 명령어를 통해 ssh 연결이 끊어져도 해당 프로세스가 돌아가도록 합니다.

disown -h

  1. 실행중인 프로세스를 확인하면 존재하는 것을 알 수 있습니다.

ps -l

장고 웹서버 백그라운드 실행

1. 우선 서버를 실행시킵니다.

2. control + Z를 통해 해당 프로그램을 정지합니다.

[8]+  Stopped python3 manage.py runserver 0.0.0.0:8000 --settings=config.settings.deploy

3. 아래 명령어를 통해 프로그램을 백그라운드로 보냅니다.

bg

4. 아래 명령어를 통해 ssh 연결이 끊어져도 해당 프로세스가 돌아가도록 합니다.

disown -h

5. 실행중인 프로세스를 확인하면 존재하는 것을 알 수 있습니다.

ps -l

반응형
Posted by 사용자 SB패밀리

댓글을 달아 주세요

위의 quaggaJS   라이브러리는 github 에서 현재에도 계속 업데이트가 이루어지고 있는 라이브러리 입니다.
실시간 인식 과 캡쳐 등의 기능외에 다양한 기능을 지원하고있구요.

핸드폰에서 해당 라이브러리 기능이 있는 웹 사이트에 접속할시에,
핸드폰의 카메라로 해당 바코드를 캡쳐없이 바코드에 가져다 대면 QR 코드 인식하듯이 
바코드를 인식해 숫자로 디코딩해서 나옵니다.

HTML5 와 자바스크립트로 이루어져있기때문에 모바일기종에서는 제약이 없어 보입니다.
(전면 카메라/ 후면 카메라 선택가능 여러가지 기능이 있어요)

인식된 바코드 숫자를 여러개 누적해서 , 서버에 전송할지
인식된 바코드 숫자를 한개씩 건바이 건으로 서버에 전송할지 등은 개발자의 몫이구요.

모바일로 위의 예제 사이트에 접속하여서 확인해보세요. (QR코드도 지원됩니다)

 

https://serratus.github.io/quaggaJS/examples/live_w_locator.html 

https://a.kabachnik.info/a-javascript-barcode-reader-with-bootstrap-3-and-quaggajs.html 

캡쳐된 바코드 이미지를 서버로 대량업로드하여 처리하는 방법도 있습니다.
사용 용도에 따라 바코드가 필요없게 설계를 할수도 있습니다.

반응형
Posted by 사용자 SB패밀리

댓글을 달아 주세요

파이썬 가상환경 설정

파이썬 가상환경 설정은 아주 간단하게 할 수 있습니다.
가상환경을 설정한 후에 작업을 하는게 훨씬 안정적으로 편리하게 이용할 수 있습니다.
아래의 에는 Mac에서 파이썬 가상환경을 설정하는 방법입니다.

# 현재 폴더는 startprojecct 폴더입니다. (manage.py 가 있는 폴더)
$ brew install pyenv # or pip install pyenv
$ pyenv install python3
$ pyenv virtualenv python3 [가상환경이름] 

# 활성화
$ source ~/[가상환경이름]/bin/activate

# 비활성화
$ deactivate

# 가상환경 제거
$ rm -r /경로명

 

다른 방법도 있습니다.

$ python -m venv venvapp
(venvapp) $ source ./venvapp/bin/activate
(venvapp) $ deactivate

 

우분투에서 설정하는 방법은 설치하는 방법만 다릅니다.

$ apt-get install -y python3-venv

가상환경이란
가상 환경(Virtual Environment)은 사용자가 정한 임의의 디렉토리 밑에 Python과 관련 패키지 등을 함께 넣어 그 안에서 독립적인 파이썬 개발 환경을 설정하는 것 입니다. 즉, 가상 환경은 Lightweight, Self-contained 파이썬 개발 환경으로서 필요한 경우 한 개발머신 안에 여러 개의 가상 환경을 만들고 각 가상 환경에서 다른 파이썬 버전이나 다양한 패키지들을 독립적으로 설치 사용할 수 있는 가상적 개발 환경입니다.

반응형
Posted by 사용자 SB패밀리

댓글을 달아 주세요

Mac에서 MariaDB 설치

# mariadb 설치 실행
$ brew update
$ brew install mariadb
$ brew services start mariadb

반응형
Posted by 사용자 SB패밀리

댓글을 달아 주세요

docker container stop 안될 때 또는 docker-compose down 안될 때

 

시스템관리자가 해줘야 할 일:  AppArmor가 일을 똑바로 안해서 발생;

docker 설치 후 발생 할 수 있는 문제

$ docker stop python

Error response from daemon: cannot stop container: python: Cannot kill container c2ea9333f97082d88578268f269657aa43e12d7b561b3503a64aa8b4738ee98a: unknown error after kill: runc did not terminate sucessfully: container_linux.go:392: signaling init process caused "permission denied"
: unknown


아래는 해결책

# For anyone that does not wish to completely purge AppArmor.
# Check status:
$ sudo aa-status

# Shutdown and prevent it from restarting:
$ sudo systemctl disable apparmor.service --now

Synchronizing state of apparmor.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable apparmor

# Unload AppArmor profiles:
$ sudo service apparmor teardown

 * Unloading AppArmor profiles


# Check status:
$ sudo aa-status
# You should now be able to stop/kill containers.

apparmor module is loaded.
0 profiles are loaded.
0 profiles are in enforce mode.
0 profiles are in complain mode.
0 processes have profiles defined.
0 processes are in enforce mode.
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.

# 이제 명령어 권한이 동작함
$ docker stop python

 
반응형
Posted by 사용자 SB패밀리

댓글을 달아 주세요

Documentation

To build the documentation, you'll need to install mkdocs.

$ pip install mkdocs

To preview the documentation:

$ mkdocs serve Running at: http://127.0.0.1:8000/

To build the documentation:

$ mkdocs build

반응형
Posted by 사용자 SB패밀리

댓글을 달아 주세요

python django Testing

IT-개발,DB 2021. 2. 27. 02:02

Install testing requirements.$ pip install -r requirements.txt

Run with runtests.

$ ./runtests.py

You can also use the excellent tox testing tool to run the tests against all supported versions of Python and Django. Install tox globally, and then simply run:

$ tox

반응형
Posted by 사용자 SB패밀리

댓글을 달아 주세요

python 문자열 변환

type string to bytes

type bytes to string

type string to dict

type string to list  <-- ast.literal_eval() 와 json.loads()함수 2가지 방법이 있습니다.

# bytes type to unicode string type
import json
import ast

str_text = "{\"key\": \"astrg\"}"
# type string to bytes
bytes_text = str_text.encode()
print(bytes_text, type(bytes_text))
# type bytes to string
str = bytes_text.decode()
print(str, type(str))
# string to dict
dict_text = json.loads(str)
print(dict_text, type(dict_text))
# type string to list
x1 = "['B-EXP', 'I-EXP', 'B-SUB', 'I-SUB', 'O']"
x2 = ast.literal_eval(x1)
print(x2, type(x2))
# type string to list
#x2 = json.loads(x1)
#print(x2, type(x2))

반응형

'IT-개발,DB' 카테고리의 다른 글

python 가이드 자동생성  (0) 2021.02.27
python django Testing  (0) 2021.02.27
python 문자열 변환  (0) 2021.02.25
[MySQL] 로그인 오류 / 비밀번호 재설정  (0) 2021.02.10
vscode에서 파이썬 인터프리터 설정  (0) 2021.02.08
JMeter 설치와 실행  (0) 2021.01.25
Posted by 사용자 SB패밀리

댓글을 달아 주세요

mysql을 docker를 이용한 image에서 container 를 이용한 방법만 사용해서 테스트를 하다보니 

아주 쉽게 사용하고 있었는데.

 mac에 설치해서 DCL 작업을 하는데 에러가 계속나는 것이다. 몇시간을 헤매다가 

반복되는 명령어들 조합으로 처리하는데 root 계정 비밀번호가 드디어 설정되었다.

왜 안되었는지. 왜 되는지 타이밍을 모르겠다. 에러에 도움이 될 만한 것을 기록해 본다.

 

[로그인 오류]

유형 1) ERROR 1045 (28000): Access denied for user 'root@'localhost' (using password: NO)

- 사용자의 비밀번호가 없을 경우 나타나는 오류 문구, 아래 해결 방법에 있는 명령어들 중 하나를 선택해 입력.

[해결 방법]
1. mysql -u 사용자
2. mysql -u 사용자 -p 비밀번호
3. mysql -u 사용자 -p
Enter password : 비밀번호 입력

위 세 가지 방법 중에서 하나 선택 (3번 방법을 추천, 3번은 명령어 실행 후에 비밀번호 입력 필요함.)

 

유형 2) ERROR 1045 (28000): Access denied for user 'root@'localhost' (using password: YES)

- 사용자의 비밀번호가 틀렸을 경우 나타나는 오류 문구, 아래 해결 방법에 나와있는 명령어들을 입력.

[해결 방법]

mysql > use mysql
mysql > update user set password=password('비밀번호') where user='사용자'; // 비밀번호 변경
mysql > flush privileges; // 변경사항 적용

 

[비밀번호 재설정]

만약에 비밀번호를 잊어버렸을 경우 해결방법에 나와있는 대로 진행하면 된다.

[해결 방법]

mysqld --skip-grant // 인증 없이 mysql 진입

위의 유형 2번처럼 비밀번호 재설정

 

 

 

[비밀번호 변경오류]

ERROR 1348 (HY000): Column 'Password' Is Not Updatable [Mysql,Mariadb 오류]

10.4버전부터는 root 계정이 자동으로 안전하게 생성되기 때문에 설치할때 비밀번호를 요구하지않는다고한다.

root 로했을때는 그냥 mysql하면 된다.

root 접속 후 SET 명령어를 사용해서 간단하게 바꿀 수 있다.

set password = password("password");

다른계정으로 접속하고 싶으면 root 비밀번호를 생성 시키거나 sudo mysql 명령어로 접속하면된다.

 

 

 

반응형

'IT-개발,DB' 카테고리의 다른 글

python django Testing  (0) 2021.02.27
python 문자열 변환  (0) 2021.02.25
[MySQL] 로그인 오류 / 비밀번호 재설정  (0) 2021.02.10
vscode에서 파이썬 인터프리터 설정  (0) 2021.02.08
JMeter 설치와 실행  (0) 2021.01.25
크롤링/스크래핑 ? 무슨 차이지?  (0) 2021.01.20
Posted by 사용자 SB패밀리

댓글을 달아 주세요

vscode에서 파이썬 인터프리터 설정

 

Visual Studio Code로 파이썬 작업을 하게 되면 실행과 디버깅을 해야할 때 정의 해주어야 하는 것이 있습니다.

바로 파이썬 경로 입니다.

파이썬 설치는 다들 쉽게 하셨겠습니다만 Visual Studio Code에서 작업을 하려면

뭔가 부족한 느낌이 듭니다. 뭔가 잊어버리고 작업을 하는 것 같지요.

제 경우는 PyCharm과 Anaconda 모두를 설치하여 사용하고 있습니다.

그래서 별 생각을 하지 않았는데 vscode에서는 설정이 필요하다는 것을 알았습니다.

 

제가 사용하는 환경은 Mac OSX에서 Visual Studio Code 이니까

이 환경에서 설명을 드리겠습니다.

파이썬 실행과 디버깅을 위해서 파이썬 인터프리터라는 것을 설정하게 됩니다.

vscode상에서 "Shift + Command + P"를 클릭합니다.

그러면, Command Palette가 나타나느데 여기에 "Python: Select interpreter"라고 보이실 겁니다.

이것을 선택해 보겠습니다.

많이도 나오네요.

파이썬 인터프리터를 선태할 수 있는 선택옵션이 많습니다.

이 중에서 하나를 사용하시면 됩니다.

선택하시게 되면 vscode에서 언제나 설정할 때 필요한 파일인 settings.json 파일에 추가되어 저장이 됩니다.

선택한 인터프리터에서 import 할 라이브러리(플러그인)이 없는 경우에 해당 경로에서

아래와 같은 방법으로 설치해주시면 쉽게 설치하고 사용할 수 있습니다.

$ pip install subprocess

 

그럼, 즐거운 코딩 하세요.

반응형

'IT-개발,DB' 카테고리의 다른 글

python 문자열 변환  (0) 2021.02.25
[MySQL] 로그인 오류 / 비밀번호 재설정  (0) 2021.02.10
vscode에서 파이썬 인터프리터 설정  (0) 2021.02.08
JMeter 설치와 실행  (0) 2021.01.25
크롤링/스크래핑 ? 무슨 차이지?  (0) 2021.01.20
숫자가 아님 NaN  (0) 2021.01.10
Posted by 사용자 SB패밀리

댓글을 달아 주세요

JMeter 설치와 실행

 

java 설치후

bae@Bae-GroooKorea ~ % javap -version

11.0.10

jdk Path 등록

/Library/Java/JavaVirtualMachines/jdk-11.0.10.jdk

jmeter 설치후

jmeter 실행에서 에러가 난다면

참고 : https://www.programmersought.com/article/7538141221/

bae@Bae-GroooKorea bin % ./jmeter     

./jmeter: line 128: [: : integer expression expected

./jmeter: line 199: /Library/Java/JavaVirtualMachines/jdk-1.11.0.10.jdk/Contents/Home/bin/java: No such file or directory

.bash_profile에 자바 JDK 경로 설정을 확인한다.

그리고 아래에서 jdk 경로를 수정한다.

/usr/local/Cellar/jmeter/5.0/bin

.jmeter 실행에서 에러가 난다면

./jmeter: line 199: 11721 Abort trap: 6           "$JAVA_HOME/bin/java" $ARGS $JVM_ARGS $JMETER_OPTS -jar "$PRGDIR/ApacheJMeter.jar" "$@"
 
반응형

'IT-개발,DB' 카테고리의 다른 글

[MySQL] 로그인 오류 / 비밀번호 재설정  (0) 2021.02.10
vscode에서 파이썬 인터프리터 설정  (0) 2021.02.08
JMeter 설치와 실행  (0) 2021.01.25
크롤링/스크래핑 ? 무슨 차이지?  (0) 2021.01.20
숫자가 아님 NaN  (0) 2021.01.10
go mod 캐시 삭제  (0) 2021.01.04
Posted by 사용자 SB패밀리

댓글을 달아 주세요

크롤링/스크래핑

크롤링? 스크래핑? 

요즘 뿐만이 아니라 오래전부터 사용해오던 IT계의 용어입니다.

그런데. 이 차이를 명확히 아는 사람들이 없죠.

저도 알고보니 월드컵이 있던 2002년쯤 크롤링을 해봤었네요. 

그 당시에는 스크래핑이라는 단어를 사용하지 않았습니다.

저는 근래에 웹크롤링에 대해서 공부를 하고 있습니다. 

그 때와 지금 사용하는 개발언어가 다르기 때문입니다.

그럼, 크롤링과 스크래핑에 대하여 알아볼까요.

 

크롤링과 스크래핑은 비슷한 목적이지만 상황에 따라 다르게 사용합니다. 그 목적은 다른 웹페이지의 정보를 가져와 활용하기 위한 것인데, 크롤링은 크롤링 서버에서 대상 서버로 요청을 보내 html 형태로 결과물을 가져올 수 있으면 이를 분석해서 원하는 데이터로 변환할 수 있어 상대적으로 간단한데, 대상 서버가 크롤링 서버의 접근을 막아놓은 경우는 스크래핑 방식을 이용해야 합니다.

스크래핑은 크롤링이 안 되는 경우, 브라우져 인스턴스를 생성해서 일반 사용자가 브라우져를 통해 사이트에 접근한 것처럼 해당 웹페이지 정보를 읽어올 수 있습니다. 브라우져 인스턴스를 띄우는 것은 메모리를 많이 사용하기 때문에 크롤링보다 느리고 구현도 번거로워서 비용 차이가 발생합니다. 크롤링을 먼저 시도하고 데이터를 가져오는데 실패하면 스크래핑을 시도합니다.

파이썬으로 작업하다가 보니 Chrome 인스턴스를 이용해서 하는 경우도 있더라구요. 예전에는 IE 인스턴스였는데 말입니다.

추가적으로 멀티 서버 크롤링은 대상 페이지에서 요청이 많은 IP 접속을 막는 경우 AWS 등의 클라우드 서버에서 인스턴스를 재시작하며 IP를 변경해가면서 접속을 시도할 때 사용합니다. 클라우드 운영 및 크롤링 환경 구축을 위해 많은 시간을 투입해야 하므로 비용이 많이 듭니다. 크롤링과 스크래핑은 대상 서비스에 크롤링 허락을 받은 상태 또는 일반적으로 허용되는 상태에만 구현이 가능합니다. 저작권 이슈 발생시 의뢰한 고객사의 책임이기도 하지만 저희 쪽에서도 법적인 이슈가 발생할 가능성이 있는 경우는 개발을 진행하지 않습니다.

반응형

'IT-개발,DB' 카테고리의 다른 글

vscode에서 파이썬 인터프리터 설정  (0) 2021.02.08
JMeter 설치와 실행  (0) 2021.01.25
크롤링/스크래핑 ? 무슨 차이지?  (0) 2021.01.20
숫자가 아님 NaN  (0) 2021.01.10
go mod 캐시 삭제  (0) 2021.01.04
델파이 커뮤니티 무료버전 설치  (0) 2020.12.26
Posted by 사용자 SB패밀리

댓글을 달아 주세요