'HP > 서버' 카테고리의 다른 글
ibm op 판넬 (0) | 2016.10.28 |
---|---|
HP Microserver Gen8 windows server 2012 설치방법 (0) | 2016.09.11 |
HP server ESXi 구성하기 (0) | 2016.09.11 |
HP server iLO 라이센스 발급받기 (0) | 2016.09.11 |
HP Microserver Gen8 ILO (0) | 2016.09.11 |
ibm op 판넬 (0) | 2016.10.28 |
---|---|
HP Microserver Gen8 windows server 2012 설치방법 (0) | 2016.09.11 |
HP server ESXi 구성하기 (0) | 2016.09.11 |
HP server iLO 라이센스 발급받기 (0) | 2016.09.11 |
HP Microserver Gen8 ILO (0) | 2016.09.11 |
가끔 리눅스 크론탭 번호를 잘못설정해서 nano 로 계속 열리거나
vim 으로 열리는 경우가 있다.
그경우 다음과 같이 변경하면된다.
나노로 변경
export VISUAL=nano; crontab -e
vim 으로 변경
export VISUAL=vim; crontab -e
vi 로 변경
export VISUAL=vi; crontab -e
리눅스 sh 기본 사용법 (0) | 2020.02.24 |
---|---|
리눅스 smb 마운트 (1) | 2020.02.23 |
마리아디비 10.1 설치및 초기 셋팅 (0) | 2020.02.20 |
리눅스 톰캣 서버 Scalr 썸네일 오류 (1) | 2020.02.18 |
Ubuntu 18.04 설치후 셋팅 (0) | 2020.02.10 |
일단 필자는 에이텐 KVM 스위치를 사용하고 있고 CS62US 모델을 사용중이고
로지텍은 M705를 사용중이다...(8년째 가성비로 참고 쓰는중)
해당 KVM 스위치는 핫키 지원이 되고 핫키 설정 및 기타 설정을 할 수 있는 모델이다.
그래서 메뉴얼에 있는 설정 중 마우스 에뮬레이터? 기능을 켜고 끌 수 있게 되어있다.
무슨 기능인지 모르겠는데 누군가는 마우스 인식이 안될 때 이 기능을 껏다고 해서 나도 해봤다.
[NumLock + (-)]로 설정 메뉴에 진입 후 [m] 키로 해당 기능을 껐다.
결과는 성공 !!!!!
아래 메뉴얼 이미지를 첨부하니 참고하길...
출처: https://cofs.tistory.com/424 [CofS]
KVM 스위치 CS62US에서 로지텍 마우스 사용하기
망분리된 환경에서 KVM 스위치 사용은 자주 있는 일이다. 그런데 일부 제품들에서 로지텍 무선마우스 지원이 안되더라... 필자도 4개 제품을 사용해봤는데(다른 이유로...) 그중 2개가 로지텍 마우
cofs.tistory.com
스마트폰 캠으로 사용하기 (0) | 2020.04.09 |
---|---|
프린터 강제삭제 (0) | 2017.01.31 |
마이크단자에서 스피커 (0) | 2016.10.11 |
윈도우7 암호분실시 해제방법 (윈도우7 암호삭제/암호깨기) (35) | 2016.04.22 |
신도리코 ftp 설정하기 (0) | 2015.12.21 |
갑작스러운 the password has expired error 로 당황할때가 있습니다..
비밀번호는 SYSTEM 계정으로 들어가서 다음 명령으로 변경하면 됩니다.
ALTER USER user_id IDENTIFIED BY new_password;
만약 집에서 개인정으로 테스트 해보는 환경이라면 매번 비밀번호를 변경하는게 불편할 수도 있겠습니다. 다음 명령으로 만료가 되지 않도록 설정할 수 있습니다.
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
추가로 또 하나 이야기 하자면, 로그인 시 비밀번호가 10번 틀리면 계정이 잠기는 것이 기본 프로필 설정입니다. 잠긴 계정을 풀려면 다음 명령을 사용합니다.
ALTER USER user_id ACCOUNT UNLOCK;
시스템 계정까지 비밀번호가 비밀번호가 만료되었다면 시스템의 로컬에서 sqlplus 를 사용해서 인증없이 로그인한 후 비밀번호를 변경하면 되겠습니다. 다음처럼 합니다.
출처: https://offbyone.tistory.com/118 [쉬고 싶은 개발자]
Mariadb 백업 및 복구 (0) | 2020.02.26 |
---|---|
오라클 명령어 (0) | 2018.10.15 |
ORA-01034: ORACLE not available 에러 (0) | 2018.07.31 |
#pip를 이용한 notebook 설치
pip install notebook
#config 파일 생성하기 (생성후 생성된 conifg 경로 확인)
jupyter notebook --generate-config
#password hash 만들기
python
from notebook.auth import passwd
passwd()
까지 입력하면 패스워드 묻는프롬프트가 나타남 두번 입력한후.
해쉬가 나타나면 해당 해쉬를 복사.
#config 파일 생성하기 (생성후 생성된 conifg 경로 확인) 의 경로를 찾아가 vi 편집기 실행
vi /root/.jupyter/jupyter_notebook_config.py
다음사항들의 # 주석을 해제
설정 | 방법 |
비밀번호 설정 | c.NotebookApp.password 주석 해제 후 아까 생성후 복사해둔 해쉬 붙여넣기 |
기본 작업 경로 설정 | c.NotebookApp.notebook_dir주석해제 후 실행하고자하는 dir 지정 (ex, /home/(사용자이름) ) |
외부 접속 허용 | c.NotebookApp.allow_origin = '*' |
서버를 띄울 아이피 설정 | c.NotebookApp.ip = '0.0.0.0' |
주피터 서버 실행 시 브라우저 실행 X | c.NotebookApp.open_browser = False |
주피터 서버 포트 | c.NotebookApp.port = 8888 |
Sh 파일로 만들어 실행하기.
nohup /root/venv/bin/jupyter notebook --allow-root &
완료이후
http://해당서버ip:8888 접속하면
다음과 같은 화면이 나타납니다.
Microsoft/NT 2013. 6. 5. 15:01
내가 쓰고 있는 Windows에 CD-Key(Product Key)를 찾아내는 방법은 여러가지 입니다.
간편하게 MagicalJellyBean http://www.magicaljellybean.com/keyfinder/ 같은 간단한 프로그램을 이용하는 방법도 있지만, 해당 컴퓨터에 설치를 필요로 하지요
1. Magical Jelly Bean의 Keyfinder프로그램
2. VBS스크립트를 활용
또다른 방법으로 스크립트를 이용하면 별도의 프로그램 설치필요 없이도 가능 합니다.
아래는 구글링으로 찾아낸 VBS
++Script 펼치기
해당내용을 메모장에 붙여넣기 하여 .vbs 형식으로 저장한뒤 더블클릭으로 확인 가능합니다.
ㄴ 또는 아래의 파일을 다운받으세요
하지만, 위 두가지 방법으로는 Volume license로 적용된 CD-Key는 확인이 불가능 합니다.
이유는 해당 키값을 레지스트리에 암호화된 상태로 남아, 모두 BBBBB-BBBBB-BBBBB-BBBBB-BBBBB 이런 형식으로 보이기 때문이지요.
그래서, 또다시 구글링으로 방법을 찾아보았습니다.
3. PowerShell을 이용한 방법
3.1 아래의 스크립트를 메모장에 복사한 후 .PS1 형태로 저장 합니다.
ㄴ 또는 아래의 파일을 받으세요
+++PS 스크립트 펼치기
3.2 PowerShell을 실행후, Set-ExecutionPolicy Unrestricted 와 Set-ExecutionPolicy RemoteSigned 를 각각 실행 합니다.
3,3 위 .PS1파일을 바로 실행하거나, (방법은 이곳: http://technet.microsoft.com/en-us/library/ee176949.aspx 참조)
ㄴ 복사후 PS창에 붙여 넣기 합니다. (아래그림참조)
3.4 Get-WindowsKey 커맨드로 CD-Key확인. 이상 끝.
혹시 안되면 댓글 남겨주세요.
MSE 윈도우서버에 설치하는방법 (0) | 2018.07.21 |
---|---|
server 블루스크린 c00002e2 (0) | 2016.04.07 |
package.json 파일만 옮긴이후.
npm install
Option Explicit
Dim objshell,path,DigitalID, Result
Set objshell = CreateObject("WScript.Shell")
'Set registry key path
Path = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\"
'Registry key value
DigitalID = objshell.RegRead(Path & "DigitalProductId")
Dim ProductName,ProductID,ProductKey,ProductData
'Get ProductName, ProductID, ProductKey
ProductName = "Product Name: " & objshell.RegRead(Path & "ProductName")
ProductID = "Product ID: " & objshell.RegRead(Path & "ProductID")
ProductKey = "Installed Key: " & ConvertToKey(DigitalID)
ProductData = ProductName & vbNewLine & ProductID & vbNewLine & ProductKey
'Show messbox if save to a file
If vbYes = MsgBox(ProductData & vblf & vblf & "Save to a file?", vbYesNo + vbQuestion, "BackUp Windows Key Information") then
Save ProductData
End If
'Convert binary to chars
Function ConvertToKey(Key)
Const KeyOffset = 52
Dim isWin8, Maps, i, j, Current, KeyOutput, Last, keypart1, insert
'Check if OS is Windows 8
isWin8 = (Key(66) \ 6) And 1
Key(66) = (Key(66) And &HF7) Or ((isWin8 And 2) * 4)
i = 24
Maps = "BCDFGHJKMPQRTVWXY2346789"
Do
Current= 0
j = 14
Do
Current = Current* 256
Current = Key(j + KeyOffset) + Current
Key(j + KeyOffset) = (Current \ 24)
Current=Current Mod 24
j = j -1
Loop While j >= 0
i = i -1
KeyOutput = Mid(Maps,Current+ 1, 1) & KeyOutput
Last = Current
Loop While i >= 0
If (isWin8 = 1) Then
keypart1 = Mid(KeyOutput, 2, Last)
insert = "N"
KeyOutput = Replace(KeyOutput, keypart1, keypart1 & insert, 2, 1, 0)
If Last = 0 Then KeyOutput = insert & KeyOutput
End If
ConvertToKey = Mid(KeyOutput, 1, 5) & "-" & Mid(KeyOutput, 6, 5) & "-" & Mid(KeyOutput, 11, 5) & "-" & Mid(KeyOutput, 16, 5) & "-" & Mid(KeyOutput, 21, 5)
End Function
'Save data to a file
Function Save(Data)
Dim fso, fName, txt,objshell,UserName
Set objshell = CreateObject("wscript.shell")
'Get current user name
UserName = objshell.ExpandEnvironmentStrings("%UserName%")
'Create a text file on desktop
fName = "C:\Users\" & UserName & "\Desktop\WindowsKeyInfo.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
Set txt = fso.CreateTextFile(fName)
txt.Writeline Data
txt.Close
End Function
해당파일을 vbs 확장자로 저장하거나 첨부된 파일을 다운받은후에.
wscript.exe "check.vbs"
실행하면
시디키를 확인할수있다.
윈도우10 폴더생성 딜레이 없애기.[폴더생성 시 새로고침 버그] (0) | 2018.09.28 |
---|---|
windows 10 설치하기 (윈도우10 usb설치) (0) | 2016.10.09 |
DHCP 활성화 방법
Network -> DHCPServer -> Status : Enable 체크
외부 Remote 활성화
System Tools -> Admin Setup -> Remote Management -> Add
Subnet : 0.0.0.0 / 0 입력
이후 공인ip로 접근시 해당 공유기에 접근할수 있습니다.
공식 메뉴얼
https://www.tp-link.com/us/support/faq/66/
How do I configure Remote Management for my TP-Link Wireless Router? | TP-Link
How do I configure Remote Management for my TP-Link Wireless Router? Step 1 Open the web browser and in the address bar type in: http://192.168.1.1 or http://192.168.0.1 or http://tplinklogin.net Then press Enter. Note: The LAN IP is vary by model. Please
www.tp-link.com
전체 문서 메뉴얼
https://www.tp-link.com/kr/support/download/tl-er6020/v1/
다운로드 함 TL-ER6020 | TP-Link 대한민국
TP Link - Download Center Detail
www.tp-link.com
세부설정 옵션 메뉴얼
configuring_network
VLAN Add the WAN port to a VLAN. Generally, you don’t need to manually configure it unless required by your ISP. By default, the WAN port is automatically assigned to a VLAN, and the egress rule of the VLAN is UNTAG, so the packets are transmitted by the
www.tp-link.com
zyzel 포트포워딩 (0) | 2016.10.24 |
---|---|
시스코 1200 시리즈 dhcp 서버할당 (0) | 2016.03.10 |
윈도우 탐색기 ftp 에러 (익스플로러로 열릴때) (0) | 2015.05.22 |
Lan 포트 led 의미 및 역할 (0) | 2014.04.08 |
네트워크 기초교육자료 (UTP 찍는법, 랜선 찍는법, 네트워크 프린터 공유방법, 네트워크공유방법, ping) (0) | 2014.01.04 |
Mongodb replicaset 으로 구성하여 사용하던 도중에 .. master 이 올라가지 않는 문제가 발생했다.
시스템이 비정상 셧다운된이후였는데. 올라가는 로그를 보니
쉽게 해결되긴 어려워 보였다..
slave 는 정상 구동중인 상태였으므로.
그냥 master 을 삭제하고 다시 구성하면 되지 않을까싶어 해보았다.
mongo --port 26026 -u "id" -p "Password" --authenticationDatabase "admin"
salve 권한이 있는 포트로 접속한후
rs.remove("localhost:26016")
과감히 삭제이후 다시새로운 곳에 다음과 같이 폴더를 생성한후
mkdir /var/lib/mongo/master
mkdir /var/lib/mongo/master/log
conf 파일을 생성
# mongod.conf
# Where and how to store data.
storage:
dbPath: /var/lib/mongodb/master
journal:
enabled: true
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/lib/mongodb/master/log/mongod.log
# network interfaces
net:
port: 26016
bindIp: 127.0.0.1
processManagement:
timeZoneInfo: /usr/share/zoneinfo
fork: true
replication:
replSetName: "replica"
이후 mongodb 에 접속하여 새로운 master 다시 추가.
rs.add( { _id:0,host:"127.0.0.1:26016",priority:2} )
이렇게하면 모두 완료된다..
replicaset 구성방법은 이전글을 참고하시면 됩니다.
https://ospetabyte.tistory.com/571?category=758411
MongoDB 설치 MongoDB replicaset 설정
우분투 18.04 기준으로 되어있습니다. 1. MongoDB 설치 wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add - sudo apt-get install gnupg wget -qO - https://www.mongodb.org/..
ospetabyte.tistory.com
Mongodb 백업및 복구 (2) | 2020.02.21 |
---|---|
Mongodb Field Update Operators (0) | 2020.02.05 |
MongoDB 설치 MongoDB replicaset 설정 (0) | 2020.02.02 |
시간지난데이터 자동삭제 기능 (0) | 2018.08.31 |
MongoDB의 질의 결과를 file에 저장하기 (0) | 2018.08.28 |
pip install virtualenv
virtualenv python
# python 이라는 경로로 가상환경 설치
source bin/activate
실행
아이들이 필요로해서 사는것인데 그걸가지고 장사를 한다니 너무 보기 안좋네요..
그분들도 다 아이들이 있으실껀데. 그래서 굳이 캠을 사지않고 스마트폰으로 가능한 방법이 있어서
이렇게 공유드립니다.
많은분들이 비싸게 캠을 사지 않고 원격 수업을 들었으면 하는마음에서 도메인에 사이트를 올렸습니다.
누구나 보고 쉽게 설치할수있게 설명해놓았습니다.
이렇게 설치하고 제가 테스트한곳들은 웹상에서 캠이 필요로하는 곳들은 테스트했을땐 정상적으로 작동하였습니다.
가장 좋은테스트는 원격수업을 하는 실무에 있는분들이 테스트해줬으면 하는 바램입니다.
제가 어떻게 그분들께 연락을 할수가없으니 이방법이 많이 공유되어 비싸값에 캠을 구매하지 않고
학생들이 정상적으로 수업을 받았으면 하는 마음입니다.
PC에 필요한 다운로드 프로그램 사이트 (iriun):
**주의사항**
스마트폰은 Wifi가 연결되어있어야만합니다. 스마트폰과 PC 의 네트워크가 같은곳에 있어야합니다.
1 - PC START
설치 프로그램 아이콘 실행
2
동의후 Next 버튼
3
Next 버튼
4
Install 버튼
5
체크박스 선택후 Finish 버튼
6 - PC END
해당화면이 실행되었다면 정상적으로 PC 설치 완료
1 - Phone START
휴대폰에서 Google Play 어플 실행
2
ir 만 검색하셔도 아래 추천 검색어가 나오게됩니다.
3
설치 버튼을 눌러줍니다.
4
설치가 완료되면 App을 실행합니다.
5
설치가 완료되면 App을 실행합니다.
6
허용클 눌러줍니다.
7
허용클 눌러줍니다.
8- PHONE END
이제 PC 와 스마트폰이 캠으로연결되었습니다.
ATEN KVM CS62US 로지텍 마우스 인식불가 (1) | 2020.12.11 |
---|---|
프린터 강제삭제 (0) | 2017.01.31 |
마이크단자에서 스피커 (0) | 2016.10.11 |
윈도우7 암호분실시 해제방법 (윈도우7 암호삭제/암호깨기) (35) | 2016.04.22 |
신도리코 ftp 설정하기 (0) | 2015.12.21 |
충격적인 자바스크립트 문법을 보았다...
if(x !==3){
console.log(y);
var y = 5;
if(y === 5){
var x =3;
}
console.log(y);
}
if(x ===3){
console.log(y);
}
이문법을 보고 console.log(y) 에서 오류가 발생할꺼라고 생각했지만. 이문법은 아래와 같이 해석된다.
var x;
var y;
if(x !==3){
console.log(y);
var y = 5;
if(y === 5){
var x =3;
}
console.log(y);
}
if(x ===3){
console.log(y);
}
애초당시 처음 선언했던것처럼 코드를 짜면 안되지만.. 호이스트를 확인하기 위해서.. 보았다..
f();
function f(){
console.log(f);
}
함수역시..
function f(){
console.log(f);
}
f();
json 자료형 (0) | 2020.02.26 |
---|---|
팝업창 띄우지 않기 쿠기 (자바스크립트) (0) | 2020.02.25 |
자바스크립트 slice 요소 복사 (0) | 2018.11.14 |
자바스크립트 splice 배열요소 삭제 (0) | 2018.11.14 |
https://git-scm.com/download/win
Git - Downloading Package
Downloading Git Now What? Now that you have downloaded Git, it's time to start using it.
git-scm.com
설치할때 이렇다할것은 없다 기본 셋팅으로 다음~을 눌러 진행하면 된다.
설치가 완료되면.
Git Bash 를 실행한다.
설치가 정상적으로 되었다면
git --version
위와같이 확인할수있다.
간단한 bash 명령어는 리눅스와 동일하다
git init #깃 경로 지정
vi .gitignore #깃 커밋 제외대상 추가
vi README.md #깃 메인 설명
환경설정
git config --global user.name "Peta"
git config --global user.email "0petabyte@gmail.com"
확인은 git config --list
git add 폴더이름 or 파일명 또는 git add . (모든 파일 추가)
git commit -m "message 를 이곳에 적는다"
git remote (기존에 설정이 안되었다면 아무것도 안나온다.)
git remote add origin https://github.com/TEST/TEST
이제 repository 에 연결완료.
git push origin master 입력하면 push 완료.
삭제
git -rm -r 폴더 git -rm -r file.js
git commit -m 'delete'
git push origin master
깃허브 프로젝트 이름 변경하여 임포트하기. (0) | 2020.02.27 |
---|---|
Git bash 명령어 (0) | 2019.06.27 |
깃허브에서 프로젝트 임포트하려다가 보면 똑같은 프로젝트 이름때문에 . 임포트가 되지않는다..
Some Projects cannot be imported because they already exist in the workspace.
간혹.. 이경우때문에 기존프로젝트 이름을 변경하던가..해서 받곤했는데 가끔보면 너무 불편해서.
가능한 방법을 찾아보았다. 아래처럼 하면 가능하다!
먼저 깃에서 프로젝트를 다운받는다.
그다음 압축을 풀어서 프로젝트 폴더 이름을 변경한다.
그이후에
해당 프로젝트 경로까지 선택하면 바뀐 이름으로 프로젝트를 임포트 할수있다..
생각보다 간단한데.. 검색해도!!
.project 파일 수정해야되서 귀찮더라..
다른 방법이 잘보이지 않는다!! 그래서 직접 이렇게 하면 될것같은데? 싶어서 해본 방법이다.
추가!
프로젝트 임포트후 에러가 뜬다면..
Java version 을 바꾸어주면된다.!
[Git] 깃 허브 Bash 설치 및 기본 셋팅. (0) | 2020.03.04 |
---|---|
Git bash 명령어 (0) | 2019.06.27 |
백업.
mysqldump -u root -p dbname > /root/mariadb/backup.sql
복구
mysql -u root -p dbname < backup.sql
오라클 비번 만료(the password has expired) (0) | 2020.11.04 |
---|---|
오라클 명령어 (0) | 2018.10.15 |
ORA-01034: ORACLE not available 에러 (0) | 2018.07.31 |
자료형 | 종류 | 예제 |
수(Number) | 정수 |
76,197,750, -11, -234 |
실수(고정소수점) |
3.14, -2.717, 45.78 |
|
실수(부동소수점) |
1e4, 2.5e34, 5.67e-9, 7.66E-3 |
|
문자열 | 문자열 |
"1234" "true" "apple-run" "사랑" "\"JSP\"" |
제어문자 |
\b (백 스페이스) \f (폼 피드) \n (개행) \r (캐리지 반환) \t (탭) \" (따움표) \/ (슬래시) \\ (역슬래시) |
|
배열 |
배열은 대괄호[ ] 로 나타냅니다 배열의 각 요소는 기본 자료형이거나 배열, 객체입니다. 각 요소들은 쉼표 , 로 구분합니다 |
"name" : ["홍길동","이순신","임꺽정"] // 대괄호 안에 배열 요소를 콤마 , 로 구분해서 나열합니다. |
객체 |
JSON 개게는 중괄호 {}로 둘러싸서 표현합니다. 쉼표 , 를 사용해 여러 프로퍼티를 포함 할 수 있습니다. |
{ "name" : "홍길동", "age" : 16, "weight" : 67 } // 중괄호 안에 name/value 쌍을 콤마로 구분해서 나열합니다. |
ES6 자바스크립트 호이스트 (0) | 2020.03.06 |
---|---|
팝업창 띄우지 않기 쿠기 (자바스크립트) (0) | 2020.02.25 |
자바스크립트 slice 요소 복사 (0) | 2018.11.14 |
자바스크립트 splice 배열요소 삭제 (0) | 2018.11.14 |
popupTest.html
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
window.onload = pageLoad;
function pageLoad(){
notShowPop = getCookieValue();
if(notShowPop != "true"){
window.open("popUp.html","pop","width=400,height=500,history=no,resizable=no,status=no,scrollbars=yes,menubar=no");
}
}
function getCookieValue(){
var result="false";
if(document.cookie != ""){
cookie = document.cookie.split(";");
for(var i=0; i<cookie.length;i++){
element = cookie[i].split("=");
value=element[0];
value=value.replace(/^\s*/,'');
if(value =="notShowPop"){
result = element[1];
}
}
}
return result;
}
function deleteCookie(){
document.cookie = "notShowPop=" + "false" + ";path=/; expires=-1";
}
</script>
</head>
<body>
<form>
<input type=button value="쿠기삭제" onClick="deleteCookie()">
</form>
</body>
</html>
popUp.html
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
function setPopUpStart(obj){
if(obj.checked == true){
var expireDate = new Date();
expireDate.setMonth(expireDate.getMonth() +1);
document.cookie = "notShowPop="+"true" + ";path=/; expires="+expireDate.toGMTString();
window.close();
}
}
</script>
</head>
<body>
<form>
<input type=checkbox onClick="setPopUpStart(this)">오늘 더이상 팝업창 띄우지 않기
</form>
</body>
</html>
ES6 자바스크립트 호이스트 (0) | 2020.03.06 |
---|---|
json 자료형 (0) | 2020.02.26 |
자바스크립트 slice 요소 복사 (0) | 2018.11.14 |
자바스크립트 splice 배열요소 삭제 (0) | 2018.11.14 |
if문 기본사용법
if [ 값1 조건식 값2 ];then
수행문
fi
if 문 조건문 종류
[ -z ] : 문자열의 길이가 0이면 참
[ -n ] : 문자열의 길이가 0이 아니면 참
[ -eq ] : 값이 같으면 참
[ -ne ] : 값이 다르면 참
[ -gt ] : 값1 > 값2
[ -ge ] : 값1 >= 값2
[ -lt ] : 값1 < 값2
[ -le ] : 값1 <= 값2
[ -a ] : &&연산과 동일 and 연산
[ -o ] : ||연산과 동일 xor 연산
[ -d ] : 파일이 디렉토리면 참
[ -e ] : 파일이 있으면 참
[ -L ] : 파일이 심볼릭 링크면 참
[ -r ] : 파일이 읽기 가능하면 참
[ -s ] : 파일의 크기가 0 보다 크면 참
[ -w ] : 파일이 쓰기 가능하면 참
[ -x ] : 파일이 실행 가능하면 참
[ 파일1 -nt 파일2 ] : 파일1이 파일2보다 최신파일이면 참
[ 파일1 -ot 파일2 ] : 파일1이 파일2보다 이전파일이면 참
[ 파일1 -ef 파일2 ] : 파일1이 파일2랑 같은 파일이면 참
AND문
if [ 값1 조건식 값2 -a 값1 조건식 값2 ];then
수행문
fi
OR문
if [ 값1 조건식 값2 -o 값1 조건식 값2 ];then
수행문
fi
if elif문
if [ 값1 조건식 값2 ]
then
수행문
elif [ 값1 조건식 값2]
then
수행문
fi
리눅스 crontab nano 설정 vi 로 열기 변경 (1) | 2021.02.01 |
---|---|
리눅스 smb 마운트 (1) | 2020.02.23 |
마리아디비 10.1 설치및 초기 셋팅 (0) | 2020.02.20 |
리눅스 톰캣 서버 Scalr 썸네일 오류 (1) | 2020.02.18 |
Ubuntu 18.04 설치후 셋팅 (0) | 2020.02.10 |
smbclinet 설치
sudo apt-get install smbclient cifs-utils
smb 클라이언트 정보 확인
smbclient -L 192.168.0.111 -U%
연결
sudo mount -t cifs //컴퓨터이름(혹은 주소)/공유이름 /공유할/디렉토리
암호가 있을경우
-o username=계정이름,password=암호
리눅스 crontab nano 설정 vi 로 열기 변경 (1) | 2021.02.01 |
---|---|
리눅스 sh 기본 사용법 (0) | 2020.02.24 |
마리아디비 10.1 설치및 초기 셋팅 (0) | 2020.02.20 |
리눅스 톰캣 서버 Scalr 썸네일 오류 (1) | 2020.02.18 |
Ubuntu 18.04 설치후 셋팅 (0) | 2020.02.10 |
mongoDB 백업하기(dump)
mongodump -u user_name -p user_password --authenticationDatabase=admin --out /data/backup/ --db db_name --collection collection_name --gzip
# 옵션 설명
-u : 계정명
-p : 계정의 비밀번호
--authenticationDatabase=admin : 인증
--host : 원격 시 IP 주소 및 포트
--out : Dump 받을 폴더 경로
--db : Dump 받을 DB 선택 (미작성 시 DB 전체)
--collection : Dump 받을 collection(table) 선택 (미작성 시 Collection 전체)
--gzip : Dump 파일 확장자
mongoDB 복구하기(Restore)
mongorestore -u user_name -p user_password --host 192.168.0.100:8000 --authenticationDatabase=admin --gzip --db db_name --collection collection_name /data/backup/collection.bson.gz --drop
# 옵션 설명
-u : 계정명
-p : 계정의 비밀번호
--authenticationDatabase=admin : 인증
--host : 원격 시 IP 주소 및 포트
--db : Restore 할 DB 선택
--collection : Restore 할 collection(table) 선택
--gzip : Restore 파일 확장자
--drop : 백업에 없는 collection 삭제
replicaset Master slave 교체! [master 장애시] (0) | 2020.07.11 |
---|---|
Mongodb Field Update Operators (0) | 2020.02.05 |
MongoDB 설치 MongoDB replicaset 설정 (0) | 2020.02.02 |
시간지난데이터 자동삭제 기능 (0) | 2018.08.31 |
MongoDB의 질의 결과를 file에 저장하기 (0) | 2018.08.28 |
sudo apt-get install mariadb-server
sudo mysql_secure_installation
Set root password? [Y/n] Y
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] n
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] y
셋팅완료후 접속을 하면..
root@peta:/home/peta# mysql -u -root -p
Enter password:
ERROR 1698 (28000): Access denied for user '-root'@'localhost'
접속이 되질 않는다..
설정을 바꾸어주자.
root@peta:/home/peta# mysql
MariaDB [(none)]> use mysql;
MariaDB [mysql]> update user set plugin='' where user='root';
MariaDB [mysql]> flush privileges;
이제 데이터베이스와 계정을 생성하자.
MariaDB [(none)]> create database testDB;
MariaDB [(none)]> create user 'testId'@'%' identified by 'Passwd';
MariaDB [mysql]> grant all privileges on testDB.* to 'testId'@'%';
MariaDB [mysql]> flush privileges;
root@peta:/home/peta# vi /etc/mysql/mariadb.conf.d/50-server.cnf
#문자열 변경
collation-server = utf8mb4_unicode_ci
#외부접속허용
bind-address = 0.0.0.0
이렇게 모든셋팅이 완료되었다.
리눅스 sh 기본 사용법 (0) | 2020.02.24 |
---|---|
리눅스 smb 마운트 (1) | 2020.02.23 |
리눅스 톰캣 서버 Scalr 썸네일 오류 (1) | 2020.02.18 |
Ubuntu 18.04 설치후 셋팅 (0) | 2020.02.10 |
Linux 사용하고 있는 port process 확인 (0) | 2019.07.22 |
18-Feb-2020 20:39:53.622 SEVERE [http-nio-8080-exec-5] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [appServlet] in context with path [] threw exception [Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment] with root cause
java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at java.awt.GraphicsEnvironment.createGE(GraphicsEnvironment.java:103)
at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:82)
at java.awt.image.BufferedImage.createGraphics(BufferedImage.java:1181)
at org.imgscalr.Scalr.scaleImage(Scalr.java:2135)
at org.imgscalr.Scalr.scaleImageIncrementally(Scalr.java:2275)
at org.imgscalr.Scalr.resize(Scalr.java:1711)
at org.imgscalr.Scalr.resize(Scalr.java:1298)
at com.peta.controller.upload.UploadFileUtils.makeThumbnail(UploadFileUtils.java:89)
at com.peta.controller.upload.UploadFileUtils.uploadFile(UploadFileUtils.java:38)
at com.peta.controller.upload.UploadController.uploadAjax(UploadController.java:81)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:888)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:94)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:688)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:609)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:818)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1623)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
권한문제일주 알고 한참을 찾다가보니..
tomcat/bin/catalina.sh 파일에서
JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS"
아래와 같이 변경
JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS -Djava.awt.headless=true"
JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:+DisableExplicitGC"
리눅스 smb 마운트 (1) | 2020.02.23 |
---|---|
마리아디비 10.1 설치및 초기 셋팅 (0) | 2020.02.20 |
Ubuntu 18.04 설치후 셋팅 (0) | 2020.02.10 |
Linux 사용하고 있는 port process 확인 (0) | 2019.07.22 |
VI편집기 명령어 (0) | 2018.08.31 |
우분투 셋팅을 자주하는 경우가 많아서 기록목적으로 포스팅합니다.
원하는 셋팅과 다를수 있습니다.
#English 로 설치할것. 한글 에러..많음..
#sudo passwd 설정
sudo passwd root
#network 툴 설치
sudo apt install net-tools
#ssh 설치
apt-get install openssh-server
vi /etc/ssh/sshd_config
PermitmitRootLogin yes
service ssh restart
#python3.7 클린설치
apt-get update
sudo apt install software-properties-common
sudo apt install python3.7
apt install curl
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
sudo apt-get install python3-distutils
python3.7 get-pip.py
apt install curl
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
sudo apt-get install python3-distutils
python3.7 get-pip.py
#오류발생시
apt search testresources
apt search widgetsnbextension
이후에 다시 python3.7 get-pip.py
#python 명령어로 바로 3.7 실행하기
#which python3.7 로 python 설치 루트 확인후
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.7 3
sudo update-alternatives --config python
#설정할 필요가 없다면 다되었음
#host네임변경
vi /etc/hostname
#ip설정
vi /etc/netplan/01-network-manager-all.yaml
# Let NetworkManager manage all devices on this system
network:
version: 2
renderer: networkd
ethernets:
ens33:
addresses:
- 172.30.1.60/24
gateway4: 172.30.1.254
nameservers:
addresses: [168.126.63.1,8.8.4.4]
netplan apply
#crontab
sudo select-editor
#vi mode 사용할경우는 2번
크론탭에 추가할내용
MAILTO=""
PATH=/usr/local/bin/:/sbin:/bin:/usr/sbin:/usr/bin
#java 설치
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
Java SE Development Kit 8 - Downloads
Java SE Development Kit 8 Downloads Thank you for downloading this release of the Java™ Platform, Standard Edition Development Kit (JDK™). The JDK is a development environment for building applications, applets, and components using the Java programming la
www.oracle.com
/usr/local/java 디렉토리에 받아서 압축 해제
tar -xvzf jdk-8u241-linux-x64.tar.gz
$ sudo vi /etc/profile
JAVA_HOME=/usr/local/java/jdk1.8.0_241
JRE_HOME=/usr/local/java/jdk1.8.0_241
PATH=$PATH:$JRE_HOME/bin:$JAVA_HOME/bin
export JAVA_HOME
export JRE_HOME
export PATH
$sudo update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jdk1.8.0_241/bin/java" 1
$sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/java/jdk1.8.0_241/bin/javac" 1
$sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_241/bin/javaws" 1
$sudo update-alternatives --set java /usr/local/java/jdk1.8.0_241/bin/java
$sudo update-alternatives --set javac /usr/local/java/jdk1.8.0_241/bin/javac
$sudo update-alternatives --set javaws /usr/local/java/jdk1.8.0_241/bin/javaws
설치 확인
#톰캣 설치
whet http://mirror.navercorp.com/apache/tomcat/tomcat-8/v8.5.51/bin/apache-tomcat-8.5.51-fulldocs.tar.gz
tar -xvzf apache-tomcat-8.5.51-fulldocs.tar.gz
/usr/local 에 설치
마리아디비 10.1 설치및 초기 셋팅 (0) | 2020.02.20 |
---|---|
리눅스 톰캣 서버 Scalr 썸네일 오류 (1) | 2020.02.18 |
Linux 사용하고 있는 port process 확인 (0) | 2019.07.22 |
VI편집기 명령어 (0) | 2018.08.31 |
리눅스 .bashrc 이해 / path 사용방법 (0) | 2018.08.28 |
$currentDate | 필드 값을 날짜 또는 시간 소인으로 현재 날짜로 설정합니다. |
$inc | 필드 값을 지정된 양만큼 증가시킵니다. |
$min | 지정된 값이 기존 필드 값보다 작은 경우에만 필드를 업데이트하십시오. |
$max | 지정된 값이 기존 필드 값보다 큰 경우에만 필드를 업데이트합니다. |
$mul | 필드 값에 지정된 양을 곱합니다. |
$rename | 필드 이름을 바꿉니다. |
$set | 문서에서 필드의 값을 설정합니다. |
$setOnInsert | 업데이트로 인해 문서가 삽입되는 경우 필드 값을 설정합니다. 기존 문서를 수정하는 업데이트 작업에는 영향을 미치지 않습니다. |
$unset | 문서에서 지정된 필드를 제거합니다. |
replicaset Master slave 교체! [master 장애시] (0) | 2020.07.11 |
---|---|
Mongodb 백업및 복구 (2) | 2020.02.21 |
MongoDB 설치 MongoDB replicaset 설정 (0) | 2020.02.02 |
시간지난데이터 자동삭제 기능 (0) | 2018.08.31 |
MongoDB의 질의 결과를 file에 저장하기 (0) | 2018.08.28 |
우분투 18.04 기준으로 되어있습니다.
1. MongoDB 설치
wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -
sudo apt-get install gnupg
wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list
sudo apt-get update
sudo apt-get install -y mongodb-org=4.2.3 mongodb-org-server=4.2.3 mongodb-org-shell=4.2.3 mongodb-org-mongos=4.2.3 mongodb-org-tools=4.2.3
위와같이 설치할경우 리눅스에 설치된 디렉토리는
2 . 폴더 생성 및 conf 파일 생성
실행파일
/usr/bin/mongo
설치경로
/var/lib/mongo
설치경로에 3가지의 폴더와 파일을 만들어야한다.
mkdir /var/lib/mongo/master
mkdir /var/lib/mongo/master/log
mkdir /var/lib/mongo/slave1
mkdir /var/lib/mongo/slave1/log
mkdir /var/lib/mongo/arbiter
mkdir /var/lib/mongo/arbiter/log
그다음 위의 경로에 아래의 conf 파일을 각각 생성해준다.
master 파일.
# mongod.conf
# Where and how to store data.
storage:
dbPath: /var/lib/mongodb/master
journal:
enabled: true
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/lib/mongodb/master/log/mongod.log
# network interfaces
net:
port: 26016
bindIp: 127.0.0.1
processManagement:
timeZoneInfo: /usr/share/zoneinfo
fork: true
replication:
replSetName: "replica"
slave 파일.
# mongod.conf
# Where and how to store data.
storage:
dbPath: /var/lib/mongodb/slave1
journal:
enabled: true
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/lib/mongodb/slave1/log/mongod.log
# network interfaces
net:
port: 26026
bindIp: 127.0.0.1
processManagement:
timeZoneInfo: /usr/share/zoneinfo
fork: true
replication:
replSetName: "replica"
arbiter
# mongod.conf
# Where and how to store data.
storage:
dbPath: /var/lib/mongodb/arbiter
journal:
enabled: true
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/lib/mongodb/arbiter/log/mongod.log
# network interfaces
net:
port: 26036
bindIp: 127.0.0.1
processManagement:
timeZoneInfo: /usr/share/zoneinfo
fork: true
replication:
replSetName: "replica"
3. 실행 및 종료
실행명령어
/usr/bin/mongod --config /var/lib/mongodb/master/master.conf
/usr/bin//mongod --config /var/lib/mongodb/slave1/slave1.conf
/usr/bin/mongod --config /var/lib/mongodb/arbiter/arbiter.conf
종료명령어 (종료시에만 입력)
/usr/bin/mongod --shutdown --config /var/lib/mongodb/arbiter/arbiter.conf
/usr/bin/mongod --shutdown --config /var/lib/mongodb/slave1/slave1.conf
/usr/bin/mongod --shutdown --config /var/lib/mongodb/master/master.conf
다음과같은 Shell 이 뜨게되면 아래와 같이 입력한다.
rsconf ={_id : "replica", members:[{_id:0,host:"127.0.0.1:26016",priority:2},{_id:1,host:"127.0.0.1:26026",priority:1},{_id:2,host:"127.0.0.1:26036",priority:1,arbiterOnly:true}]};
이렇게 하면 셋팅완료
아래부분은 보안부분이다.
#외부 접속을 허용하기위해선 bindIp : 0.0.0.0 로 설정해야 한다.
#계정생성 PRIMARY 로 접속하여
> use admin
> db.createUser({
user: 'adminId',
pwd: 'password',
roles: ['root']
})
## 암호화 설정방법.
Linux에서 mongodb 키 파일을 작성하고 모드가 600그대로있는 모든 DB 서버에 복사하십시오 .
openssl rand -base64 741 > mongodb.key
chmod 600 mongodb.key
mongod.conf
security:
authorization: enabled
keyFile: /var/lib/mongodb/mongodb.key
Mongodb 백업및 복구 (2) | 2020.02.21 |
---|---|
Mongodb Field Update Operators (0) | 2020.02.05 |
시간지난데이터 자동삭제 기능 (0) | 2018.08.31 |
MongoDB의 질의 결과를 file에 저장하기 (0) | 2018.08.28 |
MongoDB 예약작업 구현하기 (0) | 2018.08.28 |
<c:forEach items="${ test.numbers }" var="num">
<c:forEach items="${ num.vec }" var="vec">
<td>${ vec }</td>
</c:forEach>
</c:forEach>
스프링 Controller에서 Model에 배열 데이터를 담아서 View로 전달한다면
View에서는 jstl forEach 구문을 이용해서 접근할 수 있다.
<c:forEach items="${ test.numbers }" var="num">
<td>${ num }</td>
</c:forEach>
물론 이중구문을 이용해 배열안의 배열까지 접근이 가능하다.
forEach 구문을 사용안하고 배열 중 한 요소만을 출력하고자 한다면 다음과 같이 작성하면된다.
<c:out value="${ test.num[1] }" />
num배열에서 2번째 요소가 출력된다.
배열 사이즈를 알고 싶을때는 다음과 같이 작성한다.
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<c:out value="${fn:length(test.num)}" />
Spring[스프링] 페이징 처리 (0) | 2019.11.02 |
---|---|
스프링 Tiles 셋팅 (0) | 2019.10.26 |
스프링 Mysql 연동 초기셋팅. (0) | 2019.10.25 |
Spring 스프링 MVC 애노테이션 종류 (0) | 2019.07.26 |
Git Pull 에러 / 이클립스 Git 주의사항 (0) | 2018.10.02 |
from urllib.request import urlopen
from urllib.error import HTTPError
from bs4 import BeautifulSoup
def getTitle(url):
try:
html = urlopen(url)
except HTTPError as e:
print(e)
pass
try:
bsObj = BeautifulSoup(html.read(),"html.parser")
#span class 가 red 이거나 green 인 경우
#nameList = bsObj.findAll("span",{"class":{"green","red"}})
#for name in nameList:
# content = name.get_text()
# print(content)
# text 중에 the prince 가 몇번 들어가있는지 len 으로 갯수 확인
#nameList = bsObj.findAll(text="the prince")
#print(len(nameList))
#id 가 text 인 값을 모두 찾아서 출력. 배열로 들어가기떄문에 선택적 출력을 할경우는 배열번지 선택
allText = bsObj.findAll(id='text')
print(allText)
#print(allText[0].get_text())
except AttributeError as e:
print(e)
pass
print('Search Start=================')
url = 'http://www.pythonscraping.com/pages/warandpeace.html'
getTitle(url)
print('Search End=================')
Python BeautifulSoup 기본 parser ver:python3 (0) | 2018.12.23 |
---|---|
Xpath 사용법 (0) | 2018.08.25 |
Criteria.java
package com.peta.domain;
public class Criteria {
private int page;
private int perPageNum;
private int groupnum;
public int getGroupnum() {
return groupnum;
}
public void setGroupnum(int groupnum) {
this.groupnum = groupnum;
}
public Criteria() {
this.page =1;
this.perPageNum =10;
}
public int getPage() {
return page;
}
public void setPage(int page) {
if(page <= 0) {
this.page = 1;
return;
}
this.page = page;
}
public int getPerPageNum() {
return this.perPageNum;
}
public void setPerPageNum(int perPageNum) {
if(perPageNum <=0 || perPageNum >100) {
this.perPageNum = 10;
}
this.perPageNum = perPageNum;
}
public int getPageStart() {
return (this.page - 1) * perPageNum;
}
@Override
public String toString() {
return "Criteria [page=" + page + ", perPageNum=" + perPageNum + "]";
}
}
SearchCriteria.java
package com.peta.domain;
public class SearchCriteria extends Criteria{
private String searchType;
private String keyword;
public String getSearchType() {
return searchType;
}
public void setSearchType(String searchType) {
this.searchType = searchType;
}
public String getKeyword() {
return keyword;
}
public void setKeyword(String keyword) {
this.keyword = keyword;
}
@Override
public String toString() {
return "SearchCriteria [searchType=" + searchType + ", keyword=" + keyword + "]";
}
}
PageMaker.java
package com.peta.domain;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import org.springframework.web.util.UriComponents;
import org.springframework.web.util.UriComponentsBuilder;
public class PageMaker {
private int totalCount;
private int startPage;
private int endPage;
private boolean prev;
private boolean next;
//한화면에 보이는 페이지 갯수
private int displayPageNum =10;
private Criteria cri;
public void setCri(Criteria cri) {
this.cri =cri;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
calcData();
}
private void calcData() {
endPage = (int) (Math.ceil(cri.getPage() / (double) displayPageNum) * displayPageNum);
startPage = (endPage-displayPageNum) + 1;
int tempEndPage = (int) (Math.ceil(totalCount / (double) cri.getPerPageNum()));
if (endPage > tempEndPage) {
endPage = tempEndPage;
}
prev = startPage == 1? false:true;
next = endPage * cri.getPerPageNum() >= totalCount ? false :true;
}
public int getStartPage() {
return startPage;
}
public void setStartPage(int startPage) {
this.startPage = startPage;
}
public int getEndPage() {
return endPage;
}
public void setEndPage(int endPage) {
this.endPage = endPage;
}
public boolean isPrev() {
return prev;
}
public void setPrev(boolean prev) {
this.prev = prev;
}
public boolean isNext() {
return next;
}
public void setNext(boolean next) {
this.next = next;
}
public int getDisplayPageNum() {
return displayPageNum;
}
public void setDisplayPageNum(int displayPageNum) {
this.displayPageNum = displayPageNum;
}
public int getTotalCount() {
return totalCount;
}
public Criteria getCri() {
return cri;
}
@Override
public String toString() {
return "PageMaker [totalCount=" + totalCount + ", startPage=" + startPage + ", endPage=" + endPage + ", prev="
+ prev + ", next=" + next + ", displayPageNum=" + displayPageNum + ", cri=" + cri + "]";
}
public String makeQuery(int page) {
UriComponents uriComponents =
UriComponentsBuilder.newInstance()
.queryParam("page", page)
.queryParam("perPageNum", cri.getPerPageNum())
.build();
return uriComponents.toUriString();
}
public String makeSearch(int page) {
UriComponents uriComponents =
UriComponentsBuilder.newInstance()
.queryParam("page", page)
.queryParam("perPageNum", cri.getPerPageNum())
.queryParam("groupnum", cri.getGroupnum())
.queryParam("searchType", ((SearchCriteria) cri).getSearchType())
.queryParam("keyword", encoding(((SearchCriteria) cri).getKeyword())).build();
return uriComponents.toUriString();
}
private String encoding(String keyword) {
if(keyword ==null || keyword.trim().length() ==0) {
return "";
}
try {
return URLEncoder.encode(keyword,"UTF-8");
}catch(UnsupportedEncodingException e) {
return "";
}
}
}
Mapper.xml
특이사항 : if 문의 입력을 and 로 시작시키기위해 favnum >0 을 미리 조건을 준다. CDATA 사용
<select id="listCriteria" resultType="com.peta.domain.UrlVO">
<![CDATA[
select favnum,url,memo,userid,groupnum,nowdate from fav_list where favnum > 0
]]>
<if test="groupnum != 0">
and groupnum = #{groupnum}
</if>
<if test="searchType != null">
<if test="searchType == 'u'.toString()">
and url like CONCAT('%', #{keyword}, '%')
</if>
<if test="searchType == 'm'.toString()">
and memo like CONCAT('%', #{keyword}, '%')
</if>
<if test="searchType == 'um'.toString()">
and (url like CONCAT('%', #{keyword}, '%') OR memo like CONCAT('%', #{keyword}, '%'))
</if>
</if>
order by favnum desc
limit #{pageStart},#{perPageNum}
</select>
<select id="countPaging" resultType="int">
<![CDATA[
select count(favnum) from fav_list where favnum > 0
]]>
<if test="groupnum != 0">
AND groupnum = #{groupnum}
</if>
<if test="searchType != null">
<if test="searchType == 'u'.toString()">
and url like CONCAT('%', #{keyword}, '%')
</if>
<if test="searchType == 'm'.toString()">
and memo like CONCAT('%', #{keyword}, '%')
</if>
<if test="searchType == 'um'.toString()">
and (url like CONCAT('%', #{keyword}, '%') OR memo like CONCAT('%', #{keyword}, '%'))
</if>
</if>
</select>
DAO
public List<CodeVO> listCriteria(Criteria cri) throws Exception;
public int countPaging(Criteria cri) throws Exception;
DAOImpl
@Override
public List<CodeVO> listCriteria(Criteria cri) throws Exception{
return session.selectList(namespace+".listCriteria",cri);
}
@Override
public int countPaging(Criteria cri) throws Exception{
return session.selectOne(namespace+".countPaging",cri);
}
Service
public List<CodeVO> listCriteria(Criteria cri) throws Exception;
public int countPaging(Criteria cri) throws Exception;
ServiceImpl
@Override
public List<CodeVO> listCriteria(Criteria cri) throws Exception{
return dao.listCriteria(cri);
}
@Override
public int countPaging(Criteria cri) throws Exception{
return dao.countPaging(cri);
}
jsp page
<div class="container">
<ul class="pagination justify-content-center">
<c:if test="${pageMaker.prev}">
<li class="page-item"><a class="page-link" href="list${pageMaker.makeSearch(pageMaker.startPage -1)}">Previous</a></li>
</c:if>
<c:forEach begin="${pageMaker.startPage}" end="${pageMaker.endPage}" var="idx">
<li class="page-item <c:out value="${pageMaker.cri.page == idx?'class = active':''}"/>" >
<a class="page-link" href="list${pageMaker.makeSearch(idx)}">${idx}</a>
</li>
</c:forEach>
<c:if test="${pageMaker.next && pageMaker.endPage > 0}">
<li><a class="page-link" href="list${pageMaker.makeSearch(pageMaker.endPage +1)}">Next</a></li>
</c:if>
</ul>
</div>
Controller
@RequestMapping(value="/code", method= {RequestMethod.GET,RequestMethod.POST})
public String codeGroupList(Model model,CodeVO vo,SearchCriteria cri) throws Exception {
logger.info("Code Group list start................");
String codeType = "code";
int groupnum = vo.getGroupnum();
model.addAttribute("nowgroupnum",groupnum);
model.addAttribute("codeGroup",service.codeGroupList());
model.addAttribute("codeType",codeType);
model.addAttribute("list",service.listCriteria(cri));
model.addAttribute("groupcount",service.groupCount(groupnum));
model.addAttribute("nowgroupname",service.groupName(groupnum));
PageMaker pageMaker = new PageMaker();
pageMaker.setCri(cri);
model.addAttribute("cri",cri);
pageMaker.setTotalCount(service.countPaging(cri));
model.addAttribute("pageMaker",pageMaker);
return "codeboard/codeList.page";
}
[JSP] View로 전달된 배열 접근하기 (0) | 2020.01.28 |
---|---|
스프링 Tiles 셋팅 (0) | 2019.10.26 |
스프링 Mysql 연동 초기셋팅. (0) | 2019.10.25 |
Spring 스프링 MVC 애노테이션 종류 (0) | 2019.07.26 |
Git Pull 에러 / 이클립스 Git 주의사항 (0) | 2018.10.02 |