본문 바로가기

Java152

[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.
[Java] CSV 파일을 열었을 때, 한글 깨짐 현상 발생시 해결 방법 Excel 실행 → csv 파일 끌어서 열기 → 다른이름으로 저장 → 메모장 열기 2023. 2. 11.
[JSP] StringBuilder를 통해서 onclick 이벤트의 인자(argument)를 전달할 때 발생하는 오류 해결 방법 / Uncaught SyntaxError: Unexpected end of input 위와 같이 인자를 넣으면 아래와 같이 생성되고 이를 클릭하면 아래와 같이 에러가 발생한다. Pass a string parameter in an onclick function I would like to pass a parameter (i.e. a string) to an Onclick function. For the moment, I do this: '' with stackoverflow.com 좌우로 백탭을 넣었다. 2023. 2. 7.
[Java] String의 null 처리에 관해서 / <null 처리, String, java.lang.NullPointerException> 위와 같이 에러가 발생했을 때 처리하는 방법이다. 이는 흔히 발생할 수 있는 NullPointerException에 관한 내용이다. jsp에서 위와 같이 String의 초기 값을 null로 설정했다고 하고, 만약 session 값이 있다면 그 값으로 변수에 할당한다. 없다면 초기값 null로 계속 할당 되어있는 것이다. 만약 위와 같이 if문을 통해서 검사했을 때 NullPointerException이 발생합니다. 기본적으로 String은 참조타입이지만 기본 타입의 성질을 일부 가지고 있어 헷갈리기 쉽습니다. 기본타입: 값을 주고 받는 형태( byte, short, int, long, float, double, boolean, char ) 참조타입: 주소값을 주고 받는 형태( 기본 타입을 제외한 나머지 .. 2023. 2. 5.
[JSP] 쿠키와 세션의 차이에 대해서 / 쿠키=웹 브라우저의 소유 / 세션=서버 와 웹브라우저 둘다 소유 쿠키는 웹 브라우저에 저장되고, 사용자에 의해서 조작될 수 있다. 쿠키를 생성하면, 아래와 같이 어떤 값이 들어있는지 확인이 가능하다.. 그렇다면, 아래와 같이 사용자가 임의로 변경할 수 있다. 왜냐하면, 생성된 쿠키는 웹 브라우저가 소유하기 때문이다. 이에 반해 세션은 웹 브라우저와 서버와 동일하게 가지고 있다. 이때, 웹 브라우저에서 세션값은 쿠키에 담아서 가지고 있고, 서버는 세션값을 그대로 가지고 있다. 이때, 만약 웹 브라우저에서 위처럼 쿠키에 들어있는 세션값을 조작한다면 서버에서는 해당 세션을 사용할 수 없는 세션 값으로 판단한다. 추가로, 로그아웃 등에서 자주 사용하는 session.invalidate()는 세션을 제거하는게 아니라, 세션을 사용할 수 없는 값으로 지정한다고 알고 있으면 된다. 2023. 1. 24.