JSP
웹호스팅 업체 서버 요청에 관해
ASP/ASP.net 최고금액. Windows-Server환경에서는 꼭 이걸 사용해야한다. Windows-Server는 최근에 IIS도 지원한다.
PHP 최저금액 닷홈에서 이것만지원.
JSP
웹페이지 틀
SPA(예전) : frame 태그
MPA :
- 웹 퍼블리싱 : 시멘태그
- JSP : 인클루드(include)
- Spring : 타일즈
- SpringBoot : 타임리프
-----------------------------> 최근엔 위 모두 JSON(데이터만 전달)으로 바뀜
SPA(예전): 리액트./Vue.js/Svelte
MINE 타입
- 응답문(response) header에 기술되어 있다.
- 해당 타입만 서버를 통과 가능하다. tomcat내 web.xml파일을 확인해보면, MINE 태그내에 타입이 서술되어 있다.(ex. text/html 등)
page 지시어 include
include로 구현한 jsp의 실제 코드 확인시 불러온 모든 문서의 코드도 포함한것을 알수있다. 링크방식이 아니라 가져와서 합치는 개념이다.
page 지시어 taglib
- EL에서 자바클래스의 메서드 호출을 사용하기 위한 지시어
-> 표현식과 EL(표현언어)는 다르다.
EL은 ${} 형식으로 순수 JSP를 사용하며,
표현식은 <%= 형식으로 java를 사용한다.
- JSTL(JSP 표준 라이브러리)를 사용하기 위한 지시어
스크립트 요소 선업부의 언더바 _ 메소드
- jsp-> 서블릿(자바코드) 변환시 언더바가 붙는다
- 서블릿으로 작성시 언더바가 없다.
cookie, session
- 쿠키(Cookie)는 client(일반쿠키, 세션쿠키)
- 세션(Session)은 server
쿠키상세
- 일반쿠키: 쿼리스트링 등
- 세션쿠키: 로그인 순간에 세션이 서버에 생기고, 쿠키를 클라이언트에 보내고 신호를 끊는다. 계속 붙어있으면 트래픽이 올라가기 때문. 페이지 변동시 쿠키가 세션에 신호를 주고, 세션이 페이지를 보낸후 신호를 끊는다.
로그아웃시에도 동일하게 쿠키가 세션에 신호를 보내고 세션이 로그인상태를 종료한다.
세션상세
- 요청이 많아지면 서버에 저장하는 세션 파일이 너무 많아져 문제발생
-> 비정형 DB redis로 처리하게 된다.
-> 그래도 너무 많은경우 JWS (Json Web Signature)로 token발급만 해주고 서버에 보관하지 않는 방식을 채택하여 해결한다.
-> 최근에는 OAuth 2.0 인증방식을 선택
웹 서버용 확장판 javax
p.27 JSP웹 프로그래밍
import 시 java 기본 외에 javax|jakarta 를 사용할수 있다. 웹서버용 확장판이다.
javax : java11 or 8, 스프링 5.x, 스프링 부트2.x, Tomcat 9.x
jakarta : java17, 스프링 6.x, 스프링 부트 3, Tomcat 10.x -> 아직 안정성에서 확신이 어렵고 기존 코드들이 있어 해당 버전은 기업에서 잘 사용하지 않는다.
내장 객체의 종류
request, response
- request
- GET: 공개, 쿼리스트링, 255자, 기본
-> 쿼리스트링은 255자 제한을 갖는다.
-> 디폴트값이므로 폼으로 작성후 형식 미지정시 GET으로 지정된다.
- POST: 숨김, 무한대
- response
- contentType="text/html" - 헤드에 있는 정보(메타정보)
- MIME
session, application, pageContext
- 요약
- session: 웹브라우저 - naver, daum
- application: 웹 프로그램(어플리케이션) - google, git
- pageContext: JSP페이지
- 상세
- application -> 범위가 프로그램인 google, git은 서버가 종료될때까지 로그인을 유지한다. 따라서 브라우저 종료시 다시 오픈하면 로그인이 풀리지 않는다.
- session -> 웹브라우저가 범위인 naver, daum은 사용자 브라우저가 종료되면 로그인이 풀린다.
- Page -> 페이지 범위인 경우 페이지간 정보 전달은 request/response - getParameter로.
- 주의점: 세션(객체) 저장위치는 서버이고 데이터 범위(영역)은 브라우저
DB
내장함수(mariadb)
- left, right, substring
- trim
- length
- concat
- replace - 치환
- format, round - 비슷한데 차이있음
- char, to_char - 숫자를 문자로 변환, 날짜시간유형의 데이터를 형식 변환
- now, current_timestamp, sysdate
- abs - 특징: 음수가 없다
- MOD - 나머지
- pow
제어시작
- IF
- NVL -null
- rownum -> 게시판에서 고객보여주기용 리스트 넘버링. 중간하나 삭제해도 연속표시할때사용. / or 보통 고객에게는 시리얼노출하지않고 rownum넘버링을 보여줌
- rowcount
- default
join
https://cafe.naver.com/hamminglab
기타
운영체제에서 > 기호는 출력이다. 아래 이미지는 데이터 흐름을 콘솔에서 파일로 바꾸는것이다.
전체 데이터베이스(dump파일 포함)을 불러오기
- 공식문서 예제등 데이터베이스 전체를 가져올때는 아래 방법을 사용해야한다.
- https://cafe.naver.com/hamminglab/20428
- MariaDB 실행파일이 있는 bin 경로를 환경변수에 등록
- C:\Program Files\MariaDB 10.11\bin 복사
- 시스템 > 정보 > 고급시스템 설정 > 환경변수 편집 > path끝에 bin폴더 경로 등록
- cmd창 새로실행한후 dump 파일등이 위치한 전체 데이터베이스 폴더로 이동(cd)
- mysql -u root -p -t < employees.sql <- 기준이되는 employees.sql을 root 사용자로 불러들이는 명령어 입력
- workbench에서 확인
게시판 들여쓰기
대댓글 들여쓰기는 카페 참조하기
테스트용 데이터 증가
- insert 문에 select를 집어넣어서 조회값을 insert
- CROSS JOIN
관계설정 왜함
https://dataonair.or.kr/db-tech-reference/d-lounge/expert-column/?mod=document&uid=52836
이번주에 양진님이 생각해볼점 하나를 주셨는데요,
택배프로그램 특정 메소드 사용시에 에러가 발생한것이 혹시 테이블 관계설정을 하지 않았기 때문이냐는 질문이었습니다.
저도 테이블 관계설정이 되어있으면 프로그램 코드작성이 달라지는 것인지, 왜 해야하는것인지 궁금하더라구요!
그래서 찾아본 글입니다.
결론적으로 특정 메소드 사용시에 에러가 발생한 것은 테이블 관계설정과는 무관합니다. 매핑한 sql문이 달라지는건 아닙니다.
아니 그럼 코드에 차이도 없는데 왜 해야하냐고 하시면?
1. 조인관계등을 작성시에 효율적으로 sql문 작성
오늘배웠듯이 join 시에는 기준으로 동일 데이터를 갖는 컬럼 1개를 지정한다는걸 아실거에요.
근데 연관관계 작성이 안되어있다면? 무슨키를 기준으로 join을 작성해야 할지 알수 없게 됩니다..!
그리고 어떤 join을 사용할지도 알기 어렵습니다. left인지, inner인지 결정하려면 각 테이블이 어떻게 연관되어있는지 알아야 하니까요
2. 데이터 무결성
이상한 값을 방지합니다..! 프로그래머 입장에서는 사실 당장은 에러나서 싫긴한데..
나중에 사용자가 에러 유발하는 값을 넣는 걸 원천 방지해주니까 꼭 필요한거죠!
뭐.. 제가 이해한바는 그렇고 다들 위 글 한번 읽어보시면 좋을것 같습니다.
과제
내일수업
INDEX, FUNCTION, PROCEDURE
카페에서 workbench
1. 사용방법 연습
https://cafe.naver.com/hamminglab/20339
2. 공식문서로 연습
https://cafe.naver.com/hamminglab/20428
SELF JOIN