。゚(*´□`)゚。

코딩의 즐거움과 도전, 그리고 일상의 소소한 순간들이 어우러진 블로그

[네이버클라우드] 클라우드 기반의 개발자 과정 7기/웹프로그래밍

[NC7기-72일차(8월4일)] - 웹프로그래밍 53일차

quarrrter 2023. 8. 4. 18:57

56. 웹 애플리케이션 자바 표준 기술 JavaEE 도입

-JavaEE 기술 소개

-JavaEE 버전 별 하위 기술 버전 

-JavaEE 구현 서버 및 Servlet 컨테이너 관계 

-Servlet API 사용법 

 

 

JavaSE || JavaEE || JavaME

Java 
제품 
Java SE (Standard Edition) JRE(Java Runtime Environment)
-> 자바 App 실행과 관련된 S/W
: JVM + 자바 라이브러리 + 문서 + ..
Server JRE = JRE - 데스크톱 관련 기능 + 서버쪽에서 필요한 기능 
JDK(Java Developoment Kit) = JRE + 개발도구 
개발도구 : 컴파일러 ,디버거, 프로파일러 
Java EE (Enterprise Edition) 기업용 App 제작과 실행에 필요한 도구와 라이브러리 , API 제공 
-> 많은 수의 동시사용자 처리: C/S 기술이 필요 -> Servlet/JSP, JSTL,JSF
-> 자원을 효율적으로 관리 : 자원관리, 풀링기술 -> 트랜젝션관리, DB커넥션풀
-> 시스템 확장에 용이: 분산 시스템 기술 -> EJB, WebService
Jave ME (Micro Edition)  임베디드(embedded) 시스템 개발 

 

JavaEE : 웹 애플리케이션, 분산 App 등과 관련된 표준 API 제공

1. JavaEE 이전 

회사 별 프로토콜이 달라 회사간 상호호환이 안 됐음.

문제점:

1. 회사 별로 프로토콜이 다르다 -> 상호 호환 운영을 할수없다, 유지보수가 어렵다. 다른 회사로 옮기면 다시 배워야한다. 

2. 회사별로 App 제작 방법이 다르다 - > App 호환되지 않는다. 즉 다른 서버에서 실행할 수 없다. 

 

2. JavaEE 등장

JavaEE 명세에 따라 Application server 및 Java Component(App) 구현

Application server : 서버 교체가 쉽다. 

Java Component(App) : 앱 개발이 일관성이 있다. -> 회사나 서버에 구속 받지 않는다. 

 

Java EE와 Application Server 의 관계

  Java EE      
웹 APP
제작기술
Servlet
JSP
JSF
JSTL
웹 App 기술명세만 구현
(=Servlet Container)

*tomcat(Apache)(유)
Jetty(유)
Resin(유/무)
*undertow(무)
JAVA EE 기술 명세를 100% 구현하는 서버 (Java EE Implements(구현체)
분산
컴포넌트 제작기술
EJB
JMS
JTA
Java Persistence
Java Mail
분산 컴퓨팅 기능
*RPC->RRM - COBRA->SWESERVICE

*RPC->RMI->EJB->REST API
(XML/JSON/HTTP)
(유료)
*JEUS(TmaxSoft)
*WebLogic(Bea->Oracle)
*WebSphere(IBM)
*JBoss(RedHat)

(구현한 app 테스트용으로 사용)
GlassFish(Oracle)
Geronemo(Arpache)
웹서비스제작기술 JAX-RS
JAX-WS
JAX-RPC
  .
.

"Web Application Server(WAS)"

 

https://www.oracle.com/java/technologies/javaee/javaeetechnologies.html#javaee7

 

Java EE - Technologies

Java EE 5 Technologies Java Platform, Enterprise Edition 5 (Java EE 5) focuses on making development easier, yet retains the richness of the J2EE 1.4 platform. Offering features such as JavaServer Faces (JSF) technology and web services APIs, Java EE 5 mak

www.oracle.com

 

Java EE 버전- 하위 기술 버전 - 서버 버전 

톰캣버전 7.0 이면 JavaEE6 버전의 서블릿, jsp 버전에 맞춰 개발을  해야한다.
관리 이전

Java EE와 Jakarta EE

Java EE : Oracle에서 유지보수 하던 것을 Eclipse재단에 넘김, JakartaEE로 이름 바뀜 (2017.9)

구글이 오라클이랑 자바로 10년 싸웠었음 ...

글고 구글이 코틀린이 자바컴파일파일 100% 호환가능

 

Web Application과 Jakarta EE


Web Application 개발 준비 - Servlet Container 설치

1. Servlet Container  설치 - > tOMCAT 9.X 설치 (10D은 자카르타여서, 시중은 아직 10까지 안감) zip파일 압축풀기 -> ~/server/apache-tomcat-.../  (유저 밑에 서버폴더)

https://tomcat.apache.org/download-90.cgi

 

2. tomcat 서버 설정 

- 관리자 등록 : config/tomcat-users.xml

<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="1111" roles="manager-gui,admin-gui"/>

3. PATH 환경 변수(시스템)에 bin 폴더 등록

window -> 시스템 환경변수 편집 

mac OS -> .zshrc 편집 

 

실행 후 ,,
확인
권한 변경
8080을 8888로 변경하기 , bin/shutdown 후 startup 배치파일 재 실행

**유닉스는 확장자 개념이 없고 통으로 파일 이름으로 봄, 파일 앞에 ./도 붙여야함 

 

tomcat 시작 ~~~

 

 

Web Applilcation 개발 준비 - web app 프로젝트 생성 

 

1. 프로젝트 폴더 생성 

bitcamp-study/eomcs-servlet

 

2. Maven 표준 디렉토리 구조로 전환 

>  gradle init 

 

 

PS C:\Users\bitcamp\git\bitcamp-study\eomcs-servlet> gradle init
Starting a Gradle Daemon, 4 busy Daemons could not be reused, use --status for details

Select type of project to generate:
  1: basic
  2: application
  3: library
  4: Gradle plugin
Enter selection (default: basic) [1..4] 2

Select implementation language:
  1: C++
  2: Groovy
  3: Java
  4: Kotlin
  5: Scala
  6: Swift
Enter selection (default: Java) [1..6] 3

Generate multiple subprojects for application? (default: no) [yes, no]
Select build script DSL:
  1: Groovy
  2: Kotlin
Enter selection (default: Groovy) [1..2]

Select test framework:
  1: JUnit 4
  2: TestNG
  3: Spock
  4: JUnit Jupiter
Enter selection (default: JUnit Jupiter) [1..4]

Project name (default: eomcs-servlet):
Source package (default: eomcs.servlet):
Enter target version of Java (min. 7) (default: 17):
Generate build using new APIs and behavior (some features may change in the next minor release)? (default: no) [yes, no]


> Task :init
Get more help with your project: https://docs.gradle.org/8.1.1/samples/sample_building_java_applications.html

BUILD SUCCESSFUL in 54s
2 actionable tasks: 2 executed

 

 

3. eclipse 프로젝트로 전환하기

build.gradle 파일 편집 

id "eclipse"

plugins {
   id 'java'
   id 'eclipse'
}

repositories {
   mavenCentral()
}

dependencies {
   testImplementation 'org.junit.jupiter:junit-jupiter:5.9.1'

    implementation 'com.google.guava:guava:31.1-jre'
}

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
}


tasks.named('test') {
    useJUnitPlatform()
}


tasks.withType(JavaCompile) {
  options.encoding = 'UTF-8' 
  sourceCompatibility = '17'
   targetCompatibility = '17'
}

eclipse {
    project {
        name = "servlet-app"
    }
    jdt {
      sourceCompatibility = 17
      targetCompatibility = 17
      javaRuntimeName = "JavaSE-17"
    }
}

cd servlet-app     gradle eclipse

eclipse import (app까지 가서)

빈 폴더로 두지 말기

4. Servlet/JSP API 추가

build.gradle 편집

스니펫 복사해서 gradle 파일 편집

 

gradle eclipse 다시 하기 

HelloServlet 클래스 추상 클래스 구현다하기 

 

Web Application 제작

 -HelloServlet 클래스 추상 클래스 구현

 

Web Application 빌드 -> 배포 (deploy)

 

5. war 생성 플러그인 추가 및 설정

build.gradle 편집  후(war)  gradle build

+&nbsp;war { archiveBaseName = "servlet-app" } 맨 아랫단에
복붙하기&nbsp; - webapp lib에서 불러와진거 확인 가능

Web Application 실행

http://localhost:8888/servlet-app/hello

servlet-app : context path = web app.root path

/hello: servlet path

프로젝트

빌드파일 수정 

마이앱 서버 지울거 지우고 dao에 애노테이션 지우기 

InitServlet 클래스 생성

 

 

56. JavaEE 도입

conf-server

<Context path="" docBase="myapp"  reloadable="true" />


              <Context path="" docBase="personalapp"  reloadable="true" />

 

스트링부트는 resouce 밑에  static (또는 templetes) 밑에 index.html 두는거고

일반적인 웹프로젝트는 webapp 밑에 indes.html 두는거고 

 

init servlet 

*톰캣 서버 디렉토리 구조 

CATALINA_HOME/
	bin/	톰캣서버 실행 파일(.abat, .sh ...)
	conf/	설정파일
	lib/	자바 라이브러리파일(.jar)
	logs/	실행 중 출력하는 내용을 보관하는 파일(.log)
	temp/	실행 중 업로드 파일을 임시 보관하거나 임의의 임시파일을 두는 폴더
	webapps/	웹애플리케이션 배포 폴더
	work/	JSP파일을 가지고 서블릿 소스를 만들 때 사용하는 폴더

*Eclipse IDE에서 톰캣 서버 테스트 환경 구축하기

서버를 복사할 때마다 servers에서 복사해오기때문에 뭔갈 수정하려면 servers에서 해야됨 , 폴더이름 temp0, 1은 머 어케 못함 그냥 생성순서대로 생성됨

서버의 gradle 수정

plugins {
   id 'java'
   id 'eclipse-wtp'
   id 'war'
}

    // 자바 웹 개발 도구에서 사용할 값을 설정한다.
    wtp {
        facet {
            facet name: 'jst.java', version: '17'
            facet name: 'jst.web', version: '4.0'
        }
        component {
            //contextPath = '/web'
            //deployName = 'web'
        }
    }
}
war {
    archiveBaseName = "myapp"
    }