Monthly Archives: May 2013

Jquery를 이용한 ajax에서 파라미터가 [](배열) 인 경우 파라미터 보내는 방법

http://blog.anyframejava.org/?p=344
요기보고 해결…

자바스크립트 코드

//삭제버튼 클릭
function deleteButtonOnClick()
{
    // deleteCheckBoxClass라는 클래스명을 가진 체크박스중 체크된 체크박스 확인
    var checkedValues = $('.deleteCheckBoxClass:checked').map(function () {
        return this.value;
    }).get();

//배열의 널체크는 이런식으로 해야됨..[0]번값
	if (!checkedValues[0])
	{
		alert('체크박스를 선택하고 클릭하거라');
		return;
	}

	if (confirm('선택한 값을 지울까?'))
	{
        var param =
        {
            topicIds : checkedValues
        };
//요 부분이 핵심...
        jQuery.ajaxSettings.traditional = true;
        $.post("./ajax/delete.ajax", param, successFunction).error(failureFunction);
	}
}

저 핵심부분이 빠지면 컨트롤러에 값이 제대로 전달되지 않는다. 트래디셔널이라고 하는거 보면 새로운 방법이 뭔가 나온모양인데 잘 모르겠다.

 

 

 

 

 

Postgresql SQL update query – column value to another column

한컬럼의 값을 다른 컬럼으로 복사하기

데이터 이동 방향
dept_name = dept_code

 

create query

create table department(
  dept_id bigint,
  dept_code varchar(100),
  dept_name varchar(100)
)

update query

--가장쉬운방법
update department a
set dept_name = b.dept_code
from department b
where a.dept_id = b.dept_id
-- 조인을 이용
update department a
set dept_name = c.dept_code
from department b,
(
  select dept_id, dept_code from department
) c where a.dept_id = c.dept_id
-- 명시적인 inner join 이용... 은 잘 안된다.

 

한 테이블을 값을 이용해서 다른테이블 업데이트하기

셀렉트 쿼리처럼 해서 사용하면된다.

update user t1
set phone=t2.phone, address=t2.level
from 
	employee t2
where
	t1.email = t2.email

다른테이블의 값을 조인해서 다른 테이블 업데이트하기

update user t1
set phone=t2.phone, address=t2.level
from 
	employee t2,
	seller t3
where
	t1.email = t2.email and
	t2.email = t3.email

하이버네이트에 생겨야 하는 기능들

1. Comment

디비에 커맨트가 안 달아진다. 불편하게…

2. GlobalColumn
공통 컬럼

class User {
  Long id;
  @column(name="username",nullable=false,length=50)
  String username;
}

class Player {
  Long user_id;
}

class LoginLog {
  @Column(name="Username",length=255)
  String username;
}

player은 user와 fk로 묶어놓기 때문에 별도로 username 을 저장하지 않는다.

log데이터는 fk로 묶지 않는 경우가 많기 때문에 userid를 저장하기보다는 username을 저장하는게 좋다. 이런경우…. username은 모두 동일한 구조를 갖는게 좋은데… 코딩하다보면 위처럼.. 섞인다.

이럴경우 공통값을 클래스로 선언해서 미리 등록해놓고 사용하면 이런 문제를 해결할 수 있다.

 

class CommonColumn {
  @Column(name="username",length=50)
  String username;
}

class User {
  Long id;
  CommonColumn.username;
}

class Player {
  Long user_id;
}

class LoginLog {
  CommonColumn.username;
}

 

언제 시간나면 추가해봐야겠다.

현재 없는 기능이니 삽질하지맙시다.

 

Ubuntu(12.04|14.04) Postgresql9.x 설치 후 기본 설정

1. postgresql.conf 편집

버전에 따라 다른데 대략 비슷한 경로에 있다.

$sudo nano /etc/postgresql/8.4/main/postgresql.conf

메모리 사용이나 기타 설정도 본 서버에 맞게 설정을 해주면 좋지만 개발용이라면 대충해도 된다. 대부분 기본값으로 되어있고 이것만 바꿔주면 된다.

#IP목록
listen_addresses = '*'
port = 5432
#요즘은 기본값이 on인데 아닌경우도 있을 수 있다
password_encryption = on

2. pg_hba.conf
접속방식분류TYPE / DATABASE / 사용자USER / 접근위치IP정보ADDRESS / 인증방식METHOD을 미리 정의하고 이 방법대로만 접근을 제한하는 설정파일

기본값은 local접근은 비밀번호 없이 가능, 관리자는  postgres계정으로 가능(우분투12.04 , 14.04 의경우)

$ sudo nano /etc/postgresql/8.4/main/pg_hba.conf

# TYPE DATABASE USER CIDR-ADDRESS METHOD

#한개 아이피에서 md5로 접근가능하도록 설정
host all all ip.ip.ip.ip/32 md5
# 192.168.0.x에서 md5로 접근가능하도록 설정
host all all 192.168.0.0/24 md5

md5는 암호 peer는 암호없이...
고정아이피인 경우 remote서버도 peer로 해놓으면 암호없이 사용가능하다.

3. 사용자 추가

# 리눅스 postgresql 계정을 이용해서 postgres이름으로 pg로그인 : 기본설정에서 이 계정은 비밀번호 없이 로그인이 가능하게 설정이 되어 있었다
$sudo -u postgres psql postgres

# 사용자 : testuser, 비밀번호 : testpassword 생성
postgres=# create user testuser with password 'testpassword';
#CREATE ROLE 이라는 메세지가 나옴

# 디비 : testdb 를 생성
postgres=# create database testdb;
#CREATE DATABASE 라는 메시지가 나옴

#postgres계정에 비밀번호 설정 pg_hba에서 원격서버에서는 비밀번호가 있어야 로그인이 가능하도록 설정했기 때문에 여기서 설정.
postgres=# ALTER USER postgres WITH ENCRYPTED PASSWORD '설정할패스워드';

#psql종료
postgres=# \q

================참고자료들================

사용자추가
http://www.postgresql.org/docs/8.4/interactive/app-createuser.html

DB추가
http://www.postgresql.org/docs/8.4/interactive/app-createdb.html

================검색키================

최초작성 : ubuntu 12.04, postgresql 9.1
최근수정 : ubuntu 14.04, postgresql 9.3

구글 블로거Blogger에 신텍스 하이라이트Syntaxhilight 적용하기

구글 블로거는 의외로 이런부분이 쉽게 사용할 수 있게 되어 있질 않다.
버튼하나로 처리할 수 있게 돼 있으면 좋을텐데
구글은 기술회사라서 그런지… 기획력이 상당히 약하다.

설정이 좀 성가시다.

요즘 많이 사용하는 syntaxhilighter를 사용하도록 한다.

1. 첫번째로 http://alexgorbatchev.com/SyntaxHighlighter/ 접속
소스코드 다운로드

2. www.blogger.com/home 접속
그림 순서대로 클릭클릭 클릭

 

 

3. html태그의 </body>바로위에 다음 코드를 삽입한다.
<head>안쪽에 삽입해도 되는데 body안에 넣는게 요즘의 트렌드. 고수의 길


 	 	

완료후 다음 코드를 html모드로 해서 넣으면

<pre class=”brush:java; smart-tabs:true”>
public static void main(String args[]){
System.out.println(“HelloVenus”);
}
</pre>

성공한 경우 다음과 같이 출력된다.

public static void main(String args[]){
  System.out.println("HelloVenus");
}

자신이 사용하는 언어의 brush가 적용되지 않는 경우에는 이 페이지를 참고해서 추가하면 된다.

http://alexgorbatchev.com/SyntaxHighlighter/manual/brushes/


					

스프링Spring – 하이버네이트Hibernate 연동 개발시에 설정 주의점

1. 테스트용으로 sql파일을 import하는 경우

hibernate.hbm2ddl.import_file = “META-INF/sql/user.sql,META-INF/sql/auth.sql”
이렇게 파일명을 정확히 적어줘야 한다.

“classpath:/META-INF/sql/user.sql”처럼 classpath라고 적으면 오류가 발생한다.
*.sql처럼 regex도 인식하지 못한다.

 

2. Annotation을 이용한 Sequence 생성시

@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "user_id_seq")
@SequenceGenerator(name="user_id_seq", sequenceName = "user_id_seq")
@Column(name = "UserId")
private Long id;

GenerationType.AUTO로 해야 mysql에서  auto_increament가 적용된다. Generation.SEQUENCE라고 하면 SEQUENCE기능이 없는 mysql에서는 오류가 발생한다.

DB에 시퀀스가 생성이 되도 postgresql에서 insert쿼리를 사용시 자동으로 시퀀스가 default로 insert되지 않는다.

insert시에 nextval(‘user_id_seq’)를 명시해줘야하는 불편함이 있다. 오라클은 테스트를 안해봤지만 마찬가지일거라 생각되니 고민하지말고 바로 노가다를 시작…

 

Java 1.6 과 Java 1.7 하위호환

두 가지 버전을 섞어서 사용하면 Language Level 오류가 발생한다.

6.0 Override in interfaces
7.0 Diamonds, ARM, multi-catch etc.

의 옵션….

다른 버전으로 컴파일된 라이브러리를 사용하면 ClassFormatException이 발생할 수 있다.
아마도….

java는 아직도 6이 대세지만… 벌써 8.0의 스펙도 잡혀있는 것 같다.
8.0 Lambdas, type annotaions, etc.

오라클 early access
http://www.oracle.com/technetwork/java/javase/downloads/ea-jsp-142245.html

https://jdk8.java.net/
http://openjdk.java.net/projects/jdk8/

Maven Deploy to Nexus

1. pom.xml편집

여기저기 할게 많은데… 이 부분이 중요
xml에서 deploy할 nexus주소를 적어준다

    <distributionManagement>
        <repository>
            <id>beansugar-release</id>
            <url>http://{your nexus address}/{releaseRepoId}</url>
        </repository>
        <snapshotRepository>
            <id>beansugar-snapshot</id>
            <url>http://{your nexus address}/{snapshotRepoId}</url>
        </snapshotRepository>
    </distributionManagement>

2. nexus셋팅

Repo를 하나 생성

deploy계정 생성

3. settings.xml 셋팅

기본위치 ~/.m2/settings.xml
사용자는 pom.xml에 기록한 nexus 아이디 패스워드 deploy 권한을 가지고 있는 계정
id는 사용자 아이디가 아닌 repository id

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
    <servers>
        <server>
            <id>{release repo id}</id>
            <username>{userId}</username>
            <password>{userPassword}</password>
        </server>
        <server>
            <id>{snapshot repo id}</id>
            <username>{userId}</username>
            <password>{userPassword}</password>
        </server>
    </servers>
</settings>

4. maven testcase 오류나는 경우

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
      <testFailureIgnore>true</testFailureIgnore>
    </configuration>
</plugin>

5. 기타 배포오류

404 주소를 잘못친듯

502 주소를 잘못친듯

503 권한 안줘서 user_role, privileges 설정에서 권한을 줘야한다. 배포는 edit 권한