spring을 사용할 때layard 아키텍처를 이용해서 Controller - service - repository 구조로 구성했는데 이렇게 되면 service에 비즈니스 로직이 들어가게 된다. 그러면 테스트 코드를 만들고 실행할떄 테스트 DB도 연결되고 스프링도 실해되어야 해서 복잡해 지고 테스트하기 힘들어 진다. 이런 방식을 transaction script 라고 부른다 이것을 해결하기 위해 Domain service라는 계층을 만든다 Controller - serivce - domain - repositorydomain에서 비즈니스 로직이 메소드로 구성되고 service에서 이 domain을 가져다 쓰면 된다.
computer science
Data Type Strings 문자열, 숫자, serialized object(JSON string)등 저장 SET name redis → name = "redis" MSET name pencil price 100 → name = "pencil", price = "100" MGET name price → 1) "pencil" 2) "100" redis는 숫자도 문자형으로 저장한다 대신 문자형 숫자는 사칙연산이 가능하다. INCR price → price + 1 INCRBY price 100 → price + 100 redis에서는 변수명에 :을 사용하여 의미별로 구분을 해주면 좋다 SET professor:database:ko mr.kim Strings Commands Lists String을 Doub..
백엔드 서버에서 DB 서버로 연결을 보내는 방식은 크게 매번 DB서버에 연결하여 요청을 보내고 연결을 종료한다. connection pool을 이용한다. 이렇게 나누어진다. 먼저 첫번째를 살펴보면 Connection 백엔드 서버에서 쿼리를 전송하기 위해서 DB서버에 연결을 해야하는데, 이때 TCP/IP 연결(3 way handshake)를 해준다. 이렇게 백엔드 서버와 DB서버가 연결 되었다면 백엔드 서버에서 쿼리를 전송하고 DB서버에서 응답하고, 연결을 종료한다. 이것이 기본적인 백엔드 서버와 DB서버 간의 통신이다. 하지만 이 방식의 경우에는 여러 단점이 존재한다. 매번 쿼리를 전송할때마다 connection을 다시 맺어야 함으로 시간적인 손실이 발생한다. 매번 connection을 realse 해주..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvZ2P1%2FbtszDBLkPAc%2FunhfnyPY9wYMIYV5DBXaZ0%2Fimg.png)
캐시와 캐싱 캐시는 데이터를 임시로 복사해두는 임의의 장소이며 , 캐싱은 주어진 리소소의 복사본을 저장하고 있다가 요청 시에 제공하는 기술이다 캐시는 크게 사설(private) 혹은 공유(shared) 캐시로 나누어 진다. 공유 캐시는 웹 브라우저와 서버 사이에서 동작하는 캐시이며, 한명 이상의 사용자가 재사용 할 수 있도록 응답을 저장하는 캐시이다.(중간 서버에 저장 가능) 사설 캐시는 웹 브라우저에 저장되는 캐시이며 한 사용자가 전용으로 사용한다. HTTP 캐시들은 일반적으로 GET Method에만 응답만을 캐싱한다. Cache-Control HTTP Header에는 Cach-Control이 있다. Cache-Control: no-store 캐시는 응답과 요청에 어떤 것도 저장 해서는 안된다. Cac..
Authentication(인증) 인증이란 사용자의 신원을 확인하는 것이며, 로그인(비밀번호), 생체인식, 일회용 핀등이 있다. 인증 요소(Authentication Factors)들로는 설명 예시 지식기반 사용자만 알고 있는 것 id, password, pin번호 등 소유기반 사용자만 소유하는 것 일회용 비밀번호 토큰, OTP id카드 등 속성기반 생체기반의 사용자의 고유 한 것 지문, 목소리, 홍체 등 Authorization(인가) 인가란 권한 부여를 의미한다. Authentication Authorization 사용자가 볼 수 있는가? O X 사용자가 직접 변경할 수 있는가? 부분적 가능 불가능 데이터 전송 ID 토큰 사용 액세스 토큰 사용 https://www.okta.com/kr/identit..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrsdXS%2FbtszlJQlIxs%2FcYpitmD4gcbBnq5mEuqrDk%2Fimg.png)
HTTP 상태 코드는 request가 성공적으로 완료되었는지 알려준다. 상태 코드 1xx: 정보 응답 100번대는 요청이 수신되어 처리중이라는 의미다. 100 Continue: 클라이언트의 요청을 받았으며 작업을 계속 진행중 101 Switching Protocol: 프로포콜을 전환라는 의미이며, response header에 응답이 들어간다. 102 procession(WebDAV): 요청을 수신하여 처리중 2xx: 성공 응답 요청이 정상 처리되었다. 200 OK: 요청 성공 201 Created: 요청에 성공해서 새로운 리소스가 생성 됨, response header의 Location에 생성된 리소스를 알려준다. 202 Accepted: 요청이 접수되었으나 처리가 완료되지 않았다. 204 No Con..
HTML Form 태그 POST GET /auth/login HTTP/1.1 HOST: localhost:8000 Content-Type: application/x-www-form-urlencoded email=qwe@gmail.com&password=asdfe html의 form 태그를 이용하여 서버로 POST로 submit하면 action의 경로가 request-target으로 들어가게 되고 input의 입력 데이터가 query형식으로 body에 들어가게 된다. Content-Type은 form태그를 사용할시 'application/x-www-form-urlendcode'가 된다. GET GET /home?username=kim HTTP/1.1 HOST: localhost:8000 GET으로 subm..
URI는 리소스만 식별한다 행위(method)와 리소스를 분리하여야 한다. 따라서 URI에 /user/delete와 같이 리소스가 아닌 delete와 같은 동사가 들어가면 안된다. delete와 같은 동사는 밑에서 배울 Method를 이용해서 표현해 준다. Method GET 리소스 조회 서버로 보낼 데이터는 query를 통해서 보낸다 POST 메시지 바디를 통해 서버로 request 데이터 전달 새 리소스 생성에 이용된다. ex) 신규 유저 생성, 게시판 글쓰기 요청 데이터를 처리하는데 사용된다. ( 데이터 생성을 넘어 프로세스 처리에도 할용) ex) 글쓰기 → 게시하기 처럼 프로세스의 상태가 병경될 때도 post 사용 컨트롤 URI를 사용할때도 post를 사용한다. PUT 리소스를 완전히 대체 리소스..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F60S38%2FbtsyWf9KHgO%2F7gKrAmVUDAWEPHMAFNhk6K%2Fimg.png)
HTTP 메시지 구조 기본적인 http 메시지 구조는 시작라인, 헤더, 공백(필수), 메시지 내용으로 구성돼 있다. HTTP request message, HTTP response message start-line(시작 라인) start-line = request-line + status-line 시작라인은 요청라인과 상태라인으로 구성된다. request-line= method SP request-target(path) SP HTTP-version CRLF (SP는 공백이다) 요청라인은 메소드 + 패스 + 버전으로 구성된다. method 메소드에는 GET, POST, PUT, DELETE 등등이 들어간다.. request-target(path) 요청 대상은 absolute-path[?query] 형태로 ..