DB 이용한 회원관리 시스템_기본

ChoRong0824·2023년 3월 24일
1
post-thumbnail

JSP와 서블릿 공부하면서 이후에 있을 Model 2 로 만드는 게시판 프로젝트 및 예제들을 하기 위해서 DB를 어느정도 기본기를 잡고 가야하기 때문에 이렇게 포스팅 하게 되었습니다.
SQLD 공부하면서 내용이 겹치는 부분들이 있을 수 있습니다.
DB는 SQL과의 연관성을 떼어내기 힘들기 때문입니다.

데이터 베이스

DB란 ?

여러 시스템들이 공유할 수 있도록 저장되어 운용되는 데이터의 집합
(통합된 데이터라고 합니다)

  • 사용 이유?
    원래 응용 프로그램마다 데이터를 독립적으로 가지기 때문에 데이터의 중복 현상이 발생하게 됩니다.
    but,

DB를 사용하게 되면

  1. 데이터를 통합하여 관리하기 때문에 데이터 중복 현상이 발생하지 않게 됩니다.
  2. 실시간 접근 (클라이언트가 DB에 접근하여 데이터를 요청하면 DB는 실시간 응답)이 가능합니다
  3. 2번의 특징으로 (삽입, 삭제, 갱신)으로 계속적인 데이터의 변화가 일어납니다.

DBMS 기능

  1. 정의기능 : 테이블 등을 설계하고 생성할 수 있음
  2. 조작기능 : 데이터의 삽입,수정,삭제, 검색 등 데이터를 조작할 수 있음
  3. 제어기능 : 저장된 데이터가 일관성을 유지하고 데이터의 중복 문제를 발생하지 않도록 함

SQL

SQL 은 DB에 데이터를 삽입, 수정, 삭제, 검색을 하기 위한 관계형 DB (=RDMS)에서 제공하는 질의 언어입니다.
DB와 응용프로그램 사이에 존재하여 데이터의 올바른 정보 교환을 하게 해주는 것이 DBMS인데, DBMS상에서 삽입, 수정, 삭제,검색 기능을 실제로 처리하는 언어가 SQL 입니다.

RDMS. 즉, 관계형 DB는 MySQL, PostgreSQL, MariaDB, Microsoft SQL Server, Oracle Database가 대표적입니다.


SQL은 크게 DDL, DML, DCL로 나눌 수 있습니다.

DDL

DB 테이블을 생성하거나 재정의 및 제거할 수 있는 기능

SQL문/설명

  • CREATE / DB 또는 테이블과 같은 객체를 생성
  • ALTER / 수정
  • DROP / 제거

예시1 (CREATE문)

CREATE TABLE 생성할 테이블명{
		필드명1 타입명,
        필드명2 타입명,
        ...
        primary key(필드명)
};

예시2 (ALTER문)

ALTER TABLE 테이블명 적용옵션{
		칼럼명 데이터타입명
};

예시3 (DROP문)

DROP TABLE 테이블명;

참고,

DESC 테이블명 : 데이터를 확인할 수 있습니다.


DML

데이터의 검색 및 삽입, 수정 삭제할 수 있는 기능

SQL문 / 설명

  • INSERT / 테이블에 데이터 삽입
  • UPDATE / 테이블에 삽입된 데이터 수정
  • DELETE / 테이블에 삽입된 데이터 삭제
  • SELECT / 테이블에 존재하는 데이터를 특정 조건으로 검색하여 결과 출력

예시1 (INSERT문)

  • DB에 데이터를 삽입할 때 사용, 테이블에 존재하는 칼럼 개수만큼 필드명과 필드 값을 입력할 수 있습니다.
INSERT INTO 테이블명 (칼럼1,칼럼2...) VALUES (데이터값1, 데이터값2...)

테이블명 뒤에 데이터를 삽입할 컬럼명을 지정하지 않을 경우,
테이블에 존재하는 전체 컬럼에 삽입할 데이터를 모두 나열해야 합니다.

INSERT INTO 테이블명 VALUES (데이터값1, 데이터값2 ...)

예시2 (UPDATE문)

  • 테이블에 저장되어 있는 레코드의 값을 수정, AND 나 OR 등을 이용해 여러 조건 적용가능
UPDATE 테이블명 SET 컬럼명1='수정값1', 컬럼명2='변경값2'...
					WHERE 컬럼명3 ='조건값1' AND 컬럼명4='조건값2';

예시3 (DELETE문)

  • INSERT문으로 삽입된 데이터를 삭제, UPDATE 문과 마찬가지로 WHERE절로 조건을 주어 조건에 해당하는 레코드만 삭제가능
    (오라클은 DELETE 단어 뒤의 FROM 단어 생략가능)
DELETE FROM 테이블명 WHERE 컬럼명1='조건값1' AND 컬럼명2='조건값2';

예시4 (SELECT문)

  • DB의 데이터를 검색하여 출력할 때 사용
SELECT 컬럼명1, 컬럼명2 ... FROM 테이블명1, 테이블명2 ...
							WHERE 컬럼명3 ='조건값1' AND 컬럼명4='조건값2'
                            ORDER BY 컬럼명5 [ASC | DESC];
  • 역할
    SELECT 뒤 칼럼명은 출력할 칼럼명을 의미, FROM 뒤의 테이블명은 보통 1개를 입력하지만 여러 테이블과 연동하여 결과를 출력할 때는 여러 개를 지정할 수 있습니다.
    WHERE절은 앞에서 UPDATE문이나 DELETE 문에서 사용한 WHERE절과 같이 조건절 역할을 함.
    조건을 설정하는 WHERE절 가장 중요.
  • 정렬
    ORDER BY는 뒤에 제시되는 컬럼명을 기준으로 정렬을 하며, 컬럼명 뒤에는 정렬 방식을 정하는 ASC(오름차순), DESC(내림차순)이 붙는다. (생략시 오름차순 정렬)

참고, (출력될 때, 출력화면을 보면)
SELECT문 뒤에 * 라는 문자가 붙습니다.
이것은 모든 컬럼을 의미합니다.


회원 관리 시스템을 위한 테이블 작성

생성하는 테이블은 회원 입장에서는 회원 가입과 로그인이 가능하며,
관리자 입장에선 회원의 정보수정, 회원 삭제가 가능
테이블에 어떤 컬럼들이 필요할까 ?

필드명 / 의미

  • ID / 회원 아이디
  • PASSWORD / 회원 비밀번호
  • NAME / 회원 이름
  • AGE / 회원 나이
  • GENDER / 회원 성별
  • EMAIL / 회원 이메일

JDBC

자바와 DBMS를 연결시켜주는 API(응용 프로그램 인터페이스)

  1. 드라이버 설치

    JDBC 드라이버는 각 DBMS와 연동하여 JDBC API를 사용할 수 있도록 지원해주는
    JDBC API 모듈입니다.
    DBMS의 종류가 많기 때문에 DBMS 종류에 맞는 JDBC 드라이버를 설치해주어야 합니다.

  2. JDBC 프로그램 작성 단계
    기본적으로 준비해야 할 작성 단계

  • JDBC 드라이버 이름 및 접속할 JDBC URL 설정
  • JDBC 드라이버 로드
  • JDBC URL과 계정 정보를 이용하여 Connection 객체를 얻음
  • JDBC를 이용한 DB 작업

이유

JDBC 드라이버 이름 설정하는 이유 : JDBC가 어느 DBMS에 대한 드라이버를 사용하는지 확인. (각각에 맞는 드라이버가 있음)
접속할 DBMS URL : 접속할 DBMS의 호스트 주소 등을 의미
이 2가지 정보를 설정하였다면, JDBC 드라이버 이름을 가지고 JDBC 드라이버를 로드해야 합니다.
로드한 후, JDBC URL과 계정 정보를 가지고 DBMS에 접속하는 작업을 하여 Connection 객체를 얻어옵니다.
Connection 객체는 실제 db 작업을 하기 위해 꼭 필요한 객체입니다.
이 객체를 얻어왔다면 이것을 이용하여 여러 가지 작업을 수행할 수 있습니다.

Connection 객체 내의 Statement를 이용하여 데이터의 삽입, 수정, 삭제를 수행할 수 있음.


연결 실패

만약, 연결에 실패했다면 아래와 같은 상황일 것입니다.
1. 드라이버 이름과 JDBC URL 확인. (포트 번호나 SID명의 경우 각각 다를 수 있음)
-> listener.ora 에서 확인 가능함 (오라클일 경우)
2. HOST 속성 값과 url 부분의 서버이름이 동일해야함.
3. url 변수에 지정한 포트 번호 = listener.ora 파일에 지정되어있는 포트번호의 일치 유무
4. SID명 일치하는지 확인


커넥션 풀

  • DB의 연결정보를 저장, Apache Tomcat 서버단계에서 저장합니다.
    로직,
    JDBC를 연동하기 위해서는 드라이버를 로드하고 JDBC URL로 접속하여 Connection 객체를 얻어오는 단계를 거쳐야 합니다.

    커넥션 풀은 db와 연결된 Connection 객체를 미리 생성하여 풀(pool)속에 저장해두고 필요할 때마다 이 풀에 접근하여 Connection 객체를 사용하고, 작업이 끝나면 다시 반환 하는 것을 말합니다.

    사용자가 웹사이트에 요청을 할때마다 Connection 객체를 생성하여 연결한다면 메모리에 Connection 객체가 너무 많이 생성되어 매우 비효율적일 것입니다.
    but, 커넥션 풀을 사용하면,
    풀 속에 미리 커넥션이 생성되어있기 때문에 커넥션을 생성하는데 드는 연결 시간이 소비되지 않습니다.
    또한 현재 다른 사용자가 사용하지 않는 커넥션을 재사용 가능하기 때문에 사용자가 접속할 때마다 계속해서 커넥션을 만들 필요가 없습니다. => 프로그램 효율과 성능이 전체적으로 상승


트랜잭션

일 처리의 최소 단위
트랜잭션을 이용하면 하나의 트랜잭션으로 묶인 작업들을 전부 실행되든지 전부 취소되게 처리할 수 있습니다.


JDBC 실전 활용 (Statement / PreparedStatement)

Statement

실제 DB에 SQL문을 보내기 위해 필요한 객체입니다.
참고로, Connection 객체의 연결 정보를 가져와서 DB에 접근하므로, Conneciton 객체가 먼저 존재해야합니다.


메소드 / 설명

  • executeQuery(String sql) / SELECT문을 실행할 때 사용 (ResultSet 객체 반환)
    ResultSet 객체는 SELECT문을 이용하여 테이블로부터 얻어온 데이터(레코드)를 담고 있는 객체,
  • excuteUpdate() / (삽입, 수정, 삭제)실행. 적용된 행수를 반환 (해당 실행문으로 수정된 레코드 수를 반환한단 소리)
  • close() / Statement 객체를 모두 사용한 후 메모리에 반환하기 위해 사용. (필수)

PreparedStatement

Statement 객체와 비슷. PreparedStatement 인터페이스가 Statement 인터페이스를 상속받기 때문에 비슷합니다.
PreparedStatement 사용하면 값 매핑 기능을 사용해서 Statement 인터페이스보다 편리하게 sql문 전송가능

profile
컴퓨터공학과에 재학중이며, 백엔드를 지향하고 있습니다. 많이 부족하지만 열심히 노력해서 실력을 갈고 닦겠습니다. 부족하고 틀린 부분이 있을 수도 있지만 이쁘게 봐주시면 감사하겠습니다. 틀린 부분은 댓글 남겨주시면 제가 따로 학습 및 자료를 찾아봐서 제 것으로 만들도록 하겠습니다. 귀중한 시간 방문해주셔서 감사합니다.

0개의 댓글