231026

한라봉봉·2023년 10월 26일
0

기업연계 BE 교육 TIL

목록 보기
18/58

SQL

DB 기초

데이터베이스 트랜잭션의 특성 ACID <-시험나옴

  1. 원자성 A
  2. 일관성 C
  3. 독립성 I
  4. 지속성 D -> 스프링에서는 유사한 개념으로 PERSISTENCE를 제공. DAO에 대해 영속성 컨텍스트를 제공

최근 떠오르는 개념

DBMS를 대체하는 RDS : AWS가 지원하는 원격 DB

오픈소스 DBMS

MariaDB는 개발판의 버전을 10.X로 변경하여 MYSQL의 특징을 따르지 않고 MariaDB만의 특징을 분명히 하기 시작함

관계형 DBMS

연관관계의 주인

헷갈리면 무조건 외래키가 있는 곳을 주인으로 정하면 된다.
DB 입장에서 보면 외래키가 있는 곳이 무조건 N이고 외래키가 없는 곳은 무조건 1이다.
즉, N쪽이 무조건 연관 관계의 주인이 되는 것이다.
N쪽이 무조건 ManyToOne이 된다.
연관 관계의 주인이라고 하면 뭔가 비즈니스적으로 중요하게 느껴지지만 그것과는 전혀 상관이 없다. 그냥 N쪽인 곳이 주인이 되면 된다.
A와 -> B(FK) 관계 테이블 2개가 있을때 의존관계는 A가 B에 의존한다. A는 본인에게 없는 정보를 B에서 가져오므로 의존관계이다.

cascade

의존관계를 무시하고 지운다. drop table cascade constran
연결관계가 있으면 지울수없다.(A->B->C 일때 A부터 순서대로 지우기만 가능)

sql 분류


DB 모델링

DB 정규화: 목적은 이상현상을 제거하는데 있다. 각 정규화단계에 따라 이상현상이 다르다.

  • 일반적으로 3정규형까지 진행하면 데이터베이스 모델에 대한 기본적인 정규화가 이루어진다.

권한 부여

https://cafe.naver.com/hamminglab/20338

mysql > GRANT ALL PRIVILEGES ON DB명.테이블 TO 계정아이디@host IDENTIFIED BY '비밀번호';
// 계정이 이미 존재 하는데 'identified by '비밀번호' 부분을 추가하면 비밀번호가 변경된다
mysql> GRANT ALL privileges ON DB명. TO 계정아이디@locahost IDENTIFIED BY '비밀번호'; -> 로컬에서만 접속가능
mysql> GRANT ALL privileges ON DB명.
TO 계정아이디@'%' IDENTIFIED BY '비밀번호'; -> 외부접속가능

테이블 생성과 데이터 유형

DROP TABLE IF EXISTS members;

CREATE TABLE members (
  row_num int(10) NOT NULL AUTO_INCREMENT primary key,
  memid varchar(6) NOT NULL,
  memname varchar(20) DEFAULT NULL,
  addr varchar(50) NOT NULL,
  birthday DATE NOT NULL,
  jobcd numeric(2) DEFAULT NULL,
  maileage numeric(8) DEFAULT NULL,
  stat enum('Y','N') NOT NULL
);

INSERT INTO members (memid, memname, addr, birthday, jobcd, maileage, stat)
VALUES ('hong2', '홍길동', '인천 동구 송림동', '2000-05-08', '2', 500, 'Y');

select * from members;

client cmd 환경에서 작성

Servlet on ecli

서블렛 생성 후

webapp 폴더에 index.html 파일을 생성하면 서버에서 프로젝트 run시 홈페이지가 표시된다. 해당 index.html 파일 내에 로컬 주소를 링크걸수도 있다.

java파일로 서블렛을 짜본다고?(애너테이션을 쓸수없는 환경일때)

  1. java 클래스 생성 > import httpservlet

  2. source(alt+shift+s) > override
    doGet, init 선택하여 오버라이드

  3. web.xml

    1. servlet 태그안에 서블렛 이름과 실제 서블렛 내용인 클래스경로를 지정해준다.
    2. servlet-mapping안에서 서블렛 이름과 url 패턴을 연관지어 매핑해준다.
    3. 2개이상의 클래스인 경우 아래와 같이 각기 태그로 감싸줘야 한다.

url 지정의 히스토리

https://cafe.naver.com/hamminglab
1. @WebServlet -> 함수(doGet(), doPost()로 타입구분)
2. @RequestMapping
3. @PostMapping, @GetMapping
4. Restful 가장최근
Get/Post/Put/Delete

url 경로에서 프로젝트명 숨기기(보안성 향상)

  1. 기존 프로젝트명
  2. 프로젝트명 / 비워놓는것으로 설정
  3. 프로젝트명이 사라졌다!

url 경로에서 포트번호 숨기기(보안성 향상)

  1. 기존 로컬 http포트번호 8080 노출
  2. 포트번호 80으로 설정시 포트번호가 사라짐. 그러나 현업에서는 80으로하면 너무알려진 포트로 보안성이 낮아 특이한 포트로 설정하는 경우가 많다.

form에서 data 입력받기

  1. form 태그로 html 파일 생성, webapp 디렉토리에 생성해야함
<body>
	<form name = "frmLogin" method="get" action="login" encType="UTF-8">
		 아이디: <input type = "text" name= "user_id"><br> 
		비밀번호: <input type = "password" name= "user_pw"><br> 
		<input type ="submit" value="로그인"><input type ="reset" value="다시입력">
	</form>
</body>
  1. src/main/java 폴더에 servlet 생성
@WebServlet("/login") <- form 태그 action 속성에 지정된 url과 동일해야함. 그래야 form에서 해당 주소 서블릿으로 넘겨주기 가능

(중략)

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		String user_id = request.getParameter("user_id"); //form에 있는 파라미터 "user_id"를 기준. 받아오는 원시적인 방법. 다른 좋은 방법이 있다..
		String user_pw = request.getParameter("user_pw");
		System.out.println(" 아이디: "+user_id);
		System.out.println("패스워드: "+user_pw);

	}
  1. check 박스 값 넘겨받기
<body>
	<form name = "frmInput" method= "get" action="input" encType="UTF-8">
		아이디 : <input type = "text" name= "user_id"><br> 
		비밀번호: <input type = "password" name= "user_pw"><br> 
		<input type= "checkbox" name = "subject" value="java" checked>자바
		<input type= "checkbox" name = "subject" value="C언어">C언어
		<input type= "checkbox" name = "subject" value="JSP">JSP
		<input type= "checkbox" name = "subject" value="안드로이드">안드로이드
		<br><br>
		<input type ="submit" value="전송"> <input type ="reset" value="초기화">
	</form>
</body>
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		Enumeration enu = request.getParameterNames();// Enumeration 방법으로 파라미터 받아옴. 집합체 형태로, 열거형이다.
		while(enu.hasMoreElements()) {// 있을때까지 돌림
			String name = (String)enu.nextElement();
			String[] values = request.getParameterValues(name); //값들을 하나씩 배열로 던짐
			for(String value: values) {
				System.out.println("name= "+ name + " ,value=" + value);
			}
		}
		
		
	}

ctrl +alt +방향키 -> 복사

응답가능

MIME TYPE(마인 타입) 일종의 기준이다.
C:\apache-tomcat-9\conf\web.xml 파일에 있음.
여기 정의된 타입만 인식가능

기타

원격접속

xshell

인텔리제이 프로젝트 여러개 여는 방법

https://wakestand.tistory.com/632

톰캣서버 단독실행

  1. cmd에서 톰캣서버 위치접근
    C:\apache-tomcat-9\bin
  2. 배치파일 실행
    startup.bat
  3. 서버 끌때는
    shutdown

과제

  1. 이번주 주말: 최과장
  2. 다음주 주말: 조별로 각자 테이블을 만드는 쿼리 작성, 쿼리 merge 하고 관계작성
profile
백엔드 개발공부 로그를 기록합니다

0개의 댓글