728x90
728x90

이클립스 95

Spring에 SiteMesh 적용 (SiteMesh 3.0.1)

SiteMesh (사이트메쉬) SiteMesh is a web-page layout and decoration framework and web-application integration framework to aid in creating sites consisting of many pages for which a consistent look/feel, navigation and layout scheme is required. https://en.wikipedia.org/wiki/SiteMesh SiteMesh(사이트메쉬)는 일관된 룩앤필(Look and Feel), 내비게이션, 레이아웃 스키마가 필요하는 많은 페이지로 구성된 사이트를 만드는 것을 지원해 주는 프레임워크(웹 페이지의 레이아웃과 데코레이션 ..

Spring에 Filter 적용 (javax.servlet.Filter)

Filter (필터 - javax.servlet.Filter) Filter(필터)는 웹 브라우저(Web Browser)에서 Servlet에 Request(요청) 하기 전이나 Servlet에서 웹 브라우저로 Response(응답) 하기 전에 필터링(별도의 작업을 처리)합니다. 그래서 Filter(필터)는 Servlet 보다 먼저 처리됩니다. 이것을 서블릿 필터(Servlet Filter)하고 합니다. Filter(필터)는 Request(요청)과 Response(응답) 사이에서 처리됩니다. Web Browser → Filter1 → Servlet → Filter1 → Web Browser Filter(필터)는 여러 개를 설정할 수 있고 설정 순서에 따라 처리 순서가 정해집니다. 이것을 FilterChain(..

Spring에 JSTL(JavaServer Pages Standard Tag Library) 적용 (JSTL 1.2)

JSTL (JavaServer Pages Standard Tag Library - 자바서버 페이지 표준 태그 라이브러리) The JavaServer Pages Standard Tag Library (JSTL) encapsulates, as simple tags, core functionality common to many JSP applications. For example, instead of suggesting that you iterate over lists using a scriptlet or different iteration tags from numerous vendors, JSTL defines a standard tag that works the same everywhere. This st..

Spring에 Servlet, Build Plugin, web.xml 적용 (javax.servlet-api 3.1.0, maven-compiler-plugin)

Maven Spring Project에 Servlet 적용하기 1. 메이븐 리포지토리(https://mvnrepository.com)에서 "javax.servlet"를 검색합니다. 검색된 결과 중에 "Java Servlet API"를 선택하고 "Version"중에서 "3.1.0"를 선택합니다. 그리고 Maven 탭을 선택하고 복사합니다. javax.servlet javax.servlet-api 3.1.0 provided 2. 메이븐 프로젝트에서 pom.xml 파일을 오픈하고 복사한 내용을 붙여 넣기하고 저장합니다. 그러면 자동으로 Spring Framework 라이브러리 파일(JAR)들이 다운로드됩니다. javax.servlet-api-3.1.0.jar 메이븐 프로젝트에서 "Maven Update Pro..

자바 마리아디비 문자형 데이터 타입(mediumtext, longtext) PreparedStatement 처리 3 - Java MariaDB String Data Types PreparedStatement

CLOB(Character large object)은 Oracle에서 아주 긴 문자열 데이터를 저장할 수 있는 데이터 타입이다. 이 타입은 테이블 자체에서 저장되지 않고 별도의 위치에 저장됩니다. 이처럼 MariaDB에서도 아주 긴 문자열 데이터를 저장할 수 있는 MEDIUMTEXT와 LONGTEXT가 있습니다. ​ ​ MEDIUMTEXT - 중간 크기의 텍스트 (TEXT 보다는 크고 LONGTEXT보다 작아서 중간 크기) ​ MEDIUMTEXT [CHARACTER SET charset_name] [COLLATE collation_name] 최대 길이는 16,777,215입니다. (1 character = 1Byte) ​ 유효 최대 길이는 사용되는 Charset에 따라 달라집니다. Charset이 UTF..

자바 마리아디비 문자형 데이터 타입(tinytext, text) PreparedStatement 처리 2 - Java MariaDB String Data Types PreparedStatement

이어서 MariaDB(마리아디비)에서 String Data Types(문자형 데이터 타입)에서 TEXT들은 PreparedStatement에서 어떤 메소드로 값으로 설정해야 하는지 확인해 보겠습니다. ​ ​ TINYTEXT - 아주 작은 텍스트 ​ TINYTEXT [CHARACTER SET charset_name] [COLLATE collation_name] 최대 길이는 255입니다. (1 character = 1Byte) ​ 유효 최대 길이는 사용되는 Charset에 따라 달라집니다. Charset이 UTF8이면 한글은 문자당 최대 3Byte가 필요함으로 한글만 입력할 경우 최대 유효 최대 길이는 85입니다. 입력된 문자열에 멀티바이트 문자(한글)가 포함된 경우 유효 최대 길이가 짧아지는 것을 고려해야..

자바 마리아디비 문자형 데이터 타입(char, varchar) PreparedStatement 처리 1 - Java MariaDB String Data Types PreparedStatement

MariaDB(마리아디비)에서 String Data Types(문자형 데이터 타입)별로 PreparedStatement에서 어떤 메소드로 값으로 설정해야 하는지 확인해 보겠습니다. ​ CHAR - 고정 길이 문자열(fixed-length string) ​ CHAR(M) Range(길이) : 0 ~ 127 ​ (M)은 Byte가 아닌 문자 길이(수)입니다. 저장할 때 지정된 길이(M)만큼 공백이 항상 오른쪽으로 채워집니다. (M)을 설정하지 않으면 1로 설정됩니다. CREATE TABLE DAT_TEST10_TB ( COL_CHAR1 char(1), COL_CHAR2 char(1), COL_CHAR3 char(10) ) DEFAULT CHARSET=utf8; String query = "INSERT INT..

자바 마리아디비 숫자형 데이터 타입(bigint, decimal, float, double, bit) PreparedStatement 처리 2 - Java MariaDB Numeric Data Types PreparedStatement

이어서 MariaDB(마리아디비)에서 Numeric Data Types(숫자형 데이터 타입)에서 큰 정수와 실수들은 PreparedStatement에서 어떤 메소드로 값으로 설정해야 하는지 확인해 보겠습니다. ​ ​ BIGINT - 큰 정수(large integer) ​ BIGINT(M) Range(범위) : -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 ​ BIGINT(M) UNSIGNED BIGINT(M) UNSIGNED ZEROFILL Range(범위) : 0 ~ 18,446,744,073,709,551,615 ​ (M)을 설정하지 않으면 SIGNED은 음수 기호를 포함해서 20로 UNSIGNED (ZEROFILL)은 20으로 설정됩니다. CREA..

자바 마리아디비 숫자형 데이터 타입(tinyint, smallint, mediumint, int/integer) PreparedStatement 처리 1 - Java MariaDB Numeric Data Types PreparedStatement

MariaDB(마리아디비)에서 Numeric Data Types(숫자형 데이터 타입)별로 PreparedStatement에서 어떤 메소드로 값으로 설정해야 하는지 확인해 보겠습니다. ​ Numeric Data Types(숫자형 데이터 타입)의 키워드는 다음과 같습니다. SIGNED : 부호가 있는 숫자 (음수를 표현할 수 있습니다.) ex) -15, 15 UNSIGNED : 부호가 없는 숫자 (음수를 표시할 수 없습니다.) ex) 15 UNSIGNED ZEROFILL : 부호가 없는 숫자이고 문자로 가져올 때 지정된 길이로 숫자 앞에 "0"를 채웁니다. ex) 015 ​ Numeric Data Types(숫자형 데이터 타입)에서 (M)은 ZEROFILL 타입에서 사용하는 숫자의 최대 표시 너비입니다. 부..

자바 제네릭 메소드와 리플렉션을 이용한 자동 PreparedStatement 생성 3 - Java Generic Method Reflection PreparedStatement

세번째 ResultSet 객체에서 여러개의 행(row)를 받아 객체로 생성하고 리스트 객체로 전달하는 메소드인 executeQueryList()메소드를 생성하겠습니다. ​ PreparedStatement에서 사용되는 쿼리문 SELECT MBR_ID AS id, MBR_NM AS name FROM MBR_ACCOUNT_TB LIMIT 0, 10 쿼리문처럼 조건 없이 전체를 카운트 할 수 있어 전달되는 객체가 없을 수 있습니다. ​ executeQueryList()메소드는executeQueryOne()메소드와 동일하지만 결과가 리스트 객체로 전달됩니다. ​ 데이터베이스 컨넥션 객체를 가져옵니다. Connection connection = getConnection(); createPreparedStatemen..

자바 제네릭 메소드와 리플렉션을 이용한 자동 PreparedStatement 생성 1 - Java Generic Method Reflection PreparedStatement

PreparedStatement 자동 생성과 실행으로 DAO에서는 쿼리문만 작성하게 되었습니다. 또한 반복적인 코드를 줄임으로써 개발 시간이 단축되었습니다. ​ 이어서 PreparedStatement에서 Select 쿼리문을 처리하는 메소드를 만들어 보겠습니다. ​ Select 쿼리문도 Insert, Update, Delete 쿼리문처럼 쿼리를 실행하지만 쿼리 결과는 ResultSet 객체로 받습니다. 또한 Select 쿼리문의 결과에는 한개 또는 여러개의 행(row)이 올 수 있고 한 개의 행(row)에 한 개의 컬럼(column)만 올 수 있습니다. ​ 그래서 Select 쿼리 처리 결과에 따라 메소드를 구분하여 만들어야 합니다. 1. ResultSet 객체에서 한개의 행(row)를 받아 객체로 생성..

자바 패턴 매치와 리플렉션을 이용한 자동 PreparedStatement 생성 - Java Pattern.matcher Reflection PreparedStatement

이전 "자바 PreparedStatement CRUD"를 통해 PreparedStatement를 이용하여 CRUD(Create, Read, Update, Delete)쿼리문을 처리하였습니다. 그러나 코드를 보면 반복적인 작업이 많이 있습니다. ​ 그래서 MyBatis(마이바티스)처럼 쿼리문에 "#{}"으로 파라미터를 입력하고 전달되는 객체를 이용해 자동으로 파라미터를 처리하여 PreparedStatement를 생성하게 하겠습니다. ​ 이전에도 PreparedStatement에 "?"의 순서대로 전달되는 객체의 맴버 필드 값을 설정하였습니다. ​ PreparedStatement에서 Select 쿼리문은 executeQuery()메소드로 실행되고 ResultSet객체로 쿼리 결과를 받습니다. 그리고 Inse..

자바 동적 형(타입) 변환 - Java Dynamic Casting - cast(), 이클립스(Eclipse)

우리가 많이 사용하는 형(타입) 변환(Casting)은 정적 캐스팅입니다. UserVO userVO = (UserVO)object; 정적 캐스팅은 이미 객체(object)가 어떤 클래스인지 알고 있어야 가능합니다. ​ 상속받은 객체라면 UpCasting(업캐스팅)으로 형(타입) 변환(Casting)하여 수퍼(부모) 클래스로 캐스팅할 수 있고 반대로 DownCasting(다운캐스팅)으로 자식(서브) 클래스로 캐스팅할 수 있습니다. ​ JDK 1.5부터 캐스트 구문을 대체할 수 있게 Class에서 cast() 메서드를 지원하고 있습니다. public T cast(Object obj) { if (obj != null && !isInstance(obj)) throw new ClassCastException(ca..

자바 JUnit를 이용한 단위 테스트 - Java JUnit Unit Test, 이클립스(Eclipse)

이전에 JUnit에 대한 설정 및 테스트, 실행 순서, 메서드에 대해 알아보았습니다. 그럼 실제로 사용되는 클래스를 중심으로 JUnit를 이용하여 테스트해보겠습니다. ​ 1. "test2" 프로젝트의 "Java Resources/src/main/java"에서 "com.home.project.test2.util.MessageDigestHelper.java"를 선택하고 마우스 오른쪽 버튼을 클릭하여 콘텍스트 메뉴에서 [New > Other...]를 클릭합니다. 2. "Select a wizard"창에서 "Wizards"에 "JUnit"을 입력하고 "JUnit Test Case"를 선택한 후 "Next >"버튼을 클릭합니다. "JUnit Test Case"창에서 "New JUnit 4 test"로 "Messa..

자바 JUnit의 fail, assert, assume 이해하기 - Java JUnit fail, assert, assume, 이클립스(Eclipse)

JUnit은 기본적으로 테스트 결과가 성공이라는 가정하에 실패인지 검사를 합니다. ​ 그래서 JUnit에 있는 메서드들은 "fail(무조건 실패로 AssertionError가 발생하고 다음 라인부터 실행되지 않습니다.)" "assert~(비교 검사나 조건이 실패하면 AssertionError가 발생하고 다음 라인부터 실행되지 않습니다.)" "assume~(조건이 실패하면 AssumptionViolatedException이 발생하고 다음 라인부터 실행되지 않습니다.)" 만 있습니다. ​ 테스트 케이스에서 "Error"나 "Exception"이 발생하면 테스트는 실패가 되고 실행을 중지합니다. 그래서 테스트 케이스에 "fail"이나 "assert~"가 없다면 무조건 성공으로 처리됩니다. ​ "fail()"메..

자바 JUnit 설정 및 테스트 - Java Maven JUnit, 이클립스(Eclipse)

JUnit은 자바 프로젝트에서 생성되는 클래스의 메서드를 기능 테스트하는 단위 테스트 도구입니다. 이름 그래로 "Java Unit Test"입니다. ​ JUnit를 설정하는 방법은 Maven를 통한 설정과 이클립스 Library를 추가로 설정하는 두 가지 방식이 있습니다. ​ Maven 방식과 이클립스 Library 추가 방식은 뭐가 다를까요? 바로 환경 설정에 차이가 있습니다. (기능은 동일합니다.) ​ Maven 방식은 프로젝트에 포함되는 파일인 "pom.xml"에 적용되어 형상관리 툴(Svn, Git)로 관리되는 프로젝트에서는 동일한 개발 환경으로 개발이 됩니다. 그러나 이클립스 Library 추가 방식은 개발자가 각자의 이클립스에 설정하는 것이 때문에 형상관리 툴로 관리되는 프로젝트에서는 설정을 ..

자바 PreparedStatement CRUD - Java PreparedStatement CRUD(Create, Read, Update, Delete)

"자바 어노테이션으로 데이터 액세스 객체 만들기 1~5"를 통해 DAO(Data Access Object) 인터페이스(interface)와 구현체(implements)를 만들어 보았고 "자바 데이터베이스 매니저 시큐어 코딩"를 통해 "Statement"에서 "PreparedStatement"로 수정해보았습니다. ​ 이번에는 "PreparedStatement"를 이용하여 CRUD(Create, Read, Update, Delete)에 대한 인터페이스(interface)와 구현체(implements)를 개발하겠습니다. ​ 이후에는 쿼리문 파라미터 치환과 Resultset를 객체로 변환에 대해 알아보겠습니다. ​ "CRUD"는 데이터처리 방식인 Create(생성/등록/추가), Read(읽기/조회), Updat..

자바 BasicDataSource(아파치 공통 DBCP) - Java BasicDataSource(Apache Commons DBCP), 이클립스(Eclipse)

"org.apache.commons.dbcp2"에 있는 "BasicDataSource"를 이용하여 데이터베이스 커넥션 풀(Pool)을 생성하여 이용하겠습니다. ​ 1. "test2" 프로젝트의 "pom.xml"을 오픈하여 "commons-dbcp2"는 주석 처리를 해제하고 "tomcat-jdbc"는 주석처리합니다. org.apache.commons commons-dbcp2 2.8.0 작업을 위해 JNDI 이용을 위해 설정한 정보들을 주석처리합니다. ​ 2. "Servers"에서 "Tomcat8-config"이나 "Tomcat9-config"의 "server.xml"의 ""태그안에 ""를 주석처리합니다. "context.xml"의 ""태그안에 ""를 주석처리합니다. "web.xml"의 를 주석처리합니다. ..

자바 JNDI 연동 2 - Java JNDI(Java Naming and Directory Interface), 이클립스(Eclipse)

9. "test2" 프로젝트의 "Java Resources/src/main/java"에서 "com.home.project.test2.dao.TestLoginDaoImpl.java"의 멤버 필드 형을 "TestDatabaseConectionPool"에서 @TestAnnAutowired @TestAnnQualifier("databaseMaria") private TestDatabaseConectionPool testDatabaseManager; "TestDatabaseJNDI"로 수정합니다. @TestAnnAutowired @TestAnnQualifier("databaseMaria") private TestDatabaseJNDI testDatabaseManager; 10. "Servers"탭에서 "tomca..

자바 JNDI 연동 1 - Java JNDI(Java Naming and Directory Interface), 이클립스(Eclipse)

이번에는 데이터베이스 커넥션 풀을 DBCP가 아닌 JNDI를 이용하겠습니다. ​ JNDI(Java Naming and Directory Interface)는 네이밍 서비스로 부터 제공하는 자원(데이터 및 객체)를 찾아 참고(lookup)하기 위한 자바 API입니다. ​ 데이터베이스 커넥션들을 자바 웹 응용프로그램(Java Web Application)이 아닌 WAS(Web Application Server)에서 데이터베이스 커넥션을 생성하고 풀(Pool)로 관리합니다. 자바 웹 응용프로그램에서는 JDNI의 "lookup()"를 통해 리소스에 접근하고 데이터베이스 커넥션을 가져와 이용합니다. ​ 1. "https://mvnrepository.com"를 접속하고 검색에 "Tomcat JDBC"를 입력하고 검..

자바 아파치 공통 데이터베이스 커넥션 풀 3 - Java Apache Commons Database Connection Pool (Commons DBCP2), 이클립스(Eclipse)

이번에는 "GenericObjectPool"를 효율적으로 관리할 수 있게 "PoolableConnectionFactory"와 "GenericObjectPoolConfig"의 설정들을 설명하고 추가하겠습니다. ​ 커넥션 유효 검사 쿼리 및 응답 시간 ​ setValidationQuery() 풀(Pool)에서 관리되는 커넥션들이 유효한지 검사하기 위한 쿼리문을 설정합니다. 기본적으로 공백입니다. String validationQuery = "select 1"; // 커넥션이 유효한지 검사하기 위한 쿼리 poolableConnectionFactory.setValidationQuery(validationQuery); 다음은 데이터베이스별 유효 검사 쿼리문입니다. "Oracle" : "select 1 from d..

자바 아파치 공통 데이터베이스 커넥션 풀 2 - Java Apache Commons Database Connection Pool (Commons DBCP2), 이클립스(Eclipse)

"DriverManager.getConnection()"에서는 "jdbc:apache:commons:dbcp:maria"의 URL만으로 데이터베이스 커넥션 풀(Pool)을 가져오는 방법은 매니저 드라이버(DriverManager)에 로드되어 등록된 드라이버 중에서 URL에서 풀(Pool) 명을 추출해 풀(Pool)명으로 등록된 풀(Pool)를 찾고 풀((Pool)에서 커넥션 객체를 가져옵니다. ​ 다음은 매니저 드라이버(DriverManager)의 "getConnection()"메소드 소스의 일부 부분입니다. for(DriverInfo aDriver : registeredDrivers) { Connection con = aDriver.driver.connect(url, info); } "registere..

자바 아파치 공통 데이터베이스 커넥션 풀 1 - Java Apache Commons Database Connection Pool (Commons DBCP2), 이클립스(Eclipse)

이번에는 스프링 프레임워크에서도 "DataSource"로 사용하고 있는 아파치 공통 데이터베이스 커넥션 풀(Apache Commons DBCP)를 이용하겠습니다. ​ 이번에 사용할 "Commons DBCP"의 버전은 2.8.x입니다. "Commons DBCP 2.x"부터는 JDK 8 버전, JDBC 4.2 버전부터 사용 가능합니다. 만약 JDK 6버전을 사용하신다면 "Commons DBCP 1.4"를 사용하시기 바랍니다. ​ "Commons DBCP"의 버전별로 JDK 버전과 JDBC 버전을 확인하시기 바랍니다. DBCP 2.7.0 compiles and runs under Java 8 only (JDBC 4.2) DBCP 2.6.0 compiles and runs under Java 8 only (JD..

자바 데이터베이스 커넥션 풀 매니저 만들기 5 - Java Database Connection Pool Manager, 이클립스(Eclipse)

커넥션 풀에서 모든 커넥션을 사용하고 있다면 커넥션 대기 시간(maxWait)에 따라 대기해야 합니다. 데이터베이스와 시스템의 성능이 좋을 경우 커넥션을 대기하지 않고 추가로 커넥션을 생성하여 사용하는 것이 좋습니다. 그렇지만 무한정 커넥션을 생성하는 것은 데이터베이스와 시스템에 부하가 발생하여 문제가 될 수 있습니다. 그래서 동시에 사용할 수 있는 최대 커넥션 개수(maxActive)와 커넥션이 반환될 때 최대로 유지될 수 있는 커넥션 개수(maxIdle)을 설정하여 효율적으로 관리되게 하겠습니다. ​ 1. "test2" 프로젝트의 "Java Resources/src/main/resources"에서 "/com/home/project/test2/config/database-maria.properties"..

자바 데이터베이스 커넥션 풀 매니저 만들기 4 - Java Database Connection Pool Manager, 이클립스(Eclipse)

커넥션 풀에서 웹 사이트에 접속되는 사용자가 많아져 처리해야 하는 쿼리가 많아지거나 쿼리 문제로 인해 커넥션이 반환이 되지 않을 경우 커넥션을 무한 대기하는 문제가 발생할 수 있습니다. 그래서 커넥션 최대 대기 시간(maxWait)을 설정하여 나올 수 있게 처리하겠습니다. ​ 1. "test2" 프로젝트의 "Java Resources/src/main/resources"에서 "/com/home/project/test2/config/database-maria.properties"파일에 커넥션 대기 시간(Connection Pool) 크기를 추가합니다. id=databaseMaria driverClassName=org.mariadb.jdbc.Driver url=jdbc:mariadb://localhost:33..

자바 데이터베이스 커넥션 풀 매니저 만들기 3 - Java Database Connection Pool Manager, 이클립스(Eclipse)

지금까지 만든 데이터베이스 커넥션 풀은 최초에 데이터베이스와 연결되는 커넥션 수(initialSize) 만큼 연결되게 되어 있습니다. 만약에 웹 사이트에 접속되는 사용자가 많아지거나 웹 페이지에서 처리해야 하는 쿼리가 많아지거나 쿼리가 복잡해 커넥션 반환이 느려지면 동시에 사용되는 커넥션 수가 최초에 생성된 커넥션 수 보다 많이 필요하게 됩니다. ​ 현재까지 생성되어 있는 커넥션을 동시에 다 사용하고 있다면 다음에 요청되는 것은 커넥션을 받을 수 없게 됩니다. 그래서 사용중인 커넥션이 반환될 때까지 대기(wait)거나 추가로 커넥션(Connection)을 생성하여 처리해야 합니다. ​ 참고로 "TestDatabasePoolManager.java"는 모든 서비스(serive) 클래스에서 사용하고 있어 "g..

자바 데이터베이스 커넥션 풀 매니저 만들기 2 - Java Database Connection Pool Manager, 이클립스(Eclipse)

데이터베이스 커넥션 풀을 적용하기 전에 기존과의 성능 차이를 확인하기 위해 쿼리를 처리하는 메소드에서 데이터베이스 접속 전과 종료 후에 소요시간을 계산하여 출력되게 하겠습니다. long startTime = System.currentTimeMillis(); {데이터베이스 쿼리문 실행 블럭} long endTime = System.currentTimeMillis(); System.out.println((endTime - startTime) + "ms 소요됨"); 4. "test2" 프로젝트의 "Java Resources"에서 "src/main/java"의 "com.home.project.test2.dao.TestLoginDaoImpl.java"에 "selectMember()"메소드 함수에서 "testDat..

자바 데이터베이스 커넥션 풀 매니저 만들기 1 - Java Database Connection Pool Manager, 이클립스(Eclipse)

이전 만든 데이터베이스 매니저는 단일 또는 복수 개의 데이터베이스 정보 프로퍼티를 읽어 데이터베이스 드라이버를 로드하고 DriverManager(드라이버 매니저)를 통해 연결(Connection)하여 사용할 수 있게 하였습니다. 자바 데이터베이스 매니저 만들기(https://carrotweb.tistory.com/70)를 참조하세요. 데이터베이스 매니저를 이용하여 데이터베이스를 연결하고 쿼리하는 되는 문제가 없습니다. 그러나 데이터베이스를 쿼리 할 때마다 데이터베이스 연결과 종료를 매번 해야 합니다. 이는 쿼리를 처리할 때마다 데이터베이스 접속과 종료 시간이 필요하게 됨으로 여러 명이 접속하여 수많은 쿼리를 처리하게 될 경우가 데이터베이스 접속 시간으로 인해 시스템 처리가 늘어지게 됩니다. 그래서 데이터..

자바 데이터베이스 매니저 패스워드 암호화 2 - Java Database Manager Password Encryption SHA-256 + Salt, 이클립스(Eclipse)

이전 "자바 어노테이션으로 데이터 액세스 객체 만들기"를 통해 로그인 관련 Controller, Service, DAO를 만들었습니다. 이번에는 암호화 메소드를 이용하여 데이터베이스의 사용자 패스워드를 암호화하여 적용 처리하겠습니다. ​ 데이터베이스의 사용자 로그인 테이블("MBR_ACCOUNT_TB")의 패스워드 필드("MBR_PWD")가 암호화되어 잊지 않고 패스워드 솔트 필드("MBR_PWD_SALT")가 비어있습니다. 이전에 만든 암호화 메소드를 이용하여 패스워드 필드("MBR_PWD")와 솔트 필드("MBR_PWD_SALT")에 암호화된 정보를 적용하겠습니다. 디비버 데이터베이스 테이블 생성(https://carrotweb.tistory.com/72)를 참조하세요. ​ 3. "TestLoginS..

자바 데이터베이스 매니저 패스워드 암호화 1 - Java Database Manager Password Encryption SHA-256 + Salt, 이클립스(Eclipse)

지금까지 사용자의 로그인 처리를 아이디와 패스워드로 단순 비교해서 처리하였습니다. 데이터베이스가 해킹을 당하거나 관리자 시스템을 통해 추출된 사용자 정보 리스트(엑셀 파일)가 유출된다면 아이디와 패스워드가 공개되어 로그인을 할 수 있습니다. 이런 문제를 방지하기 위해 사용자의 패스워드를 암호화하여 저장함으로써 해킹 및 유출시 로그인을 방지할 수 있습니다. 물론 시스템 해킹 및 정보 유출이 되지 않게 보안 및 관리해야 합니다. ​ 사용자 패스워드 암호화를 위해 사용할 암호화 해시 함수는 SHA-256과 Salt(솔트) 그리고 암호화 반복(Loop), Base64 인코딩입니다. ​ SHA-256(SHA-2, Secure Hash Algorithm 2)은 미국 국가안보국(NSA)가 설계한 암호화 해시 함수로 ..

728x90
728x90