PS C:\Users\Administrator\Desktop\boot-source-20230228\complete\server> ./gradlew build
ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation.
일반적인 경우 테이블에 있는 모든 자료를 조회할 필요 없이 사용자가 원하는 자료를 조회하는 경우가 대부분 이다. 이러한 질의를 만족하게 하는 것이 WHERE절 이다.
WHERE절은 수행될 조건 절을 포함하며 FROM절 바로 다음에 기술된다.
1.1 Syntax
SELECT [DISTINCT] {*, column [alias], . . .}
FROM table_name
[WHERE condition]
[ORDER BY {column, expression} [ASC | DESC]];
DISTINCT : 중복 행 제거 옵션 * : 테이블의 모든 column 출력 alias : 해당 column에 대한 다른 이름 부여 table_name : 테이블명 질의 대상 테이블 이름 WHERE : 조건을 만족하는 행들만 검색 condition column명, 표현식, 문자 상수, 숫자 상수, 비교 연산자로 구성된다. ORDER BY : 질의 결과 정렬을 위한 옵션(ASC:오름차순(Default),DESC내림차순)
문제1) EMP 테이블에서 급여가 3000이상인 사원의 정보를 사원번호, 이름, 담당업무, 급여를 출력하여라.
SQL> SELECT empno,ename,job,sal
2 FROM emp
3 WHERE sal >= 3000;
EMPNO ENAME JOB SAL
--------- ---------- --------- ---------
7839 KING PRESIDENT 5000
7902 FORD ANALYST 3000
7788 SCOTT ANALYST 3000
PS C:\Users\Administrator\Desktop\fc-my-books-master (2)> node -v
node : 'node' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. 이름이 정확한지 확인하고 경로가 포함된 경우 경로가 올바른지 검증한 다음 다시 시도하십시오.
위치 줄:1 문자:1
+ node -v
+ ~~~~
+ CategoryInfo : ObjectNotFound: (node:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
PS C:\Users\Administrator\Desktop\fc-my-books-master (2)>
Starting the development server...
Error: error:0308010C:digital envelope routines::unsupported
at new Hash (node:internal/crypto/hash:71:19)
at Object.createHash (node:crypto:133:10)
at module.exports (C:\Users\Administrator\Desktop\fc-my-books-master (2)\node_modules\webpack\lib\util\createHash.js:135:53)
at NormalModule._initBuildHash (C:\Users\Administrator\Desktop\fc-my-books-master (2)\node_modules\webpack\lib\NormalModule.js:417:16)
at handleParseError (C:\Users\Administrator\Desktop\fc-my-books-master (2)\node_modules\webpack\lib\NormalModule.js:471:10)
at C:\Users\Administrator\Desktop\fc-my-books-master (2)\node_modules\webpack\lib\NormalModule.js:503:5
at C:\Users\Administrator\Desktop\fc-my-books-master (2)\node_modules\webpack\lib\NormalModule.js:358:12
at C:\Users\Administrator\Desktop\fc-my-books-master (2)\node_modules\loader-runner\lib\LoaderRunner.js:373:3
at iterateNormalLoaders (C:\Users\Administrator\Desktop\fc-my-books-master (2)\node_modules\loader-runner\lib\LoaderRunner.js:214:10)
at iterateNormalLoaders (C:\Users\Administrator\Desktop\fc-my-books-master (2)\node_modules\loader-runner\lib\LoaderRunner.js:221:10)
C:\Users\Administrator\Desktop\fc-my-books-master (2)\node_modules\react-scripts\scripts\start.js:19
throw err;
^
Error: error:0308010C:digital envelope routines::unsupported
at new Hash (node:internal/crypto/hash:71:19)
at Object.createHash (node:crypto:133:10)
at module.exports (C:\Users\Administrator\Desktop\fc-my-books-master (2)\node_modules\webpack\lib\util\createHash.js:135:53)
at NormalModule._initBuildHash (C:\Users\Administrator\Desktop\fc-my-books-master (2)\node_modules\webpack\lib\NormalModule.js:417:16)
at C:\Users\Administrator\Desktop\fc-my-books-master (2)\node_modules\webpack\lib\NormalModule.js:452:10
at C:\Users\Administrator\Desktop\fc-my-books-master (2)\node_modules\webpack\lib\NormalModule.js:323:13
at C:\Users\Administrator\Desktop\fc-my-books-master (2)\node_modules\loader-runner\lib\LoaderRunner.js:367:11
at C:\Users\Administrator\Desktop\fc-my-books-master (2)\node_modules\loader-runner\lib\LoaderRunner.js:233:18
at context.callback (C:\Users\Administrator\Desktop\fc-my-books-master (2)\node_modules\loader-runner\lib\LoaderRunner.js:111:13)
at C:\Users\Administrator\Desktop\fc-my-books-master (2)\node_modules\babel-loader\lib\index.js:59:103 {
opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
library: 'digital envelope routines',
reason: 'unsupported',
code: 'ERR_OSSL_EVP_UNSUPPORTED'
}
7.javaedu10->project 경로의 Oracle developer 접속 후 새 접속 클릭
8.해당 계정 생성
Name:admin
사용자 이름:"sys as sysdba"
비밀번호:admin1234(Oracle Database XE Downloads 설치 시 설정했던 비밀번호)
이후 worksheet에
GRANT CONNECT, RESOURCE, DBA TO sys WITH ADMIN OPTION; 입력 후 F5 누르기(선택 사항, 안해도 해결 되었었다. 혹시 모르니 기입.)
9.intellij 환경 설정. 하단 참조
10.application.properties에 밑의 코드를 복사 붙여넣기 한다.
#server
server.port:9080
#Database
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521/xe
spring.datasource.username=sys as sysdba
spring.datasource.password=admin1234
이후 DemoApplication 실행 하면
2023-03-04T07:37:14.230+09:00 ERROR 1760 --- [ restartedMain] j.LocalContainerEntityManagerFactoryBean : Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
2023-03-04T07:37:14.231+09:00 WARN 1760 --- [ restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
2023-03-04T07:37:14.234+09:00 INFO 1760 --- [ restartedMain] o.apache.catalina.core.StandardService : Stopping service [Tomcat]
2023-03-04T07:37:14.244+09:00 INFO 1760 --- [ restartedMain] .s.b.a.l.ConditionEvaluationReportLogger :
Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
2023-03-04T07:37:14.260+09:00 ERROR 1760 --- [ restartedMain] o.s.boot.SpringApplication : Application run failed
이라고 Error 뜨던 것이
잘 실행 된 것을 확인 할 수가 있다.
구동 확인.
intellij 환경 설정
Help>Edit Custom VM Options..
≫ 인코딩 추가 설정
✓ -Dfile.encoding=UTF-8
✓ -Dconsole.encoding=UTF-8
IJ File Edit View Navigate Code Refactor Build Run Tools
mypc AppData Roaming JetBrains IdealC2022.1
C: Users
idea64.exe.vmoptions X
Commit Project
Pull Requests
^^^ ^>
<
produc 1
.gra
ide: 2
3
grac
out
sql
src
.giti
a.tx
buil
grad
grac
setti
> IIII Externa
>
Scratch
application.properties Xx
-Xmx2043m
Git Window Help product - C:WUsers#mypc#AF
idea64.exe.vm
Find Action...
Ctrl+Shift+A
-Dfile.encoding=UTF-8
-Dconsole.encoding=UTF-8
? Help
Learn IDE Features
What's New in IntelliJ IDEA
Getting Started
IntelliJ IDEA on YouTube
Keyboard Shortcuts PDF
Tip of the Day
My Productivity
Contact Support...
Submit a Bug Report...
Submit Feedback...
Show Log in Explorer
Collect Logs and Diagnostic Data
Delete Leftover IDE Directories...
Diagnostic Tools
Change Memory Settings
Edit Custom Properties...
Edit Custom VM Options...
Check for Updates...
Register Plugins...
About
Demo1Application run -> localhost:9080 Connected-> Static file index.html -> HTML console error message in "Failed to load resource: the server responded with a status of 404 (Not Found)"
Tomcat 가동된 것을 확인, 이후 localhost:9080에 접속 하였으나
404Error가 발생, thymeleaf에 있는 HTML이 뜨지 않고, Static에 있는 index.html이 계속 뜨게 되었다.
위의 사진과 같이 나와야 정상. 허나 Tomcat이 가동 중임에도 불구 하고
localhost:9080 접속 시,static/index.html만 클라이언트에서 가동 됨.
1.오류 해결 시작: 높은 원인을 우선적으로 조사
1.Port kill (How to Port kill 문서 참조) Port number를 9081~9083 변경 하였음 (실패)
HTTP/1.1은 1999년에 발표된 HTTP 프로토콜의 최신 버전이며, 이전 버전인 HTTP/1.0보다 개선된 기능을 제공한다. HTTP/1.1에서는 커넥션 관리, 캐시, 프락시 지원, 인증 등의 기능이 개선되었으며, 보안 기능도 추가되었다.
또한, HTTP/1.1은 기본적으로 지속 커넥션(Persistent Connection)을 사용하므로, 클라이언트와 서버 간의 연결을 유지하고, 한 번의 연결로 여러 개의 요청과 응답을 처리할 수 있다. 이로 인해 네트워크 부하를 줄이고, 웹 페이지 로딩 속도를 높일 수 있다.
현재도 많은 웹 브라우저와 웹 서버가 이 버전을 지원하고 있다.
HTTP 2.0
2015년 IETF에 의해 공식적으로 발표된 HTTP/1.1의 후속 버전이다. HTTP/2의 차기 버전은 HTTP/3이다.
표준에서 TLS를 요구하는 것은 아니지만, SPDY에서 TLS를 요구했던 여파로 인해 모든 메이저 브라우저들이 TLS없이는 HTTP/2를 지원하지 않고 있다. 즉,TLS가 없으면 무조건 HTTP/1.1로 요청한다.
웹2.0과는 전혀 관계가 없다. 웹2.0은 2004년 나온 웹의 포괄적 개념으로 현재는 사문화되었다. HTTP/2는 프로토콜로 분야가 다르다.
2020년부터 HTTP/3 규격도 진행되고 있으며, 구글이나 유튜브 등의 주요 웹사이트들에서는 이미 적용 중이다.
바이너리 프로토콜을 사용한다.
HTTP/1.1에서의 개선점
① Head of line blocking(HOL)
HTTP/1.1까지는 한 번에 한 파일밖에 보내지 못했다. 그래서 특정 파일의 로딩이 늦어지면 다른 파일까지 줄줄이 느려지는 병목 현상이 생기게 된다. 그래서 여러 파일을 한꺼번에 병렬 전송을 하는 식으로 로딩 시간을 줄이는 방법을 사용한다.
② 중복 헤더의 제거
같은 내용의 헤더를 보낼 경우, 생략해버리는 식으로 처리함으로써 속도를 높이는 방식이다.
③ Header compression
이전까지는 HTTP 헤더가 평문이었지만, HTTP/2에서는 헤더를 압축하여 용량 대비 처리 효율성을 높이는 방법을 사용한다. 압축을 하기 때문에 헤더 크기 자체도 크게 줄어든다.
④ Server push
특정 파일을 서버에 지정해서 HTTP 전송 시 같이 밀어 넣는 방식이다. 주로 JavaScript나 CSS, 글꼴, 이미지 파일 등을 지정한다.
⑤ Prioritization
웹 페이지를 구성하는 파일의 우선순위를 둘 수 있다. 로딩이 빨리 되어야 하는 파일과 그렇지 않은 파일을 구분해줄 수 있고, 이들 사이에서도 중요도를 차등 배분할 수 있다.
이전까지는 HTTP/2를 지원하는 한국 사이트는 손에 꼽힐 정도였으나, 2020년을 기점으로 꾸준히 증가하여 현재는 대부분의 웹사이트가 지원하고 있다.
하지만, HTTP/2.0을 지원하지 않는 서버나 브라우저가 여전히 많이 사용되고 있다.
HTTP/2.0을 사용하는 경우 일부 사용자들이 웹사이트를 제대로 사용할 수 없는 경우도 있다. 또한, HTTP/2.0은 TCP 커넥션을 유지하는 동안 메모리 사용량이 증가하는 문제가 있을 수 있다.
HTTP/2.0을 사용하기 위해서는 SSL/TLS 암호화가 필수적이다. HTTP/2.0은 바이너리 프로토콜을 사용하여 데이터를 전송하므로, 데이터의 보안성이 중요합니다. 따라서, HTTP/2.0은 반드시 SSL/TLS 암호화된 연결을 사용해야 한다.
실제로, 모든 주요 브라우저에서 HTTP/2.0을 지원할 때는 SSL/TLS 암호화된 연결을 사용해야만 한다. 이를 위해 HTTPS 프로토콜을 사용하여 웹사이트의 보안을 강화하고, HTTP/2.0의 장점을 최대한 활용할 수 있다.
따라서, HTTP/2.0을 사용하려면 SSL/TLS 암호화된 연결을 설정해야 한다. SSL/TLS 인증서를 구매하거나, Let's Encrypt와 같은 무료 인증 기관을 통해 SSL/TLS 인증서를 발급받을 수 있다.
HTTP/1,HTTP/2 성능 비교
HTTP version 확인 하기
이렇게 Protocol tap에 오른쪽 클릭 후, protocol을 누르면, 해당 웹사이트의 HTTP 버전을 확인가능하다.
안 보인다면 Name tap에서 오른쪽 클릭 하면,
프로토콜을 체크하면 된다.
HTTP/3
HTTP의 3번째 메이저 버전으로 HTTP/2의 차기 버전이다. 2022년 6월 6일, IETF RFC 9114로 표준화되었다.
HTTP/1 및 HTTP/2가 TCP로 통신하는 것과는 달리 HTTP/3는 UDP 기반의 QUIC 프로토콜을 사용하여 통신한다. 원래는 이름이 HTTP-over-QUIC였지만, IETF 내에 있는 QUIC 작업 그룹의 의장인 마크 노팅업이 HTTP/3라는 이름을 제안하여 변경되었다. HTTP/3의 기반이 되는 QUIC도 역시 웹 표준이며 RFC 9000으로 표준화되어 있다.
HTTP/2 대비하여 가장 큰 장점 3가지는, Zero RTT(Round Trip Time), 패킷 손실에 대한 빠른 대응, 사용자 IP가 바뀌어도 연결이 유지되는 것이다. 일반적인 웹 환경에서는 HTTP/2와 HTTP/3의 차이가 크지 않을 수 있으나, 동영상 서비스 등에서는 큰 차이를 보인다. 예를들어, 모바일 기기처럼 인터넷 연결 상태가 고르지 못한 경우라든지, WiFi에 연결하여 동영상을 시청하는 도중에 자리를 이탈하여 셀룰러 신호로 바뀌더라도 HTTP/3로 연결되어 있으면 영상을 끊김없이 시청할 수 있다. 패킷 전송에 있어서 제약이 거의 없는 비연결성 전송 계층을 기반으로 TCP 프로토콜의 무결성 보장 알고리즘과 SSL이 이식됨으로써 높은 성능과 동시에 충분히 괜찮은 정확성과 부인방지 특성을 충족시켰다.
HTTP/3와 그 기반 기술인 QUIC은 TLS 암호화를 기본적으로 사용한다. 다만, TLS가 TCP를 염두에 두고 설계되어 있기 때문에 QUIC의 원저작자인 구글의 알고리즘대로 일부 수정을 거쳐서 사용한다. UDP와 TLS가 결합된 기술로는 DTLS라는 기술도 있지만 'TCP의 재구현'이 목표 중 하나인 QUIC와는 지향하는 바가 다르다.
구글 자체 프로토콜이었던 QUIC가 HTTP/3로 표준화됨에 따라서 IETF 측에서는 구글이 독자적으로 개발했던 QUIC 프로토콜의 파편화된 구현 알고리즘을 기존의 다른 프로토콜과 상호운용이 용이하도록 대폭 수정하는 과정을 진행중이다. QUIC 내에서 IETF 표준 대비 가장 큰 파편화를 보인 부분이 보안 소켓이다. IETF는 구글이 자체적으로 개발한 보안 소켓을 IETF 표준 프로토콜인 DTLS로 대체하는 QUIC over DTLS 표준을 만들고 있었지만 QUIC 워킹 그룹에서 다른 방법을 모색하는 것으로 결론짓고 해당 표준의 제작을 중단했다. #
성능이 떨어지는 컴퓨터는 QUIC 프로토콜로 인해 크롬 브라우저가 느려진다. 그럴 때는 주소창에 "chrome://flags/"를 입력해 Experiments로 들어간 다음 Experimental QUIC protocol을 검색하여 비활성화해주면 빨라질 수 있다.