1. JDBC (Java Database Connectivity)
자바에서 JDBC는 자바 애플리케이션과 데이터베이스 간의 연결을 제공하는 API이다. JDBC를 사용하면 데이터베이스에서 데이터를 쿼리하고 업데이트하는 등의 작업을 할 수 있다. JDBC는 데이터베이스에 독립적인 인터페이스를 제공하기 때문에, 다양한 종류의 데이터베이스에 대해 동일한 API를 사용할 수 있다.
💡 JDBC의 주요 구성 요소
- DriverManager
JDBC 드라이버를 관리하고 데이터베이스 연결을 위한 연결을 설정한다. - Connection
데이터베이스와의 연결을 나타낸다. 모든 커뮤니케이션은 이 연결 객체를 통해 이루어진다. - Statement
SQL 명령을 데이터베이스로 전달하는 데 사용되는 객체이다. 세 가지 주요 타입이 있다.- Statement
기본적인 SQL 쿼리 실행에 사용된다. - PreparedStatment
매개변수화된 쿼리를 실행할 때 사용된다.
SQL 인젝션 공격으로부터 보호할 수 있고 성능이 더 우수하다. - CallableStatement
데이터베이스 스토어드 프로시저를 호출할 때 사용된다.
- Statement
- ResultSet
SQL 쿼리의 결과를 저장하는 객체이다. 결과를 순회하며 데이터에 접근할 수 있다.
💡 JDBC 사용 단계
1️⃣ 드라이버 로드
사용할 데이터베이스의 JDBC드라이버를 로드한다. 이는 Class.forName() 메소드를 사용하여 로드할 수 있다.
Class.forName("org.mariadb.jdbc.Driver");
2️⃣ 연결 설정
DriverManager를 사용하여 데이터베이스에 연결한다.
Connection con = DriverManager.getConnection(url, user, password);
3️⃣ Statement 생성
연결을 통해 Statement 또는 PreparedStatment 객체를 생성한다.
Statement stmt = con.createStatement();
PreparedStatment pstmt = con.PreparedStatment("INSERT INTO mytable VALUES(?, ?)");
4️⃣ 쿼리 실행
SQL 쿼리를 실행하고 필요한 경우 ResultSet으로 결과를 받는다.
ResultSet rs = stmt.executeQuery("SELECT * FROM mytable");
pstmt.setInt(1, value1);
pstmt.setString(2, value2);
pstmt.executeUpdate();
5️⃣ 결과 처리
ResultSet을 통해 결과 데이터를 처리한다.
while (rs.next()) {
String data = rs.getString("column_name");
// 데이터 처리
}
6️⃣ 자원 해제
사용한 리소스(연결 스테이트먼트, 결과 집합)을 닫는다.
rs.close();
stmt.close();
con.close();
📍 JDBC와 관련된 주의사항
- 리소스 관리
JDBC를 사용할 때 데이터베이스 연결과 관련된 리소스는 사용 후 반드시 닫아야 한다.
이것은 보통 finally 블록에서 이루어진다. - 예외 처리
JDBC코드는 데이터베이스 연결과 SQL 실행 중 예외가 발생할 수 있으므로, 적절한 예외 처리가 필요하다.
[Java] JDBC란 무엇인가? - Java Database Connectivity
JDBC란? JDBC(Java Database Connectivity)는 Java 기반 애플리케이션의 데이터를 데이터베이스에 저장 및 업데이트하거나, 데이터베이스에 저장된 데이터를 Java에서 사용할 수 있도록 하는 자바 API이다. JDB
ittrue.tistory.com
- 출처 : ittrue
JDBC란?
Java Database Connectivity자바언어와 DB를 연결해주는 통로와 같은 것.자바를 이용한 DB접속과 SQL문장의 실행, 그리고 실행 결과로 얻어진 데이터의 핸들링을 제공하는 방법과 절차에 관한 규약.자바
velog.io
- 출처 : jungnoeun.log
2. Connection
자바의 Connection 인터페이스는 데이터베이스에 대한 연결을 나타내며, JDBC API의 핵심 요소 중 하나이다.
이 연결을 통해 SQL 명령을 실행하고, 데이터베이스의 상태를 관리하며, 트랜잭션을 제어할 수 있다.
💡 Connection 인터페이스의 주요 메소드
메소드명 | 설명 |
close() | 데이터베이스와의 연결을 종료한다. 사용이 끝난 연결은 반드시 닫아야 한다. |
commit() | 모든 변경사항을 데이터베이스에 커밋한다. 자동 커밋이 비활성화된 경우에 사용된다. |
rollback() | 마지막 커밋 이후의 모든 변경사항을 취소한다. 트랜잭션 처리에서 유용하다. |
createStatement() | Statement 객체를 생성하여 SQL문을 데이터베이스에 보낼 수 있게 한다. |
prepareStatement(String sql) | 주어진 SQL 문을 미리 컴파일하고, prepareStatement 객체를 생성한다. |
setAutoCommit(boolean autoCommit) | 호출하는 연결에 대해 자동 커밋 모드를 설정 또는 해제한다. |
getAutoCommit() | 현재 자동 커밋 모드의 상태를 반환한다. |
setSavepoint() | 현재 트랜잭션 내에서 저장점을 설정한다. 나중에 rollback() 호출 시 이 저장점으로 돌아갈 수 있다. |
setTransactionIsolation(int level) | 이 연결의 트랜잭션 격리 수준을 설정한다. 이는 다른 연결에서 트랜잭션이 이 데이터를 어떻게 볼 수 있는지 결정한다. |
isValid(int timeout) | 연결이 여전히 유효한지 확인한다. 지정된 시간(초) 내에 데이터베이스의 응답을 기다린다. |
💻 Connection 객체 사용하기 예제 코드
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class JdbcExample {
public static void main(String[] args) {
Connection con = null;
try {
// 데이터베이스 드라이버 로드
Class.forName("org.mariadb.jdbc.Driver");
// 연결 생성
con = DriverManager.getConnection("jdbc:mariadb://localhost/testdb", "user", "password");
// 자동 커밋 비활성화
con.setAutoCommit(false);
// Statement 생성 및 SQL 실행
Statement stmt = con.createStatement();
stmt.executeUpdate("INSERT INTO MyTable VALUES (1, 'Example')");
// 변경사항 커밋
con.commit();
} catch (Exception e) {
try {
if (con != null) con.rollback(); // 오류 발생 시 롤백
} catch (SQLException ex) {
ex.printStackTrace();
}
e.printStackTrace();
} finally {
try {
if (con != null) con.close(); // 연결 종료
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
}
JDBC Connection 객체 생성하기
자바와 DB를 연결하기 위해서 connection 객체를 생성한다 영어로 따지면 ABC같이 아주 기초중에 기초...
blog.naver.com
- 출처 : 불만두
3. Statement
Statement 인터페이스는 SQL 문을 데이터베이스에 보내기 위한 기능을 제공한다.
주로 정적 SQL 문을 실행할 때 사용되고 세 가지 주요 형태의 Statement가 있다.
- Statement
기본적인 SQL 쿼리를 실행할 때 사용된다. - PreparedStatement
미리 컴파일된 SQL 문을 실행할 때 사용되며, 동적인 쿼리 실행에 적합하다.
매개변수를 포함하는 SQL을 안전하게 실행할 수 있다. - CallableStatement
데이터베이스 스토어드 프로시저를 실행할 때 사용된다.
메소드 | 설명 |
executeQuery(String sql) | 주로 SELECT 쿼리를 실행하고 반환된 데이터를 ResultSet 객체로 리턴한다. |
executeUpdate(String sql) | INSERT, UPDATE, DELETE 등의 SQL문을 실행하고 영향을 받은 행의 수를 반환한다. |
close() | Statement 객체를 닫고, 관련된 리소스를 해제한다. |
setInt(int parameterIndex, int value) | PreparedStatement에서 사용되며, 지정된 인덱스에 정수 값을 설정한다. |
setString(int parameterIndex, String value) |
PreparedStatement에서 사용되며, 지정된 인덱스에 문자열 값을 설정한다. |
execute(String sql) | 어떠한 유형의 SQL문도 실행할 수 있으며, 반환 값이 true면 결과를 ResultSet으로 받을 수 있다. |
getGeneratedKeys() | 실행된 INSERT 문으로 생성된 키를 리턴한다. |
[JDBC] 자바에서 sql문 처리하기 (Statement)
이번 주제에서 알아볼 것은 Java에서 SQL을 처리하는 방법을 알아보겠습니다. Statement (java.sql.Statement)는 Connection으로 연결한 객체에게, Query 작업을 실행하기 위한 객체. - 정적인 쿼리를 처리할 수
aricode.tistory.com
- 출처 : aricode
4. ResultSet
ResultSet 인터페이스는 SQL 쿼리의 결과로 반환된 데이터를 나타내는 객체이다.
데이터베이스 쿼리의 결과를 하나씩 또는 일괄적으로 읽을 수 있다.
메소드 | 설명 |
next() | ResultSet에서 다음 행으로 이동한다. 더 이상 행이 없으면 false를 반환한다. |
getString(int columnIndex) | 지정된 열의 값을 문자열로 가져온다. |
getInt(int columnIndex) | 지정된 열의 값을 정수로 가져온다. |
getDouble(int columnIndex) | 지정된 열의 값을 실수로 가져온다. |
close() | ResultSet을 닫고 관련된 리소스를 해제한다. |
wasNull() | 마지막으로 읽은 열 값이 SQL NULL이었는지 확인한다. |
getMetaData() |
ResultSet의 메타 데이터를 가져온다. 열의 수, 열 이름 등의 정보를 포함한다. |
💻 Statement와 ResultSet 사용하기 예제 코드
import java.sql.*;
public class JdbcExample {
public static void main(String[] args) {
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
try {
con = DriverManager.getConnection("jdbc:mariadb://localhost/testdb", "user", "password");
stmt = con.createStatement();
rs = stmt.executeQuery("SELECT * FROM MyTable");
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println("ID: " + id + ", Name: " + name);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (con != null) con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
[JDBC] ResultSet을 통해 결과값을 불러오기
이번 주제에서 알아볼 것은 Java에서 조회한 결과값을 출력하는 방법을 알아보겠습니다. 이번에 데이터베이스를 Mysql에서 Oracle로 바꿨습니다. 주의 해서 봐주시기 바랍니다. ResultSet(java.sql.ResultSe
aricode.tistory.com
- 출처 : aricode
5. 자바 빌드와 배포
자바 애플리케이션의 빌드와 배포는 일련의 과정을 통해 이루어지며, 여기에는 코드 컴파일, 패키징, 테스팅, 그리고 배포 단계가 포함된다. 자바 애플리케이션을 배포하기 위한 다양한 방법과 도구들이 존재한다.
💡 자바 빌드 과정
- 소스 코드 컴파일
자바 소스 파일(.java)을 자바 바이트코드(.class)로 컴파일한다.
이 과정은 javac 컴파일러를 사용하거나, 빌드 도구를 사용하여 자동화할 수 있다. - 패키징
컴파일된 바이트코드와 필요한 리소스 파일(이미지, 프로퍼티 파일 등)을 함께 JAR(Java ARchive) 파일이나 WAR(Web application ARchive) 파일로 패키징 한다. JAR는 스탠드얼론 자바 애플리케이션을 위한 것이며, WAR는 웹 애플리케이션을 위한 것이다. - 테스팅
유닛 테스트(JUnit, TestNG 등 사용)와 통합 테스트를 수행하여 코드가 예상대로 작동하는지 확인한다. - 의존성 관리
라이브러리 의존성은 Maven, Gradle과 같은 빌드 도구를 통해 관리된다.
이 도구들은 필요한 라이브러리를 자동으로 다운로드하고, 빌드 경로에 추가한다.
💡 배포 과정
- 배포 준비
빌드된 JAR 또는 WAR 파일을 배포할 준비를 한다.
이 파일들을 배포 서버에 업로드하거나, Docker 이미지로 패키징 할 수 있다. - 서버 배포
- JAR 파일
java -jar 명령으로 직접 실행할 수 있다. 배경에서 실행하기 위해 nohup과 같은 도구를 사용할 수도 있다. - WAR 파일
Tomcat, Jetty, JBoss 같은 서블릿 컨테이너 또는 애플리케이션 서버에 배포할 수 있다.
- JAR 파일
- 모니터링 및 유지보수
애플리케이션의 상태를 모니터링하고 필요한 경우 업데이트나 패치를 적용한다.
💡 자주 사용되는 빌드 및 배포 도구
- Maven
XML 기반의 프로젝트 관리 도구로, 프로젝트의 빌드, 문서화, 보고, 의존성 관리, SCM 등의 과정을 관리한다. - Gradle
Groovy 기반의 강력한 빌드 자동화 시스템으로, Maven보다 유연하고 강력한 의존성 관리 및 멀티 프로젝트 빌드 관리를 지원한다. - Jenkins
지속적 통합(Continuous Integration) 서비스를 제공하는 오픈소스 자동화 서버로, 빌드와 테스트 과정을 자동화하여 배포까지 연결하는 것이 가능하다. - Docker
애플리케이션과 그 의존성을 컨테이너 화하여, 어떤 환경에서도 일관된 동작을 보장한다.
Maven과 Gradle 차이 및 프로젝트 설정
1. Maven과 Gradle 우리는 스프링 프로젝트를 생성할 때 Maven을 선택할 것인지 Gradle을 선택할 것인지 선택할 것입니다. 이전엔 책에서 하란대로 따라만 했지 둘이 어떤 차이가 있는지 잘 모르고 개발
hesh1232.tistory.com
- 출처 : hesh1232
Maven과 Gradle의 개념 및 비교
스프링부트 프로젝트를 하며 여러 가지 기능 구현을 하면서 여러 의존성 라이브러리를 추가해야하는 경우가 많았다. 따라서 추가하는 방법을 위해 공식 문서나 스택오버 플로우, 블로그 등을
velog.io
- 출처 : smlee
- 출처 : https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client/3.2.0
6. Secure Coding
Secure Coding은 보안 취약점을 방지하기 위해 소프트웨어를 설계하고 개발하는 과정에서 보안 원칙을 적용하는 방법이다. 이것은 데이터 보호, 사용자 인증, 권한 부여, 입력 검증 등을 포함하여 시스템의 전체적인 보안을 강화하는 데 중점을 둔다.
💡 자주 사용되는 기술
기술 | 방법 | 설명 |
input validation | 입력 검증 | 사용자 입력을 검증하여 SQL 인젝션, XSS 등의 공격을 방지한다. StringEscapeUtils.escapeHtml4(input)와 같은 함수를 사용하여 HTML 입력을 이스케이프 처리할 수 있다. |
encryption | 암호화 | 데이터를 안전하게 저장하거나 전송하기 위해 암호화를 사용한다. Java에서는 Cipher 클래스를 사용하여 데이터를 암호화하고 복호화한다. |
error handling | 오류 처리 | 시스템의 오류 메시지를 제어하여 공격자에게 유용한 정보를 제공하지 않도록 한다. 오류 발생 시 사용자에게 일반적인 메시지만 보여주며, 로그 파일에만 상세 정보를 기록다. |
session management | 세션 관리 | 적절한 세션 관리를 통해 세션 하이재킹과 같은 취약점을 방지한다. HTTPS를 사용하여 세션 쿠키를 전송하고, 쿠키 속성에 HttpOnly와 Secure를 설정한다. |
01 시큐어코딩(secure coding) 이란?
1. 시큐어코딩(secure coding) 이란?소프트웨어(SW)를 개발함에 있어 개발자의 실수, 논리적 오류 등으로 인해 SW에 내포될 수 있는 보안취약점(vulnerability)을 배제하기 위한 코딩 기법을 뜻 한다. 2. 시
codelib.tistory.com
- 출처 : codelib
생물정보 전문위키, 인코덤
Wikipedia for Bioinformatics
www.incodom.kr
- 출처 : incodom
7. Properties File
Java 애플리케이션에서 설정을 관리하는 텍스트 파일이다. 이 파일은 Key-Value 쌍 형태로 구성되어 있으며, 설정을 쉽게 변경할 수 있게 해 준다. Java에서는 java.util.Properties 클래스를 사용하여 이 파일을 로드하고 사용한다.
💡 Properties 클래스의 주요 메소드
메소드 | 설명 |
load(InputStream inStream) | Properties 파일로부터 Key-Value쌍 을 읽어들인다. |
getProperty(String key) | 지정된 키에 대한 값을 반환한다. |
setProperty(String key, String value) | Key-Value쌍을 Properties 객체에 저장한다. |
store(OutputStream out, String comments) | 변경된 Properties를 파일로 저장한다. |
💻 Properties File 사용하기 예제 코드
import java.util.Properties;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class PropertiesExample {
public static void main(String[] args) {
Properties props = new Properties();
try {
// Properties 파일 로드
FileInputStream in = new FileInputStream("config.properties");
props.load(in);
in.close();
// 특정 키의 값을 가져옴
String dbUrl = props.getProperty("database.url");
// 값 변경 및 저장
props.setProperty("database.url", "jdbc:mysql://localhost:3306/mydb");
FileOutputStream out = new FileOutputStream("config.properties");
props.store(out, "Updated database URL");
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Java - properties 파일이란 무엇인가?
개발자들이 소스에 직접 값을 하드 코딩하는 경우가 종종있다. 하지만 이렇게 하드 코딩할 경우 하드 코딩된 변수가 많아지면 유지보수도 힘들어질 뿐더러 암호화에 사용되는 key값들을 하드코
data-study-clip.tistory.com
- 출처 : data-study-clip
java Properties 사용하기
java Properties 사용하기 소스에 직접 값을 하드코딩하는 경우가 있습니다. 하지만 이럴 경우 유지보수도 힘들어 질뿐만 아니라 하드코딩된 변수가 많다면 일일이 소스에서 고쳐서 다시 컴파일을
djusti.tistory.com
- 출처 : djusti
java.util.Properties 클래스를 이용한 어플리케이션의 프로퍼티 설정
Properties 클래스를 사용하여 다양한 종류의 어플리케이션에서 손쉽게 사용할 수 있는 범용적인 Configuration 클래스를 구현해본다. 설정 시스템은 왜 필요한가? 대부분의 어플리케이션은 올바르게
javacan.tistory.com
- 출처 : javacan
'에이콘아카데미 회고 > 5회차) 자바기반 풀스택 개발자 양성과정' 카테고리의 다른 글
JAVA) 26번째 회고 (0) | 2024.05.07 |
---|---|
JAVA) 25번째 회고 (0) | 2024.05.06 |
JAVA) 23번째 회고 (0) | 2024.05.01 |
JAVA) 22번째 회고 (0) | 2024.04.30 |
JAVA, SQL) 21번째 회고 (0) | 2024.04.29 |