공부법
- 원리와 구조에 집중 : 코드 짜는 방식에 집착하지말고 이 코드가 어떤 구조 하에 동작하고있는지 전체구조를 볼 것
- 용어 정리하는 습관 : 자기만의 문장으로 정리할 것
- 의사소통: 팀단위 개발에서 가장 중요한 것
- 잘 의사소통하려면 필드에서 사용하는 용어를 잘 알아야함
개념 비교
라이브러리 vs. 프레임워크
- 대부분 라이브러리나 프레임워크는 비슷한 원리나 구조로 작동한다
- 원리나 구조를 미리 익혀놓으면 어느 프레임워크나 api를 만나도 크게 당황할 게 없다
- 어떤 프레임워크가 주어지더라도 동작원리만 안다면 매뉴얼북 하나만 있어도 쓸 수 있다
라이브러리
- When you use a library, you are in charge of the flow of the application.
- 예: jQuery
프레임워크
- When you use a framework, the framework is in charge of the flow.
- 예: 부트스트랩 (CSS 플랫폼), ibatis, log4j (로깅 프레임워크)
웹서버 vs. WAS
- 정적 프로그래밍과 동적 프로그래밍을 할 때 어떤 언어를 써야할까?
- 클라이언트와 서버단을 만들때 무슨 차이가 있을까?
쿠키, 세션
- 서버사이드 방식으로 세션과 쿠키를 사용할때 사용할 수 있는 스펙은 무엇이 있을까?
서블릿컨테이너 vs. JSP컨테이너
- 어떤 경우에 서블릿컨테이너를 사용하고 어떤 경우에 JSP컨테이너를 사용할까?????
- 서블릿이 있는데 왜 굳이 JSP를 써야할까?
서블릿컨테이너
JSP컨테이너
쌤이 하신 질문 및 기타 내용
왜 톰캣을 설치할까?
수업 진행 순서
1. 개발환경 구축하기
2. 서버프로그램 구현하기
2-1. 서버프로그램 구현 기술
서블릿프로그래밍
JSP 표준구성요소
- 서블릿의 문제점, 단점, JSP사용을 통한 보완법
- JSP 스펙 뜯어보기
2-2. 서버 프로그램 개발
모델1 vs. 모델2
mvc
EL, JSTL, 커스텀태그
- 커스텀태그를 사용해서 jsp내에서 코드의 가독성을 높인다
- 스크립틀릿 없이 서버사이드 코드 사용가능
필터
- 역할: 요청과 응답의 전후처리
- 요청을 중간에 인터셉트해서 요청에 대한 전처리를 함
- 서버사이드에서 일을마치고 응답 후처리도 함
- 요청의 일반적특성 전처리를 wrapper로 대체
- 보안
이벤트처리
- 클라이언트사이드 이벤트 : 버튼누르고 뿅
- 서버사이드 이벤트 : 웹 어플리케이션 이벤트
단위 테스트
- 계층형구조의 핵심: 레이어 사이의 의존관계
- Dao를 사용하기위해 DAO를 의존하는 Service가 있어야함
- Service를 사용하려면 Service를 의존하는 Servlet
- Servlet 사용하려면 jsp가 있어야하고.......
- -> 단위테스트 프레임워크 junit이 필요한 이유임
3. 공통모듈 구현하기
3-1. 공통모듈 구현 기술
Maven
- maven: xml로 코드한줄짜놓으면 우리가 jar를 일일이 다운받지않아도 알아서 해줌
- 빌드관리툴
- 의존성 관리: A가 B를 사용한다 = A는 B에 의존한다, jar파일 관리를 말함
SVN
- SVN은 중앙집중형
- 분산관리형 프로토콜 GIT
- GIT으로 보강하실 예정
3-2. 공통모듈 개발
결합도와 응집도
AOP: OOP 단점 개선
- 자바는 객체지향적프로그래밍을 지원하는 언어이지 객체지향 ONLY 언어는 아니다
- -> 그럼 자바로 비객체지향적 개발도 가능하다는 것
4. 배치 프로그램 구현하기
- 실시간처리
- 배치처리
- 아니면 커맨드와 별개로 일괄처리를 하면서 실시간처리를 방해하지않고,, 데몬스레드로,, 스케쥴러랑같이,, 처리할것이냐
- ex) 사이트 탈퇴 후 탈퇴 시점으로부터 1주일 후에 db에서 자료가 삭제되어야함, 관리자가 일일이 체크하지 않아도 자동으로 삭제될 수 있게 개발.
개발 환경 구축
- 지금은 jdk1.7인데 jdk1.8로 셋팅할것
- 톰캣8은 jdk1.8 (톰캣7,8둘사이의 차이는 없으나 필요한 jdk 버전의 차이)
환경변수 설정
JDK1.8을 JAVA_HOME 으로 설정
톰캣 위치 CATALINA_HOME 으로 설정
윈도우 cmd
- bin 폴더 내의 bat파일 이용한서버 시작, 종료
- startup.bat (st+TAB) : 시작
- shutdown.bat (sh+TAB) : 종료
톰캣 cmd
- 8080 포트넘버가 이미 다른 곳에 할당되어 있어서 서버 시작때 예외발생
톰캣 폴더 뜯어보기
bin: binary file
- st, sh같은 명령어를 실행시킬수있는 파일이 존재하는 곳
config: 환경설정값
- 대부분 xml인 이유
- xml은 언어를 타지않는다 (c언어, 자바, 파이썬 등에서 공용으로 사용 가능)
- xml과 json: 자바와 js사이에 데이터 교환을 위한 공용어 (한국어, 일본어 사이의 영어)
- json
- xml보다 가벼워 데이터타입으로 주로 사용하나, 아직도 xml로 퍼블리싱하고 있는 곳도 많다
- json에 집착하기보다는 json의 장점이나 사용하는 이유에 집중하는 것이 중요
- 오라클 관리자 모듈에서 이미 8080을 쓰고있기때문에 우린 80으로 수정할것
여기서 잠깐~~ 포트넘버란 뭘까요
- 0~65535: 포트넘버의 범위
- 0~1023: well-known port 이미 할당되어있는 기본번호
- 기본번호이기때문에 생략 가능함
- 80은 http에 할당되어있음
- 기본 포트넘버 예시
- 클라이언트가 서버에 있는 s1이라는 서비스를 찾고싶다.
- s1은 기본포트넘버(80), s2는 기본아닌 포트넘버(1521)를 쓰고있다면?
- s1을 찾기위해 IP:80라고 써야하지만 80은 기본 포트기때문에 :80을 생략하고 쓸 수 있음 - 80을 써도 다시 사라지고 ip주소만 남음
- s2를 찾기위해서는 IP:1521를 꼭 사용해야함. 기본아니라 포트넘버 생략불가능
- IP: 물리적 주소 체계
- PORT: 논리적 주소 체계
lib
- 톰캣도 자바로 만들어진 녀석
- servlet-api.jar, jsp-api.jar -> 이 두개 파일 지우면 톰캣 구동 불가
log
temp
webapps ★★
- was가 구동할 어플리케이션이 들어있음
- 폴더날리면 동작하지않음
- 다섯개의 어플리케이션(컨텍스트)가 운영되고 있음
- server.xml을 보면 기본베이스가 webapps로 설정되있는 것을 볼 수 있음
- (URL) localhost/examples/
- 모든 자원은 파일로 되어있고 파일시스템상의 path를 통해 접근해야함
- 하지만 localhost에 이미 webapps(DOC 베이스)까지 포함시켰음
- 이유: 클라이언트에게 전부 다 개방할 수 없기때문에 가짜주소체계(localhost)를 보여줌
- URL: 가상의 주소체계, 클라이언트에게 개방할수있는 파일시스템 주소
클라이언트가 되어서 톰캣으로 테스트하기
- 브라우저 (웹에이전트) : 클라이언트가 유일하게 사용하는 툴
- 클라이언트가 브라우저를 통해 요청시
- 도메인(naver.com) 으로 요청 -> dns 서버 (ip로 변환) -> 다시 브라우저 -> 받은 ip주소로 브라우저가 서버로 요청 전달
IP 개념잡기
- IP: 물리적 주소체계 (PORT: 논리적 주소 체계)
- ipv4
- 192.168.405.21
- 각자리 8비트, 2^8-1까지해서 255까지 숫자가올라감, 8비트4자리 32비트 그래서 2의32승-1개의 ip밖에 못만듬)
- ipv6
- 4:4:4:4:4:4:4:4
- AF: ... 16진수도 들어갈 수 있음 16진수 1개 4비트 2개 8 비트 필요 4개의 16진수 표현하기위해서 16비트 필요?
- 전체섹션 다 표현하려면 16비트 X 8 자리 = 128비트
- 표현범위 2^128 -1 개 까지
- localhost == 127.0.0.1(loopback주소) == 192.168.45.28 (cmd - ipconfig)
- 우리가 쓰는 ip는 A클래스, A클래스는 동일클래스내에서만 요청가능