목록
'홈' 731건
-
이벤트 기반 프로그래밍이벤트 기반 프로그래밍이벤트 기반 프로그래밍(event drivem programming)은 이벤트의 발생에 의해 프로그램 실행 흐름이 결정되는 방식의 프로그래밍 패러다임입니다. 이벤트는 키 입력, 마우스 클릭, 마우스 드래그 등 사용자의 액션이나, 센서 등 외부 장치로부터의 입력, 네트워크를 통한 데이터 수신, 다른 스레드나 프로그램으로부터의 메시지 수신 등에 의해 발생합니다.이벤트 기반 응용프로그램은 각 이벤트를 처리하는 이벤트 리스너(event listener)들을 보유하며, 이벤트가 발생할 때마다 리스너가 실행됩니다. 그러므로 프로그램 내의 어떤 코드가 언제 실행될지는 전적으로 이벤트의 발생에 달려있습니다. 자바의 이벤트 기반 GUI응용프로그램 구조이벤트 리스너는 이벤트를 처리하는 프로그램 코드로..
-
패키지 버전 이해하기노드 패키지들의 버전은 항상 세 가지로 이루어져 있습니다. 심지어 노드의 버전도 세 자리입니다. 버전이 세 자리인 이유는 SemVer 방식의 버전 넘버링이 따르기 때문입니다.SemVer는 Semantic Versioning(유의적 버전)의 약어입니다. 버전을 구성하는 세 자리가 모두 의미를 가지고 있다는 뜻입니다.각각의 패키지는 모두 버전이 다르고 페키지 간의 의존 관계도 복잡합니다. 만약 어떤 패키지 간의 의존 관계도 복잡합니다. 만약 어떤 패키지의 버전을 업그레이드했는데, 그것을 사용하는 다른 패키지에서 에러가 발생한다면 문제가 됩니다. 많은 패키지가 서로 얽히다 보면 이 문제는 점점 더 심각해집니다. 따라서 버전 번호를 어떻게 정하고 올려야 하는지를 명시하는 규칙이 등장했습니다.버전의 첫 번째 자리..
-
DataSource 이용해 회원 정보 등록하기1. sec02.ex02 패키지를 만들고 MemberVO.java를 만듭니다. 2. 회원 가입창을 작성하기 위해 다음과 같이 memberForm.html을 작성합니다. 태그를 이용해 회원 등록 요청을 서블릿에 전달합니다. 회원 가입창 아이디 비밀번호 이름 이메일 3. MemberServlet 클래스를 다음과 같이 작성합니다. command 값을 먼저 받아 와 addM..
-
여러 컴포넌트를 가진 복잡한 GUI 만들기컨텐트팬에 BorderLayout을 사용하면 5개의 컴포넌트만 출력 가능하고, GridLayout을 사용하면 격자 모양으로만 배치할 수 있는 등 컴포넌트의 개수와 배치 모양에 한계가 있습니다. 많은 컴포넌트을 배치하면서 다양한 모양의 GUI를 만들기 위해서는 여러 채널과 여러 배치관리자를 사용하면 됩니다. 여러 컴포넌트를 가진 GUI 만들기import javax.swing.*;import java.awt.*;public class MultiplePanelEx extends JFrame { public MultiplePanelEx() { super("Mutiple Panels and Layouts"); // 타이틀 setDefaultCloseOperation(JFrame.EX..
-
npm 알아보기 & package.json으로 패키지 관리하기npm 알아보기npm은 Node Package Manager의 약어로, 이를 그대로 노드 패키지 매니저입니다. 대부분의 자바스크립트 프로그램은 패키지라는 이름으로 npm에 등록되어 있으므로 특정 기능을 하는 패키지가 필요하다면 npm에 찾아 설치하면 됩니다.방대한 양의 패키지는 노드와 자바스크립트의 생태계를 더욱 견고하게 만들고 있습니다. 게다가 대부분 오픈 소스여서 노드를 사용해 웹을 개발할 때 많은 도움이 됩니다.npm에 업로드된 노드 모듈을 패키지라고 부릅니다. 모듈이 다른 모듈을 사용할 수 있는 것처럼, 패키지가 다른 패키지를 사용할 수도 있습니다. package.json으로 패키지 관리하기설치한 패키지의 버전을 관리하는 파일이 바로 package.json입니다. 따라서 노드 프로젝트를 시작하기 ..
-
톰캣의 DataSource로 연동해 회원 정보 조회 실습1. sec02.ex01 패키지를 만들고 MemberDAO, MemberServlet, MemberVO 클래스를 만듭니다.package sec02.ex01;import java.sql.Date;public class MemberVO { private String id; private String pwd; private String name; private String email; private Date joinDate; public MemberVO() { System.out.println("MemberVO 생성자 호출"); } public String getId() { return id; } public void setId(String id) { this.id = id; } public Strin..
-
배치관리자 없는 컨테이너배치관리자가 없는 컨테이너가 필요한 경우모든 컨테이너는 배치관리자를 가지고, 배치관리자가 컴포넌트의 위치와 크기를 결정하도록 하는 것아 자바 GUI의 기본 정신입니다. 배치관리자는 컴포난트를 절대적인 위치에 배치하지 않고, 다른 컴포넌트의 오른쪽이나 아래와 같이 상대적인 위치에 배치합니다. 그러므로 컨테이너의 크기가 변하면 컴포넌트의 위치도 함께 변합니다.배치 관리자를 사용하면 컴포넌트의 위치에 대해 신경쓰지 않아도 되지만, 한편으로 컴포넌트의 위치를 자동 결정하는 배치관리자가 오히려 불편한 경우들이 종종 있습니다. 컴포넌트의 크기나 위치를 개발자가 결정하고자 하는 경우게임 프로그램과 같이 시간이나 마우스/키보드의 입력에 따라 컴포넌트들의 위치와 크기가 수시로 변하는 경우여러 컴포넌트들이 겹치는 효과를 ..
-
clustercluster 모듈은 기본적으로 싱글 프로세스로 동작하는 노드가 CPU 코어를 모두 사용할 수 있게 해주는 모듈입니다. 포트를 공유하는 노드 프로세스를 여러 개 둘 수도 있으므로, 요청이 많이 들어왔을 때 병렬로 실행된 서버의 개수만큼 요청이 분산되게 할 수 있습니다. 서버에 무리가 덜 가게 되는 셈입니다.cluster 모듈을 설정하여 코어 하나당 노드 프로세스 하나가 돌아가게 할 수 있습니다. 코어를 하나만 사용할 때에 비해 성능이 개선됩니다. 하지만 장점만 있는 것은 아니며, 메모리를 공유하기 못하는 등의 단점도 있습니다. 세션을 메모리에 저장하는 경우 문제가 될 수 있습니다. 이는 레디스 등의 서버를 도입하여 해결할 수 있습니다. cluster.jsconst cluster = require("clu..
-
DataSource 이용해 데이터베이스 연동하기미리 데이터베이스와 연결시킨 상태를 유지하는 기술을 커넥션풀(ConnectionPool)이라고 부릅니다.커넥션풀 동작 과정1. 톰캣 컨테이너를 실행한 후 응용 프로그램을 실행합니다.2. 톰캣 컨테이너 실행 시 ConnectionPool 객체를 생성합니다.3. 생성된 커넥션 객체는 DBMS와 연결합니다.4. 데이터베이스와의 연동 작업이 필요한 경우 응용 프로그램은 ConnectionPool에서 제공하는 메서드를 호출하여 연동합니다. 톰캣 컨테이너는 자체적으로 ConnectionPool 기능을 제공합니다. 톰캣 실행 시 톰캣은 설정 파일에 설정된 데이터베이스 정보를 이용해 미리 데이터베이스와 연결하여 ConnectionPool 객체를 생성한 후 애플리케이션이 데이터베이스와 연동할 일이 생기면 Connecti..
-
GridLayout 배치관리자배치 방법GridLayout은 컨테이너 공간을 그리드(격자) 모양으로 분할하여 각 셀에 하나씩 컴포넌트를 배치하는 방법입니다. GridLayout은 부착되는 순서대로 컴포넌트를 셀에 배치합니다.컴포넌트를 삽입하는 방법은 다른 배치관리자와 별반 다르지 않으며 다음과 같습니다.container.setLayout(new GridLayout(4, 3)); // 4x3 분할로 컴포넌트 배치container.add(new JButton("1")); // 상단 왼쪽 첫 번째에 버튼 배치conainer.add(new JButton("2")); // 그 옆 셀에 버튼 배치 GridLayout의 생성자와 속성GridLayout 배치관리자의 생성자는 다음과 같습니다.GridLayout()GridLayout(int rows,..
-
https와 http2https 모듈은 웹 서버에 SSL 암호화를 추가합니다. GET이나 POST 요청을 할 때 오가는 데이터를 암호화해서 중간에 다른 사람이 요청을 가로채더라도 내용을 확인할 수 없게 합니다. 요즘은 로그인이나 결제가 필요한 창에서 https 적용이 필수가 되는 추세입니다.SSL이 적용된 웹 사이트에서 방문하면 브라우저 창에 자물쇠 표시가 나옵니다.server1.jsconst http = require("http");http .createServer((req, res) => { res.writeHead(500, { "Content-Type": "text/html; charset=utf-8" }); res.write("Hello Node!"); res.end("Hello Server!"); ..
-
PreparedStatement를 이용한 회원 정보 실습Statement를 이용해서 데이터베이스와 연동할 경우에는 연동할 때마다 DBMS에서 다시 SQL문을 컴파일해야 하므로 속도가 느리다는 단점이 있습니다.따라서 데이터베이스와 연동할 때 또는 빠른 반복 처리가 필요할 때는 PreparedStatement 인터페이스를 사용해야 합니다. PreparedStatement 인터페이스의 특징은 다음과 같습니다.PreparedStatement 인터페이스는 Statement 인터페이스를 상속하므로 지금까지 시용한 메서드를 그대로 사용합니다.Statement 인터페이스가 DBMS에 전달하는 SQL문은 단순한 문자열이므로 DBMS는 이 문자열을 DBMS가 이해할 수 있도록 컴파일하고 실행합니다. 반면에 PreparedStatement 인터페이스는 컴파일된 SQL문을 DBM..