질문 출처 : https://github.com/jjuyeon/Tech-Interview-Study/tree/main/web [7. Web/Web]
DAO, DTO, VO란?
MVC 패턴에서 사용되는 객체이다.
DAO (Data Access Object)
- DB와 관련된 CRUD 작업을 전담하도록 만든 객체이다. 비즈니스 로직에서 DB 접근 로직을 분리하기 위해 사용된다.
- 사용자는 자신이 필요한 인터페이스를 DAO에게 던지고 DAO는 이 인터페이스를 구현한 객체를 사용자에게 편리하게 사용할 수 있도록 반환해 준다.
DTO (Data Transfer Object)
- 계층간의 데이터 교환을 위해 만들어진 Java Beans. (여기서 말하는 계층이란 Controller, View, Busniess, Persistence 계층을 말한다)
- 대표적인 DTO로 폼데이터빈, 데이터베이스 테이블 빈 등이 있으며, 각 폼 요소나 데이터베이스 레코드의 데이터를 매핑하기 위한 데이터 객체를 말한다.
- 일반적인 DTO는 로직 없는 순수한 데이터 객체이며, 속성과 속성에 접근할 수 있는 getter/setter 메소드만을 가진다. 비즈니스 논리 메서드를 추가하는 것은 권장되지 않는다.
VO (Value Object)
- DTO와 마찬가지로 데이터 값을 담는 객체이다.
- DTO와 비슷하지만, VO는 담긴 데이터를 수정할 수 없다는 점에서 차이가 존재한다.
dto VS vo
dto1 = new Object(1)
dto2 = new Object(1)
dto1 != dto2
vo1 = new Object(1)
vo2 = new Object(1)
vo1 == vo2
원래는 다른 건데 현업에서는 섞어서 사용하는 경향이 있다.
entity... db의 한 행을 가리키는..? id에 따라 구별되는 느낌인데. jpa에서 자동으로 db를 업데이트 할 때 사용...???
jstl에서 객체의 이름을 받아올 때 변수가 아니라 getter/setter의 이름으로 접근함.
참조글
https://martinfowler.com/eaaCatalog/dataTransferObject.html
RESTful이란?
REST = Representational State Transfer의 약자. 웹의 장점을 최대한 활용할 수 있는 아키텍처를 의미한다.
Get, Post, Put, Delete
https://wonning.wordpress.com/2015/12/02/restful/
HTTP SET-Cookie란?
서버에서 사용자 브라우저에 쿠키를 전송하기 위해 사용되는 HTTP 응답 헤더이다.
속성 | 설명 |
이름=값 | 필수 속성. 이름과 값 모두 큰타옴표로 감싸지 않은 세미콜론, 쉼표, 등호, 공백을 포함하지 않는 문자열이다. Set-Cookie: id=1234 |
expires | 선택 속성. 쿠키의 만료일 문자열이고 날짜 형식은 다음과 같다. 요일, DD-MM-YY HH:MM:SS GMT 사용할 수 있는 타임존은 GMT 뿐이며 날짜 요소 간에 구분자는 - 이어야 한다. 쿠기에 expires 를 명시하지 않으면 세션 쿠키가 되고 세션 쿠키는 세션 종료시 만료된다. Set-Cookie: id=1234; expires=Wednesday, 09-Nov-99 21:00:00 GMT |
domain | 선택 속성. 브라우저는 이 속성에 기술된 도메인을 사용하는 서버 호스트에만 쿠키를 전송한다. 도메인이 명시되어 있지 않으면 Set-Cookie 응답을 생성한 서버의 호스트를 기본값으로 사용한다. 만약 domain=naver.com 으로 되어 있으면 naver.com, www.naver.com 으로 요청을 전송할 때에 쿠키를 사용하게 된다. |
path | 선택 속성. path 속성에 기술된 값이 URL 경로의 앞부분과 일치하면 쿠키를 전송한다. 만약 경로를 명시하지 않으면 Set-Cookie 응답을 전달하는 URL 의 경로가 사용된다. Set-Cookie: id=1234; path=/test |
secure | 선택 속성. 이 속성이 포함되어 있으면 쿠키는 HTTP가 SSL 보안 연결을 사용할 때만 쿠키를 전송한다. Set-Cookie: id=1234; secure |
문법
Set-Cookie: <cookie-name>=<cookie-value>
Set-Cookie: <cookie-name>=<cookie-value>; Expires=<date> // 쿠키의 최대 생존 시간
Set-Cookie: <cookie-name>=<cookie-value>; Max-Age=<non-zero-digit> // 쿠키가 만료될 때 까지의 시간 (Expires보다 우선순위 높음)
Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value> // 쿠키가 적용되어야 하는 호스트를 지정
Set-Cookie: <cookie-name>=<cookie-value>; Path=<path-value> // 쿠키 헤더를 보내기 전에 요청 된 리소스에 있어야하는 URL 경로
Set-Cookie: <cookie-name>=<cookie-value>; Secure // 보안 쿠키. 보안 쿠키는 서버에서 요청이 SSL을 사용하며, HTTPS 프로토콜을 사용할 때에만 전송된다.
Set-Cookie: <cookie-name>=<cookie-value>; HttpOnly // XMLHttpRequest and Request APIs를 통한 자바스크립트로 접근할 수 없음..
// 크로스 사이트 요청과 함께 쿠키를 전송하지 않도록 만들 수 있다.
Set-Cookie: <cookie-name>=<cookie-value>; SameSite=Strict
Set-Cookie: <cookie-name>=<cookie-value>; SameSite=Lax
// Multiple directives are also possible, for example:
Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value>; Secure; HttpOnly
(1) 쿠키생성
- Cookie cookie = new Cookie(String key, String value);
- cookie.setValue(newValue);
- response.addCookie(name);
(2) 사용자의 요청에서 모든 쿠키를 얻기
- Cookie[] cookies = request.getCookies();
(3) 원하는 쿠키 검색(이름)
- String name = cookies[i].getName();
- if( name.equals(“id”) ) { … }
(4) 쿠키로부터 값을 얻음
- String value = cookies[i].getValue();
(5) 쿠키 삭제
- 쿠키 생성 후 setMaxAge(0)을 사용
- response.addCookie(name);
요즘은 쿠키를 안쓴다는 말이.. 있다. 쿠키 대신 로컬 스토리지나 세션 스토리지를 사용한다고..?
쿠키는 암호화를 할 수 있긴한데 엄청 손 많이 가고 빡세고... 굳이 클라이언트에 민감한 정보를 저장할 필요도 없고 매번 서버와 통신할 때 마다 빡센 복호화를 할 필요가 없다??
cookie - 모든 쿠키를 전송해야함, cookie를 가공함으로써 발생하는 side effect존재
webstorage - 개발자가 선택해서 전송할 수 있고 가공할 수도 있음
게다가 항상 코드를 작성해서 데이터를 넘겨줘야한다는 점이서 유지보수는 좀더 까다로운 편이다.
URI, URL, URN이란?
URI (Uniform Resource Identifier)
- 인터넷 자원을 나타내는 고유 식별자이다.
- 예를 들어 나의 거주지, 주민등록번호로 다른 사람과 나를 구별할 수 있는 객관적인 방법이 생기는 것과 유사하다.
// URI의 표현 방법
scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]
URL (Uniform Resource Location)
- 통합 자원 위치. 웹 주소, 링크라고 불림
- 자원에 접근할 수 있는 경로를 나타낸다. 일반적으로 사이트 도메인을 의미한다.
- 웹 상 뿐만 아니라 컴퓨터 네트워크 상의 모든 자원을 나타낼 수 있다.
// URL의 표현 방법
scheme://<user>:<password>@<host>:<port>/<url-path>
URN (Uniform Resource Name)
- 통합 자원 이름.
- 자원의 이름을 나타낸다. 서로 중복되지 않는 유일한 값이어야 한다.
- url과 달리 자원의 위치에 영향을 받지 않는다.
OO도서관이 이전하여 주소가 XX시 XX동 XXX에서 XX시 YY동 YYY으로 바뀌었다고 해보자. 이 때 OO도서관이 실제로 위치하는 물리적 주소(URL)는 바뀌었지만 'OO도서관'이란 이름(URN)은 바뀌지 않는다.
<URN> ::= "urn:" <NID> ":" <NSS>
언제 어떻게 쓰는가? 왜 분리를 해 놨는가?
- URL은 어떻게 리소스를 얻을 것이고 어디에서 가져와야하는지 명시하는 URI이다.
- URN은 리소스를 어떻게 접근할 것인지 명시하지 않고 경로와 리소스 자체를 특정하는 것을 목표로하는 URI이다.
URN의 역할은 WEB에 있는 컨텐츠나 파일 등을 고유한 이름으로 서버에 식별시키는 것
- URL은 웹 상의 주소를 나타내는 문자열이기 때문에 더 효율적으로 리소스에 접근하기 위해 클린한 URL 작성을 위한 방법론들이 생겨났는데 REST API도 그 중 하나이다. (파일이 존재하는 것은 아니지만 프로그램을 돌려서 결과로 만들어진 리소스를 표현한 것도 URL, 예를 들면 데이터베이스의 학생 목록 같은 것들을 자원을 URL로 정의해서 CRUD하는 REST API가 그러함, Query하여 좀 더 자원을 특정한다고 하여 URL이 아니지 않음)
- 실제 자원을 찾기 위해서는 URN을 URL로 변환하여 이용한다.
- The Scheme, which is the protocol that you’re using to interact.
- The Authority, which is the target you’re accessing. This breaks down into userinfo, host, and port.
- The Path, which is the resource you’re requesting on the host.
- The Query, which are the parameters being used within the web application.
- The Fragment, which is the target to jump to within a given page.