2017년 10월 16일 월요일

서블릿과 JSP

서블릿이란?(Servlet) 

-자바 기반으로 만드는 웹 어플리케이션 프로그래밍 기술 
-웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종 
-동적 웹어플리케이션 컴포넌트
- .java
-자바 스레드 이용하여 동작
-MVC패턴에서 Controller로 이용됨
-서블릿은 서블릿 컨테이너에서 관리됨 


서블릿 컨테이너란?

-서블릿의 생명주기를 관리하고 요청에 따른 스레드를 생성해
-클라이언트의 Request를 받아주고 Response를 보낼 수 있게 웹 서버와 소켓을 만들어 통신
-대표적으로 Tomcat 
-통신 지원, 생명주기 관리, 멀티 스레딩 관리, 선언적인 보안 관리, JSP지원 등의 역할을 함


JSP(Java Server Page)란?

-자바 소스 코드 속에 HTML 코드가 들어가는 서블릿과 반대
-HTML속에 자바 코드가 들어가는 구조를 갖는 웹 어플리케이션 프로그래밍 기술
-자바 코드는 <% 코드 %> 형태로 사용
-JSP또한 결국 컴파일 후에 Sevlet코드로 변환되어 작동하기 때문에 Servlet과 거의 같다.
(JSP는 페이지 요청이 있을 시에는 최초에 한 번 자바코드로 변환된 후서블릿 클래스로 컴파일 된다.)
-서블릿과 JSP는 상호 연계되어 JSP에서 정적인 부분을 담당, 서블릿은 보다 동적인 부분을 처리하여 보다 효율적인 웹사이트를 구성할 수 있다. (JSP 뷰, Servlet 컨트롤러)




참조:


2017년 10월 7일 토요일

DB모델링

데이터 모델링(data modeling)이란 주어진 개념으로부터 논리적인 데이터 모델을 구성하는 작업을 말하며, 일반적으로 이를 물리적인 데이터베이스 모델로 환원하여 고객의 요구에 따라 특정 정보 시스템의 데이터베이스에 반영하는 작업을 포함한다. 후자의 의미로 흔히 데이터베이스 모델링으로 불리기도 한다.[1]





데이터모델링 관련 참조
http://vnthf.logdown.com/posts/2016/03/18/650365
데이터 관계 참조
http://tech.devgear.co.kr/db_kb/331

mybatis란?

http://www.mybatis.org  설명
마이바티스는 개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크이다. 마이바티스는 JDBC로 처리하는 상당부분의 코드와 파라미터 설정및 결과 매핑을 대신해준다. 마이바티스는 데이터베이스 레코드에 원시타입과 Map 인터페이스 그리고 자바 POJO 를 설정해서 매핑하기 위해 XML과 애노테이션을 사용할 수 있다.




MyBatis의 특징
 - 간단하다 : 간단한 퍼시스턴스 프레임워크
 - 생산성 : 62%정도 줄어드는 코드 , 간단한 설정
 - 성능 : 구조적강점(데이터 접근 속도를 높여주는 Join 매핑)
             여러가지 방식의 데이터를 가져오기 전략 (가져오기 미루기 , SQL 줄이기 기법)
 - 관심사의 분리 : 설계를 향상 (유지보수성)
                          리소스를 관리하여 계층화를 지원(커넥션,PreparedStetement,결과셋)
 - 작업의 분배 : 팀을 세분화하는 것을 도움
 - SQL문이 애플리케이션 소스 코드로부터 완전 분리
 - 이식성 : 어떤 프로그래밍 언어로도 구현가능 (자바,C#,.NET,RUBY)
 - 오픈소스이며 무료이다.


예시) 내가 쓴 부분 UserMapper.xml 중 일부
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <mapper namespace="UserMapper">
     
     <!-- 아이디로 회원정보  불러오기 -->
     <select id="findByID" resultType="net.cot_pr1.domain.User">
         select * from users where userid= #{userid}
     </select>
     
     <!-- 아이디로 프로필 이미지 찾기 -->
     <select id="findprofile" resultType="string">
         select profileimg from users where userid= #{userid}
     </select>
     
     <!-- 회원가입 -->
     <insert id="create">
         insert into users ( userid, password, name, email) values (#{userid}, #{password}, #{name}, #{email})
     </insert>
    
    <!-- ...나머지부분 생략 -->
     
 </mapper>
cs


ibatis > mybatis 변경됨..
차이점
http://uwostudy.tistory.com/19
http://aid.altibase.com/pages/viewpage.action?pageId=11207174


참고, 출처
http://www.mybatis.org/mybatis-3/ko/
http://ekfqkqhd.tistory.com/entry/mybatis%EB%9E%80
http://alicepure.blogspot.kr/2013/10/mybatis.html

제네릭이란?

제네릭Generics
ex) ArrayList<E>

다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일시의 타입 체크(compile-time type check)를 해주는 기능이다.

>>쉽게 말해 다룰 객체를 미리 명시해줌으로써 형변환을 사용하지 않고 사용하는 것.....
<String>제네릭스는 String 객체만 사용 가능, 다른 자료형 사용하면 오류!?

ArrayList<String> StringList = new ArrayList<String>();
StringList.add("a");
StringList.add("b");

ArrayList<Integer> IntegerList = new ArrayList<Integer>();
IntegerList.add(1);
IntegerList.add(2);

ArrayList<Tv> TvList = new ArrayList<Tv>();
TvList.add(newTv());

ArrayList List = new ArrayList();
List.add(1);
List.add("a");
>>제네릭스를 사용하지 않는 경우 Object타입으로 간주된다. 그래서 형변환을 해줘야함!!

<> 형태
<E> : Element(자바 컬렉션에서 주로사용)
<K>,<V> : Key, Value(map 자료구조에서 주로 사용)
<T> : 일반적인 제네릭 타입을 의미
<N> : Number를 의미

**컬렉션 정리
http://hackersstudy.tistory.com/26

제네릭의 장점
1. 타입 안정성을 제공한다.

2. 타입체크와 형변환을 생략할 수 있으므로 코드가 간결해 진다.




참고
http://arabiannight.tistory.com/entry/%EC%9E%90%EB%B0%94Java-ArrayListT-%EC%A0%9C%EB%84%A4%EB%A6%AD%EC%8A%A4Generics%EB%9E%80


http://kiwi99.tistory.com/3

2017년 10월 5일 목요일

Mybatis 자동 생성키 사용

mysql의 경우에 auto_increment 를 통해 자동 생성키를 쓸 수 있는데, insert시 이 자동생성된 값을 가져오고 싶을때는

useGeneratedKeys를 true로 설정, KeyProperty에 가져오고싶은 값을 넣는다. 

나의 경우엔 답변or댓글의댓글을 만드는 과정에서 그룹을 설정하기위해 자동증가값을 그룹에 같은값으로 업데이트하려고 했었다. 

(...게시물을 만들면서 group을 같이 설정하고싶었는데, 실패해서 게시물만든후 group값을 bnum으로 업데이트하였다...비효율적인 것 같으므로 다른 방법을 찾아야할 것 같다.)

아무튼 자동증가되는 primarykey를 가져오고 싶었는데 계속 0을 가져왔었다. 

그래서 

매퍼에 위의 방법과 같이 bnum을 키프로퍼티에 넣고 

1
2
3
    <insert id="insert" parameterType="net.cot_pr1.domain.QnA" useGeneratedKeys="true" keyProperty="bnum">
        INSERT INTO qna (bnum, title, content, writer, answer, qgroup) VALUES (0,#{title},#{content},#{writer},#{answer},#{qgroup})
    </insert>
cs

컨트롤러에서 

1
2
3
4
5
6
qnaService.create(vo);
        
int bnum = vo.getBnum();
vo.setBnum(bnum);
qnaService.setgroup(vo);
        
cs
이런식으로 bum을 다시 가져와서 group에 넣었다..

2017년 10월 1일 일요일

삼항 연산자

if문을 줄여서 쓸 수 있는 삼항 연산자


ex)
1
2
3
4
5
if(a<b){
    res = 1;
}else{
    res=2;
}
cs
삼항 연산자로 다시 나타낸다면 

1
result = (a<b)?1:2
cs


(조건)? a : b;


조건이 
true면 a , false면 b

2017년 9월 29일 금요일

git 커밋 되돌리기

git에 커밋 후 커밋내용을 아예 지우고 싶을때 사용.....



프로젝트있는 폴더에서 명령프롬프트을 열어서 

git reset HEAD~1(숫자는 되돌리는 커밋횟수??) 

git push origin + master 




잘못하면 커밋 다 날라가니 쓰기전에 한번 더 찾아보고 사용할 것!!
(git무서웡 ㅠ)