개발자의 길
-
4) 글로 적는 웹개발 공부 - 웹(Web)2019.09.16
-
3-2) 글로 적는 웹개발 공부 - 오라클 디비(Oracle DB)2019.09.15
4) 글로 적는 웹개발 공부 - 웹(Web)
- WWW(World Wide Web) 은 HTTP 프로토콜이다.
- HTTP 프로토콜은 요청 / 응답 방식이다.
- 클라이언트에서 요청시 넘어가는 데이터가 파라미터(Parameter)이다.
- 파라미터는 이름(name) 과 값(value) 로 구성되어 있다.
- 웹서버는 클라이언트의 요청(request) 을 받고 정적인 문서를 응답.
- 컨테이너란 객체의 생명주기를 관리한다. *프레임워크는 생명중기를 직접 생성한다. 더 자세히 알아보기!
- 생명주기란 객체가 생성되고, 서비스되고, 소멸되는 과정을 말한다. *필요할 때마다 생성, 소멸 메서드를 호출한다.
- 서블릿컨테이너(Servlet Container)는 Servlet & JSP 의 생명주기를 관리한다.
- 서블릿컨테이너는 HttpServlet 라고도 합니다.
- 서블릿을 만들려면 HttpServlet 클래스를 상속한다.
- 서블릿과 url 맵핑을 web.xml 에 설정한다.
- 서블릿의 url 과 똑같은 주소가 요청되면 서블릿 컨테이너는 그 서블릿이 객체로 만들어져 있는지 확인한다.
- => 객체가 없다면 객체를 생성하고, init메서드를 호출한다.
서블릿 생명주기 메서드 종류 | |
- init() 메서드
- destory() 메서드
- service() 메서드
|
- 각 요청당 요청객체와 응답객체를 생성한다.
- get 방식이면 doGet 메서드를, post 방식이면 doPost 메서드를 호출한다.
- 브라우저의 주소창에 주소를 입력하거나, a링크 클릭은 get방식이다.
- form 요소에서 메서드(Method) 속성이 post 일 경우 post 방식 호출이다.
- 주소뒤에 '?파라미터명=파라미터값'을 쿼리스트링(Query String) 이라고 한다. *주소창에 보이기 때문에 get방식
- jsp(Java Server Page) 도 사실 서블릿이다. *더 편리하게 사용하기 위해 생겼다.
- 클라이언트가 해당 jsp 페이지를 요청하면 .java 파일이 생성되고 컴파일되어 .class 파일이 생성후 객체가 생성됨
- <%%> 스크립트릿 : 자바코딩을 코딩할 수 있는 곳이다. _jspService() 메서드안에 코딩된다.
- <%=%> 표현식 : HTML영역에 자바의 데이터를 출력한다. outprint() 메서드와 같다.
- <%-- --%> JSP 주석 : .java 파일 생성시 사라진다.
- <%@ %> 지시어 : 클래스 임포트나 페이지의 설정
- <%! %> 선언문 : 클래스 영역 / 멤버 자리이다. *선언문은 메서드나 멤버필드를 쓸 수 있지만 누구나 접근 할 수 있기 때문에 사용을 잘 안한다.
- 커넥션풀은 커넥션을 여러 개 생성하여 모아놓은 것이다. * META-INF 폴더에 Context.xml 으로 설정
- 웹서비스 개발시 다이나믹 웹 프로젝트(Dynamic Web Project) 로 생성한다.
- 필요한 프레임워크 / 드라이버 / 라이브러리등을 WEB-INF 폴더안의 lib 폴더에 복사한다.
- 필요한 패키지(package) 를 생성 : config / vo / dao / util / mapper 등
- mybatis-config.xml 을 복사 : DataSource 의 JNDI(Java Naming and Directory Interface) 를 맞춰야한다. / mapper 파일의 경로도 제대로 지정해야 한다.
*JNDI 는 쉽게 말해서 외부에 있는 객체를 가져오기 위한 기술이다. Tomcat 과 같은 WAS(Web Application Server) 를 보면 특정 폴더에 필요한 데이터 소스(라이브러리)가 있는데 그것을 우리가 사용하기 위해서 JNDI 를 이용해 가져오는 것 이다.
- 테이블 당 한 개의 VO 를 생성 / 이 객체와 SQL 간의 맵핑이 이루어진다.
- 데이터베이스와 연결전용 객체인 DAO 클래스 선언 / 테이블 당 한 개
- Mapper 파일도 복사후 이름 변경 : 테이블이름과 동일하게
- 필요한 jsp 파일을 생성한다.
- 해당 jsp 에 필요한 SQL 구문을 mapper 파일에 작성한다.
- 해당 DAO 클래스에 메서드를 선언한다.
- 클라이언트에서 넘어온 파라미터의 값을 얻기 위해 사용하는 메서드는 request.getParameter() 이다.
* 파라미터 자료형은 무조건 String 형이다.
- post 방식의 한글처리 : request.setChractorEncoding() 메서드다.
- 넌뷰에서 뷰로 이동시 response.sendRedirect() 메서드를 이용한다.
- 라이브러리는 lib 폴더에 넣는다.
- 커네션풀은 커넥션을 여러 개 생성하여 모아놓는 것을 말한다. / META-INF 폴더에 Context.xml 으로 설정
* XML(eXtensible Markup Language) 확장될 수 있는 표시언어다. 기존 HTML 과의 차이는 HTML은 이미 약속한 태그들을 이용해야 하지만 XML은 사용자가 임의로 만들 수 있는 언어다. XML 에 대해서 더 알아보자.
- 프레임워크(Framework) 는 프로그래밍의 흐름과 객체의 생명주기를 스스로 처리
- 라이브러리(Library) 는 프로그래머가 필요할 때 객체를 생성하여 사용
* 프레임워크와 라이브러리 차이에 대해서 더 알아보자.
- 마이바티스(mybatis) 프레임워크는 SQL mapping 프레임워크다.
- 우리가 작성한 SQL 구문과 객체와의 맵핑
- SQL 구문을 작성하는 문서는 mapper 파일 / 테이블 당 한 개를 생성한다.
- DB설정(WAS에서 생성한 커넥션풀을 JNDI로 얻는)과 mapper 파일의 경로 등을 설정하는 mybatis-config.xml 파일
- 테이블 당 한 개의 VO 생성 / 이 객체와 SQL 간의 맵핑
- VO(DTO 라고도 함) 생성 규칙
- 멤버필드를 private 선언한다. 즉 은닉화
- 기본 생성자를 선언한다.
- setter 와 getter 선언한다.
- 데이터베이스와 연결전용 객체인 DAO 객체 생성 / 테이블당 한 개
* DAO 에 대해서 더 알아봅자.
■ 다음과 같은 USERS 테이블이 있습니다. Mybatis 설정을 해보세요
컬럼명 | 자료형 | 특징 |
no | number(5,0) | primary key(기본키) |
id | varchar2(32) | 유저의 id |
password | varchar2(32) | 실제 서비스에서는 암호화 |
nickname | varchar2(32) | 유저의 별명 |
패키지명 | 들어갈 파일명 |
config | mybatis-config.xml |
vo | User.java |
dao | UsersDAO |
mapper | users.xml |
util | SqlsessionUtil.java |
서블릿과 JSP |
- 서블릿(Servlet)
- JSP(Jave Server Page)
|
'개발자의 길 > 글로 적는 웹개발' 카테고리의 다른 글
5-2) 글로 적는 웹개발 공부 - 복습 (0) | 2019.09.18 |
---|---|
5) 글로 적는 웹개발 공부 - 복습 (0) | 2019.09.17 |
3-2) 글로 적는 웹개발 공부 - 오라클 디비(Oracle DB) (0) | 2019.09.15 |
3) 글로 적는 웹개발 공부 - 오라클디비(OracleDB) (0) | 2019.09.14 |
2-6) 글로 적는 웹개발 공부 - 자바(Java) (0) | 2019.09.13 |
3-2) 글로 적는 웹개발 공부 - 오라클 디비(Oracle DB)
■ 다음과 같이 출력해보세요.
지역번호 | 우편번호 | 주소 | 도시 | 국가코드 |
1200 | 1689 | 2017 Shinjuku-ju | Tokyo | JP |
1300 | 6823 | 9450 Kamiya-cho | Hiroshima | JP |
1400 | 26192 | 2014 Jabberwocky Rd | Shothlake | US |
1500 | 99236 | 2011 Interiors Blvd | South San Francisco | US |
1600 | 50090 | 2007 Zagora St | South Brunswick | US |
1700 | 98199 | 2004 Charade Rd | Seattle | US |
SELECT location_id 지역번호, postal_code 우편번호, street_address 주소,
city 도시, country_id 국가코드
FROM locations
WHERE location_id BETWEEN 1200 AND 1700
>> 문제를 착각해 substr() 함수를 이용해 문자열 중 일부분을 잘라 출력하는 줄 알았다.
검색을 하다가 오라클(Orcale) 정규식(REGEXP) 이라는걸 처음 알게됐다.
나중에 오라클 정규식에 대해서 정리해보자.
■ employees 테이블에서 50번 부서에 근무하는 사람들 중 이름이 'Matthew'라는 매니져를 상사로 두고 있고, 월급이 3000달러 이상 되는 사람들을 출력해보세요. 단 Matthuw는 제외(출력필드 : 사번, 이름, 성, 월급, 부서번호, 직업 아이디)
SELECT employee_id, first_name, last_name, salary, department_id, job_id
FROM employees
WHERE department_id = 50
AND salary >= 3000
AND employee_id NOT IN(120)
>> 특정 컬럼을 제외하고 출력하고 싶을 때 쓰는 NOT IN 함수를 쓰면 된다.
비슷한 함수로 EXISTS 함수가 있는데 나중에 참고해서 공부해보자.
■ 다음과 같이 출력하세요.
국가아이디 | 국가명 | 지역아이디 |
AR | Argentina | 2 |
AU | Australia | 3 |
CA | Canada | 2 |
SELECT country_id 국가아이디, country_name 국가명, region_id 지역아이디
FROM countries
WHERE country_id IN('AR', 'AU', 'CA')
■ 지점번호가 1000~1500까지 지점의 도시와 지역명을 출력하세요. (locations, countries, regions 테이블 이용)
지점번호 | 도시명 | 지역명 |
1000 | Roma | Europe |
1100 | Venice | Europe |
1200 | Tokyo | Asia |
1300 | Hiroshima | Asia |
1400 | Southlake | Americas |
1500 | South San Fancisco | Americas |
SELECT l.location_id 지점번호, l.city 도시명, r.region_id 지역명
FROM locations l, contries c, regions r
WHERE l.location_id = c.location_id
AND c.region_id = r.region_id
AND location_id BETWEEN 1000 AND 1500
ORDER BY location_id asc
■ employees , departments 테이블을 이용해 2005년 이전 고용된 사람들 중에서 평균연봉 이하를 받는 직원들의 사번, 이름, 성, 고용일, 부서번호, 부서명을 출력하세요.
사번 | 이름 | 성 | 고용일 | 부서번호 | 부서명 |
200 | Jennifer | Whalen | 09/17/2003 | 10 | Administration |
115 | Alexander | Khoo | 05/18/2003 | 30 | Purchasing |
184 | Nandita | Sarchand | 01/27/2004 | 50 | Shipping |
192 | Sarah | Bell | 02/04/2004 | 50 | Shipping |
137 | Renske | Ladwig | 07/14/2003 | 50 | Shipping |
133 | Jason | Mallin | 06/14/2004 | 50 | Shipping |
141 | Trenna | Rajs | 10/17/2003 | 50 | Shipping |
SELECT employee_id 사번, first_name 이름, last_name 성, TO_CHAR(hire_date,'YYYY/MM/DD') as 고용일, e.department 부서번호, d.department_name 부서명
FROM employees e, departments d
WHERE e.department_id = d.department_id
AND hire_date < '2005/01/01'
AND (SELECT avg(salary*12)
FROM employees) >= salary * 12
서브쿼리(SUBQUERY) |
- 하나의 SQL 문 안에 포함되어 있는 또 다른 SQL 문을 의미한다. - 서브쿼리는 메인 쿼리가 실행되기 전에 먼저 실행되며 서브쿼리에서는 메인 쿼리의 모든 컬럼을 참조할 수 있지만 메인 쿼리에서는 서브쿼리의 컬럼을 참조할 수 없다. |
■ 각 도시별 인원수와 평균급여를 구하세요.
도시명 | 평균급여 | 사람수 |
South San Francisco | $3,476 | 45 |
Southlake | $5,760 | 5 |
London | $6,500 | 1 |
Seattle | $8,845 | 18 |
Oxford | $8,956 | 34 |
Toronto | $9,500 | 2 |
Munich | $10,000 | 1 |
SELECT city 도시명, TO_CHAR(ROUND(AVG(salary),1),'$999,999,999') 평균급여, COUNT(employee_id) 사람수
FROM employees e, departments d, locations s
WHERE e.department = d.department
AND d.location_id = s.location_id
GROUP BY city
ORDER BY 2
ROUNDE 함수 |
- ROUND 함수는 지정한 자리 수 이하에서 반올림한 결과를 구해주는 함수이다. - ROUND 인자값은 숫자, 반올림자리수 2개로 되어 있다. |
TO_CHAR 함수 |
- DATE 형, NUMBER 형을 문자 타입으로 변환하는 함수이다. - 여기서 Format 을 $ 로 사용, $ 통화로 표시한다는 뜻이다. |
■ 다음과 같이 고용년도에 따른 인력현황을 출력하세요.
2001년 | 2002년 | 2003년 | 2004년 | 2005년 | 2006년 | 2007년 | 2008년 |
1 | 7 | 6 | 10 | 29 | 24 | 19 | 11 |
SELECT SUM(DECODE(TO_CHAR(hire_date,'YYYY'),'2001',1,0)) "2001년",
SUM(DECODE(TO_CHAR(hire_date,'YYYY'),'2002',1,0)) "2002년",
SUM(DECODE(TO_CHAR(hire_date,'YYYY'),'2003',1,0)) "2003년",
SUM(DECODE(TO_CHAR(hire_date,'YYYY'),'2004',1,0)) "2004년",
SUM(DECODE(TO_CHAR(hire_date,'YYYY'),'2005',1,0)) "2005년",
SUM(DECODE(TO_CHAR(hire_date,'YYYY'),'2006',1,0)) "2006년",
SUM(DECODE(TO_CHAR(hire_date,'YYYY'),'2007',1,0)) "2007년",
SUM(DECODE(TO_CHAR(hire_date,'YYYY'),'2008',1,0)) "2008년"
FROM employees
DECODE 함수 |
- 오라클 내장함수로 자바에서 if 문과 같은 기능을 한다. - DECODE(기준값, 조건1, 결과1, 결과2) - 결과2를 생략하면 자동으로 NULL 값으로 변환된다.
|
'개발자의 길 > 글로 적는 웹개발' 카테고리의 다른 글
5) 글로 적는 웹개발 공부 - 복습 (0) | 2019.09.17 |
---|---|
4) 글로 적는 웹개발 공부 - 웹(Web) (0) | 2019.09.16 |
3) 글로 적는 웹개발 공부 - 오라클디비(OracleDB) (0) | 2019.09.14 |
2-6) 글로 적는 웹개발 공부 - 자바(Java) (0) | 2019.09.13 |
2-5) 글로 적는 웹개발 공부 - 자바(Java) (0) | 2019.09.12 |