728x90
728x90

전체 글 299

원도우 10 마리아디비 10.5 설치 - Windows 10 MariaDB 10.5.8

1. 마리아디비(MariaDB) 사이트(https://mariadb.org/)를 접속합니다. MariaDB Foundation - MariaDB.org … Continue reading "MariaDB Foundation" mariadb.org "Download"버튼을 클릭합니다. 2. 다운로드 페이지에서 마리아디비 최신버전으로 설정됩니다. "Download"버튼을 클릭합니다. 만약, 시스템이 64비트가 아니면 "Architecture"에서 "x86"를 선택하시면 됩니다. 2022년 11월 18일에 버전이 업데이트가 되었습니다. 버전은 "MariaDB Server 10.11.1 RC"입니다. "Download"버튼을 클릭하면 바로 다운로드됩니다. ​ 2021년 2월 10일 당시 최신버전인 "MariaDB..

자바 어노테이션으로 의존성 주입 처리하기 - Java Annotation Dependency Injection(DI), 이클립스(Eclipse)

클래스 맴버 필드(변수)에 어노테이션(Annotation)를 적용하여 외부에서 클래스 맴버 필드 타입에 해당되는 클래스를 찾고 생성된 인스턴스를 주입하는 방법(디펜던시 인젝션)에 대해 알아보겠습니다. ​ 의존성 주입(Dependency Injection)을 위해서 클래스 맴버 필드 타입은 클래스가 아닌 인터페이스(interface)로 합니다. 그 이유는 인터페이스(interface)로 구현(implements)한 다양한 클래스들을 외부에서 생성하여 주입할 수 있기 때문입니다. 의존성 주입으로 클래스 간의 의존 관계를 낮출 수 있습니다. ​ 의존성 주입(Dependency Injection)을 위해 클래스 맴버 필드와 인터페이스(interface)로 구현된 클래스에 어노테이션(Annotation)를 생성하..

자바 어노테이션 인젝션(주입) - Java Annotation Injection, 이클립스(Eclipse)

클래스 맴버 필드(변수)에 Annotation(어노테이션)를 적용하여 외부에서 초기화하는 방법(인젝션)에 대해 알아보겠습니다. ​ 1. 이전 "TestClass.java"에 클래스 맴버 필드(변수)를 추가합니다. private String name; 2. "test2" 프로젝트의 "Java Resources"에서 "src/main/java"의 "com.hom.project.test2.annotation"에서 오른쪽 버튼을 클릭하여 컨텍스트 메뉴 [New > Annotation]를 클릭합니다. "New Annotation Type"창에서 "Name"에 "TestAnnStringInit"를 입력하고 "@Retention"은 "Runtime", "@Target"은 "Field"를 선택하고 "Finish"버튼을..

자바 어노테이션으로 서블릿의 리퀘스트 매핑 만들기 2 - Java Annotation Servlet Request Mapping, 이클립스(Eclipse)

이전에는 "@TestAnnRequestMapping"어노테인션을 "TestController"의 기능인 "addRequestFunction"메소드를 요청(Request) URL과 메소드(Method) 처리하였습니다. ​ 이번에는 컨트롤러(Controller)에서 "TestController"를 계승(extneds)하지 않고 처리하겠습니다. ​ 1. "TestServletContextListener.java"의 "contextInitialized"에서 메소드(Method)와 컨트롤러(Controller) 클래스 인스턴스를 매핑하하기 위해 메소드매핑맵(methodMappingMap)을 추가합니다. // Method-Class 맵 Map methodMappingMap = new HashMap(); 요청매핑맵(..

자바 어노테이션으로 서블릿의 리퀘스트 매핑 만들기 1 - Java Annotation Servlet Request Mapping, 이클립스(Eclipse)

이전에 서블릿(Servlet)를 기반으로 개발한 디스패처 서블릿(DispatcherServlet)의 컨트롤러(Controller)에 어노테이션(Annotation)을 이용하여 "Request Mapping"를 처리하도록 하겠습니다. ​ 1. 클래스가 컨트롤러(Controller)로 인식되기 위해 어노테이션(Annotation)으로 생성합니다. 2. 요청(Request) URL과 클래스의 메소드가 매핑되도록 어노테이션(Annotation)를 생성합니다. 3. 클래스에 어노테이션(Annotation)을 추가합니다. 4. WAS 로딩 시점에 프로젝트 패키지에 있는 클래스들을 스캔하여 클래스의 인스턴스를 생성하고 클래스의 메소드(Method)를 추출하여 요청매핑맵(Request Mapping Map)를 생성합니..

자바 어노테이션 만들기 - Java Annotation, 이클립스(Eclipse)

Annotation(어노테이션)은 소스 코드에 정보를 제공하는 메타데이터로 주석처럼 선언하여 사용합니다. ​ 1. "test2" 프로젝트의 "Java Resources"에서 "src/main/java"의 "com.home.project.test2"를 선택한 후 오른쪽 버튼을 클릭하여 컨텍스트 메뉴 [New > Package]를 클릭하여 "Name"의 기존 패키지명에 ".annotation"를 추가하고 "Finish"버튼을 클릭합니다. 추가된 "com.hom.project.test2.annotation"에서 오른쪽 버튼을 클릭하여 컨텍스트 메뉴 [New > Annotation]를 클릭합니다. "New Annotation Type"창이 나타납니다. "Name"에 "TestAnnotation"를 입력하고 "@..

자바 프로젝트 패키지에 있는 클래스 스캔(Class.forName) 2 - Java Project Package Class Scan, 이클립스(Eclipse)

이제 스캔(scan)한 모든 클래스 파일(.class)들을 "Class.forName"으로 읽어 클래스 배열(List findClass : classes) { System.out.println("[Class] " + findClass.getName()); } 4. "Servers"탭에서 "tomcat8"를 선택하고 "start"버튼(start the server)을 클릭합니다. "Console"탭을 클릭하면 지금까지 "com.home.project.test2"를 베이스로 만들어진 모든 클래스들이 로드되어 출력된 것을 확인할 수 있습니다.

자바 프로젝트 패키지에 있는 클래스 스캔(ClassLoader.getResources) 1 - Java Project Package Class Scan, 이클립스(Eclipse)

현재 프로젝트에서 생성된 모든 클래스들을 스캔(Scan)하도록 하겠습니다. ​ 클래스 스캔(Scan)은 웹 서버가 구동될때 시작되도록 "ServletContextListener"의 "contextInitialized"에서 처리하고 베이스 패키지를 기준으로 모든 클래스들을 스캔하도록 출력하겠습니다. ​ 1. "web.xml"에 "context-param"으로 베이스 패키지 경로를 설정합니다. ComponentScan-BasePackage com.home.project.test2 현재 "test2" 프로젝트가 클래스들이 "com.home.project.test2"를 기준으로 생성되어 있습니다. ​ 2. 이전에 생성한 "ServletContextListener"(서블릿 컨텍스 리스너)인 "TestServlet..

자바 서블릿으로 컨트롤러 만들기(모델뷰 처리) 3 - Java Servlet Controller ModelAndView, 이클립스(Eclipse)

컨트롤러(Controller)의 리턴 값으로 "RequestDispatcher"를 사용하기 때문에 JSP 페이지 처리에는 문제가 없지만 "Ajax" 요청을 처리할 수 없습니다. 그리고 서비스(Service Class)에도 "HttpServletRequest request", "HttpServletResponse", "RequestDispatcher"를 사용하고 있어 클래스간의 의존관계가 높습니다. 그래서 "RequestDispatcher"대신 새로운 처리 전달 객체를 만들어 처리 조건에 따라 JSP 페이지 처리나 Response이 처리되게 하겠습니다. 그리고 서비스(Service Class)에서도 의존관계를 줄이기 위해 "RequestDispatcher"와 "request.setAttribute"를 대처..

자바 서블릿으로 컨트롤러 만들기(메소드 처리) 2 - Java Servlet Controller Request Mapping Dispatcher, 이클립스(Eclipse)

수정된 "requestmapping.properties"처럼 "TestRootController"클래스와 "test1"메소드를 생성합니다. /test1.do=com.home.project.test2.controller.TestRootController@test1 4. "test2" 프로젝트의 "Java Resources"에서 "src/main/java"의 "com.home.project.test2.controller"를 선택한 후 오른쪽 버튼을 클릭하여 컨텍스트 메뉴 [New > Class]를 클릭하고 "Constructors from superclass"를 선택하여 "TestRootController.java"를 생성합니다. "TestRootController"클래스에서 "TestController"클..

자바 서블릿으로 컨트롤러 만들기(메소드 처리) 1 - Java Servlet Controller Request Mapping Method Invoke, 이클립스(Eclipse)

이전에 "Request Mapping"를 통해 모든 요청(Request)에 대해 자동으로 서비스(Service Class)로 호출되어 처리되도록 처리하였습니다. 그러나 모든 요청(Request)을 처리할 때마다 새로운 서비스(Service Class)를 생성해야 하고 서비스(Service Class)는 하나의 메소드만 처리되게 되어 다양한 메소드를 만들수 없습니다. 또한 단순한 요청(Request)이나 웹 페이지 호출이라면 비효율적입니다. 그래서 요청(Request)을 그룹핑해서 하나의 컨트롤러(Controller)로 만들고 요청(Request)별로 컨트롤러(Controller)의 메소드(Method)가 호출되어 처리되게 하겠습니다. SpringFramework의 Controller과 유사한 기능으로 처..

자바 리플렉션 메서드 동적 실행 - Java Reflection Method invoke, 이클립스(Eclipse)

클래스("getClass"로 가져온 "Class")의 "getMethod"메서드는 메서드 명과 파라미터 타입 배열(Class[] parameterTypes)로 구성된 메서드를 클래스에서 찾아서 메서드 객체(java.lang.reflect.Method)를 넘겨줍니다. ​ getMethod(String name, Class... parameterTypes) or getMethod(String name) "name"은 메서드 명입니다. "parameterTypes"는 클래스(java.lang.Class)로된 구성된 배열입니다. 파라미터가 없으면 입력하지 않습니다. ​ 클래스에 ".class"를 사용하면 클래스의 패키지명과 클래스 명으로 구성된 클래스(Class)를 가져옵니다. 예를 들어, "String"에 "..

자바 서블릿으로 리퀘스트 매핑 (클래스 동적 로딩) 2 - Java Servlet(DispatcherServlet) Request Mapping, 이클립스(Eclipse)

6. "TestService1.java"에 "ITestService.java" 인터페이스가 구현(implements)되도록 코드를 수정합니다. public class TestService1 implements ITestService { "TestService1.java"에 "ITestService.java"의 "doProcess"메서드를 구현합니다. @Override public RequestDispatcher doProcess(HttpServletRequest request, HttpServletResponse response) { request.getSession().setMaxInactiveInterval(1000); TestSessionCounter testSessionCounter = TestS..

자바 서블릿으로 리퀘스트 매핑 (프로퍼티와 인터페이스처리) 1 - Java Servlet(DispatcherServlet) Request Mapping, 이클립스(Eclipse)

"TestDispatcherServlet.java"의 "service"에서 "*.do"로 요청되는 요청(Request)들을 URL별로 처리하게 하였습니다. 그러나 새로운 요청(Request)을 처리할 때마다 URL별로 처리하는 코딩을 추가해야 합니다. ​ 그래서, 모든 요청(Request)에 대해 자동으로 서비스(Service Class)로 호출되어 처리될 수 있게 요청(Request)과 서비스(Service Class) 매핑한 "Request Mapping"을 만들고 요청 시 처리하게 수정하겠습니다. 이전 자바 클래스 동적 로딩(carrotweb.tistory.com/53)과 프로퍼티(properties)를 이용하여 코딩하겠습니다. 1. "test2" 프로젝트의 "Java Resources"에 "src..

자바 클래스 동적 로딩 - Java Class.forName newInstance, 이클립스(Eclipse)

"Class.forName()"메서드는 로딩하고자 하는 클래스 명으로 클래스를 찾아 로드합니다. ​ Class.forName(String name, boolean initialize, ClassLoader loader) "name"은 완전 정규화된 명확한 이름(FQN - fully qualified name)으로 된 클래스 명입니다. "initialize"는 클래스 안에 "static"들을 초기할지 여부를 설정합니다. "loader"는 클래스 로더를 지정합니다. ​ Class.forName(String name) "name"은 완전 정규화된 명확한 이름(FQN - fully qualified name)으로 된 클래스 명입니다. 클래스 안에 "static"들을 초기화("initialize = true") ..

자바 JSTL 번들과 메시지를 이용한 JSP 다국어 크롬 웹 브라우저 고려사항 - Java JSTL Chrome Browser, 이클립스(Eclipse)

""태그는 웹 브라우저의 언어(Locale) 설정을 인식하여 "basename"속성에 지정된 패키지의 프로퍼티 파일(properties)을 자동으로 읽습니다. 웹 브라우저의 언어 설정을 인식하는 방법은 웹 요청의 해더(Request Headers)에 포함되어 있는 "Accept-Language"을 분석하여 인식합니다. ​ 크롬 웹 브라우저의 언어 설정을 확인해보겠습니다. "한국어 -> 영어 -> 영어(미국)"순으로 되어 있습니다. Locale로 하면 " ko or ko_KR -> en -> en_US"순일 겁니다. ​ 크롬 웹 브라우저의 해더(Request Headers)를 확인해보겠습니다. "Accept-Language"는 "ko,en;q=0.9,en-US;q=0.8,ko-KR;q=0.7"으로 되어있습..

자바 JSTL 메시지 파라메타 사용하여 JSP 다국어 처리 - Java JSTL fmt:message fmt:param, 이클립스(Eclipse)

1. "testservlet.jsp"파일에 오픈하여 "JSTL"의 ""를 이용하여 다국어를 처리할 수 있게 내용을 수정하겠습니다. ​ 상단에 "JSTL"의 "fmt"를 사용하기 위해 "taglib"를 추가합니다. ResourceBundle(리소스번들)을 통해 프로퍼티(properties)를 읽어 들리기 위해서 ""태그를 "" 태그 위에 입력하고 ""태그는 태그 적용 범위를 지정하는 것이기에 맨 하단에 입력합니다. 위의 "basename"값으로 한다면 "WEB-INF/classes/com/home/project/test2/message"에 "test_html.properties" 파일명으로 프로퍼티 파일이 있어야 합니다. 2. "test2" 프로젝트의 "Java Resources"에 "src/main/re..

자바 JSTL 메시지 JDK native2ascii로 인코딩 - Java JSTL fmt:message JDK native2ascii Encoding, 이클립스(Eclipse)

7. "login_html.properties"에서 마우스 오른쪽 버튼을 클릭하여 컨텍스트 메뉴 [Properties]를 클릭합니다. "Location:"의 오른쪽에 있는 "Show In System Explorer"버튼을 클릭합니다. "login_html.properties"파일 경로로 윈도우 파일 탐색기가 나타납니다. 폴더 경로란에 "cmd"를 입력하고 엔터를 클릭합니다. 윈도우 커멘드 창이 "login_html.properties"파일 경로로 나타납니다. 8. JDK에서 제공하는 "native2ascii.exe"를 찾습니다. ​ 이전 이클립스 JDK 1.8 - Eclipse JDK 1.8.0_181 설정하기(carrotweb.tistory.com/10)​에서 JDK 위치를 확인할 수 있습니다. JD..

자바 JSTL 번들과 메시지를 이용한 JSP 다국어 처리 - Java JSTL fmt:bundle fmt:message, 이클립스(Eclipse)

JSTL(JavaServerPages Standard Tag Library)란 자바 서버 페이지 표준 태그 라이브러리로 JSP에서 자바 코드("")를 직접 사용하지 않고 표준화된 태그 셋으로 처리하게 되어 개발을 용이하게 합니다. 1. https://mvnrepository.com를 접속합니다. 검색에 "jstl"를 입력하여 검색하 결과 중에 "javax.servlet"를 선택합니다. "Version"중에서 "1.2"를 선택합니다. "Maven"탭에 있는 스크립트를 복사합니다. javax.servlet jstl 1.2 2. "test2" 프로젝트의 "pom.xml"을 오픈하여 붙여 넣기 하고 저장합니다. 그러면 Maven에서 "jstl-1.2.jar"파일들을 자동으로 다운로드합니다. 다운로드가 완료되면 ..

자바 리소스번들 JVM 로케일 적용하여 다국어 메시지 처리 - Java ResourceBundle에 JVM locale, 이클립스(Eclipse)

1. "ResourceBundle.getBundle"에 로케일("Locale.getDefault()")을 추가하고 저장합니다. ResourceBundle resourceBundle = ResourceBundle.getBundle("com.home.project.test2.message.login", Locale.getDefault()); 2. 이클립스 메뉴 [Run > Run Configuration...]를 클릭합니다. "Run Configuration"창이 나타납니다. [Apache Tomcat > Tomcat8]에서 "Arguments"탭을 클릭합니다. "Tomcat9"로 테스트하고 있다면 [Apache Tomcat > Tomcat9]에서 "Arguments"탭을 클릭하면 됩니다. ​ "VM arg..

자바 리소스번들 웹 브라우저 로케일 적용하여 다국어 메시지 처리 - Java ResourceBundle Web Browser Locale, 이클립스(Eclipse)

1. "TestLoginService.java"에 웹 브라우저와 시스템 JVM의 로케일(locale)를 확인하는 코딩을 추가하고 저장합니다. System.out.println("Locale : " + request.getLocale()); System.out.println("Default Locale : " + Locale.getDefault()); 2. "Servers"탭에서 "tomcat8"를 선택하고 "start"버튼(start the server)을 클릭합니다. 웹 브라우저에서 "http://localhost:8080/test2/testform.do"를 입력합니다. "testform.jsp"대신 "login.jsp"가 호출되어 나타납니다. 첫번째 입력란은 아이디로 "1"를 두번째 입력란은 패스워드..

자바 리소스번들 메시지 처리 - Java ResourceBundl Message, 이클립스(Eclipse)

4. "TestLoginService.java"의 한글 메시지로 되어 있는 부분을 request.setAttribute("errorMessage", "이미 접속자된 분이 있습니다. 로그인을 할 수 없습니다."); request.setAttribute("errorMessage", "아이디/패스워드가 정확하지 않습니다."); "resourceBundle.getString"로 변경합니다. request.setAttribute("errorMessage", resourceBundle.getString("login.block")); request.setAttribute("errorMessage", resourceBundle.getString("login.mismatch")); 5. "Servers"탭에서 "tomc..

자바 리소스번들 메시지 프로퍼티 파일 생성 - Java ResourceBundle Message Properties, 이클립스(Eclipse)

1. 로그인 처리를 하는 "TestLoginService.java"의 "process"메서드에 메시지 처리를 위한 "ResourceBundle"를 코딩하고 저장합니다. ResourceBundle resourceBundle = ResourceBundle.getBundle("com.home.project.test2.message.login"); 2. "test2" 프로젝트의 "Java Resources"에 "src/main/resources"에서 오른쪽 버튼을 클릭하여 컨텍스트 메뉴 [New > Package]를 클릭합니다. "New Java Package"창의 "Name"에 "com.home.project.test2.message"를 입력하고 "Finish"버튼을 클릭합니다. 3. 생성된 "com.home..

자바 리소스번들을 이용한 다국어 메시지 처리 - Java ResourceBundle, 이클립스(Eclipse)

ResourceBundle은 키(key)와 값(value)으로 구성된 프로퍼티 파일(properties)을 읽고 저장할 수 있는 기능을 제공합니다. 그리고 로케일(locale)을 통해 국제화를 지원합니다. ​ ResourceBundle은 다음의 특징을 가지는 있습니다. - 쉽게 현지화할 수 있고 다른 언어로 번역해서 사용할 수 있습니다. - 한 번에 여러 로케일(언어와 국가)을 처리합니다. - 향후에 더 많은 로케일(언어와 국가)이 지원되게 쉽게 수정할 수 있습니다. ​ 국제화 지원을 위해 프로퍼티 파일 명은 "{프로퍼티명}_{언어코드}_{국가코드}"으로 구성됩니다. ResourceBundle은 "{프로퍼티명}_{언어코드}_{국가코드}" -> "{프로퍼티명}_{언어코드}" -> "{프로퍼티명}" 순으로 ..

자바 싱글톤 세션 매니저 만들기 - Java Singleton Session Manager, 이클립스(Eclipse)

1. "test2" 프로젝트의 "Java Resources"에서 "src/main/java"의 "com.hom.project.test2.service"에서 오른쪽 버튼을 클릭하여 컨텍스트 메뉴 [New > Class]를 클릭합니다. ​ "New Java Class"창의 "Name"에 "TestSessionManager"를 입력하고 "Modifiers"의 "final"를 체크하고 "Finish"버튼을 클릭합니다. "test2" 프로젝트의 "Java Resources"에서 "src/main/java"의 "com.hom.project.test2.service"에 "TestSessionManager.java"파일이 생성됩니다. 싱글스톤 처리를 추가합니다. /** * 생성자 */ private TestSessio..

자바 싱글톤 세션 카운트 만들기 - Java Singleton Session Counter, HttpSessionListener, 이클립스(Eclipse)

1. "test2" 프로젝트의 "Java Resources"에서 "src/main/java"의 "com.hom.project.test2.service"에서 오른쪽 버튼을 클릭하여 컨텍스트 메뉴 [New > Class]를 클릭합니다. ​ "New Java Class"창의 "Name"에 "TestSessionCounter"를 입력하고 "Modifiers"의 "final"를 체크하고 "Finish"버튼을 클릭합니다. "test2" 프로젝트의 "Java Resources"에서 "src/main/java"의 "com.hom.project.test2.service"에 "TestSessionCounter.java"파일이 생성됩니다. 싱글스톤 처리를 추가합니다. /** * 생성자 */ private TestSessio..

자바 싱글톤 만들기 - Java Singleton, 이클립스(Eclipse)

Singleton(싱글톤)이란, JVM(Java Virtual Machine - 자바 가상 머신) 내에서 클래스를 한 개의 instance(인스턴스)으로 생성하여 사용하는 것입니다. ​ 1. "test2" 프로젝트의 "Java Resources"에서 "src/main/java"의 "com.hom.project.test2.service"에서 오른쪽 버튼을 클릭하여 컨텍스트 메뉴 [New > Class]를 클릭합니다. ​ "New Java Class"창의 "Name"에 "TestSingleton"를 입력하고 "Modifiers"의 "final"를 체크하고 "Finish"버튼을 클릭합니다. "test2" 프로젝트의 "Java Resources"에서 "src/main/java"의 "com.hom.project...

자바 서블릿 HTTP 세션 리스너 만들기 - Java Servlet Listener HttpSession, 이클립스(Eclipse)

"HttpSessionListener"는 "HttpSession" 라이프 사이클 변경에 대해 알림 이벤트를 수신하기 위한 인터페이스입니다. ("Interface for receiving notification events about HttpSession lifecycle changes.")​ "HttpSessionListener"는 "sessionCreated"는 세션이 생성될 때, "sessionDestroyed"는 세션이 파기될 때 호출됩니다. ​ "HttpSessionAttributeListener"는 "HttpSession" 속성 변경에 대해 알림 이벤트를 수신하기 위한 인터페이스입니다. ("Interface for receiving notification events about HttpSessi..

자바 서블릿 리퀘스트 리스너 만들기 - Java Servlet Listener ServletRequest , 이클립스(Eclipse)

"ServletRequestListener"는 "ServletRequest"가 웹 애플리케이션의 범위에서 들어오거나 나가는 요청에 대해 알림 이벤트를 수신하기 위한 인터페이스입니다. ("Interface for receiving notification events about requests coming into and going out of scope of a web application.") "ServletRequestListener"는 "requestInitialized"는 요청이 초기화될 때, "requestDestroyed"는 요청이 파기될 때 호출됩니다. 요청 초기화 시점은 첫 번째 서블릿 또는 필터에 들어가려고 할 때이고 요청 파기 시점은 마지막 서블릿 또는 첫 번째 필터를 종료할 때입니다. ..

자바 서블릿 콘텍스트 리스너 만들기 - Java Servlet Listener ServletContext , 이클립스(Eclipse)

Listener(리스너)는 이벤트가 발생할 때 이벤트를 수신하여 처리하기 기능을 합니다. Listener(리스너)는 "@WebListener" 어노테이션으로 설정하거나 "web.xml"에 ""를 등록하여 설정할 수 있습니다. ​ Listener(리스너)는 EventListener(이벤트 리스너) 인터페이스를 계승을 받고 "ServletContextListener", "ServletContextAttributeListener", "ServletRequestListener", "ServletRequestAttributeListener", "AsyncListener", "HttpSessionListener", "HttpSessionAttributeListener", "HttpSessionActivationLi..

728x90
728x90