TIL - 0712
java-ims
response 생성하기
- request 정보와 controller 처리 결과를 가지고 response(outputstream)처리를 하는 객체
- RequestHandler에서 response.response() 했을 때 비로소 outputstream 실행 : 연결된 클라이언트에 데이터(HTTP 응답메세지)를 보냄
public class Response {
private HttpStatus status;
private HttpHeader header;
private HttpBody body;
private DataOutputStream out;
public Response(OutputStream out) {
this.out = new DataOutputStream(out);
header = new HttpHeader();
}
public Response setStatus(HttpStatus status) {
this.status = status;
return this;
}
public Response setHeader(ResponseHeaderAttribute attribute, String value) {
header.add(attribute.name(), value);
return this;
}
public Response setBody(String body) {
this.body = new HttpBody(Optional.of(body));
return this;
}
public HttpStatus getStatus() {
return status;
}
public String getPath() {
return header.getHeader(LOCATION.name());
}
public void response() throws IOException {
out.writeBytes(formatResponseLine(HTTP_VERSION, status));
Map<String, String> headers = header.getHeaders();
for (Entry<String, String> keyAndValue : headers.entrySet()) {
out.writeBytes(formatResponseHeader(keyAndValue));
}
out.writeBytes(EOF);
out.writeBytes(body.get());
out.flush();
}
}
개선해야 하는 부분
- HandlerMapper(리퀘스트 URI에 따라 처리할 컨트롤러 선정하는 역할)의 동작 개선해야함 : 경우의 수가 3가지 있음
- /user/create : UserController
- /user/form.html : ViewController
- /index.html : ViewController
- 현재 동작
- 두번째 슬래쉬(“/”)전 까지 URI를 자른 다음 Contrller.class에 설정되어있는 @RequestMapping(value)값과 비교해서 Controller를 반환함
- 찾았을 때 없을 경우 ViewController를 반환
- 나머지 잘못된 경로(맵핑된 URI가 아니거나 뷰 파일이 없을 경우) 404 메세지를 작성하도록 ViewController(View Template의 역할을 대신함)에서 처리함
- 잘못된 부분 어떻게 개선할건가?
- /user/form.html 일 때 /user로 잘려서 UserController로 처리하게됨 -> ViewController가 처리하도록 해야함
- ViewController로 가지않더라도 맵핑되지않은 URI, 존재하지않는 Resource에 대한 요청이라면 HandlerMappingException이 발생하도록 해야함
기타 내용
- HttpStatus - FOUND<302> : 해당 리소스를 가지고 있는 곳은 다른 곳이니 여기에 요청해서 응답받아라
데이터베이스(RDBMS) 기초
- 접속 -> 커넥션 생성 -> 연결 동안 세션 유지
- 전화와는 비슷하지만 DBMS는 다중연결을 할 수 있다는 점이 다름 : 데이터 정합성은 어떻게 유지하는가?
- SQL : 데이터베이스에 저장된 데이터를 조작하는 언어 - SELECT, INSERT, UPDATE, DELETE
- RDBMS는 계층형 구조로 관리되고 있음 : 트리구조, 중요한건 DBMS도 계층형 구조를 가지고 운영됨(관리의 편의성떄문이겠지), DBMS 구현체마다 계층이 약간씩 다름
- 스키마(폴더) : 테이블은 1개의 폴더가 아닌 몇개 그룹으로 관리되고있음, 테이블이 저장되고 관리되는 공간(속해지는 곳)
- 데이터베이스 : 스키마의 상위계층, 스키마를 묶는 단위, MySQL은 스키마와 데이터베이스를 동일한 것으로 간주함(스키마 아래에 여러 테이블이 있다와 데이터베이스 아래에 여러 테이블이 있다는 같은 말)
- 인스턴스 : DBMS 프로세스