Etc
쿠키 ,세션
쿠키와 세션 왜 사용할까? 웹을 공부하다보면, 빠질 수없는 것이 쿠키,세션이다. 이 것들을 왜 사용하는가~ 기본적으로 http 통신(웹) 들은 요청과 수락으로 이루어져 있다. 필요할때 요청 받고, 응답을 받지, 서로의 통로를 계속 유지하지 않는다. (stateless) 만양 쿠키와 세션에 정보를 저장하지 않는다면, 우리는 웹사이트에 로그인을 계속 해야하는 버거로움이 생길것이다. 물론 쿠키,세션 말고도 jwt토큰을 활용하는 방법도 있다. 쿠키 쿠키라는 이름과 같이, 정보를 담아서 클라이언트 컴퓨터(사용자들)에 저장을 한다. 쿠키에는 다음과 같은 정보를 포함한다 - 이름 - 값 - 유효시간 - 도메인 - 경로 쿠키의 동작 방식 클라이언트가 페이지를 요청 서버에서 쿠키를 생성 HTTP 헤더에 쿠키를 포함 시켜..

Thymleaf/ layout / fragment (decorate) 오류
view를 작성하다보면, 헤더부분, 푸터 부분 계속 겹치는 부분이 있다. 이 부분을 매번 하드 코딩 할 필요없이, thymleaf layout을 활용해 보겠다. thymeleaf, dialect를 의존성 추가해준다. 다음과 같이 폴 templates 밑에 다음과 같이 작성해준다. 설명하기 앞서, th:block은 해당부분을 감싸주는 역할을 하느데, 실제 이 부분을 다른곳에 가져다쓸때, 부터 들어간다. 필드는 삽입 되지 않느다. ->> 일종의 id를 지정한다고 생각하면 쉽다. header 도 동일하게, fragment를 사용하여 id를 지정해주었다. default.html은 레이아웃 파일이다. th:replace를 사용하여, 위치(/layout/fragments/head/)를 지정하고 , 해당 위치의 어떤..
빌더 패턴
빌더 패턴은 복잡한 객체를 생성하는 방법을 정의하는 클래스와 표현하는 방법을 정의하는 클래스를 별도로 분리하여, 서로 다른 표현이라도 이를 생성할 수 있는 동일한 절차를 제공하는 패턴이다. 빌더 패턴은 생성 패턴중 하나이다. 생성 패턴에는 두가지 이슈가 있다. 1. 생성 패턴은 시스템이 어떤 Concrete Class를 사용하는지에 대한 정보를 캡슐화한다. 2. 생성 패턴은 이들 클래스의 인스턴스들이 어떻게 만들고 어떻게 결합하는지에 대한 부분을 완전히 가려준다. 빌더패턴은 많은 Optional한 멤버변수(혹은 파라미터)나 지속성 없는 상태 값들에 대해 처리해야 하는 문제들을 해결한다. 예를 들어, 팩토리 패턴이나 추상 팩토리 패턴에서는 생성해야하는 클래스에 대한 속성값이 많을 때 아래와 같은 이슈들이있..

jdbcTemplate
jsp로 작업을 했을당시, db에 연결을 하기 위해서는 DataSource에서 connectoin 객체를 얻고 PreparedStatement에 객체 넘겨주고, resultset에 객체를 담는 귀찮은 작업을 계속 반복했다. 하지만, 그 반복 작업을 줄여주는 라이브러리가 jdbcTamplate이다. 사용법을 알아보자. 클래스안에 JdbcTemplate을 선언하후, 생성자로 DataSource를 받아 JdbcTemplate 선언을 합니다. findById 메서드에서 jdbcTemplate의 query를 호출한다. 첫 인자는 원하는 sql입니다, 다음 인자는 RowMapper 세번째 인자는 생략되었지만, 바인딩할 파라미터 값이다.

Assertions / assertJ
Junit 에서는 Assertions를 사용해 테스트를 실패처리를 확인합니다. 단정 메서드라고 합니다. 클래스는 다음과 같습니다. junit.juptier.api.Assertions 단정메 메서드 설명 assertEquals(x,y) 객체 x와 y의 일치함을 확인한다. assertArrayEquals(a,b) 배열 a 와 배열 b가 일치함을 확인한다. assertFalse(x) x가 false 인지 확인한다. assertTrue(x) x가 true인지 확인한다. assertTrue(message,condition) condition이 true이면 message 표시 assertNull(o) 객체 o 가 null 인지 확인 asserNotNull(0) 객체 o가 null 이 아닌지 확인 assertSame..
css display none: transition
css로 메뉴바 드롭 다운, 버튼 클릭시 메뉴 생성등을 웹에 적용하는것은 쉽다. 하지만 그것을 자연스럽게 적용 시키기위해서는 transition을 사용해야한다. css 트랜지션 - css 속성을 변경할때 애니메이션 속도를 조절하는 방법을 제공한다. 속성 변경이 즉시 영향을 미치게 하는 대신, 그 속성의 변화가 일정 기간에 걸쳐 일어나도록 할 수있다. 예를 들어, 어떤 요소의 색상을 흰색에서 검정색으로 변경한다면, 변화는 대개 즉시 일어난다. css 트랜지션을 이용하면, 모두 커스터마이즈 가능한 시간 주기마다 변화가 일어난다. auto값은 매우 복잡한 값이다. 애니메이션에 auto를 사용하면 이는 브라우저와 버전에 따라 예상하지 못한 결과를 초래할 수 있으며 피해야한다. - 트랜지션 정의에 사용한 css속..
REST
REST란 Represetational State Transfer 의 약자이다 Rest 란 웹에 존재하는 모든자원(이미지,동영상,DB자원)에 고유한 URI를 부여해 활용 하는 것으로 자원을 정의하고 자원에 대한 주소를 지정하는 방법론을 뜻한다. 이런 REST의 형식을 따른 시스템을 RESTful이라고 한다. HTTP URI를 통해 자원을 명시하고 HTTP Mehod를 통해 해당 자원에 대한 CRUD Operation을 적용한다. 1. Create : POST (자원생성) 2. Read : GET (자원의 정보 조회) 3. Update : PUT(자원의 정보 업데이트) 4. Delete : DELETE (자원삭제) REST 구성요소 1. 자원(Resource) URI 모든 자원은 고유한 ID를 가지고 ID..

이클립스 프로젝트 파일 자동 새로고침
이클리스를 사용하다보면, 이클립스 내에서 파일이나, 이미지를 붙이지 않고, 폴더에 직접 파일을 옮기면, 프로젝트에 바로 반영되지않는다. 이때 properies -> workspace -> Refresh using native hooks or pooling 항목을 체크하면 업데이트 항목을 프로젝트에 즉시 반영을 해줍니다.
Blob이란?(form : enctype)
blob ( Binary Large Object) 의 약자이다. - 파일의 내용을 바이트 단위로 저장하기 위한 데이터 타입 - 파일을 저장할 때는 파일의 위치와 이름을 저장하는 방법과 BLOB으로 파일의 내용을 저장하는 2가지가 있다. 파일의 위치와 이름을 저장하는 방법은 파일의 위치나 이름을 마음대로 변경 할 수 없다는 단점이 있다. - 데이터가 많은 곳에서는 파일의 이름이나 위치의 변경이 자주 일어나기 때문에 파일의 이름이나 위치를 저장한는 것보다 파일의 내용을 저장하는것이 더 이득이 될 때가 많다. -자바에서는 blob을 사용하는 경우에 inputStream을 이요하는데, 저장할 때는 preparedStatement의 set을 이용해서 매피시켜 저장하고, 읽을때는 get을 이용해서 inpustStr..
String.getBytes() 스트링을 인코딩,디코딩하는 이유?
암호를 hash 처리하는 코드(MessageDigest)를 보던중 String을 byte화, str.getBytes() 처리를 하는 코드가 있었다. 왜 굳이 바이트처리를 하는지 몰라서 찾아봤다. -만약 DB가 한글을 지원하지 않을 경우, 한글로된 문자를 숫자로 encoding해서 저장하면되고, 사용자에게 보여줄 때는 다시 decoding해서 보여주면 된다. - byte[] getBytes() - byte[] getBytes(Charset charset) - byte[] getBytes(String charsetName) -> 문자열을 인코딩된 byte 형태로 넘겨준다. 매개 변수 없이 그냥 getBytes()메서드를 사용하면 플랫폼에 따른 default charset을 사용한다. ->만약 특정 chars..
jdbc) Execute, ExecuteQuery, ExecuteUpdate 차이점
1) Execute [1] 결과로 boolean 타입을 반환한다. [2] 모든 구문을 수행 할 수 있다. 2) ExecuteQuery [1] 결과로 ResultSet 객체의 값을 반환한다. [2] select 구문을 수행시 사용되는 함수. 3) ExecuteUpdate [1] 결과로 int 타입을 반환하다. [2] select 문을 제외한 다른 구문을 수행할때 사용되는 함수. - insert / delete / update 에서는 반영된 레코드의 건수를 반환한다. - create,drop 에서는 -1을 반환한다.