2017년 8월 30일 수요일

cafe24 웹호스팅

카페24를 활용한 웹호스팅

가입 후 자신의 프로젝트에 맞는 설정

putty로 호스트 네임 포트번호 입력후 접속한다.

아이디와 비밀번호는 cafe24에서 설정한 아이디, 비밀번호로 접속(cafe24아이디,비밀번호랑 따로 설정했을 꺼임)

톰켓 시작 종료는 ./tomcat/bin/shutdown.sh ./tomcat/bin/startup.sh



파일 질라에 호스트, 사용자명, 비밀번호, 포트번로 입력 후 연결

wepapps 에 이클립스에서 export한 war파일을 넣고 

톰켓 재시작을 하면 완료 

//////////////////////
cafe24의 mysql에 쓰던 db넣기

워크벤치에서 export하면 sql형태로 다 나온다

cafe24 mysql 관리창에서 import 하여 하나하나 등록 하면 db옮기기 완료


///////////////////////
프로젝트경로나 파일 업로드의 경로 설정이 항상 문제다 ㅠㅠ
ROOT폴더에 하면 될것같긴한데 시도는 안해봤다


업로드(게시물, 프로필, 갤러리)는 경로는 이렇게 설정




JSP 서블릿 정리

유튜브 JSP 강의 정리

1~3강

웹서버: 클라이언트의 요청에 의해 제공해는 서버, 별도의 구현이 필요한 로직이 있을 경우 웹어플리케이션 서버에 요청

웹브라우저: 웹서버에 정보를 요청하고, 웹서버로부터 정보를 받는 매개체, 이때 http프로트콜을 사용

JSP
동적 웹어플리케이션/클라이언트의 요청에 동적으로 작동, 응답은html을 이용/ jsp는 서블릿으로 변환되어 실행/mvc패턴에선 view로 이용


m 모델(데이터구조)
v 뷰(jsp)
c 컨트롤러(모델과 뷰를 연결, 서블릿)
 3. MVC패턴(Model-View-Controller pattern)
 : MVC(Model-View-Controller) 구조는 전통적인 GUI(Graphic User interface) 기반의 어플리케이션을 구현하기 위한 디자인 패턴이다. MVC 구조는 사용자의 입력을 받아서, 그 입력 혹은 이벤트에 대한 처리를 하고, 그 결과를 다시 사용자에게 표시하기 위한 최적화된 설계를 제시한다.

 1) 뷰(View)는 화면에 내용을 표출하는 역할을 담당하는 것으로 데이터가 어떻게 생성되고, 어디서 왔는지에 전혀 관여하지 않는다. 단지 정보를 보여주는 역할만을 담당한다. JSP기반의 웹 어플리케이션에서는 JSP페이지가 뷰(View)에 해당한다.

 2) 모델(Model)은 로직을 가지는 부분으로 DB와의 연동을 통해서 데이터를 가져와 어떤 작업을 처리하거나, 처리한 작업의 결과를 데이터로서 DB에 저장하는 일을 처리한다. 모델(Model)은 어플리케이션의 수행에 필요한 데이터를 모델링하고 비즈니스 로직을 처리한다. 즉, 데이터를 생성하고 저장하고 처리하는 역할만을 담당한다. JSP기반의 웹 어플리케이션에서는 자바빈(JavaBean)이 모델(Model)에 해당한다.

 3) 컨트롤러(Controller)는 어플리케이션의 흐름을 제어하는 것으로 뷰(View)와 모델(Model)사이에서 이들의 흐름을 제어한다. 컨트롤러(Controller)는 사용자의 요청을 받아서 모델(Model)에 넘겨주고,  모델(Model)이 처리한 작업의 결과를 뷰(View)에 보내주는 역할을 한다. JSP기반의 웹 어플리케이션에서는 보통 서블릿(Servlet)을 컨트롤러(Controller)로 사용한다.


출처: http://dawnisthm.tistory.com/entry/MVC-패턴-구현이론 [패션과 IT]


jsp아키텍처
.jsp >> .java(톰캣에서해줌?) >> .class(컴파일/jvm을 위한)

4강

서블릿은 자바 파일
>>매핑과정

자바스레드이용하여 동작>>으로 인해 요청이 몰려도 서버의 부하가 적게걸림
컨트롤러로 이용됨
매핑은 간단히 말해서 닉네임 (닉네임을 정해서 주소에 매핑에 맞는값을 받으면 헬로월드서블릿에 접근)
매핑을 하는 이유는 맵핑안하면 길고, 보안에 노출되어있기 때문

서블릿태그 서블릿>>클래스를 서블릿네임으로 정해서 접근
서블릿매핑 >> 방금 정한 이름을 /hw 으로 접근하겠다 명시


어노테이션으로도 매핑을 할수 있음 @~~




5강 

서블릿클래스는 http서블릿 클래스를 상속 받음

서블릿(인터페이스) - genericservlet(abstract) - htppservlet

클라이언트 << 요청(클라이언트한테오는 정보[아이디 등 정보 보냄])/응답(디비에서 확인을해서 맞는지아는지 정보 보냄) >> was(웹어플리케이션서버)


get방식 post방식 (클라이언트에서 aws 요청을 하는데 html태그안에 메소드 방식에 따라 달라짐) : get방식으로 오면 doget방식 메소드 호출
post방식이면 dopost메소드 실행

get: url값에 정보를 실어서 전송되어 보안에 약함
post: 헤더를 이용해 정보가 전송되기 때문에 보안에 강함(사용자가 url에 표시된 정보를 볼수 없음)


6강 

클라이언트에서 서블릿요청이 들어오면 서버에서는 서블릿컨테이너를 만들고 요청이 있을때마다 스레드가 생성됨
웹브라우저> 웹서버 > 웹어플리케이션서버(aws) > 서블릿 컨테이너(스레드 생성, 서블릿 객체 생성)
서블릿 장점 -
리퀘스트(요청)를 처리할 객체가 생성  (다른건 요청이올때마다 객체를 생성함 요청이많이 들어오면 부하가 걸림)
서블릿은 jvm에 스레드가 하나 생성(여기서 요청처리) >>다른 cgi? 언어에 비해서 서버 부하가 적게 발생
[ CGI란 공통 게이트웨이 인터페이스(common gateway interface)의 약어로, 웹서버와 외부 프로그램 사이에서 정보를 주고받는 방법이나 규약들을 말한다.]

생명주기(라이플 사이클)
서블릿의 사용도가 높은 이유는 빠른 응답속도  //서블릿은 최초 요청시 객체가 만들어져 메모리에 로딩되고, 이후 요청시에는 기존 객체 재활용 >> 따라서 속도가 빠름
서블릿 객체생성 > init() > service(서비스를 통해 연결?? 검색해 볼것!),[doget,dopost] > destroy()

선처리, 후처리
init호출하기전에 선처리(@PostConstruct)  destroy 후에 후처리(@PreDestroy) 그냥 실행되는 시점 설명하는듯


7강

html form태그 : 서버쪽으로 정보를 전달할때 사용하는 태그
input태그 (ex text, password, submit, checkbox, radio, reset  등)

form태그: input태그들의 값을 서버로 전송하기 위한 정보를 담고있음
여기서 get이면 http://~~~:8080/hello/join?id="aa"&name="홍" //post는 ~~~join/

서블릿 파라미터
서블릿에서 httpservletrequest 객체를 이용해 파라미터값을 얻을 수 있음 ex) string id = request.getParameter("id");

한글처리
get방식( server.xml 수정 <Connector URIEncoding="EUC-KR" port="8181"~~
post방식 dopost에 request.setCharacterEncoding("EUC-KR);



8강

서블릿 초기화 파라미터:특정 서블릿이 생성될때 초기에 필요한 데이터 ( 경로, 아이디 정보 등) >초기화 파라미터> web.xml에 기술 > 서블릿파일에서는 servletconfig 클래스를 이용해 접근 or 서블릿파일에 직접 기술
web.xml ex)<init-param><param-name>~~</~></~>
>>서블릿에서 getinitparameter로 가져올수잇음

서블릿파일에 직접기술: @WebInitParam(name="id", value="abc"),@WebInitParam(name="pw", value="abc"),,,이런식으로


servletcontext 데이터 공유
여러서블릿에서 특정 데이터를 공유할 경우 context parameter를 이용해 web.xml에 기술을 하고 서블릿에서 공유하면서 사용 가능
<context-param><param-name><param-value></~></~></~>
>>서블릿에서 getServletContext().getInitParameter("id")

servletcontextlistener 웹어플리케이션 감시
웹어플리케이션(컴포넌트들을 묶어논 프로그램?)의 생명주기 감시하는 리스너
web.xml에 리스너등록 <listener><listener-class>com.jva~~.ad~</~></~>
리스너 클래스 따로 제작(아까한것보다더 더 먼저 실행, 나중에 실행 강의에선 순서설명함)

web.xml에 리스너등록안하고 클래기스 @WebListener 해도 되는듯


9강

jsp는 서블릿과 반대로 html코드에 자바 언어를 삽입하여 동적문서를 만듬
jsp태그종류
지시자<%@ %> : 페이지 속성
주석 <%-- --%>
선언 <%! %> : 변수, 메소드 선언
표현식 <%= %> :결과값 출력 (;이 붙지않음)
스크립트릿 <% %> java코드
액션 태그 <jsp:action> </jsp:action> : 자바빈 연결

jsp주석은 안보임..?

jsp동작원리
클라이언트가 웹브라우저로 dawd.jsp를 요청하게되면 jsp컨테이너가 jsp파일을 servlet파일(.java)로 뱐환됨
servlet파일(.java)은 컴파일 된 후 클래스 파일(.class)로 변환되고, 요청한 클라이언트한테 html파일 형태로 응답

jsp내부객체: (객체를생성하지않고 바로 사용할수있는 객체)
내부객체는 jsp컨테이너에 의해 servlet으로 변환될때 자동으로 객체가 생성
ex) request, response, out, page, config, session, exception 등


10강

스크립트릿, 선언, 표현식  >>스크립(scripe)
jsp문서안에 java문서언어를 넣기 위한 방식들 > 많이 쓰임
스크립트림(scriptlet) <% java코드 기술 %>: jsp페이지내에서 java언어를 사용하기 위한 요소 중 가장 많이 사용

선언(<%! java코드 기술 %>: jsp페이지 내에서 사용되는 변수 또는 메소드(전역의 의미)

표현식<%= java코드 기술 %>: jsp페이지 내에서 사용되는 변수의 값 또는 메소드 호출 결과값을 출력하기 위해 사용, string타입이며, ;를 사용불가


지시자<%@ %>: jsp페이지의 전체적인 속성을 지정할때 사용
 (page 해당 페이지의 전체적인 속성 [import/language 등등],
include 별도의 페이지를 현재 페이지에 삽입 [include file="dad.jsp"],
taglib 태그라이브러리의 태그 사용 [사용자가 만든 tag를 사용하기위해 사용, uri(라이브러리위치값) 및 prefix속성(태그를 가리키는 이름)이있음 )

주석
html<!-- -->
jsp<%-- --%>


11강

request객체의 이해: 웹브라우저를 통해 서버에 어떤 정보를 요청하는것
request객체관련 메소드 getContextPath() / getMethod() / getSession / getProtocol 등등
getParameter가 많이 쓰임
getParameter(String name): name에 해당하는 파라미터 값 구함
getParameterNames: 모든 파라미터 이름을 구함
getParameterValues(String name): name에 해당하는 파라미터값들을 구함

response객체의 이해: 웹브라우저의 요청에 응답하는것
response관련 메소드 getCharcterEncoding() / sendRedirect(URL) 등


12강 

액션태그 : jsp페이지 내에서 어떤 동작을 하도록 지시하는 태그 (페이지 이동, 페이지 include 등)
forward 현재 페이지에서 다른 특정페이지로 전환 <jsp:forward page="sss.jsp"/>

include 현재페이지에 다른 페이지 삽입 <jsp:include page="inda.jsp" flush="true" />

param forward 및 include 태그에 데이터 전달을 목적 <jsp:forward page="sss.jsp"><jsp:param name="id" value="aa"/></jsp:forward>

13강 

쿠키 : http프로토콜은 응답후 관계를 끊음, 연결이 끊겼을때 어떤 정보를 지속적으로 유지하기위한 수단 (클라이언트 측에 저장, 서버에 요청할때마다 쿠키의 속성값을 참조 또는 변경가능, 4kb용량, 300개까지 데이터 정보를 가질수 있음)

쿠키 문법: 쿠키 생성(쿠키 클래스) > 속성 설정(setter) > response객체에 쿠키 탑재
setMaxAge(), setpath() 등등...


14강

세션 : 쿠키와 마찬가지로 서버와의 관계를 유지하기 위한 수단 , 쿠키와 달리 클라이언트에 특정 위치에 저장되는 것이 아니라, 서버상에 객체로 존재 > 서버에서만 접근이 가능하여 보안이 좋고, 저장할 수 있는 데이터에 한계가 없음

세션 문법: 클라이언트 요청이 발생하면 자동생성: 클라이언트 요청 > 세션 자동 생성 > 세션 속성 설정
setAttribute(), getId() 등등

15강

예외페이지 : 예외발생시 예외페이지로 이동
페이지 지시자를 이용한 예외 페이지<%@ page errorPage ="errorPage.jsp"%>  >> errorPage.jsp: <%@ page isErrorPage="true"%>(예외페이지인 경우 true로 명시해줄것) <% response.setStatus(200);%><%= exception.getMeessage()%>

web.xml 파일로 예외처리  : <error-page><error-code>404</error-code><location>/error404.jsp</location></error-page> 추가

16강

자바 빈 : 반본적인 작업을 효율적으로 하기위해 사용, java언와의 데이터(속성)와 기능(메소드)로 이루어진 클래스. ex(도메인 부분 board, user 등)
빈 관련 액션 태그(useBean: 특정 빈을 사용한다고 명시 할때 <jsp:useBean id="student" class="com.javalec.ex.~~" scope="page" />
, setProperty: 데이터 값을 설장할때 <jsp:setProperty name="student" property="name" value="홍길동" />
, getProperty:데이터 값을 가져올때 <jsp:getProperty name:student property="name"/>
)


17강 ~19강

데이터 베이스
 dbms(database managerment system) 데이터베이스 관리 시스템  응용프로그램(웹어플리케이션jsp,java등등)  >> dbms >> DataBase
jdbc java프로그램에서 sql문을 실행하여 데이터를 관리하기 위한 java api
다양한 데이터베이스에 대해서 별도의 프로그램을 만들 필요 없이, 해당 데이터베이스의 jdbc를 이용하면 하나의 프로그램으로 데이터 베이스를관리
데이터베이스 연결 순서: jdbc 드라이버 로드 > 데이터베이스 연결 > sql문 실행 > 데이터베이스 연결 해제
statement > excuteQuery()  [select]/ excuteUpdate() [insert, delete, update 등]
resultset : excuteqeury 실행후 반환되는 레코드 셋

회원관리 실습


20강 

커넥션 풀
DAO: Data Access Object : 데이터베이스에 접속해 데이터 추가, 삭제, 수정 등의 작업을 하는 클래스
DTO: Data Transfer Object:  데이터를 관리하기위해 데이터의 클래스를 만들어 사용

DBCP(커넥션 풀) : 클라이언트에 다수의 요청이 발생할 겨우 데이터베이스에 부하가 발생하게 됩니다. 이러한 문제를 해결하기 위해 이용
preparedStatement객체를 이용해 쿼리 중복코드 줄임

21강 ~22강

회원인증 프로그램 실습 ,파일 업로드

23강

 EL
Expression Language : 표현식 또는 액션 태그를 대신해서 값을 표현하는 언어 &{}
<jsp:getProperty name="memeber" property="name"/> >>> &{member.name}

내장객체
pageScope: 페이지 객체를 참조하는 객체
requestScope :request 객체를 참조하는 객체
sessionScope: ~
applicationScope : ~
param:요청파라미터를 참조하는 객체
paramValues: 요청 파라미터(배열)을 참조하는 객체
initParam: 초기화 파라미터를 참조하는 객체
cookie: cookie객체를 참조하는 객체

24강 

JSTL(JSP Standard tag library)
JSTL에서는 다섯가지의 라이브러리를 제공합니다(core, XML Procession .등등...)
Core라이브러리: 기본적인 라이브러리로 출력, 제어문, 반복문 같은 기능 포함
<%@ taglib uri=http://java.sun.com/jsp/jstl/core prefix="c" %>

출력 <c:out>
변수 설정 <c:set>
변수 제거<c:remove>
예외처리<c:catch var="변수명">
if<c:if>
for <c:forEach>
페이지 이동 <c:redirect>
파라미터 전달 <c:param>


25강

 FrontController패턴 Command 패턴
디렉토리 패턴 > ~~~/hello
확장자 패턴 > ~~~.do

FrontController 패턴 : 다양한 요청을 한곳으로 집중시켜, 개발 . 유지보수에 효율성 극대화
Command : 요청을 서블릿이 직접하지않고 해당 클래스가 처리하도록 함

26강

 포워딩
RequestDispatcher 클래스: 서블릿 또는 jsp에서 요청을 받은 후 다른 컴포넌트로 요청을 위임
RequestDispatcher클래스(요청받은 요청객체를 위임하는 컴포넌트에 동일하게 전달),
HttpServletResponse클래스 (동일하게 요청을 위임하는 클래스 그러나 새로운 요청객체를 생성하는것이 차이점)

>>요청받은 값을 다른 곳에서 처리하도록 보내주는것???
다시 정리;;

27~30

 mvc게시판  

2017년 8월 23일 수요일

이클립스 GItHub 연동하기

git 개인 계정에 repository 생성

저장소 주소 복사 후 이클립스 git에서

next..next 

프로젝트 에서 share project



아까 git창에서 만들었던 저장소 선택(예시를 위해 저장소를 따로 안만들어서 이름이 다름)

완료!

2017년 8월 21일 월요일

Maven이란?

Maven : 프로젝트 객체 모델(Project Object Model)이라는 개념을 바탕으로 프로젝트 의존성 관리, 라이브러리 관리, 프로젝트 생명 주기 관리 기능 등을 제공하는 프로젝트 관리 도구

플러그인을 기반으로 소스 코드로부터 배포 가능한 산출물을 만들어 내는 빌드 기능 뿐만 아니라 레포팅 및 documentation 작성 기능 등을 제공한다.

>>내가 사용할 라이브러리 뿐만아니라 해당 라이브러리가 작동하는데 필요한 라이브러리들도 자동으로 받아줌

장점
• 뛰어난 의존성 관리 
 - 의존성 자동 업데이트 
 - 저장소를 통한 라이브리 일괄 관리 
• 모든 프로젝트에 걸쳐 쉽게 적용 가능한 일관적인 사용법 
• 라이브러리 및 메타 데이터 저장을 위한 지속적으로 확장 되고 있는 저장소 
• 쉽게 작성 가능한 플러그 인을 통한 확장성 
• 동시에 다수의 프로젝트 핸들링 할 수 있는 쉬운 설정 기반의 메커니즘
• 간단한 설정을 통한 배포 관리 
• Java, C++ 등 다수의 프로그래밍 언어 지원
단점
• Repository 관리의 불편함 
 - Maven 프로젝트의 급속한 발전으로 central repository가 제공하는 라이브러리들이 빠르게 증가하고 있으나 아직 3rd 파티 라이브러 등 미제공 라이브러리들이 있음 
• pom.xml 파일 관리 
 - 메이븐 프로젝트 관리에 대한 모든 내용이 pom.xml 파일에 담기게 되믄로 길고 장황하게 될 수 있음 
• 프로젝트에 특화된 복잡한 빌드 기능 제약 
 - 메이븐 프로젝트 특성상 소프트웨어 빌드에 통용되는 라이프 사이클을 제공하고 있어 세부 항목 또는 특화된 빌드 환경에 대한 지원이 미약함



pom.xml(Project Object Model) 
프로젝트 정보, 빌드 설정, 빌드 환경 등 프로젝트 라이브러리의 의존관계 관리하는 프로젝트 정보 기술.

<scope> 
compile : 컴파일 할때 필요. 테스트 및 런타임에도 클래스 패스에 포함 된다. scorp 을 설정 하지 않는 경우 기본값이다.
runtime : 런타임에 필요. JDBC 드라이버 등이 예가 된다. 컴파일 시에는 필요하지 않지만, 실행 시에 필요한 경우.
provided : 컴파일 시에 필요하지만, 실제 런타임 때에는 컨테이너 같은 것에서 제공되는 모듈. servlet, jsp api 등이 이에 해당. 배포시 제외된다.
test : 테스트 코드를 컴파일 할때 필요. 테스트시 클래스 패스에 포함되며, 배포시 제외된다

2017년 8월 2일 수요일

jQuery- $(document).ready(function()

$(document).ready(function () {});
= jQuery(document).ready(function () {});
= $(function() {});
= window.onload = function() {});
위의 문장은 모두 같은 기능을 한다.
의미는 [웹 페이지를 모두 읽어 들이고, 준비가 된 후에 처리]이다.

위에서 상위 세 개의 문장은 jQuery, 맨 아래 문장은 고전 javascript 문장이다.
장단점을 보면 jQuery문장은 안에서 여러개의 함수를 실행할 수 있지만, javascript문은 그렇지 않다.

$(document).ready() VS $(window).load()
$(document).ready()
: DOM객체만 로드 되자마자 처리됨.
$(window).load()
: 해당 페이지의 모든 외부 리소스가 로드된 후에 처리됨.

처리 순서 : $(document).ready() > $(window).load()


Mybatis #, $ 차이

#(동적 PreparedStatement)
- 쿼리 실행 시 #{~~} 는 ? 으로 되어 PreparedStatement 객체에서 ? 에 들어갈 파라미터 값을 넣어주면서 사용이 된다.
- 변수를 바인드 처리하기 때문에 같은 쿼리로 인식하여 재사용 가능

ex)
1
2
3
4
5
6
7
8
작성된 것
select * from member where username = #{name}
DB에서 받는 쿼리
select * from member where username = ?
실제 수행
select * from member where username = 'cot'
cs




$(정적 Statement)
- 쿼리가 수행될 때 column = 값 형태로 수행되기 때문에 ' ' 로 감싸줘야한다.
- PreparedStatement과 달리 같은 쿼리로 인식하지 않기 때문에 재사용이 불가능하다.
- 단순한 String으로 변환하기 때문에 SQLInjection 위험 있음
     (악의적인 SQL문을 실행되게 함으로써 데이터베이스를 비정상적으로 조작하는 코드인젝션 공격방법)
- $는 주로 테이블이나 컬럼명을 파라미터로 전달하고 싶을 때 사용하는듯 !


ex)
1
select * from member where username = '${name}';
cs

---------------------------------------------------------------------------------------
>>>>> 음 좀 더 찾아봐야할 것 같음. 각 장단점이 있는 것 같음. 관련 레퍼런스 찾아보기 


참조