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가지 있음
    1. /user/create : UserController
    2. /user/form.html : ViewController
    3. /index.html : ViewController
  • 현재 동작
    1. 두번째 슬래쉬(“/”)전 까지 URI를 자른 다음 Contrller.class에 설정되어있는 @RequestMapping(value)값과 비교해서 Controller를 반환함
    2. 찾았을 때 없을 경우 ViewController를 반환
    3. 나머지 잘못된 경로(맵핑된 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 프로세스