최근 H2 DataBase를 테스트 환경으로 구성하여 프로젝트를 진행하는 것이 있었다.

 

Spring Boot에 Connection정보를 입력하기 위해서 h2 db를 설치를 해두었는데..

설치는 어렵지 않았지만 db connection이 되지 않았다.

 

 

 

 

찾아보니,

 

원래대로라면 h2 서비스 기동 후, 기본 설정으로 H2 Embeded로 되어있는데,

H2 Embeded는 DB가 없는 경우, 데이터베이스 파일을 자동 생성해준 뒤 연결을 해주는 구조라고 한다.

 

하지만 최근에 보안상의 이슈로 인해서 파일을 생성해주지 않고 있고, 그로 인하여 데이터베이스 파일을 찾을 수 없으니 연결이 되지 않는 것이다.

 

해결 방법은 의외로 간단한데,

Config 정보는 Generic H2 (Embedded)

jdbc url이 jdbc:h2:~/test로 초기 지정이 되어있을텐데,

 

Config 정보를 Generic H2 (Server)로 바꾸면

jdbc url이 jdbc:h2:tcp://localhost/~/test 이렇게 바뀔 것이다.

 

이후에 사용자 폴더로 들어가서 (/Users/{username})

"test.mv.db"파일을 만들어준 뒤 연결하면 정상적으로 접속이 되는 것을 볼 수 있다.

 

 

 

위 내용은 mac os 기준 작성이 되었으므로 windows기준은 다를 수도 있습니다.

'-Java' 카테고리의 다른 글

Boxing, UnBoxing 그리고 Wrapper  (0) 2017.10.03
JUnit  (0) 2017.09.29
Naming Convention, Camel Case  (0) 2017.09.26
String 비교  (0) 2017.08.24





Boxing & UnBoxing


Primitive 자료형을 Wrapper 클래스로 변환시켜주는 것을 Boxing이라 한다.

그 반대를 Unboxing이라고 한다.





Primitive 자료형, Wrapper 클래스?


Primitive 자료형은 int, double, char 등 과 같은 우리가 변수의 자료형에 많이 사용하는 것이다.

Wrapper 클래스는 처음들어봤다. Integer, Boolean, Character .. 등등 있댄다. Object형식이다.


하튼 Wrapper 클래스가 Primitive 자료형의 시초라고 생각하면 된다.


1
2
int x = 10;
Integer i = new Integer(20);
cs

첫 번째 줄은 우리가 흔히 쓰는 Primitive 자료형의 선언방식이고 

두 번째 줄은 Wrapper 클래스의 선언 방식이다.


뒤쪽의 인자에는 대응 되는 Primitive 데이터를 넣어주면 된다.


Wrapper 클래스는 여러 함수를 지원해주는데 대부분의 함수는 다른 자료형으로 변환시켜 return 시켜주는 역할을 한다.

함수는 알아서 검색해서.. 


아, 궁금한건 Wrapper을 어따 쓰느냐인데.. ArrayList, HashMap 등 컬렉션에 사용되는 제네릭에 타입 설정을 할 때 사용한단다.





동아리 친구에게 JUnit이라는 신 문물을 배웠다.


단위 테스트 Framwork인 JUnit은 전체적인 코드를 컴파일 하지 않고도 테스트를 해주는 고마운 녀석이다.

JUnit은 assert- 메소드를 이용해서 테스트를 해주는데 결과는 성공, 실패 두가지로만 나타내준다.




Eclipse에서JUnit 사용하기



어떤 사람은 JUnit이 import 되어있을지도 모르지만 일단 JAR 추가부터 해준다.



1. 프로젝트를 생성 한 뒤, 오른쪽 클릭을 눌러 Properties를 클릭한다.





2. JAVA BulidPath를 클릭한다.


위 사진을 보면 Add JARs.. 가 있는데 클릭하면 리스트에 JUnit이 존재한다. 그걸 추가해주면 된다.



다음은 개발자마다 JUnit Test 폴더를 만드는 방식이 다르니 편한 것을 선택하면 된다.



다음과 같이 프로젝트가 구성되어있다. Test폴더를 하나 더 생성하는데. Soruce folder로 만들어야 한다.

이때 src Soruce folder과 같은 level에 존재해야한다.

test Source Folder가 만들어졌다면 아래에 동일한 패키지를 작성해준다.

나는 sis라는 패키지이므로 똑같이 만들어주겠다.


자. 이제 80퍼 가까이 한 것 같다.

이제 Student.java의 Test파일을 만들어야하는데. Package Explorer에서 Student.java파일을 클릭하고 

상단의 툴바에     요런 버튼을 찾아서 화살표를 클릭하면 JUnit Test Case 가 뙄 하고 나온다.



과감히 클릭한다.




위와 같은 창이 뜨면 성공이다.

아. Source folder는 원래 저렇게 안나온다. sis/src가 기본 폴더로 설정 되어있는데 

우리는 sis/test에 만들어줄거라 sis/test로 바꿔준 뒤 Finish를 누르면 파일이 생성된다.






파일을 열면 저런 코드가 작성되있을 것이다. ( 스샷을 잘못 찍었네요. 원래 정상적이면 Class가 StudentTest라고 떠야합니다. )


일단 어노테이션부터 보자.

@Test는 아래 코드를 테스트 메서드로 정의하는 것이다.

@setup, @before, @after 등등 여러 어노테이션이 존재하는데 나중에 정리할거다.. 귀찮


하튼 테스트 메서드의 이름은 한글로 적어도 무방하다!

그리고 여러 테스트를 할 수 있는데 assert만 적고 이클립스의 Assist기능을 이용하면 여러 함수가 나오는 것을 볼 수있다.

필요한 것을 가져다 쓰면 된다.


JUnit을 실행하려면 해당 파일을 오른쪽 클릭 -> Run As에 보면 JUnit Test를 눌러 진행하면 된다.



성공적으로 테스트를 완료했다면 초록색으로 뜨고, 아니면 빨간색으로 뜬다.



항상 느끼는거지만 변수명이든 함수명이든 작명센스가 개똥이다.


조금이라도 나아지려고 Naming Convention을 알아봤다.



JAVA Naming Convention


1. Class    

클래스의 첫 글자는 대문자로 작성한다. 또한 클래스의 이름은 명사로 작성한다.

예를 들자면 Split, Convert, Event 등.


2. interface

인터페이스의 첫 글자는 대문자로 작성한다. 인터페이스의 이름은 형용사로 작성한다.

예를 들자면 Runnable.. 형용사는 잘 몰라서 하나밖에 생각 안난다.


3. method

메소드의 첫 단어는 소문자로 작성한다. 메소드의 이름은 동사로 작성한다.

print, setValue 등등..


4. variable

변수의 첫 단어는 소문자로 작성한다.


5. constant

상수는 전체를 대문자로 작성한다.




CamelCase


사실 카멜케이스는 별거 없다. 

여러 단어가 들어간 Name에는 두번 째 단어 첫 글자를 대문자로 표현한다.

중간에 대문자가 뽈록 튀어나와서 낙타의 혹을 닮았다고 카멜케이스란다.

여태 몰랐던 내용인데 알게되어서 적어본다.

String은 자료형이 아니라 객체라는 사실은 알고 있었을텐데

String만 예외적으로 new를 이용해 객체를 생성하지 않아도 된다한다.


1
2
String str1 = new String("str"// String Object generate
String str2 = "str" // simple case
cs




문자열을 비교할 때 equals()함수를 쓰는 이유를 알아봤다.

결론만 말하자면 == 연산자로는 String객체에 저장된 문자열을 비교할 수 없기 때문이다.

한마디로 "str"이라는 문자열은 리터럴이라 주소를 가지고 메모리에 할당 되는데

new를 이용해 문자열을 저장하면 메모리에 할당되는 동시에 그 메모리에 문자열이 저장된다.

2번째 줄과 같이 단순 대입을 한다면 "str"의 주소를 가져오는 꼴이다.


따라서 str1, str2의 내용은 같아 보여도 ==연산자는 주소를 가지고 비교하기에 (이때 주소는 JVM에 할당된 영역이다.)

서로 다른 것으로 인지한다.

1
2
3
4
5
6
7
8
9
String str1 = new String("str"// String Object generate
String str2 = "str" // simple case
 
str1 == str2 // false
str1 == "str" // false
str2 == "str" // true
str1.equals(str2) // true
str1.equals("str"// true
str2.equals("str"// true
cs



+ Recent posts