태그

2019년 8월 31일 토요일

helloworld1,2 공부



#################### helloworld1 공부

1. @RequestParam
   ex)
   @RequestParam(value="query",required=false) String query
   @RequestParam(value="page",defaultValue="1") int page

    /board/search?query=zzz&page=4 와 같이 
HTTP요청 파라미터를 메서드의 파라미터로 전달받을 때 사용   
[ SearchController.java 참조 ]

2. 뷰 이름 자동 지정
메소드의 리턴타입이 Model이나 Map,void 인 경우
뷰 이름이 URL이 됨.
리턴된 model이나 map은 request scope에 담겨서 해당되는 뷰에 전달된다.

3. @ModelAttribute()
  1>커맨드객체앞에 붙으면 객체의 이름을 바꾸는것이고
  2>일반 메서드 이것이 붙으면 메서드의 리턴값을 모델에 넣어주겠다라는뜻
 리턴하는것을 모델에 추가해줌. -> 리턴값이 Board 클레스(사용자 정의클래스) or List<ABC> 등등...이면 @ModelAttribute()가 (메소드 위에)붙는다고 생각..
              말그대로 Model을 다루네!

    @ModelAttribute() 메서드에서 초기화 해줄 수 도 있다.
  예) 처음 요청했을 때, get방식인데 <input type="text"의 > 초기값을 채우고 싶다.
제일 처음 요청들어갔을때 초기화로 값세팅을 하는방법임 -> boardInit() 메소드 참고!
    
    @ModelAttribute() 는 같은 파일에 있는 다른 메서드가 이를 request로 담아간다.
즉. @ModelAttribute() 는 항상 호출된다. 
  그리고  다른 메서드에 모델로써 전달된다.
>> 즉, XXXXController가 처리하는 모든 URL(~메소드)에 모델을 넣어주겠다.

  사용가능 ${}로써

4. @Initbinder vs @Valid
@Initbinder: 스프링은 @InitBinder 어노테이션이 적용된 메서드를 이용해서 폼과 커맨드 객체 사이의 매핑을 처리해주는 WebDataBinder를 초기화할 수 있도록 하고 있다. 이 메서드에서 WebDataBinder.setValidator() 메서드를 이용해서 커맨드 객체의 유효성 여부를 검사할 때 사용할 Validator를 설정하게 됨

@Valid 와 @InitBinder
 : validate() 메소드를 직접 호출하지 않고 스프링프레임워크에서 호출하는 방법.
[ JSP's form과 커맨드 객체의 관계 ]
https://snoopy81.tistory.com/324

[회원가입 폼 예제]
https://bbiyakbbiyak.tistory.com/4?category=718247
https://bbiyakbbiyak.tistory.com/3?category=718247

5. //redirect:라서 url 요청이 되므로, jsp로 넘어가는게 아니다. 메핑되는 메서드로 넘어간다.
   return "redirect:/board/write";  
   //이때 전달되는 모델 개수는 1개 : keywords 
   // submit메소드 참조

6. 메소드의 리턴타입이 ModelAndView인 경우.... setViewName()을 이용해서 view를 정할 수 있다.   
   -> view가 보여질 경로 설정 가능.( 리턴타입이 일반적인 String 같네..? -> 그럼 String과 ModelAndView의 차이점은 model을 담을수 있냐
         유무인데.. 헌데 String리턴타입 메소드는 어떻게 모델을 담드냐? -> 매개변수 쪽에 Model을 받아서 처리~!) 
   
    VS 리턴타입이 Map, Model, void 인 경우 - > Requestmapping URL이 뷰이름됨.

   [ HelloController.java 참조 ]



7.  handlerMapping 안거치고 Url을 바로 뷰로 매핑하기.. 
  => 홈피에서 정적인 부분은 바로 뷰로 넘길때. UrlFilenameViewController가 처리해줌
  (단,xml에서 세팅해줘야함)



#################### helloworld2 공부

1. hibernate 유효성 검사 vs Validator 유효성 검사
- hibernate를 활용하면 어노테이션만으로도 유효성체크가 가능해진다.

2. 서버와 클라이언트(기존 폼 태그)

3. form 태그( form:form )
 spring버전 2.0부터 데이터바인딩과 관련된 광범위한 태그를 제공
기본 형식은 아래와 같은 형태로 입력하며, 입력값이 없을시 method는 'post'로, action값은 '현재 요청URL'값이 설정된다. 
<form:form> </form:form>

예) <form:form path="userId">
 <!-- path는 Member.java에 있는 property(변수)와 연결  -->

        <!-- web으로 실행 후 소스보기를 통해 비교해 볼 것 -->

이렇게 변환된다! <input id="userId" name="userId" type="text" value="">

4. @RequestMapping(value="/login",method=RequestMethod.GET)
public String logForm(Login login) {
return "login";
}
//get방식에서도 모델객체 사용.
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
사용하면 내부적으로 자바코드가 돌기 때문에 모델객체가 있어야함!
따라서 폼페이지에서 내부적으로 getter,setter 사용가능.

// 변경사항 : jsp에서 commandName이 아닌 modelAttribute로 변경하여 사용할 것!!
// ex) <form:form modelAttribute="login">


 #################### helloworld3 공부


https://m.blog.naver.com/scw0531/220986622908
1. @Servcie()의 선언 위치 그리고 컨트롤러에서 서비스 생성할때 @Autowired와의 관계는? =>
# 해당 클래스가 service라는것을 알리기위해 @Service 붙임.
# 인터페이스로 구성시 확장성과 유연성이 좋아진다. 인터페이스를 구현할 클래스에 
@Service붙이는것..

# xml의 beans에 등록해주어야지 싱글톤(=인스턴스 재사용)과 @Autowired가 가능함.
# 즉,순서가...... @Service를 붙이면 자동으로 검색해서 빈으로 등록함. 그 이후에야 컨트롤러 단 같은 부분에서 @Autowired 선언이 가능한것.

# 컨트롤러 단에서 서비스를 호출하기 위해서 우선 서비스 정보를 가지고 있는 클래스를
선언한다. 클래스는 Impl파일들을 의미하게 되고 new로 객체생성 없이 하기 위해서
@Autowired를 써준다. Autowired같이 자동적으로 객체를 만들어주고 사용할 수 있게
해주는 것을 스프링에서는 DI 라고 한다.

# 해당 클래스가 DAO라는것을 알리기위해서 @Repository를 붙여준다.

# 최초 @Controller시작 -> @Service -> @Repository 까지 이어짐.
 그 과정에서 @Autowired로 이루어진다는 점!

#servlet-context와 root-context의 차이점 + form을 이용한 화면이동 부분 
https://m.blog.naver.com/scw0531/220988401816
https://m.blog.naver.com/scw0531/220984890046

2. JSTL이란 html에서 제어로직을 추가하여 데이터를 조작하는 가능하게 하는 기술
ex) <c:forEach>

3. 스프링부트란?
http://bitly.kr/RgkvLI

스프링부트 이용시, myBatis의 기존방법인 XML 설정파일에 상응하는 놈을 자바파일로 만들어서 세팅해준다. https://m.blog.naver.com/scw0531/221067648218
이를 위해서는 @Configuration 을 사용. 이 @를 통해 스프링부트에서는 XML 설정파일로 인식

spring_chapter1공부

#################### spring_chapter1공부

1. 싱글톤이란?

2. 의존이란?

3. DIP 의존 역전 원칙 ,방법 ,예제    


4. @Autowired  vs @Resource  = @Autowired 어노테이션이 타입을 이용해서 주입할 객체를 검색했다면, @Resource  어노테이션은 빈의 이름을 이용해서 주입할 객체를 검색한다. 
> 만약 같은 '타입'의 bean이 2개일 경우 > @Qualifier 어노테이션 사용 > 사용 방법? 

http://bitly.kr/h03Kmc 

 +  @Resource 어노테이션은 생성자에 적용할 수 없고 필드나 메서드에만 적용할 수 있다.
   
    - @Qualifier 사용법
    @Autowired
    @Qualifier(" ")   해주고 -> xml에서 빈 속성으로 qualifier 태그 달아줌
  


5. property란?

6. @Component   클래스앞에 붙이면 자동으로 빈을 xml에 등록시켜줌  , <bean>을 자동등록

7.  모델(Model)이란?

8. @Autowired를 함으로써 생성자나 setter를 이용한 주입방법을 피할 수 있다. 디폴트생성자로 가능(spring_chapter2 참고)

9. <beans:beans xmlns = 와 xmlns : 의 차이점

10. <resources mapping="/resources/**" location="/resources/" /> 의미
  
11. @Component vs @Controller비교 

12. 스코프 비교 4가지. 이에 따른 req,resp

page 1.  JSP가 생성시 pageContext 생성.
                  pageContext로 페이지 레벨(page-level) 객체들 저장,조회가능. 
          2. 페이지 스코프에 있는 객체는 각 페이지의 PageContext에 저장됨.
          3. PageContext는 객체를 생성한 JSP페이지를 통해서만 접근 가능. 
          4. 응답을 클라이언트에 보내거나 서버내에서 포워드하면 해당 객체 사용 불가.
              
request 서버는 클라이언트의 HTTP 요청이 있을 때마다 (HttpServletRequest 인터페이스를 구현한) 객체를 생성. 
서버는 요청을 처리하면 클라이언트에 응답을 돌려보낸다. 클라이언트는 자신에 되돌아온 요청과 해당 요청의 속성을 더는 이용할 수 없고 JVM의 가비지 컬렉션 대상이 된다.
session 웹 컨테이너는 다중 페이지 요청 시 사용자를 식별하기 위하여 HttpSession 인터페이스를 구현한 객체를 생성.  일정 시간이 지나면 소멸
application서블릿 컨테이너는 ServletContext 인터페이스를 구현한 객체를 생성.
                      객체는 켄테이너가 처음으로 시동될 때 실행된다.
                      요청 스코프와 세션 스코프의 상위 스코프는 ServletContext다. ServletContext는 모든 애플리케이션에서 애플리케이션 객체를 조회하고 저장할 수 있도록 한다. 또한 애플리케이션 객체의 수명은 서버가 살아있는 동안이다.


13.@Controll 가 붙여있으면 handlerMapping의 검색 대상이 된다.

14. POJO

15. command객체................JSP's form 태그에서 submit되면 백단 메소드의 커멘드 객체와 연결!

2019년 7월 1일 월요일

[DB] DB에 연결하기

        window > show view > other > data source explorer 클릭

oracle 서버 선택 > thin 11 driver 선택  >> jar파일 바꿔주기
jar파일 불러오기:  sqldeveloper-설치 폴더 > jdbc > lib > ojdbc7.jar선택
localhost:1xxx:xe로 바꾸고 > 핑테스트


1. 이를 위해선 사용자를 생성해야함.
cmd같은 sql에서의 command 툴인 : sqlplus에서..
CREATE USER (username)
IDENTIFIED BY (pwd)
DEFAULT TABLESPACE (테이블스페이스명)
TEMPORARY TABLESPACE TEMP;
//주의] 유저 ID는 대소문자 구분을 하지 않지만
      패스워드는 대소문자를 구분함
     
2. 이후에 권한 설정 해줌.
GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW,
CREATE SEQUENCE, CREATE PROCEDURE TO web;      

(17.사용자관리.pdf 참고)

[공부요약] 07


################## Butter2

1.  HTTP Verbs 
http://bitly.kr/ewseYN

get과 post의 차이점.

get 서버에게 resource를 보내달라고 요청할 때 사용합니다. 서버(혹은 DB)의 resource 는 클라이언트로 전달만 될 뿐 변경되지 않습니다.
 참고로 웹브라우저 주소창에 주소를 입력하는 행위는 항상 get인식됩니다.

post 서버에게 resource를 보내면서 해당 resource를 DB혹은 서버에 저장해달라고 요청할 때 사용합니다. ex) 회원가입, 사진업로드

put 서버에게 resource의 업데이트를 요청할 때 사용됩니다.


2. REST
 http://bitly.kr/TNw1lP
자원을 이름으로 구분하고 해당 자원의 상태를 주고 받는 모든 것이 REST라고 할 수 있지만, 일반적으로 REST라고 하면 좁은 의미로 HTTP를 통해 CRUD를 실행하는 API를 뜻합니다RESTful은 REST의 비공식적 구현 가이드입니다.

3. 제너릭 타입

정의: 타입을 파라미터로 가지는 클레스와 인터페이스
         선언시 클래스 또는 인터페이스 이름 뒤에  <> 붙임
         ex) public class 클래스명<T>
         ex) public interface 인터페이스명<T>
장점: 컴파일 단계에서  타입 에러 체크 가능. 

List<String> list = new ArrayList<>();

class List<T>{
      void add(T item){...};
}

4. 제너릭 메소드

정의: 매개변수 타입과  리턴 타입으로 타입 파라미터를  갖는 메소드.

선언방법: 리턴 타입 앞에 <> 추가 하고 타입 파라미터 기술
                타입 파라미터를 리턴 타입과 매개변수에 사용
ex) public <타입파라미터,...> 리턴타입 메소드명 (매개변수,...){...}
      public <T> Box<T> boxing(T t) {...}

제너릭메소드 호출 2가지 방법: 

5. 제너릭 제한

3가지 종류: 
<?>  : 모든 타입 가능
 <? extends 상위타입 > : 최대 상위타입까지만 가능, 상위클래스 제한, ?는 여기가 한계야
< ? super 하위타입 > : 최소 하위타입까지만 가능, ?는 최소한 이정도는 되야지
쨋든 둘다 extends 부분은 포함한다...

6. 제너릭 상속

제네릭 타입을 부모 클래스로 사용할 경우
- 타입 파라미터는 자식 클래스에도 기술해야함!!
public class ChildProduct<T,M> extends Product<T,M>{...}

- 추가적인 타입 파라미터 가질 수 있음.
public class ChildProduct<T,M,C> extends Product<T,M>{...}

7. 
[database-context.xml에서]

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="edu.iot.butter.dao" />
</bean>  
      의 의미.
basePackage 속성에 등록된 패키지 하위의 interface를 자동으로 Mapper로 인식하게 된다.

<!-- Dao 자동 생성 빈 : MapperScannerConfigurer
     edu.iot.butter.dao에 있는 것을 매퍼를 스캔 후 매칭시켜가지고...
   dao 인터페이스를 구현한  (dao's implementation)클래스를 자동 생성시켜준다.
   즉, 원래는 dao 인터페이스를  implements해서 구현 클래스 만들어야함..
   ========================================================
    
    기존 방법인 JDBC에선 connectionprovider써서 
               (...) PreparedStatement pstmt = conn.prepareStatement(sql);   써서 sql 처리.
                     rs.next() 등등    

     그 다음 방법인 Mybatis에선
     sqlSession = ConnectionFactory.getSqlSession(); 로 세션 얻고, 세션 메소드로 sql 처리
       (...)return sqlSession.selectOne(namespace + "getCount");

   하지만 스프링은 인터페이스 dao를 구현한 클래스를 자동으로 만들어줌 . 간편하다.
  ( DB part4 >> contact2.pdf  + Mybatis.pdf 참고)
  ===========================================================
   
 근데 아마 구현클라스 자동으로 만들어주면서 내부적으로 @Repositroy까지 선언한것인듯? 그래서 서비스impl에서 dao에 @Autowired 걸수 있는것 같다.
   
   
-->

8. /* 인스턴스화 시키려면 @Service을 통해 빈으로 등록, 
반면 MemberService는 인터페이스로써 인스턴스화될 수 없다. >> @Service안붙임
이름을 지정하지않으면 디폴트로 앞글자가 소문자인 
클래스명으로 빈 이름이 세팅됨*/
@Service
public class MemberServiceImpl implements MemberService {}

9. @ResponseBody 
 리턴값을 뷰로 처리하지않고 그 자체가 응답으로 처리.제이슨 문자열로 바꿔서 리턴

10. GSON이나 Jackson 라이브러리가 설치되면,
@ResponseBody을 쓸수 있는데, 
이 용도는 @ResponseBody 붙어있는 놈의 리턴타입은 뷰로 처리안하고  
JSON문자열로 처리 후(라이브러리에서 내부적으로 toJSON(),fromJSON()) 
그것을 리턴해 준다.(src/test/java폴더 GsonTest.java참조 )
gson객체의 fromJson,toJson이용

11. @Transactional


12.@Intercepts

Mybatis interceptor 를 이용해서 쿼리로그를 디비에다 저장하기
 :https://stove99.tistory.com/34


13. <bean> 선언 대략적인 구조
<bean id=" " class=" ">
<property name=" " value=" ">
<property name=" " ref =" ">
</bean>

14. $.get() == jQuery.get()


jQuery.get( url [, data ] [, success ] [, dataType ] )

 Load data from the server using a HTTP GET request.



15. [ BindingResult 결과 메시지 출력 ]
모델객체 VO에 @length,@NotEmpty등 조건 걸고 ,(hibernate이용)
스프링 단에선 객체 앞에 @Valid붙임.
그리고 모델객체 뒤 BindingResult 객체를 적어준다. (뒤에온다. 순서가 중요)

그리고 만약  뷰단에러가 있는 경우 폼에 에러 출력..


<form:errors path="userId" element="div" cssClass="error"/>
 이 내용과 같게됨 == <div id="userId.errors" class="error">

결론:  폼 입력에서 에러난 경우,  윗놈이 화면에 <div>로써 생기게됨.


16. /*
  에러가 났을경우 이 페이지를 보여줘라. => @ExceptionHandler등록
  에러를 처리할 놈들을 등록한다. 여러개면 배열형식으로{,} 작성..
  에러 정보를 담으려면 메소드의 매개변수를 가지면 된다.
  이를 통해 try~catch를 소스에서 뺄 수 있다.
  단, json응답만 제외.뷰로 이동할 필요가 없다.
*/
@ExceptionHandler({SQLException.class,DataAccessException.class})
public String handlerError() {
return "error/database_error";
}


17.

SLF4J를 사용해야 하는 이유

느슨한 결합을 위해 즉, 특정 라이브러리에 종속되는것을 피하기 위해.
Log들의 인터페이스 같은 역할을 하는 SLF4J를 사용한다.

################## Butter3

1. @Valid
  • @Valid선언된객체에 설정을 바탕으로 검사후 BindingResult에 담아준다.
  • 에러를 발생하려면 FieldError객체를 만들어서 BindingResult에 넣어준다.

1. Error 인터페이스와 BindingResult 인터페이스
https://bbiyakbbiyak.tistory.com/3

BindingResult = 폼 값을 커맨드 객체에 바인딩한 결과를 저장하고 에러 코드로부터 에러 메시지를 가져옴

2. log4j 설정
Appender & Logger 란?
https://addio3305.tistory.com/43

   * log4j의 3요소: Logger, Appender, Layout
  Logger: 메시지를 Appender에 '전달'한다.
  Appender: '어디'에 출력할지 결정한다.(콘솔,파일,DB), 어디다 붙일꺼여?!
  Layout: '어떤' 형식으로 출력할지 결정한다.

3. RedirectAttributes
Redirect되는 페이지에 모델을 전달하는 용도
문제상황:  리다이렉트 방식이 GET 방식​ 이라 데이터 전송에는 적절하지 않다
방법:  모든 플래시 속성을 세션에 복사한다. 이후 세션에서 모델로 이동시킨다.

http://bitly.kr/B8YMJj


4. <input type="hidden">
사용자가 입력하거나 선택하는 정보는 아니지만 폼 전송이 같이 전송해줘야 하는 정보를 담기 위해서 히든 필드(Hidden Field)를 사용합니다.
예를들어서 회원가입시 사용자의 아이피를 받는 경우 히든필드에 넣어서 폼 전송시 함께 전송합니다.


<form:hidden path="userId"/>

<!--설명:  hibernate로 모델객체에 에러메시지 지정했기때문에, 폼 입력으로전달될때,
고치진 않아도 어쨋든 히든형태라도 데이터를 가지고 있어야한다. 따라서 히든 처리해준것! -->

5. filter와 Interceptor의 차이
: 클라이언트 <-> 디스페처서블릿   & 디스페처서블릿 <-> 컨트롤러 (즉, 시점차이)
https://supawer0728.github.io/2018/04/04/spring-filter-interceptor/

(필터 사용 예제는 "2.JSP 프로젝트" 폴더에 있음!)

6. BindResult의 reject 메소드

<!-- 전역 에러  처리-->
<form:errors cssClass="error" element="div"/>
=> <div id="member.errors" class="error">비밀번호가 일치하지 않습니다~~</div>
로 변경됨!!!

<!-- 설명: 에러시 백단의 result.reject("updateFail","비밀번호가 일치하지 않습니다~~"); 가 실행 되며 뷰에서 "비밀번호가 일치하지 않습니다~~" 의 에러 메시지를 띄운다.

7.
in 서비스단
public Member checkLogin(Login login) throws Exception {
Member member =dao.selectOne(login.getUserId());
(...)
throw new LoginFailException("사용자 ID 또는 비밀번호가 일치하지 않습니다.");
}

in Account 컨트롤러 단
       @ExceptionHandler(LoginFailException.class)
public String handlerLoginError(HttpServletRequest request, Exception e) {
log.debug("============= handlerLoginError ===========");
log.debug("============= Exception 잡았다");
request.setAttribute("login", new Login());
request.setAttribute("error", e.getMessage());
return "account/login";
}


8. preventDefault 메소드
 $(...).submit( function(e){
      e.preventDefault()
  };
https://programmingsummaries.tistory.com/313

9. invalidate() 메소드
사용법: session.invalidate();
session은 HttpSession객체임.
역할: 로그아웃 시. 세션 종료.


10. 자바의 '자료형'
- primitive 형
- reference 형
데이터 타입이랑 헷갈리지마라.


11. 추상클래스와 인터페이스의 차이점.

추상클래스는 상속받아서 기능을 이용하고 확장하는 개념.
인터페이스는 구현객체의 같은 동작을 보장하기 위함.
                 이런 메소드를 만들겠다 알려주는 명세서이다.(껍대기),
                 구현을 강제하기 위함

추상클래스는 abstract 메소드와 일반 메소드가 함께 있을 수 있지만
인터페이스는 모든 메소드가 abstact 메소드. 명세서이기 때문. (틀만 생성)

그럼, 비슷비슷한대 인터페이스 쓰는 이유는? 자바가 다중상속을 지원하지 않기때문
https://marobiana.tistory.com/58
https://brunch.co.kr/@kd4/6


12. AOP 란?
pdf 참조


13. String과 StringBuffer의 차이점. & StringBuffer와 StringBuilder의 차이점
: string은 불변객체로써, 연산시 매번 객체를 생성하기 때문에 느리다.(예: + 연산)
  단 데이터 조회시에는 빠르다.  StringBuffer는 변하는 객체기 때문에 스트링연산이 빠르다.

14. String은 불변객체다. 인스턴스가 생성되고 메모리가 힙에 할당됨.
      String에 대해 연산을 해도 메모리의 값이 절대 변하지 않는다.
   만일 String 연산시, 새로운 인스턴스를 만들고 다른곳에 메모리를 할당한다.
 
    기본적인 예제)
    String s1 = new String("abc"); 
    String s2 = new String("abc");   일 경우 각각 다른 주소로 힙 메모리가 할당된다.
 
    하지만 예외 경우 있다.
    String s3 = "abc" String s4="abc" 가 리터럴로 선언됐다면, 힙메모리 안에 String Costant Pool 이라는 별도 공간에 "abc"가 들어간다. 즉, 리터럴로 같은 문자열로 선언된경우는  SPC내 같은 메모리를 참조한다.
 결론적으로 s1 != s2  이고 s3==s4 이다.


15. 오버라이딩 vs 오버로딩
오버라이딩 : 부모의 메소드를 자식에서 재정의 할때
오버로딩: 메소드명이 같은 경우 매개변수 (데이터 타입,개수)이 다르다면 사용가능
             리턴형은 오버로딩과 상관 없음.


16. 자바 접근제한자
https://blog.naver.com/pjok1122/221500736523

같은 패키지이냐 다른(외부) 패키지냐로 우선 구분.
public: 외부 모든 클래스에서 접근가능
protected: 외부 패키지여도 상속받은경우 접근가능
(default) : 같은 패키지에 있는 클래스에서 접근가능
private : 같은 클래스 내에서만


17.  UNION과 UNION ALL 의 차이점
https://20140501.tistory.com/63

18. TRUNCATE 와 DELETE의 차이점
공통점 : 해당 테이블의 모든 데이터를 삭제하는 명령어
차이점: 기능적으로 같음 그러나 구조적 차이

DELETE는 DML로서 ROLLBACK가능
TRUNCATE는 DDL로서 ROLLBACK 불가, 대신 빠름.

https://20140501.tistory.com/59?category=426323


19. [Jquery]
 serialize() form 의 객체들을 텍스트화 하고 그 결과를 return 합니다.
형식은 inputName=inputValue&inputName2=inputValue2 입니다.

 serializeArray() :  Json문자열 형태의 배열을 return
형식은 [{name:"name",valeu:"valeu"},{name:"name2",value:"value2"}] 입니다.

http://bitly.kr/psCAu6

20. CDATA 사용이유
: CDATA 안에 들어가는 문장을 문자열로 인식하게 합니다.
  그러면 부등호 들어가도 됨!
https://javacpro.tistory.com/5

21.입력폼(form) 과 스프링 form 태그
https://araikuma.tistory.com/75
https://giyatto.tistory.com/70

22. [DB] ROW_NUMBER( ) VS RANK() 차이점
사용법:
차이:
ㅈ소 폴더 참조


23. JSP directive == <%@ 
종류 3가지:
 page : <%@ page = "contentType= html/text" %>
 include   : <%@ include file=" xxx.jsp" %>
 taglib  : < %@ taglib prefix="c", uri=" " %>

동작 : 전체구조에 대해 WAS에 지시를 내린다.

24. 
Ajax와 동일한 효과를 가지면서도 동일출처원칙을 회피할 수 있는 것
이것이 JSONP가 가진 효용성. 하지만 GET방식으로만 호출 가능하다는게 한계.


25. @Autowired

http://bitly.kr/9a4aNN

26. DI (의존성 주입)
의존객체를 생성하는게 아니라, 전달 받음.

- 스프링은 객체를 직접 생성하고 초기화 할 필요없이, GenericXmlApplicationContext클래스를 통해 XML 파일로부터 읽어와 객체 생성과 초기화를 할 수 있다.
- 스프링이 생성하는 객체를 Bean객체라고 부른다. 객체정보를 <bean>이 담고 있다.
- <property> 태그를 처리할 때, name속성의 값 첫글자를 대문자로 변환한뒤 일치하는 set메서드를 사용한다.(= 초기화)

https://m.blog.naver.com/sksk3479/221173670110
+ (spring_chapter1 과 함께 볼것!)


27. Reflection
객체로 클래스 정보를 분석해 내는것.
자바의 동적바인딩을 가능케함.
원래 자바에서는 동적으로 객체를 생성하는 기술이 없었다. 
-> 동적으로 인스턴스를 생성하는 Reflection으로 그 역할을 대신하게 된다.

https://asfirstalways.tistory.com/221


28. 조립기
https://m.blog.naver.com/sksk3479/221177485649


2
29.  EL 정의
 쓰는이유: 저장 객체를 출력 할때 스크립팅을 전혀 쓰지 않는 기술
 EL의 내장객체 종류:

http://bitly.kr/FMEqm6

30. JSTL

https://blog.naver.com/darae9108/220772043379

공부6의 ####7 spring전까지 복습함


2019년 6월 20일 목요일

[팁]

톰켓 재시작 안하고도 jsp변경 적용
https://cafe.naver.com/pointcode/70


자바 저장 시 톰캣 자동 재시작 방지 (톰캣 Auto Reload)
https://intro0517.tistory.com/149


이클립스 창분할 단축키
1-1. 세로분할
Ctrl + Shift + { 

1-2. 가로분할
Ctrl + Shift + _


개발자 폰트
https://www.dafont.com/bitstream-vera-mono.font

2019년 6월 8일 토요일

[Eclipse] eclipse 파일검색 방법


현재 파일에서 특정 문자를 찾거나 찾은 문자를 교체하는 방법 (단축키:CTRL+F)

프로젝트에 포함된 리소스(여기서는 파일)중에 찾는 방법 (단축키 : CTRL+SHIFT+R)

에디터 크게,작게 보기( ctrl + , ctrl - )

2019년 6월 7일 금요일

[자바]String, StringBuffer, StringBuilder 속도 실험 (시간 측정)

String, StringBuffer, StringBuilder 속도 실험 (시간 측정)

:http://egloos.zum.com/deblan2/v/419830

: greedy 문제 중 '30' 풀다가 string concate 너무 느려서 stringbuffer로 바꿔주었더니
: 시간초과 해결! 

[공부요약] 06

#################1

1> algorithm 설계방식

1. 탐색형
-비선형 구조 > 트리,그래프 >백트래킹(재귀함수) 이용
-선형 구조 > 배열,리스트 > 반복문 이용

2. 관계형
- 점화식


2> greedy algorithm
1. 최소신장 트리 - 프림(no cycle하며 최소엣지만 선택),
                      - 크루스칼(최소 엣지 잡고 인접한 정점에서 최소 엣지,단 노사이클)
2. 다익스트라 - 방향성있는 가중치 그래프, 임의의 두정점에서 최소 거리 구할때

3. 거스름돈 문제( 단, 배수/약수)



#################2
1. 람다식
데이터만 넘기는게 아니라 매개변수로 로직(=함수)를 넘김. 내부는 익명구현객체로 됨.
함수적 프로그래밍을 위해. 자바8
추상 메소드가 하나인 인터페이스를 쉽게 구현해서 사용하기 해.
https://blog.hanumoka.net/2018/11/16/java-20181116-java-lambda/

@함수적인터페이스
특징: 오직..추상메서드 1개

람다식 사용방법: (,...)->{ ,...}

람다식 사용목적은 인터페이스가 가지고 있는 메소드를 간편하게
즉흥적으로 구현해서 사용하는 것이 목적이다.

[람다식 출현배경]
--1> 인터페이스를 구현한 클래스를 재사용할 수 있는 장점이 있지만,
재사용이 필요하지 않는 메소드를 만들어 사용해야 할때도 있을 것이다.
그런 것들을 클래스로 구현하게 된다면 불필요한 class파일이 늘어만
가게 될 것이다
--2> 이를 해결 위해 익명구현객체 사용.
--3> 이보다 더 간편하게 쓰려고 람다식 이용.

2. 리터럴 초기화 방법

3. comparable vs comparator
- 이중 정렬 방식(처음 비교값 같을 경우, 다음 기준으로 정렬)
- return 할때 - 이용 (ex: return arg0 - arg1; )

4. 리스트 안쓰고 배열 클래스 선언

##################3
1. 전략 패턴 cf) composite, template 패턴 , DI

2. 리다이렉트 방식 vs 포워드 방식
- request, reponse 객체, 장점, 쓰는 이
참조 :https://sdevstudy.tistory.com/26

3. spring mvc 구조

4. 웹 개요.
- front controller - handler(contr) 역할

5. Gson, jackson 역할
- 자바객체 <-> JSON형식 가능케하는 라이브러리

6. JSP 필터
- 톰켓(컨테이너)가  ---|--|--|---   [ servlet ] 에 request 전달하기전에 필터 거침
                          ( | = filter들 )

7. StringBuffer vs StringBuilder 차이
 - String + (concate)는 느리다..
 - 멀티스레드, 싱글스레드, 동기화

8. OptionalInt 클래스 -> 최대 최소값 구하기 & 평균 구하기
- OptionalInt op = Arrays.stream(arr).max();
- int max = op.getAsInt();

##################4

1. get방식 vs post방식
https://mommoo.tistory.com/60

http 프로토콜이 제공하는 7가지 메서드 중 웹서비스 개발에 이용.
공통점 : 둘다 서버에 '요청'하는 메서드.
: http프로토콜이므로..데이터 보낼때 http패킷씀 구조 =>헤더와 바디가 있음
: 서버에 요청할때, 전달하는 데이터가 있을수 있음(예: id,pw)
: get방식은 : 헤더의 URL에 ?id=hb&pw=123 이런식으로 데이터를 보냄
: 반면 post방식은 바디의 부분에 데이터를 넣어서 요청
:GET 방식에서 BODY에 특별한 내용을 넣을 것이 없으므로 BODY가 빈상태로 보내진다.
그러므로, 헤더의 내용중 BODY 데이터를 설명하는 Content-Type이라는 헤더필드는 들어가지 않는다


2. JSP란? 특징?
-서버사이드 스크립트 언어
https://gmlwjd9405.github.io/2018/11/03/jsp.html

3. DTO vs VO
readOnly
https://mommoo.tistory.com/61?category=582808

인스턴스 개념 vs 리터럴 값 개념
getter,setter vs getter

4. URL vs URI
https://mommoo.tistory.com/43?category=582808
URL:  파일 위치를 알려줌.
URI : 특정 페이지로 이동할 수 있는 문자열.

5. string.split()사용시 의점
//주의: 패턴 스트링에 정규표현식  사용시..메타데이타가 포함되어 있을 경우
//해당 캐릭터는 *, ?, +, [, {, (, }, ^, $에 해당한다.
//따라서 \\을 추가해줘야함.
String[] arr=  input.split("\\+|-");
StringTokenizer st=  new StringTokenizer(input,"\\+|-",true);


##################5

1. DAO : 데이터 처리를 담당, 하나의 DAO는 하나의 테이블과 연결되어 데이터 처리를 한다.
스프링 MVC의 구조로 DAO(데이터 처리를 담당)에서 Mybatis를 호출하고, 여기서 처리된 데이터를 VO(데이터를 전달하는 역할) 객체에 담아 Service, Controller 을 거쳐 화면으로 보내게 된다.
 https://all-record.tistory.com/176?category=733072 

2. 스프링 컨트롤러 메소드
- 리턴타입 void vs String
- @modelattribute vs Model
https://engkimbs.tistory.com/694

Model과 ModelAndView의 차이

3. 스프링 home.jsp 동작원리

4. mybatis 콘솔에서 로그보는 작업- 별도처리
https://all-record.tistory.com/176?category=733072
https://its-easy.tistory.com/21

5.tiles 설정
https://epthffh.tistory.com/entry/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%83%80%EC%9D%BC%EC%A6%88-Spring-Tile-%EC%84%A4%EC%A0%95%ED%95%B4%EB%B3%B4%EA%B8%B0



##################6
1. WAS(web app- server )
 - 구성: web서버 , web 컨테이너
https://opentutorials.org/module/3569/21238
https://yang1650.tistory.com/8

2. JSONP 기법
http://bitly.kr/fC0VCA 

http://dev.epiloum.net/1311
https://kingbbode.tistory.com/26



3. DBCP
https://aljjabaegi.tistory.com/402

JDBC만을 사용할 경우라면 DB 연결 시 마다 Driver를 로드하고 커넥션 객체를 얻는 작업을 반복하죠.이 부분을 효율적으로 처리하도록 바꾸는 것이 DBCP의 역할 입니다.


WAS 실행 시 미리 일정량의 DB 커넥션 객체를 생성하고 Pool 이라는 공간에 저장해 둡니다.그리고 DB 연결 요청이 있으면, 이 Pool 이라는 공간에서 Connection 객체를 가져다 쓰고 반환 하게 됩니다.


4. spring 컨테이너
- IoC , DI
https://minwan1.github.io/2017/10/08/2017-10-08-Spring-Container,Servlet-Container/


###################7 ( 스프링)

1. spring_chapter1 - 생성자 방식과 설정 메서드 방식을 이용한 DI 선언하기

http://bitly.kr/ufzKAL

스프링에서 다른 객체를주입 받기 위해 <constructor-arg> 태그와 <property> 태그의 ref와 value속성을 사용했다.
<bean id="helloformat" class="ktko.HelloFormat">
    <property name="format" value="Hello %s!!"></property>
</bean>
<bean id="greeter" class="ktko.Greeter">
    <constructor-arg ref="helloformat"/>
</bean>

http://bitly.kr/h03Kmc

http://bitly.kr/gO9rTg

<bean id="greeter" class="spring_chapter1.Greeter">
<property name="format" value="%s", 안녕하세요!"/>
</bean>

> key는 id인 greeter이다.
> id를 통해 class값을 얻어온다.(key , value관계)
> 그 때, 디폴트 생성자를 통해 class="spring_chapter1.Greeter생성시킨다.
> 따라서 디폴트 생성자가 반드시 있어야함.
> property란 getter,setter로 접근가능한 정보를 말한다.
> 따라서 name인 "format"을 읽고 setFormat을 호출을 한다.

2. @RestController

3. @PathVariable

4. @Component vs @Controller 비교
https://namocom.tistory.com/421

###################8 (자바스크립)

1. 프로토타입 메서드

2. jsonp

3. $.fn.(메서드이름){ } = 사용자 정의 메서드를 정의함.
=> 메서드 정의 후 지시자.(메서드이름)으로 사용가능

4. rest 방식 in js

5. bootstrap - container 와 container-fluid 의 차이점  , class= "row"

6. Ajax 정의.
  장. 단점
https://coding-factory.tistory.com/143

7. REST cf) Ajax
- REST방식이 데이터를 호출하고 사용하는 방식을 의미하고,
Ajax는 이를 이용하는 수단에 가깝다고 할수있다.

####################9

1.

* Retrofit의 장점
1) 서버를 향해서 네트워크 통신 연결/해제에 대해서 체계적으로 다뤄줘야하는데, 이러한 관리를 해줍니다.
2) 서버로 연결이 된 후에는, 요청을 데이터 Format에 맞춰서 요청해 주고, 데이터를 parsing하여 응답을 받을 수 있습니다.
3) 데이터를 가져와서 각종 parsing 라이브러리를 통해서 원하는 요구에 맞게 사용이 가능합니다.
4) 각종 에러처리를 원활하고 쉽게 해줍니다.

 Retrofit2: 일반 application에서 rest통신 지원 라이브러리
REST API 호출용 자바 라이브러리
REST API를 인터페이스 형태로 지원

Retrofit2는 gson-converter를 요구함.
    gson-converter : Retrofit이 객체/JSON 변환에 사용

    이것도 라이브러리에 추가

 레트로핏 => (gateway_server 프로젝트 참조)



게시물

DP 공부