
[ JDBC - 자바와 마리아DB 연결 쪽 ]
@Test 어노테이션

@Test 어노테이션을 붙이니까 main 없이도 해당 메소드를 실행할 수 있게 됨! * @Teset를 메소드 위에 붙이면 해당 메소드를 테스트 메소드로 인식하고 실행할 수 있다. * 저 세모 버튼을 누르면 해당 메소드를 실행 가능!
@Test 어노테이션 특징 3가지
1. void 밖에 못쓴다. return 불가! = 메소드가 값을 반환하지 않고 실행 결과를 확인하기 위한 용도로만 사용 2. 매개 변수를 적을 수 없다. 넣을 수가 없다! 3. @Test 어노테이션을 붙인 메소드는 개별적으로 실행 가능! = 테스트 메소드 간의 독립성을 보장

@Test는 메소드 위에 기입하고, 메소드에 void, 매개 변수 없죠?
@Test 어노테이션을 왜 사용할 수 있나?

처음에 프로젝트를 Gradle을 사용하여 만들었기 때문! Gradle!!! 덕분에 JUnit과 같은 테스트 프레임워크를 쉽게 사용할 수 있다.
JUnit = 자바로 테스트할 수 있는 도구.
메서드를 독립적으로 실행할 수 있게 해준다
1-1. test 폴더에 먼저 test 해보자 (디버깅까지 다 해보자)
원래, 하나의 프로젝트에 main은 하나만 있어야한다. 때문에 @Test 를 사용!

본코드 : main 파일 / test코드 : test 파일 나눠서 코딩을 하자
1. test폴더에 클래스와 메소드를 작성하자
test에는 본코드에 쓴 것과 동일한 클래스명 등을 작성하고, 뒤에 _test 라고만 붙인다.
이게 바로 test코드의 컨벤션! 개발자들끼리의 약속!

이렇게 본코드에 DBConnection을 쓰고, getInstance 메소드를 작성했다. 그러면!


test폴더에 클래스를 만들 때, DBConnectionTest 라고 적는다. 본코드와 이름은 똑같은데 test만 붙인다 메서드는 _test 이렇게. 컨벤션! (@Test 어노테이션은 메소드 위에 붙이기)
2. 통신을 하기 위한 필드값 작성

네트워크 통신의 기본 5가지 !! (인증 받아야 하는 경우에)
★ IP, PORT, ID, PASSWORD, 프로토콜 ★ 을 넣어준다!
인증이 필요한 네트워크 통신에서는 사용자의 신원을 확인하고 인증 절차를 거쳐야 하기 때문에 ID, PASSWORD도 함께 필요하다.
url에 프로토콜, ip, 포트 번호가 다 들어있기에 url을 만들어준다. * 마리아DB의 프로토콜 jdbc:mariadb: -> 이런걸 챗GPT에게 물어보는 것! * ID와 Password는 url에 포함되지 않아서 따로 만들어주기. (필드 = 클래스 내부에 선언된 변수)
[ jdbc:mariadb://본인아이피:포트/데이터베이스명 ] * 내 컴퓨터에 접속할거면 ip란에 "localhost"나 루프백ip를 기입 * 데이터베이스명 = DB안의 데이터베이스 중 어떤 데이터베이스에 접근할 건지 설정할 수 있음 * URL에 데이터베이스명을 명시하면 해당 데이터베이스에 접근할 수 있다 * 접속 후에 SQL 문을 사용하여 다른 데이터베이스로 전환할 수도 있다. : "USE 데이터베이스명;" 자세한건... 해당 문서를 읽어보면 안다.
* 파일 서버는 주로 파일 전송을 위해 FTP(File Transfer Protocol) 프로토콜을 사용
* 웹 서버는 HTTP(Hypertext Transfer Protocol) 프로토콜을 사용
* 오라클 데이터베이스는 오라클 프로토콜을 사용
* 마리아DB는 마리아DB의 고유한 프로토콜을 사용
= DB마다 프로토콜이 다르구나!!
+) 원래라면…

이렇게, 메소드에 리턴값이 들어가는데, test폴더에선 불가능하니 패스 아무튼, Connection은 프로토콜이 적용된 소켓(Socket)이다!!!
디버깅 하기

catch 저거는 Exception으로 바꿔주자. 불안하니까... 저 throw는 jvm 한테 해결하라고 던지는 것이다

이건 오류가 아니다.. 붉은색이라고 다 오류라고 생가하지 말자. 오류 안나면 끝! 이 아니라, 유저네임을 틀려본다거나… 계속 시도해보기
오류 모음
테스트 코드 완료
package db; import org.junit.jupiter.api.Test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DBConnectionTest { @Test public void getInstance_test() { String username = "root"; String password = "1234"; String url = "jdbc:mariadb://localhost:3306/cosdb"; //프로토콜이 적용된 소켓 try { Connection conn = DriverManager.getConnection(url, username, password); //여기에 원래는 return이 있는데 애는 void라 return ㄴㄴ 안됨 그래서 없음 } catch (Exception e) { throw new RuntimeException(e); } } }
Share article