목록
'홈' 732건
-
wait(), notify(), notifyAll()을 이용한 스레드 동기화wait()-notify()를 이용한 스레드 동기화가 필요한 경우스레드들이 sybchronized를 이용하여 공유 데이터에 순차적으로 잘 접근하도록 만들어진 경우라도, 여전히 동기화가 필요한 상황이 있습니다. 대표적 경우가 공유 메모리를 통해 두 스레드가 데이터를 주고받을 때, 공유 메모리에 대해 두 스레드가 동시에 접근하는 producer-cunsumer 문제입니다. Object의 wait(), notify() 메소드wait()-notify()를 이용하면 앞의 producer-consumer 문제의 스레드 동기화를 해결할 수 있습니다. java.lang.Object 클래스는 스레드 사이에 동기화를 위한 3개의 메서드 wait(), notify, notifyAll()를 제공합니다. 모든 객체가 동기화 객..
-
MySQL 연결하기시퀄라이즈를 통해 익스프레스 앱과 MySQL을 연결해야 합니다. app.js를 생성하고 익스프레스와 시퀄라이즈 연결 코드를 작성합니다.const express = require("express");const path = require("path");const morgan = require("morgan");const nunjucks = require("nunjucks");const { sequelize } = require("./models");const app = express();app.set("port", process.env.PORT || 3001);app.set("view engine", "html");nunjucks.configure("views", { express: app, watch:..
-
세션을 이용한 로그인 예제1. 먼저 데이터베이스 연동과 관련된 설정을 해줍니다. MemberDAO.java와 MemberVO.java를 만들어 다음과 같이 작성합니다.MemberDAO.javapackage sec05.ex01;import java.sql.Connection;import java.sql.Date;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.ArrayList;import java.util.List;import javax.naming.Context;import javax.naming.InitialContext;import javax.sql.DataSource;public c..
-
스레드 동기화(Thread Synchronization)스레드 동기화의 필요성멀티스레드는 다수의 작업을 동시에 실행시키는 응용프로그램 작성 기법입니다. 하지만, 멀티 스레드를 사용할 때 주의를 기울려야 합니다. 다수의 스레드가 공유 자원 혹은 공유 데이터에 접근할 때 예상치 못한 결과를 낳을 수 있습니다. 공유 프린터에 즉시 접근하는 경우공유 프린터에 대한 멀티 스레드의 동시 접근을 순차화하여 섞여 출력되는 문제를 해결하였습니다. 공유 집계판에 동시 접근하는 경우 멀티스레드 프로그램을 작성할 때 주의할 점을 다수의 스레드가 공유 데이터에 동시 접근하는 경우에 대한 처리입니다. 이에 대한 헤결책이 바로 스레드 동기화(Thread Synchronization)입니다. 스레드 동기화란 공유 데이터에 접근하고자 하는 다수의 스레드가 서로 순서대로 충돌 없이 공유 데..
-
시퀄라이즈 사용하기시퀄라이즈는 MySQL 작업을 쉽게 할 수 있도록 도와주는 라이브러리입니다. 시퀄라이즈는 ORM(Object-relational Mapping)으로 분류됩니다. ORM은 자바스크립트 객체와 데이터베이스의 릴레이션을 매핑해주는 도구입니다. 시퀄라이즈를 단지 MySQL과 같이 써야만 하는 것은 아닙니다. MariaDB, PostgreSQL, SQLite, MSSQL 등 다른 데이터베이스도 같이 쓸 수 있습니다. 문법이 어느 정도 호환되므로 프로젝트를 다른 SQL 데이터베이스로 전환할 때도 편리합니다. 시퀄라이즈를 쓰는 이유는 자바스크립트 구문을 알아서 SQL로 바꿔주기 때문입니다. 따라서 SQL 언어를 직접 사용하지 않고도 자바스크립트만으로 MySQL을 조작할 수 있으며, SQL을 몰라도 MySQL을 어느 ..
-
encodeURL() 사용법1. 다음과 같이 실습 파일을 준비합니다. 2. SessionTest5 클래스를 다음과 같이 작성합니다. 다시 /login으로 요청해 jsessionId를 URL rewriting 방식으로 가져온 후 세션에 접근하여 로그인 상태 유무를 판단하도록 구현합니다.package sec04.ex01;import jakarta.servlet.ServletException;import jakarta.servlet.annotation.WebServlet;import jakarta.servlet.http.HttpServlet;import jakarta.servlet.http.HttpServletRequest;import jakarta.servlet.http.HttpServletResponse;import jakarta...
-
스레드 종료스레드의 종료는 스스로 종료하는 경우와 다른 스레드에 의해 강제 종료되는 경우가 있습니다. 종료된 스레드를 다시 살릴 수도 없습니다. 스스로 종료스레드는 다음 예와 같이 run() 메서드가 실행 도중 리턴하거나 run()을 완전히 실행하고 리턴하면 종료됩니다.public void run() { ................ return; // 스레드는 스스로 종료한다. ................} 강제 종료그러면 한 스레드가 다른 스레드를 강제로 종료시킬 수 있을까? 종료시키고자 하는 스레드의 interrupt() 메서드를 호출하면 됩니다.main() 스레드는 TimerThread 스레드를 생성한 뒤, 강제로 종료시키기 위해 TimerThread의 interrupt()를 호출합니다. 이 결과 Time..
-
CRUD 작업하기CRUD는 Create, Read, Update, Delete의 첫 글자를 모은 두문자이며 데이터베이스에서 많이 수행하는 데 네 가지 작업을 일컫습니다. 그 방법만 익혀도 웬만한 프로그램은 다 만들 수 있을 정 도로 CRUD 작업은 많이 사용됩니다. SQL문 위주로 진행하지만, SQL에 익숙하지 않다면 워크벤치로 진행해도 됩니다. Create(생성)Create(생성)는 데이터를 생성해서 데이터에 넣는 작업입니다.mysql> use nodejs;Database changedmysql> INSERT INTO nodejs.users (name, age, married, comment) VALUES ('zero', 24, 0, '자기소개1');Query OK, 1 row affected (0.09 sec)m..
-
세션을 이용한 로그인 정보 바인딩 실습1. 실습하기 전에 해야할 일이 있습니다. 톰캣이 종료된 후에도 세션이 메모리에서 삭제되지 않는 경우가 있으므로 톰캣 설정 파일인 context.xml을 열어 태그의 주석을 해제해야 합니다. 2. 다음과 같이 실습 파일을 준비합니다. 3. 로그인창에서 ID와 비밀번호를 입력한 후 서블릿으로 전송할 수 있도록 login2.html 파일을 작성합니다. 아이디 : 비밀번호: 4. SessionTest4 클래스를 다음과 같이 작성합니다. 로그인창에서 로그인할 경우 ID와 비밀번호를 가져오고, 최초 요청 시 세션에 setAttribute() 메서드를 이용해 user_id로 사용자 ID를 바인딩하도록 구현합니다. 태그를 이용해 재요청하고 세션의 getSttribute() 메서드를 이용하여 us..
-
스레드 생명 주기와 스케줄링스레드 상태스레드는 JVM에 있어 생명체와 같습니다. 스레드는 태어나고, 실행하고, 잠자고, 대기하고, 종료하는 등 생명 주기(life cycle)를 가집니다. 그리고 생명주기 동안 여러 상태의 변이를 거칩니다. 스레드의 상태는 다음과 같이 총 6가지이며 JVM에 의해 관리됩니다.New스레드가 생성되었지만 아직 실행할 준비가 되지 않은 상태입니다. start() 메소드가 호출되면 RUNNABLE 상태가 관리됩니다.RUNNABLE스레드가 현재 실행되고 있거나, 실행 준비되어 스케줄링을 기다리는 상태입니다. TIMED_WAITING스레드가 sleep(long n)을 호출하여 n밀리초 동안 점을 자는 상태입니다.BLOCK 스레드가 I/O 작업을 실행하여 I/O 작업의 완료를 기다리면서 멈춘(blocked) 상..
-
데이터베이스 및 테이블 생성하기데이터베이스 생성하기 MySQL 프롬프트에 접속합니다. CREATE SCHEMA [데이터베이스명]의 데이터베이스를 생성하는 명령어입니다. SCHEMA(스키마)라고 되어 있는데, MySQL에 데이터베이스와 스키마는 같은 개념입니다. nodejs라는 이름의 데이터베이스를 생성합니다. 그 후 use nodejs; 명령어를 추가로 입력하여 앞으로 nodejs 데이터베이스를 사용하겠다는 것을 MySQL에 알립니다.mysql> CREATE SCHEMA `nodejs` DEFAULT CHARACTER SET utf8;Query OK, 1 row affected, 1 warning (0.07 sec)mysql> use nodejs;Database changed CREATE SCHEMA 뒤에 DEFAULT CHARAC..
-
다른 브라우저에서 새 세션 만들기브라우저에서 Ctrl + Shift + N을 눌러 스크릿 모드의 크롬을 실행합니다. 주소창에서 /sess로 요청하면 새로운 세션을 생성한 후 다른 세션 id를 출력합니다. 세션 기본 유효 시간은 톰캣 컨테이너에서 지정한 30분(1800)초입니다. 그러나 HttpSession의 setMaxInactiveInterval() 메서드를 이용하면 사용자가 원하는 세션 유효 시간을 설정할 수 있습니다. 그리고 invalidate()의 메서드를 이용하면 새션을 언제든지 삭제할 수도 있습니다.다음과 같이 톰캣 컨테이너의 web.xml에 세션 유효 시간이 설정된 것울 확인할 수 있습니다. 이번에는 제공되는 메서드들을 이용해서 직접 세션 유효 시간을 재설정해보겠습니다.1. 다음과 같이 SessioTest2 클래스를 준비합..