Board  ALL

문제상황
        - Mysql 클러스터링이 깨져 2번 DB 복구 이후, 웹사이트 접속시 데이터가 여러가지 섞여서 나오는 등 불규칙한 상태가 발생.
        - memcached cache 데이터의 동기화 문제인듯 보임.
 
조치방법
  1. 관리 페이지에서 memcached 를 초기화 하였으나 동일 현상 발생
  2. 각 서버의 memcached와 tomcat instance를 재시작 후 문제 해결
                /$ service memcached stop 

                /$ service memcached start

                xxx/tomcat/bin$ ./shutdown.sh

                xxx/tomcat/bin$ ./startup.sh
 
 
 



Dev Jinwon's Share
f
t
java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails



Error Log Msg : 

java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`schema name`.`table name`, CONSTRAINT `FK_aaaaaaaaaaaaaaaaa` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`))

Caution : 

자식 테이블에 입력하려는 ID가 부모 테이블에 없는 경우가 존재하였음.


Reference : 

https://stackoverflow.com/questions/5005388/cannot-add-or-update-a-child-row-a-foreign-key-constraint-fails
https://stackoverrun.com/ko/q/3240756



Dev Jinwon's Share
f
t
[tomcat] fail to scan...


mac OS 환경에서 tomcat을 실행시에 file to scan...이라고 하면서 에러 코드가 쭉쭉 출력되는 경우가 있었다.

실행 자체에는 문제가 되는 건 아니지만 거슬렸는데 tomcat 디렉토리의 libs 디렉토리 하위에 '._' 로 시작되는 파일들이 숨어있었고

이 파일들을 tomcat에서는 scan하려다가 메시지를 뱉어낸 것 같다.

삭제해주니 문제는 해결..

Ref.] https://sarc.io/index.php/tomcat/193-tomcat-failed-to-scan-file-from-classloader-hierarchy




Dev Jinwon's Share
f
t

대만 타오위안 공항 1터미널 3층에 가면 

쉴 수 있는 작은 라운지 공간과 24시간 영업하는 모스버거 (mos burger)가 있다.

새벽 비행으로 공항 노숙을 하는 이들에게 커피 한 잔 하며 쉴 수 있는 좋은 공간이다.



Jinwon's Share
f
t
HttpURLConnection 객체를 이용, 임의의 URL을 호출시 403 에러가 발생했다.
googling을 해보니 아래 링크에서 User-Agent header를 설정하지 않아 발생할 수 있다고 하여
추가를 해보니 문제가 해결.

Ref.]





Dev Jinwon's Share
f
t
캘리포니아 윈터 리그는 미국 내 최고의 교육 리그로, 선수들에게 전직 메이저 리그 야구 선수들과 현 프로 리그 감독들과 감독들에 의해 훈련 받을 기회를 제공합니다.

만약 여러분이 이번 겨울에 뛸 교육용 리그를 찾고 있다면, 캘리포니아 윈터 리그는 여러분을 위한 곳입니다!

2019년 CWL 시즌은 2월 7일부터 3월 3일까지입니다.


캘리포니아윈터리그's Share
f
t
To-do


캘리포니아윈터리그's Share
f
t

Dev Jinwon's Share
f
t
SQL Injection 방어 방법


실무 면접에서 해당 질문에 대해 받았는데 이미 이전 질문들에 머리가 하얗게 되어버린터..
대답못하면 그건 그냥 모르는거다고 인정하자.
그리고 소잃고 외양간 고치는 심정으로 정리를 해보자..

1. Prepared Statement의 사용
개발자가 먼저 모든 SQL코드를 정의한 다음 나중에 각 매개 변수를 조회에 전달하도록 한다. 이 코드 스타일을 사용하여 데이터베이스는 어떤 사용자 입력이 제공되는지에 관계 없이 코드 및 데이터를 구별할 수 있다.

구문을 다시 붙여 공격자가 공격자가 SQL명령을 삽입한 경우에도 쿼리의 의도를 변경하지 못하도록 할 수 있다. 공격자가 'Tom'또는'1'의 사용자 ID를 입력하는 경우, 매개 변수화된 쿼리는 취약하지 않고 대신에 'Tom1'과 일치하는 전체 사용자 이름을 찾는다.

2. Stored Procedure
Stored Prodecure가 항상 SQL주입으로부터 안전한 것은 아니다. 단, 표준 Sored Procedure 프로그래밍 구조는 안전하게 구현되었을 때 Prepared Statement 쿼리를 사용하는 것과 같은 효과를 가지고 있다. 이들은 개발자가 표준을 벗어난 작업을 수행하지 않는 한 자동으로 매개 변수가 매개 변수화된 SQL문만 작성하도록 개발자가 요구한다.Prepared Statement와 Sored Procedure의 차이점은 저장된 절차에 대한 SQL코드가 정의되어 데이터베이스 자체에 저장된 다음 응용 프로그램에서 호출된다는 점이다.

3. White List
사용자 입력을 날짜, 숫자, boolean, 열거된 유형 등과 같은 문자열이 아닌 형태로 변환한 후 쿼리에 추가할 값을 선택하는 데 사용할 수 있다.

4. Escaping Input
이 기법은 위의 어느 것도 실현 가능하지 않을 때 마지막 수단으로만 사용해야 한다. 입력 유효성 검사는 다른 방어에 비해 약하기 때문에 아마도 더 나은 선택일 것이고 우리는 이 방법이 모든 상황에서 모든 SQL주입을 막을 것이라고 보장할 수 없다. 이 기술은 사용자 입력을 쿼리에 올리기 전에 회피하기 위한 것이다. 

(상세한 내용은 계속 추가하기로...)

Ref.] 
SQL Injection Prevention Cheat Sheet : https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet
SQL Injection 방어 방법 : http://dal4segno.github.io/web-security/sql-injection/


Dev Jinwon's Share
f
t
마름모 만들기


- 코드
public static void rhombus(int num) {
for (int i=0;i<num;i++)
{
for (int j=0; j<num;j++)
{
if (i<=num/2)// 위쪽 영역
{
if (i+j<=num/2-1)// 왼쪽 위 공백찍기
System.out.print(" ");
else if (j-i>=num/2+1) // 오른쪽 위 공백찍기
System.out.print(" ");
else
System.out.print("*");// *찍기
}
else if (i>num/2) //아래쪽 영역
{
if (i-j>=num/2+1) //왼쪽 밑 공백
System.out.print(" ");
else if (i+j>=num/2*3+1)//오른쪽 밑 공백
System.out.print(" ");
else
System.out.print("*"); // *찍기
}
}
System.out.println();//줄바꿈
}
}



Dev Jinwon's Share
f
t