전체 글

전체 글

    [오라클 데이터베이스] ROW_NUMBER()을 통해 ROWNUM을 추출해보자(Feat. 서브쿼리, 윈도우 함수, 순위 함수)

    [오라클 데이터베이스] ROW_NUMBER()을 통해 ROWNUM을 추출해보자(Feat. 서브쿼리, 윈도우 함수, 순위 함수)

    가끔씩 데이터베이스에서 ROWNUM이 필요할 때가 있다. ROWNUM 추출해는 방법은 크게 서브쿼리 방식과 ROW_NUMBER() 함수를 사용하는 방식으로 나뉜다. 다음과 같은 테이블(NOTICE)과 컬럼들(ID, TITLE, HIT)이 있다. 위의 테이블에서 ROWNUM을 뽑을 때, 추출하고자 하는 데이터를 정렬하지 않고 기본적으로만 뽑아내는 방법은 간단하다. SELECT ROWNUM, ID, TITLE, HIT FROM NOTICE; 그런데 HIT(조회수)이 낮은 순으로(오름차순) 정렬을 한 이후에 ROWNUM을 뽑아내려면? 서브쿼리 방식과 ROW_NUMBER() 함수를 모르는 사람들은 다음과 같이 생각할 수 있다. SELECT ROWNUM, ID, TITLE, HIT FROM NOTICE ORDER..

    [파이썬] 이차원 행렬을 일차원으로 바꾸기(합치기)

    이차원 행렬을 일차원으로 합치는 여러 가지 방법 my_list = [[1, 2], [3, 4], [5, 6]] # 방법 1 - sum 함수 answer = sum(my_list, []) # 방법 2 - itertools.chain import itertools list(itertools.chain.from_iterable(my_list)) # 방법 3 - itertools와 unpacking import itertools list(itertools.chain(*my_list)) # 방법4 - list comprehension 이용 [element for array in my_list for element in array] # 방법 5 - reduce 함수 이용1 from functools import r..

    [JSP] JSTL <fmt: formatDate> 태그로 날짜 형식 변경하기

    [JSP] JSTL <fmt: formatDate> 태그로 날짜 형식 변경하기

    오라클에서 날짜를 저장할 때는 주로 DATA_TYPE을 TIMESTAMP를 사용한다. 하지만, 이를 출력할 때는 다음과 같이 출력이 된다. 우리는 보통 웹에서 2019-10-05 07:43:22 이런식으로 날짜를 보는 것에 익숙해져 있다. 그렇다면 우리가 익숙해진 날짜 표현방식으로 어떻게 바꿀 수 있을까? JSTL의 format 태그를 사용하면 된다. 우선 다음의 태그 라이브러리를 jsp 파일 상단에 적어준다. 이런 태그 라이브러리를 사용하기 위해서는 라이브러리를 "WebContent/WEB-INF/lib"경로에 jar 파일을 넣어줘야 한다. jar 파일은 https://mvnrepository.com/artifact/javax.servlet/jstl/1.2

    [JSP & 서블릿] 모델(Model)1, 2 방식에 대해 알아보자

    [JSP & 서블릿] 모델(Model)1, 2 방식에 대해 알아보자

    본 포스팅은 https://www.youtube.com/watch?v=tPEf5VLKJI0을 참고하여 작성했습니다. 모델1은 컨트롤러와 뷰가 물리적으로 분리되지 않은 방식을 의미한다. 모델2은 컨트롤러와 뷰가 물리적으로 분리된 방식을 의미한다. 그리고 DisPatcher를 집중화한 후의 모델이다. 즉, 모델2 방식은 자바 코드와 JSP 코드가 분리되어 있다. 그렇다면 자바 코드로 전달받는 데이터를 어떻게 JSP에서 받을 수 있을까? (서블릿과 JSP 사이에 저장되는 저장소가 필요할텐데..) 포워드(forward를 사용하면 된다. foward은 redirect와 상이하다. forward는 현재 작업한 내용을 이어갈 수 있도록 무언가를 공유하는 것이고 redirect는 현재 작업하던 내용과 상관없이 새로운 ..

    서블릿(Servlet) 필터(Filter)를 사용하여 한글 처리 문제를 해결하기(어노테이션 방식)

    서블릿(Servlet) 필터(Filter)를 사용하여 한글 처리 문제를 해결하기(어노테이션 방식)

    위와 같은 웹 페이지에서 제목란에 'bbb', 내용란에 '안녕하세요'를 입력하면 어떻게 될까? (폼 태그의 method="POST"이다.) 'bbb'는 정상적으로 출력이 되지만, '안녕하세요'는 이상한 문자(?)로 출력이 된다. 왜 한글은 이상하게 출력이 되는 것일까? 클라이언트에서 서버로 영문자를 전송할 때는 '1바이트'의 크기가 사용된다. 하지만 한글을 전송할 때는 '2바이트'의 크기가 사용된다. 'UTF-8' 인코딩 방식을 이용하면 한글을과 영어를 모두 정상적으로 사용할 수 있지만 톰캣은 기본적으로 'UTF-8' 인코딩 방식이 아닌 'ISO-8859-1' 인코딩 방식을 사용한다. 예를들어 '안녕'을 전송하면 'UTF-8'방식은 '안녕'을 '안(2byte)', '녕(2byte)'로 나누어 전송하기 때..

    서블릿(Servlet) url 매핑기법 2가지(web.xml 방식, 어노테이션 방식)

    서블릿(Servlet) url 매핑기법 2가지(web.xml 방식, 어노테이션 방식)

    서블릿에서 사용자가 url을 입력했을 때 해당 url에 매칭되는 자바파일(~~.java)가 실행되어야 한다. 이러기 위해서는 url 매핑 기법을 사용해야 하는데 두 가지 방식이 있다. 1. web.xml 방식 2. Annotation(어노테이션) 방식 web.xml 방식은 구시대적인 방식이다. 아래 사진을 보자. 오우.. 벌써부터 어지럽다. 설명하면 다음과 같다. servlet-class 태그에 있는 것이 패키지명부터 클래스명이다. servlet-mapping 태그 안에 있는 servlet-name 태그와 servlet 태그 안에 있는 servlet-name 태그를 같게 하여 url-pattern 태그로 들어오는 url 주소에 맞춰 servlet-class 태그에 있는 Nana.java 파일을 실행시켜준..

    [Java] 메서드 정적 바인딩과 동적 바인딩

    [Java] 메서드 정적 바인딩과 동적 바인딩

    다음과 같은 소스코드가 있다고 가정하자. class Exam { public void total() { return kor + eng + math; } } class NewExam extends Exam { public void total() { return super.total() + com; } public static void print(Exam exam) { int total = exam.total(); System.out.println(total); } public static void main(String args[]) { print(new Exam(1, 1, 1)); print(new NewExam(1, 1, 1, 1)); } } print 메서드에서 exam.total을 호출하면 Exam,..

    [Java] 참조형식과 호출되는 메서드의 관계

    [Java] 참조형식과 호출되는 메서드의 관계

    아래와 같은 부모, 자식 클래스가 있다고 가정하자. public class Parent { // 생략 } public class Child extends Parents { // 생략 } 그럼 당연히 아래와 같이 부모, 자식 클래스의 각 인스턴스 변수(parent, child)를 생성할 수 있다. public class Main { public static void main(String[] args) { Parent parent = new Parent(); Child child = new Child(); } } 그렇다면 아래와 같이 인스턴스를 생성할 수 있을까? public class Main { public static void main(String[] args) { Parent A = new Child..

    [Java] Log4j에 대해 알아보자

    [Java] Log4j에 대해 알아보자

    Log4j는 Log for Java라는 말로 풀이하여 이름을 지었고 자카르타 프로젝트에서 자바를 위한 프로젝트 중 하나라고 한다. 프로그래밍을 하다보면 오류가 났을 때 많은 시간을 투자하게 된다. 변수의 값을 확인하기 위해 System.out.println을 남발하여 애를 먹은 적도 있다. Log4j는 이러한 시간을 절약해준다. 시간, 오류메시지, 클래스명, 메서드명, 라인수 등 자세한 오류 및 프로세스 흐름을 알려주기 때문이다. Log4j의 구조 Log4j의 구조는 크게 세 가지로 나뉜다. 1. Logger - 로그 파일을 작성하고, Appender에 메시지를 전달하는 기능을 한다. - 로그 레벨을 가지고 있으며, 로그의 출력 여부는 로그문의 레벨과 로거의 레벨을 가지고 결정한다. 2. Appender..

    [JAVA] 날짜와 시간 다루기(java.time)

    [JAVA] 날짜와 시간 다루기(java.time)

    기본적으로 자바에서는 날짜와 시간을 다루기 위해서 java.util.Date와 java.util.Calendar 클래스를 사용했지만, 사용에 불편함이 많아 JDK8 이후부터는 java.time 패키지의 클래스로 많은 부분이 대체되었다. [ 날짜 및 시간 구하기 ] LocalDate, LocalTime, LocalDateTime 가장 기본이 되는 클래스들로 각각 날짜, 시간, 날짜와 시간을 다루는 클래스이다. new 키워드를 통해 직접적인 인스턴스 생성이 불가능하고 static 메서드를 이용하는 방식을 사용한다. now() : 현재 날짜, 시간에 기반하여 인스턴스 생성 of() : 인자로 전달되는 특정 날짜, 시간에 기반한 인스턴스 생성 atTime() : 특정 시간정보에 기반해 LocalDateTime ..