Study/Java 5

[Java] Servlet(서블릿) 이란?

사용자 요구에 맞춰 동적으로 반응하는 페이지을 만들기 위해 만들어진 것이 서블릿이다. 서블릿은 JSP 표준이 나오기 전, 만들어진 표준으로 java로 웹 어플리케이션을 개발할 수 있도록 하기 위해 만들어졌다. 서블릿을 이용하면 자바 클래스를 이용해서 웹 어플리케이션을 개발하게 된다. 서블릿은 웹의 요청과 응답의 흐름을 메서드 호출을 통해 체계적으로 다룰 수 있게 해준다. 오늘 다룰 내용과 연관하여 내가 업무에서 쓰는 개발 환경은 다음과 같다. 엄청 레거시한 코드와 개발 환경 Java 1.8 Servlet 3.0(web.xml을 통한 매핑) tomcat 8.0 MVC2 구조 Spring 사용 안함 1. web.xml로 매핑하기 WEB-INF 폴더의 web.xml 파일에 서블릿 클래스로 등록한다. Hello..

Study/Java 2022.03.01

[Java] 직렬화(Serialization)

예전에 운영 배포 할 때 직렬화 문제를 마주한 적이 있었다. 서버 한 대에서는 직렬화를 구현한 객체에 새로운 변수를 추가했었는데, 다른 서버 한 대에 수정한 객체를 반영하지 않아 계속 역직렬화 에러가 발생하였다.. 요청할 때의 객체와 응답 받을 때의 객체가 다른 버전의 클래스를 갖고 있던 것이 문제였다. 직렬화에 대한 개념이 없어 에러를 찾는데 쉽지 않았다. 1. 직렬화란? 객체를 데이터 스트림으로 만드는 것을 뜻한다. 객체에 저장된 데이터를 스트림에 쓰기위해 연속적인 데이터로 변환하는 것을 말한다. 반대로 스트림으로부터 데이터를 읽어서 객체를 만드는것을 역직렬화(deserialization)라고 한다. 2. ObjectInputStream, ObjectOutputStream 직렬화는 ObjectOutp..

Study/Java 2021.10.25

[Java] 멀티 쓰레드(Multi Thread)

1. Main Thread 모든 Java Application은 main thread 가 main 메소드를 실행하면서 시작된다. 이러한 메인 쓰레드안에서 싱글 스레드가 아닌 멀티 스레드 애플리케이션은 필요에 따라 작업 스레드를 만들어 병렬로 코드를 실행할 수 있다. Multi Thread는 메인 스레드가 종료되어도 실행 중인 Thread가 하나라도 있으면 프로세스는 종료되지 않는다. 2. Thread 생성 2.1 Thread 클래스로부터 직접 생성 java.lang.Thread 클래스로부터 작업 스레드 객체를 직접 생성하려면 Runnable을 매개 값으로 갖고 있는 생성자를 호출한다. Runnable에는 run() 메소드 하나가 정의되어 있으며, 구현 클래스에서 run()을 재정의하여 실행할 코드를 작성..

Study/Java 2021.09.14

[Java] 파일 입출력 정리

업무를 보던 중 특정 기간내에 몇 천 건의 DB 자료들을 뽑아야하는 일이 있었다. 하지만 내가쓰고 있는 DB Tool인 MySql workbench 로는 부하가 많이 가서 쿼리 실행중에 계속 오류가 발생하였다. 이를 해결하기 위해 임시로 로컬에서 DB를 접속하여 자바 코드를 통해 데이터를 뽑아 냈다. 파일 입출력은 자주 쓰지 않아서인지 사용할 때 마다 매번 까먹고 다시 찾고를 반복한다.. 그래서 다시 찾아보더라도 내가 정리한 걸 보기위해 이번 기회에 제대로 정리해본다.. File 클래스 OutputStream FileReader FileWriter BufferedWriter BufferedReader Scanner .. .. 스트림 Stream 파일에서 입력과 출력이라는 동작을 하려면 파일로 데이터를 전..

Study/Java 2021.09.08

자바 2차원 배열 정렬하기

자바 1차원 배열 정렬의 경우 Arrays.sort() 함수를 통해 쉽게 정렬할 수 있다. 2차원 배열의 경우, 첫번째 원소를 기준으로 정렬할 때는 2가지 방법이 있다. 첫 번째는 람다 방식과 Integer의 compare함수를 사용 Arrays.sort(arr,(o1,o2) ->{ if(o1[0] == o2[0]) { return Integer.compare(o1[1], o2[1]); } else { return Integer.compare(o1[0], o2[0]); } }); 그리고 정렬 했을 때 첫 번째 배열의 원소 크기가 같다면 두 번째 배열 원소까지 비교하여 정렬한다. 두 번째는 Comparator 방식 Arrays.sort(arr,new Comparator(){ @Override public ..

Study/Java 2020.09.01