본문 바로가기

JAVA11

자바 입력 & 출력 기본적으로 Scanner와 System.out.println으로 입력과 출력을 할 수 있다. java.io 패키지의 BufferedReader와 BufferedWriter 클래스로 더 빠른 입출력이 가능하다. (하지만 Scanner와 println이 사용하는 방법이 쉽다.) Scanner와 BufferedReader, BufferedWriter에 대해 알아보겠다. 1. Scanner java.util 패키지의 Scanner 클래스이다. JDK1.5부터 추가되었으며, 사용 방법은 아래와 같다. import java.util.Scanner; public class Main { public static void main(String args[]) { //Scanner 클래스 객체 생성 Scanner scan .. 2019. 10. 8.
File.separator로 OS 상관없이 파일 경로 구분하기 운영체제마다 파일 경로 구분자가 다르다. 윈도우는 \ (요즘 윈도우는 /도 인식한다고 한다), 리눅스와 맥은 / 로 말이다. 이런 OS에 따른 경로 차이를 신경 쓰지 않고, 파일 경로를 설정하고자 한다. 이럴 때, java.io 패키지의 File 클래스의 separator 필드를 사용한다. import java.io.File; ... String path = File.separator+"fileName"+File.separator+"sample.jpg"; 위 코드의 path는 /fileName/sample.jpg or \fileName\sample.jpg가 될 것이다. 윈도우의 루트(root)는 윈도우가 설치된 C드라이브로 인식한다. 그래서 /나 \로 시작하는 파일 경로는 root 경로 아래부터 시작한다.. 2019. 10. 4.
자바 날짜 데이터 생성하기 1. Date, Calendar 자바에서 날짜 데이터를 생성하거나 조작할 때 가장 먼저 떠오르는 것, java.util 패키지의 Date 클래스이다. import java.util.Date; ... Date currentDate = new Date(); 이런 식으로 현재 날짜 데이터를 생성할 수 있다. 특정 날짜를 생성하거나 날짜를 계산할 땐 Calendar 클래스를 사용한다. import java.util.Calendar; ... Calendar cal = Calendar.getInstance(); cal.set(2019, Calendar.OCTOBER , 2); cal.add(Calendar.DATE, 7); 이런 식으로 2019년 10월 2일 날짜를 생성하고 7일을 더할 수 있다. 만약 날짜의 포맷.. 2019. 10. 2.
UUID로 파일 이름 중복 방지하기 UUID는 범용 고유 식별자(Universally Unique IDentifier)를 뜻한다. UUID에 관한 더 자세한 내용은 Kakao DB Team MySQL 서버에서 UUID 활용에서 참고. 파일을 업로드할 때, 같은 이름의 파일을 업로드하면 기존 파일이 다른 파일로 덮어씌워질 수 있다. 이를 방지하기 위해 파일의 이름을 UUID로 생성하여 저장하고자 한다. UUID가 중복이 전혀 없는 것은 아니지만, 중복될 확률은 희박하다고 한다. 그래도 미연의 상황을 방지하고자 한다면, File 객체의 exists()를 활용하여 같은 파일이 있는지 확인하고, 뒤에 숫자나 날짜 등을 붙여주는 코드를 추가하면 될 것이다. 아래 코드는 UUID를 랜덤으로 생성하는 코드이다. String extension = fil.. 2019. 9. 17.
SLF4J 이용하여 로그 남기는 방법 (with Logback) 로그에 대한 내용은 아래 글에 있다. ▷로깅에 대하여 로그를 위한 라이브러리는 다양한 종류가 있다. 이 다양한 라이브러리를 같은 방법으로 사용할 수 있도록 도와주는 SLF4J에 대해 알아보도록 하자. 1. SLF4J란? SLF4J는 로깅 Facade(퍼사드)이다. 로깅에 대한 추상 레이어를 제공하는 interface의 모음이다. 여러 로깅 라이브러리를 하나의 통일된 방식으로 사용할 수 있는 방법을 제공한다. 아래 그림을 보면, 초록색 박스의 application들은 하늘색의 SLF4J API를 사용하고 있다. 이렇게 application은 SLF4J를 이용하여, 로깅 라이브러리가 어떤 것이든 같은 방법으로 로그를 남길 수 있게 되는 것이다. 나중에 더 좋은 라이브러리가 생겨 교체하더라도, applicat.. 2019. 9. 12.
로깅에 대하여 운영 중인 웹 어플리케이션에 문제가 발생했을 경우, 문제의 원인을 파악하려면 문제가 발생했을 때의 정보가 필요하다. 이를 위해 Exception이 발생했거나 중요 기능이 실행되는 부분에서 적절한 로그를 남겨야 한다. 이를 생성하는 로깅에 대해 알아보도록 하겠다. 1. 로깅이란? 로깅(logging)은 정보를 제공하는 일련의 기록인 로그(log)를 생성하도록 시스템을 작성하는 활동을 말한다. 이런 로그들은 테스트할 때 재현하기 힘든 버그가 개발 완료된 환경에서 발생했을 경우, 그런 버그들에 대한 정보를 알려줄 수 있으며, 구문들 사이에 걸리는 시간 등의 성능에 관한 통계와 정보를 제공할 수 있다. 로그가 제공하는 정보의 양은 프로그램이 실행되는 중에도 설정이 가능한 것이 이상적이다. 설정이 가능할 때, 로.. 2019. 9. 12.
enum으로 코드 줄이기 enum은 열거형(enumerated type)이라고 부른다. 열거형은 서로 연관된 상수들의 집합이라고 한다. 만약, price라는 객체의 getType() 메서드가 각 가격의 좌석 종류를 가져오고, 각 좌석 종류가 무슨 좌석인지를 표현해야 한다고 했을 때, if문으로 다음과 같이 표현할 수 있다. if(price.getType() == "A"){ System.out.println("VIP석"); } else if(price.getType() == "B"){ System.out.println("B구역"); } else if(price.getType() == "C"){ System.out.println("C구역"); } else if(price.getType() == "S"){ System.out.prin.. 2019. 9. 4.
아규먼트 리졸버(Argument Resolver) 아규먼트 리졸버(Argument Resolver)는 사용자가 컨트롤러의 메서드 인자값으로 임의의 값을 전달하려할 때 사용된다. 예를 들어, 세션에 저장되어 있는 값 중, 특정 이름의 값을 메서드 인자로 전달한다. 아규먼트 리졸버 작성 방법 org.springframework.web.method.support.HandlerMethodArgumentResolver를 구현한 클래스 작성 supportsParameter 메서드를 오버라이딩 한 후, 원하는 타입의 인자가 있는지 검사하여 있으면 true를 리턴하도록 한다. resolveArgument 메서드를 오버라이딩한 후, 메서드의 인자로 전달할 값을 리턴한다. Java Config에 설정하는 방법 WebMvcConfigurerAdapter를 상속받은 Java.. 2019. 8. 26.
인터셉터(Interceptor) - Cotroller 공통 로직 처리하기 Spring이 실행되는 흐름은 아래 그림과 같다. 아래 그림과 함께 인터셉터가 무엇인지 살펴보자. 클라이언트로부터 요청(Request)이 들어오면, Filter가 있다면 Filter를 수행한 후, DispatcherServlet을 수행한다. 즉, 필터는 요청이나 응답이 처리되기 전 거치는 것이다. DispatcherServlet은 선처리 작업할 것이 존재하면 선처리 작업을 해주고, HandlerMapping을 통해 실제 어떤 Handler가 동작을 해야 되는지 알아내고, 그 Handler를 실행시킨다. 위 그림을 보면 DispatcherServlet와 Handler 사이에 HandlerInterceptor라고 하는 것이 있다는 것을 볼 수 있을 것이다. 이런 것들을 거쳐 요청 작업이 끝나면 응답 정보를 .. 2019. 8. 26.
세션(Session) 이용하는 방법 세션은 클라이언트 별로 서버에 저장되는 정보이다. 사용자 컴퓨터에 저장되던 쿠키와 다르게 서버에 저장되므로, 비교적 보안이 필요한 데이터는 쿠키보다 세션에 저장한다. 서버가 종료되거나 유효시간이 지나면 사라진다. 1. 세션 이용 방법 웹 클라이언트가 서버에게 요청을 보내면 서버는 클라이언트를 식별하는 session id를 생성한다. 서버는 session id로 key와 value를 저장하는 HttpSession을 생성하고, session id를 저장하고 있는 쿠키를 생성하여 클라이언트에게 전송한다. 클라이언트는 서버 측에 요청을 보낼 때, session id를 가지고 있는 쿠키를 전송한다. 서버는 쿠키의 session id로 HttpSession을 찾는다. javax.servlet.http.HttpSes.. 2019. 8. 26.