본문 바로가기

Java153

[Java] HTTP 웹 서버 구현 / GET 방식으로 회원가입 GET 방식으로 회원가입 사용자가 입력한 값을 파싱(문자열을 원하는 형태로 분리하거나 조작하는 것을 의미)해 model.User 클래스에 저장한다. 사용자 아이디 비밀번호 이름 이메일 회원가입 HTTP Header GET /user/create?userId=tester1&password=test1&name=테스터 HTTP/1.1 HTTP 요청의 첫 번째 라인에서 요청 URI을 추출 요청 URI에서 접근 경로와 key=value 형식으로 전달되는 데이터를 추출해서 Model 클래스에 담는다. GET 방식의 회원가입 GET /user/create?userId=tester1&password=test1&name=테스터 HTTP/1.1 위의 코드는 GET 방식으로 회원가입을 했을 때의 요청 라인이다. 사용자가 입.. 2023. 3. 17.
[Java] HTTP 웹 서버 구현 / index.html 요청에 대한 응답 index.html로 응답 클라이언트가 http://localhost:8080/index.html로 접속했을 때 서버는 webapp 디렉토리의 index.html 파일을 읽어 클라이언트에 응답한다. HTTP Header GET /index.html HTTP/1.1 Host: localhost:8080 Connection: keep-alive Accept: */* BufferedReader.readLine() 메서드를 활용해 라인별로 HTTP 요청 정보를 읽는다. HTTP 요청 정보 전체를 출력한다. 헤더 마지막은 br.readLine().equals("") 로 확인한다. HTTP 요청 정보의 첫 번째 라인에서 요청URI를 출력한다. String[] tokens = line.split(" ");과 같이 s.. 2023. 3. 17.
[Java] 디버깅을 위한 로깅(logging) System.out.println은 앞으로 사용하지 말자. 개발자는 애플리케이션이 정상적으로 동작하는지 확인하기 위한 목적, 애플리케이션에 문제가 발생했을 때 원인을 파악하기 위한 디버깅을 목적으로 수많은 메시지를 출력한다. 원인을 파악하기 위한 디버깅을 목적으로 수많은 메시지를 출력한다. 이때 사용하는 것이 System.out.println() 이다. 하지만, 이를 디버깅 메시지로 출력하면 파일로 메시지가 출력하게 되는데 파일에 메시지를 출력하는 작업은 상당한 비용이 발생하는 작업이다. 또한, 소스코드에 포함되어 있는 경우 구현한 코드는 삭제하거나 주석 처리하는 방법으로 해결하는 경우가 있다. 이 또한 모두 비용이며, 디버깅을 목적으로 메시지를 출력하고 싶으면 또 다시 원복해야 하는 문제점이 있다. 이.. 2023. 3. 10.
[Java] HashMap이 아닌 LinkedHashMap을 사용하는 이유 LinkedHashMap이란 순서를 유지하는 해시맵이다. LinkedHashMap은 Java에서 HashMap을 확장한 클래스이다. LinkedHashMap의 가장 큰 특징은 자료가 입력된 순서를 기억한다는 것이다. 그렇다면, Java의 ArrayList, LinkedList와 같은 자료구조는 순서를 유지하는데 왜 LinkedHashMap이라는 특별히 HashMap의 순서를 유지하기 위한 자료구조로 소개되는 것일까? 우선, HashMap이 입력된 데이터의 순서를 유지하지 않는지 먼저 알아봐야한다. HashMap은 데이터의 순서를 유지하지 않는다. HashMap이 순서를 보장하지 않는 이유를 알기위해선 HashMap이 등장하게 된 목적부터 알아야한다. HashMap은 연관 배열을 저장하기 위한 자료구조이다.. 2023. 3. 3.
[Java] 싱글톤 패턴 싱글톤 패턴(singleton pattern) 객체 지향 프로그래에서 인스턴스를 단 하나만 생성하는 디자인 패턴을 싱글톤 패턴이라고 한다. 이 싱글톤 패턴은 static을 응용하여 프로그램 전반에서 사용하는 인스턴스를 하나만 구현하는 방식이다. 예를 들어, 회사의 직원들을 객체 지향 프로그램으로 구현한다고 가정해본다면, 직원은 여러 명이겠지만 회사는 하나이다. 이런 경우에 직원 인스턴스는 여러개 생성하는 것이 당연하지만, 회사 객체는 하나만 생성해야한다. 생성자를 private로 생성자가 하나도 없는 클래스는 컴파일러가 자동적으로 디폴트 생성자를 넣어준다. 이 디폴트 생성자는 항상 public이다. public 라는 의미는 외부 클래스에서 인스턴스를 여러개 생성할 수 있다는 의미이다. 설명하고자 하는 싱.. 2023. 3. 1.
[Java] 예외 클래스 프로그램에서 오류란? 프로그램에서 오류가 발생하는 상황은 두가지이다. 하나는 프로그램 코드 작성 중 실수로 발생하는 컴파일 오류(compile error), 다른 하나는 실행 중인 프로그램이 의도하지 않은 동작을 하거나 프로그램이 중지되는 실행 오류(runtime error)가 있다. 컴파일 오류는 개발 환경에서 찾을 수 있지만, 실행 오류는 프로그램 실행 중에 발생하기 때문에 예측하기 어려울 뿐더러, 프로그램이 비정상 종료되면서 멈춰 버린다. 실제 서비스를 제공하는 경우 오류가 생기면 서비스가 중지되므로 문제가 심각해지기 때문에 로그(log) 분석을 통해 원인을 찾을 수 있도록 개발 시 고려해야할 사항이다. 오류(error)와 예외(exception) 실행 오류는 크게 두가지가 있다. JVM(Java .. 2023. 3. 1.