2018년 7월 15일 일요일
HTTP 상태 코드 관련 링크
참고
<위키 HTTP 상태코드>
https://ko.wikipedia.org/wiki/HTTP_%EC%83%81%ED%83%9C_%EC%BD%94%EB%93%9C
<기초적인 HTTP상태코드>
https://item4.github.io/2018-02-08/Basic-HTTP-Status-Codes/
https://developer.mozilla.org/ko/docs/Web/HTTP/Status
2018년 7월 8일 일요일
Cot_pr1 개선하기 (진행 중) - LastUpdated 10/02
포트폴리오용 커뮤니티 웹페이지를 개선시키려고한다.
전에 존재하던 저장소가 gitignore 설정테스트하다가 커밋들이 꼬여서 너무 더러워졌다..
소스트리 사용해서 편하게 하려다가 망함 ㅠㅠㅠ
>>새로 프로젝트 생성해서 처음부터 ignore, branch 등 설정 제대로 해서 만들어보기!
-- 7/8 생성 완료
-- 7/8 생성 완료
1. 오류페이지 생성 --- 7/15 완료
(403, 404, 405, 500에러시 이동하는 페이지 생성
web.xml에
형태로 설정하여 에러코드 발생 시 error 컨트롤러로 이동하게 수정
403 - 권한 부족
404 - 페이지를 찾을 수 없음
405 - 잘못된 요청방식
(예를 들어 POST 방식으로 요청을 받는 서버에 GET 요청을 보내는 경우, 또는 읽기 전용 리소스에 PUT 요청을 보내는 경우)
500 - 서버 에러
)
(403, 404, 405, 500에러시 이동하는 페이지 생성
web.xml에
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<!-- 에러 페이지 -->
<error-page>
<error-code>403</error-code>
<location>/error/403</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/error/404</location>
</error-page>
<error-page>
<error-code>405</error-code>
<location>/error/405</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error/500</location>
</error-page>
| cs |
403 - 권한 부족
404 - 페이지를 찾을 수 없음
405 - 잘못된 요청방식
(예를 들어 POST 방식으로 요청을 받는 서버에 GET 요청을 보내는 경우, 또는 읽기 전용 리소스에 PUT 요청을 보내는 경우)
500 - 서버 에러
)
2. 회원가입/ 로그인(연동추가) ++ 회원 전체적인 부분 다시 개선(회원정보,권한,로그인유지 등)
3. 도메인
4. ajax부분 다시
5. xss필터
6. 공통코드로 관리할 것(권한, 게시판구분 등 ) --- 8/12 진행 중
----------7/29
-code테이블 생성
게시물, 회원코드로 관리할 것
(공통 코드란??)
코드로 관리하여 게시판 및 컨트롤러 통합해도 될듯
++++++8/12
현재형태: 각 게시판마다 글쓰기, 수정, 뷰, 댓글, 등 다 따로 있음.
일단 기존 것 그대로 나두고, 새로운 틀 생성해서 진행하기
>>
테이블들 코드로 관리하고, 게시판형태 하나로 통합해서 body만 각 게시판에
맞게 바꾸기 + 게시물 리스트, 페이징 처리할 때 ajax 써보기
>>NoN빨리 마무리하고 진행하기
7. service / dao / controller 수정(인터페이스만들기)
----------7/29
-code테이블 생성
게시물, 회원코드로 관리할 것
(공통 코드란??)
코드로 관리하여 게시판 및 컨트롤러 통합해도 될듯
++++++8/12
현재형태: 각 게시판마다 글쓰기, 수정, 뷰, 댓글, 등 다 따로 있음.
일단 기존 것 그대로 나두고, 새로운 틀 생성해서 진행하기
>>
테이블들 코드로 관리하고, 게시판형태 하나로 통합해서 body만 각 게시판에
맞게 바꾸기 + 게시물 리스트, 페이징 처리할 때 ajax 써보기
>>NoN빨리 마무리하고 진행하기
7. service / dao / controller 수정(인터페이스만들기)
8. 스프링시큐리티 수정
(++관리자 로그인 후 관리자 페이지 이동 시 비밀번호 입력(의미없음 - 수정 필요)
9. 로그출력 추가 --- 10/02 완료
logback 으로 간단한 로그 남기는 것 추가함.
(로그 남기기)
11. +++계속 추가
(++관리자 로그인 후 관리자 페이지 이동 시 비밀번호 입력(의미없음 - 수정 필요)
9. 로그출력 추가 --- 10/02 완료
logback 으로 간단한 로그 남기는 것 추가함.
(로그 남기기)
10. 트랜잭션 설정하기
(NoN 플젝에 엑셀파일 읽는 것을 스케줄러로 처리하면좋을듯?)
2018년 7월 1일 일요일
리눅스 기본 명령어
cp file1 file2 : 파일1을 파일2로 복사하기
ls : 디렉토리와 파일정보 표시
ls -art는 현재 디렉토리에서 파일이 최종 수정된 시간의 내림차순으로 정렬된 모든 파일의 이름을 나열합니다. 따라서 가장 최근파일이 맨 아래에 표시됩니다.
cd :디렉토리를 변경
http://nuninaya.tistory.com/158
https://www.mireene.com/webimg/linux_tip1.htm
ls : 디렉토리와 파일정보 표시
<옵션>
-l 파일에 대한 정보(파일 허용권, 소유자, 그룹, 크기, 날짜)를 긴 형식으로 보여줍니다.
-a 는 모든 파일을 지정합니다(디렉토리의 히든 파일도 보여줍니다).
-i 파일의 'inode'도 같이 보여줍니다.
-t 최종 수정된 시간별로 정렬합니다.
-r 파일을 역순, 즉 내림차순으로 배열합니다.
-u 변경되지 않았더라도 최근에 엑세스했던 파일들을 보여준다. 이 t나 u옵션으로 최근 에 다루었던 파일을 찾는데 유용하게 쓸 수 있습니다.
-F 파일의 특성을 보여줍니다. 이름 뒤에 디렉토리면 /를 실행파일이면 *, 심블릭 링크된 파일이면 @를 붙여줍니다.
-R 하위 디렉토리의 파일도 모두 보여줍니다.
-C 컬럼별로 파일을 보여줍니다.
-w 컬럼수로 가로의 크기를 설정합니다.
-m 가로로 간단히 출력합니다.
-- color=yes 서브디렉토리를 구별하기 위해 color로 보여집니다.
리눅스의 명령어에서 이런 옵션들은 대개 여러 개를 같이 써 줄 수 있다.
ex) -a -l은 -al과 같이 쓸 수 있습니다..ls -art는 현재 디렉토리에서 파일이 최종 수정된 시간의 내림차순으로 정렬된 모든 파일의 이름을 나열합니다. 따라서 가장 최근파일이 맨 아래에 표시됩니다.
cd :디렉토리를 변경
cd ABC : 하부 디렉토리인 ABC으로 들어감.
cd .. : 상위디렉토리로 이동
cd .. : 상위디렉토리로 이동
cd 또는 cd ~ : 어느곳에서든지 자기 홈디렉토리로 바로 이동
cd /webker : 현재 작업중인 디렉토리의 하위나 상위 디렉토리가
아닌 다른 디렉토리(webker)로 이동하려면 /로
시작해서 경로이름을 입력하면 된다.
cd /webker : 현재 작업중인 디렉토리의 하위나 상위 디렉토리가
아닌 다른 디렉토리(webker)로 이동하려면 /로
시작해서 경로이름을 입력하면 된다.
http://nuninaya.tistory.com/158
https://www.mireene.com/webimg/linux_tip1.htm
2018년 6월 23일 토요일
오라클 SQL문법
group by
특정 컬럼을 기준으로 그룹화하는 것
ex)
>>부서테이블의 부서 이름을 기준으로하여 사원테이블의 사원번호를 카운트하여
>>dept테이블에서 deptno가 10이면 'ACCOUNTING' , 20이면 'RESEARCH' ,30이면 'SALES' 나머지는 'OPERATIONS' 출력
**효율문제 좀 더 찾아보기
concat
>>'' 문자를 1번부터 5번까지출력 ==> abcde
출처:
특정 컬럼을 기준으로 그룹화하는 것
ex)
1
2
3
|
SELECT department_id, SUM(salary)
FROM employees
GROUP BY department_id
| cs |
>>department_id을 기준으로 empolyees 테이블에서의 부서id 별 급여 합계 구하기
**select 와 group by에 기준으로 삼고자하는 컬럼넣으면 됨
having
having절은 group by 절에 다음에 위치하여 group by한 결과를 대상으로 다시 필터를 거는 역할
ex)
1
2
3
4
5
|
SELECT dept.deptname, COUNT(emp.empno) "사원수"
FROM employees emp, department dept
WHERE emp.deptno = dept.deptno
GROUP BY dept.deptname
HAVING COUNT(emp.empno) > 5;
| cs |
사원수가 5명이 넘는 부서별 사원수 보여주기
case when ~ then ~ (else ~)
조건에 따라 여러 경우 중 하나를 선택
case 컬럼 when 조건1 then 값1 when 조건2 then 값2 .... end)
1
2
3
4
5
6
7
8
|
SELECT deptno,
CASE deptno
WHEN 10 THEN 'ACCOUNTING'
WHEN 20 THEN 'RESEARCH'
WHEN 30 THEN 'SALES'
ELSE 'OPERATIONS'
END as "Dept Name"
FROM dept;
| cs |
>>dept테이블에서 deptno가 10이면 'ACCOUNTING' , 20이면 'RESEARCH' ,30이면 'SALES' 나머지는 'OPERATIONS' 출력
**when 뒤에 sal > 100 와 같이 비교하는 연산 넣어도 됨
decode
값 비교 연산 (오라클에서만 지원하는듯?)
DECODE(비교 값 , 조건1, 조건1일때 값, 조건2, 조건2일때 값, ...)
1
2
3
4
|
SELECT deptno, DECODE(deptno, 10 , 'ACCOUNTING' ,
20 , 'RESEARCH' ,
30 , 'SALES', 'OPERATIONS') name
FROM dept;
| cs |
**GREATEST, LEAST 함수를 사용해서 비교처리도 가능한듯(제한적??)
바인드 변수
bind 변수란?
Bind변수는 실행계획이 세워진 후 그 값이 결정되는 변수이며 값이 바뀌더라도 실행계획에는 영향을 주지 않는다. 콜론 : 을 사용
1
|
SELECT * FROM emp WHERE empno = :var ;
| cs |
>>쿼리가 실행될 때 마다 원하는 사원번호를 입력해서 emp에서 사원 검색
**효율문제 좀 더 찾아보기
concat
두 문자열의 타입이 동일할 경우에는 문제가 없지만, 두 문자열의 타입이 다를경우에는 데이터 손실이 생길 수 있기때문에 두 문자열 타입 중 문자 결합 후 손실이 없는 쪽으로 리턴됩니다.
substr
원하는 길이 만큰 문자(String)를 자를 때 사용하는 함수
1
|
SELECT SUBSTR('abcdefg' , 1, 5) res FROM DUAL;
| cs |
>> 숫자가 하나만 있으면 => 숫자 부터 끝까지
>> -숫자 => 뒤에서부터
WITH 구문
with 구문이란?
서브쿼리 블럭에 이름을 지정할 수있게 해주고, with구문내의 쿼리의 결과가(서브쿼리)가 여러번 사용될 때 유용하다. 오라클 9이상에서 지원한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
WITH AA AS
(SELECT ROWNUM AS SEQ, 'TEST1' AS NAME, SYSDATE
FROM DUAL
UNION ALL
SELECT ROWNUM AS SEQ, 'TEST2' AS NAME, SYSDATE
FROM DUAL
UNION ALL
SELECT ROWNUM AS SEQ, 'TEST3' AS NAME, SYSDATE FROM DUAL),
BB AS
(SELECT ROWNUM AS SEQ, 'TEST1' AS NAME, SYSDATE
FROM DUAL
UNION ALL
SELECT ROWNUM AS SEQ, 'TEST2' AS NAME, SYSDATE
FROM DUAL
UNION ALL
SELECT ROWNUM AS SEQ, 'TEST3' AS NAME, SYSDATE FROM DUAL)
SELECT * FROM AA, BB WHERE AA.NAME=BB.NAME
| cs |
NVL 함수
NVL(컬럼, 치환할 값) 으로 쓰며
컬럼값이 null 이면 치환할 값으로 바꾸어주는 함수이다.
NVL2(컬럼, e1, e2)
컬럼값이 null 이 아니면 e1 값, null 이면 e2 값으로 바꿔주는 함수이다.
1
2
|
SELECT empno, NVL2(deptid, 1, 0) dept
FROM emp;
| cs |
>>테이블에서 deptid가 null값이아니면 1, null이면 0으로 변환
TRUNC 함수
trunc함수는 원하는 소숫점 자리수 만큼만 자를 수 있다.
1
|
select trunc( 1.23456, 2 ) from dual;
| cs |
>> 1.23 만 나옴
이를 날짜에도 사용할 수 있다.
2018년 6월 13일 수요일
mahout 알고리즘
아파치 머하웃(Apache Mahout)은 아파치 소프트웨어 재단의 한 프로젝트로서 분산처리가 가능하고 확장성을 가진 기계학습용 라이브러리이다. 맵리듀스를 이용하는 아파치 하둡위에 적용되며[1][2] 비슷한 특성을 가진 데이터들을 분류하고 정의하는 작업 및 협업 필터링 분야에 집중한다.
머하웃(Mahout)의 사전적 의미는 코끼리를 부리는 사람을 말한다.
스터디프로젝트에 구독한 강좌를 기반으로 추천해주는 시스템을 구현하고 싶어서 추천 알고리즘을 찾는도중 아파치의 머하웃 알고리즘을 찾았다.
3번 예제를 실행해보았지만 아직 감이 잡히지 않으므로 공부 더 더ㅓ더더더
**사용자/아이템이름/선호값 데이터를 바탕으로 추천을 해주는 것 같음...,.,.
++++++++++++++++
6/30
3번 예제에서 아이템 기반 추천을 해보았다. 실행 결과 모든 아이템들의 유사성?선호도? 값이 출력된다. 데이터가 누적이 될 수록 1번 아이템을 선택했을 때 추천해주는 아이템이 달라지겠지만
결국 1번 아이템을 선택했을 때 추천해주는 아이템은 모든 사용자에게 똑같이 나타나는 것 같음. >>사용자 개별의 추천은 아닌 것 같지만 사용자 기반 추천 알고리즘은 이해하지 못했으므로 일단 이것을 프로젝트에 적용해보고 추후에 생각해 볼 것
7/8
ItemRecommend를 실행하면 리스트(recommendations)에 값들이 저장됨
우리 프로젝트에서는 코스를 클릭하였을 때 밑에 추천 코스들을 표시할 계획이므로 코스번호를 받아서 ItemRecommend를 실행해서 특정 코스번호와 연관된 코스 5개정도 뽑아서 코스 정보 보여주게 하면 될 듯?
7/29
프로젝트에 적용하여 코스를 클릭하였을 때 밑에 추천 코스들을 뜨게하였다.
기본적으로 5개를 보여주도록 하였고, 현재는 데이터를 예제로 썼기 때문에 프로젝트에 적용하였을 때 추천해주는 번호가 실제 강좌에 없는 것도 있기 때문에 5개가 전부 뜨지않는다.
todo
- 추천방식 이대로할 것인지?
- 코스이름을 가져오는 방식 너무 코드가 더러움 (개선해야함)
- 엑셀의 기록된 데이터를 기준으로 추천이 진행되므로
디비의 데이터를 엑셀로 정리 or u.data 파일에 저장하고 엑셀로 변환
(데이터 갱신 주기 설정 - 스케쥴러도 좋은듯... )
예)
사용자들의 101~ 106번 아이템에 대한 관계 >>>이 데이터를 통해 추천값 계산
아이템 번호 / 아이템 번호 / 아이템에 따른 대상 아이템에 대한 선호값
1.0에 높을 수록 선호도가 높은 것 같음
>>익명의 사용자가 101번을 선택하면 제일 1.0에 가까운 102번을 추천
(데이터가 적어서 1.0가 표시됨. 예제의 큰 데이터에서는 제일 높은 값이 0.5였다!!)
8/15
현재 csv를 기준으로 추천을 해주므로,
데이터베이스의 한 테이블을 기준으로 그 테이블 내용을 .data나 .csv 파일로 뽑아서
그 파일을 읽어 추천을 적용하면 될듯..
기준 테이블 고민하기: 구독 or 수강평
구독으로 설정하면 선호도를 무조건 5로 놔야함
수강평으로 설정하면... 수강평 등록할 때 한사람당 한번씩만 해야하고, 각 회원 번호를 새 테이블에 넣어야할듯..??
*데이터베이스 테이블의 데이터를 csv 형태로 내보내기
https://gist.github.com/gaerae/6219678
8/19
사용자가 수강평을 남길때 마다 새 테이블에 사용자번호 / 코스번호 / 점수
를 입력하게 하였고, 이 테이블을 특정 폴더에 .csv 파일로 뽑았다.
이 파일을 통해 추천을 해주도록 하였고, 파일의 갱신은 관리자계정이 버튼을 통해
갱신을 하도록 하였다.
사용자 기반 알고리즘과 선호도계산 로직에 대해 좀 더 알아보면 좋을 것같다..
<예제>
1. 어려운 예제
https://github.com/jensfischerhh/spring-boot-starter-recommender
2. 스프링에 적용시킨 추천 알고리즘
https://github.com/hoho0443/recommend_mahout_postgresql_spring
3. 간단한 실습
http://over153cm.tistory.com/entry/%EB%A8%B8%ED%95%98%EC%9B%83-recommender-%EC%8B%A4%EC%8A%B5%ED%95%98%EA%B8%B0?category=459417
<머하웃 기본개념>
http://blog.naver.com/PostView.nhn?blogId=koys007&logNo=220754318580&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView
2018년 5월 22일 화요일
MySQL Error Code 1175 관련
Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.
update safe모드로 설정되있어서 업데이트시 키 컬럼을 사용하지 않으면 업데이트 할수 없다... 라는 것 같다
방법
update safe모드로 설정되있어서 업데이트시 키 컬럼을 사용하지 않으면 업데이트 할수 없다... 라는 것 같다
방법
SET SQL_SAFE_UPDATES =0;
라는 쿼리문을 입력한다.
or
워크벤치의 Edit - Preferences 에서 빨간 원을 체크 해제 하면 된다.
2018년 5월 17일 목요일
mongodb 설치
예전에 설치했던 mongodb가 접속이 안되서 새로 설치하였다
환경변수를 등록하고
C:\data\db
이 경로에 폴더를 설치해줘야한다
cmd로 mongod를 입력하고
참고
http://solarisailab.com/archives/1605
환경변수를 등록하고
C:\data\db
이 경로에 폴더를 설치해줘야한다
cmd로 mongod를 입력하고
이때 이 창은 그대로 두고 새 cmd창을 열어 mongo 입력하면 접속완료
참고
http://solarisailab.com/archives/1605
피드 구독하기:
글 (Atom)
-
포폴로 제출한 홈페이지를 잠깐 들어가봤는데 내가 설정하지 않은 alert창이 떠서 당황하였다. 인사담당자님께서 테스트하신 것같았는데 글 제목들은 공백이었고 내가 입력한적이 없는 alert창이 자꾸 발생하였다. 어디서 자꾸 발생하나 개발자도구로...
-
로그란? (log) 애플리케이션의 상태를 관찰할 수 있도록 애플리케이션이 제공하는 정보 log4j, logback, log4j2 셋 다 java 로깅 유틸리티이다. 스프링프레임워크에서는 예전에는 commons.logging을 기...
-
김영한님의 JPA 프로그래밍 기본기 강의 회사에 입사한 지 얼마 안됬을 때 사수가 ORM에 대해 한번 훑어보라며, 책을 추천해준 적이 있었다. 그 때는 정신도 없어서 나중에 봐야겠다... 라고만 생각했는데, 인프런 인강과 다른 블로그에 있는 스...