java-was mission
자 오늘은 페어 미션인 was를 정리하겠다. 초반 부분으로 뒷부분은 점차 진화할 예정이다.
기본 포트는 8080을 쓰고
소켓을 열고 listenSocket.accept()을 통해 입력이 들어올 때까지 대기하고 들어오면 밑의 코드 실행하고
요청이 안 들어오면 또 들어올 때까지 대기한다. 무한 대기
요청이 들어오면 RequestHandler로 이동한다.
ReuRequestHandler는 소켓을 파라미터로 받아서 InputStream과 OutputStream을 꺼내서 사용한다.
클라이언트가 서버로 요청하면 InputStream 서버가 클라이언트로 돌려주면 OutputStream을 사용한다.
Request 내부에서는 request의 startLine과 headr를 String과 Map 형태로 저장하고 있다.
밑의 if문은 controller라고 생각하면 된다.
요청 url을 판단해서 행동을 정의했다. "/user/create" url은 사용자 생성이다.
사용자를 생성해서 List에 저장을 한다. DB대용으로 사용.
후에 응답으로 html 파일을 바이트로 넘겨준다.
받은 outpusStream에 response를 작성하고 마지막으로 flush를 해준다.
회원 가입에는 쿼리 스트링으로 값이 들어오기에 of 메서드 호출 시 안에서 target으로 프로토콜 다음 문장을 잡았다.
startLine을 분리하고 url과 쿼리 스트링으로 분리해서 쿼리 스트링이 있으면 data라는 Map에 저장을 한다.
of 메서드를 더 보면 inputStream을 받아서 한 줄 한 줄 읽는다. 그러다 ""를 만나서 header가 끝나면 Content-Length가 있는지 확인하다. 있으면 post요청이고 없으면 get요청이다.
둘 다 일단 동시에 처리하고 있긴 하다.
post일 때는 body가 존재하니 content의 길이만큼 또 읽어서 data라는 map에 저장을 한다. post는 쿼리 스트링이 없으므로 get일 때와 post일 때 각각 map에 대입하는 형태를 띤다.