지식 공유 📚

    [Python] 문자열 함수 총 정리

    이번글에서는 파이썬에서 자주 사용하는 문자열 함수들을 정리해보겠습니다. # 대문자와 소문자로 변환하기 함수 설명 사용법 upper() 소문자를 대문자로 변환합니다 string.upper() lower() 대문자를 소문자로 변환합니다 string.lower() swapcase() 대문자는 소문자로, 소문자는 대문자로 변환합니다 string.swapcase() title() 각 단어의 앞글자만 대문자로 변환합니다. 만약 각 단어 중간에 대문자가 있다면 소문자로 변환됩니다. string.title() inputStr = "ByungJun And Jiwon" upperStr = inputStr.upper() print(upperStr)#BYUNGJUN AND JIWON lowerStr = inputStr.low..

    [Python] Set() 세트 함수

    이번 글에서는 활용도가 정말 높은 함수인 set() 함수에 알아보도록 하겠습니다. # set() 함수 set는 키만 모아 놓은 딕션너리의 특수한 형태입니다. 딕셔너리의 키는 중복되면 안되므로 set에 있는 값은 항상 유일합니다. 따라서 리스트에서 중복을 제거할 때 많이 사용 되기도 합니다. myList = [20,30,10,10,10,20] myList = set(myList) print(myList) #{10, 20, 30} 결과를 보면 10과 20의 중복은 모두 제거되었습니다. set 함수는 리스트, 튜플, 딕셔너리 등을 set로 변경시켜줍니다. 참고로 딕션너리와 마찬가지로 별도의 순서로 저장되지 않습니다. 즉, 리스트와 다르게 순서가 없습니다. # set() 활용 심화 myList = [20,30,..

    [Python] 리스트 조작 함수

    이번 글에서는 파이썬의 수많은 함수들중 리스트를 조작할 수 있는 함수들에 대해 알아보겠습니다. # 리스트 조작 함수 함수 설명 사용법 append() 리스트 맨 뒤에 항목을 추가한다. list.append("값") pop() 리스트 맨 뒤에 항목을 제거한다. list.pop() sort() 리스트의 항목을 정렬한다. list.sort() reverse() 리스트 항목의 순서를 역순으로 만든다. list.reverse() index() 지정한 값을 찾아 해당 위치를 반환한다. list.index(위치, "값") remove() 리스트에서 지정한 값을 삭제한다. 단 지정한 값이 여러 개면 첫번째 값만 지운다. list.remove("지울값") extend() 리스트 뒤에 리스트를 추가한다. 리스트의 더하기 ..

    [JS] 현재날짜와 특정날짜 비교하기

    현재날짜와 특정날짜를 비교하는 코드입니다. ex) 예약날짜를 현재날짜보다 전으로 입력할 경우 예외처리가 필요합니다. 날짜 형식이 "YYYY-MM-DD"이면 같은 형식으로 맞추어 준 다음에 비교를 해야합니다. "2020-01-01", "2020-1-1" 이렇게 비교하면 false가 됩니다. 형식은 꼭 맞춰야 합니다. function leadingZeros(n, digits) { var zero = ''; n = n.toString(); if (n.length < digits) { for (i = 0; i < digits - n.length; i++) zero += '0'; } return zero + n; } var rsvDate = "2020-01-01"; var now = new Date(); if(r..

    [JS] 문자열 숫자 변환 parseInt와 Number 차이

    이번 글에서는 자바스크립트에서 문자열을 숫자로 변환할때 사용하는 함수인 parseInt와 Number의 차이를 알아보겠습니다. 두 함수 모두 문자열을 숫자로 파싱해준다는 점에서 기능이 동일하다고 볼 수 있지만, 차이가 있습니다. # 예제 코드 var test = "09"; console.log(parseInt(test, 10)); console.log(Number(test2)); 위와 같이 변수를 선언하고 출력해보았습니다. l parseInt 두번째 인자를 뭔가요? parseInt의 두번째 인자로 10을 넣어줬는데 이를 해주지 않을 경우 08, 09 같이 앞에 0이 있을때 8진수로 인식하여 에러를 초래한다고 합니다. 다시 본론으로 돌아와 위와 같은 결과를 출력한 것을 보실수가 있습니다. 차이가 없어 보이..

    [Oracle] COUNT() 집계함수 사용하기

    오라클에서 집계함수인 COUNT()를 사용하는 방법입니다. SELECT COUNT(CASE WHEN CRSE_TY = '0' THEN 1 END) FROM DUAL # 예시 테이블의 데이터는 위 이미지보다 더 많습니다. SELECT COUNT(CASE WHEN CRSE_TY = '0' THEN 1 END) AS CRSE_TY_ELRN ,COUNT(CASE WHEN CRSE_TY = '1' THEN 1 END) AS CRSE_TY_OFL ,COUNT(CASE WHEN CRSE_TY = '2' THEN 1 END) AS CRSE_TY_BLEND FROM CRSE_MASTR WHERE EDC_TY = '001' CASE WHEN을 사용하여 집계할 컬럼의 조건을 걸어주고 THEN을 사용하여 일치할 때 1을 더해..

    [Oracle] Listener refused the connection with the following error

    # 원인 내용을 보면 란 내용을 볼 수 있습니다. 내용인 즉 오라클에 접속할 때 지정해주는 SID가 있는데 해당 SID를 가진 리스너가 연결되어 있지 않다는 내용입니다. 상황에 따라서 SID자체를 변경해 주어야만 해결이 될 수도 있지만 대부분의 경우 접속이 되다가 어느날 갑자기 접속이 안된다면 리스너가 실행되지 않아서 그렇습니다. 대부분의 연습용 Oracle의 경우 다음과 같이 SID를 XE로 사용하는 경우가 많습니다. # 해결 윈도우키+R 을 눌러 실행창을 열어 줍니다. 열기에 services.msc를 입력해 줍니다. 그러면 다음과 같은 서비스 창이 뜹니다. 밑으로 내리다 보면 해당 라인의 OracleServiceXE 란 이름을 보실 수 있습니다. 더블클릭해 줍니다. 오라클을 설치하게 되면 자동으로 자..

    [Oracle] 조회 순번 매기기 ROW_NUMBER()

    오라클에서 페이징 처리 등을 할때 로우의 순번을 매긴 뒤 정렬을 해줘야 합니다. 이때 ROW_NUMBER() 을 사용하면 쉽게 순번을 매길수 있습니다. # 예제 코드 예제 테이블에서 단순 SELECT 쿼리문했을 때 위와 같은 로우를 보여줍니다. 그리고 저 테이블의 로우를 날짜(REGIST_DT)로 정렬하고 싶습니다. ORDER BY를 사용하여 정렬 할 수 있겠지만 이렇게만 하면 분명 한계가 존재합니다. 페이징 처리를 해야한다고 가정해봅시다. 1, 2, .. 페이지 등이 존재할 것이고, 한 페이지에는 10개의 로우를 보여주고 로우는 날짜를 기준으로 뷰에 뿌려진다고 합시다. 만약 ORDER BY만 사용한다면 1페이지에는 문제 없이 로우값을 뿌릴수 있겠지만, 문제는 2페이지부터 입니다. 2페이지에서 11번째부..

    [CA] 동기(Blocking)와 비동기(Non-Blocking)

    이 글은 제가 이해한 개념을 바탕으로 작성하였기에 틀린 부분이 있을 수 있습니다. 댓글로 틀린 부분에 대해 지적해주시면 감사하겠습니다 :) # 비동기와 동기 처리 비동기식 처리는 요청과 결과가 동시에 일어나지 않습니다. 따라서 노드 사이의 작업 처리 단위도 동시에 맞출 필요가 없습니다. 동기식 처리는 요청과 결과가 동시에 일어납니다. 따라서 노드 사이의 작업 처리 단위를 동시에 맞출 필요가 있습니다. 예제를 들어보겠습니다. ㅣ비동기 손님과 요리사는 서로의 행위(목적)가 다르기 때문에 작업 처리 시간은 일치하지 않아도 됩니다. 손님이 요리를 주문했을때(요청) 바로 서빙(결과)할 필요가 없습니다. 여기서 잠깐 짚고 넘어갈 것이 있는데 만약 손님이 요리가 나올 때까지 아무것도 안하고 단지 기다리기만 한다면 블..

    [JS] 정규식 예제들

    모든 공백 체크 정규식 var regExp = /\s/g; 숫자만 체크 정규식 var regExp = /^[0-9]+$/; 이메일 체크 정규식 var regExp = /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i; 핸드폰번호 정규식 var regExp = /^\d{3}-\d{3,4}-\d{4}$/; 일반 전화번호 정규식 var regExp = /^\d{2,3}-\d{3,4}-\d{4}$/; 아이디나 비밀번호 정규식 var regExp = /^[a-z0-9_]{4,20}$/; 휴대폰번호 체크 정규식 var regExp = /^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4..

    [JS] 제이쿼리 id, class, name 속성 값 가져오기

    input의 value 기준으로 작성하였습니다. $('#testID').val(); // id 선택자가 기준일 땐 #을 붙여줍니다. $('.testClass').val(); // class 선택자가 기준일 땐 .을 붙여줍니다. $('[name=testName]').val(); // id, class 외엔 이런식으로 가져올 수 있습니다. $('[test=testName]').val(); // 만약 test 결과값을 잘 가져온것을 볼 수 있습니다.

    [Js] 자바스크립트 한글, 영어, 숫자 체크하기

    정규식을 사용하여 한글, 영어, 숫자 체크 하는 방법입니다. # 예시 var pattern1 = /[0-9]/; //숫자 var pattern2 = /[a-zA-Z]/; //영어 var pattern3 = /[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]/; //한글 var pattern4 = /[~!@#\#$%^&*]/; //특수문자 var testStr = "테스트test"; //숫자 체크하고 싶을 때 if (pattern1.test(testStr)) { alert("숫자가 포함됩니다."); //false } //영어 체크하고 싶을 때 if(pattern2.test(testStr)){ alert("영어가 포함됩니다."); //true } //한글 체크하고 싶을 때 if(pattern3.test(testStr)){ alert..

    [Spring] ApplicationContext와 WebApplicationContext

    이 글은 제가 이해한 개념을 바탕으로 작성하였기에 틀린 부분이 있을 수 있습니다. 틀린 부분 있다면 지적해주세요 :) 스프링에서 말하는 컨텍스트(context)는 스프링이 관리하는 빈들이 담겨 있는 컨테이너 라고 생각하시면 됩니다. 스프링을 계속 공부중이지만 엄청 헷갈렸던 부분이 WebApplicationContext와 ApplicationContext의 관계, web.xml에서의 servlet-context와 root-context의 관계 그리고 ContextLoaderListenter와 dispatcher-servlet의 관계 총 이 3개의 관계가 볼때마다 헷갈렸습니다. 따라서 이 관계들을 아래와 같이 그림화해보았습니다. # web.xml에서의 Context contextConfigLocation c..

    [Spring] root-context와 servlet-context

    이 글은 제가 이해한 개념을 바탕으로 작성하였기에 틀린 부분이 있을 수 있습니다. 틀린 부분 있다면 지적해주세요 :) 스프링에서 말하는 컨텍스트(context)는 스프링이 관리하는 빈들이 담겨 있는 컨테이너 라고 생각하시면 됩니다. 스프링을 계속 공부중이지만 엄청 헷갈렸던 부분이 WebApplicationContext와 ApplicationContext의 관계, web.xml에서의 servlet-context와 root-context의 관계 그리고 ContextLoaderListenter와 dispatcher-servlet의 관계 총 이 3개의 관계가 볼때마다 헷갈렸습니다. # root-context 와 sevlet-context 흐름 이 글은 WAC와 AC 관련 글이 아니므로 root-context와 ..

    [tomcat] Not allowed to load local resource 에러

    # 원인 프로젝트 외부에 존재하는 파일 업로드의 경우 보안상의 이유로 이미지에 접근하지 못합니다. 즉 웹에서 로컬폴더로 접근이 불가합니다. # 해결 tomcat의 server.xml 에 다음과 같이 추가해주시면 됩니다. docBase="D:/FileUpload/kssfbiz/" 이렇게 설정해주시면 url로 들어갈 때는 localhost:8080/kssfbiz/upload 이런식으로 들어가주시면 됩니다. 물리적 주소 - D:/FileUpload/kssfbiz/ 논리적 주소(실제 접속할 때) - http://localhost:8080/kssfbiz/upload/ (로컬일시) 주의할점은 반드시 reloadable을 true로 해주셔야 합니다. 읽어주셔서 감사합니다. 질문은 언제나 환영합니다. "난 반드시 백엔..

    [Spring] @RestController 란?

    이번 글에서는 @RestController라는 어노테이션에 대해 알아 보겠습니다. @RestController는 컨트롤러에서 브라우저로 데이터를 보낼 때 이를 처리해서 보낼 수 있습니다. 기본형 데이터, VO 객체의 속성 값, Map에 저장된 데이터 등을 보낼 수 있게 해줍니다. 우선 @RestController를 사용하려면 스프링 4.0이상이여야 합니다. 만약 3.x 버전을 이용한다면 pom.xml에서 1.6 4.1.1.RELEASE 1.6.10 1.6.6 4.*.* 버전으로 바꿔주시면 됩니다. 그리고 JOSN 형식으로 전달하기 위한 JSON 관련 라이브러리를 다음과 같이 추가해주시면 됩니다. com.fasterxml.jackson.core jackson-databind 2.5.4 # VO 객체 전달하..

    Current request is not of type [org.springframework.web.multipart.MultipartHttpServletRequest] 에러

    # 원인 java.lang.IllegalStateException: Current request is not of type [org.springframework.web.multipart.MultipartHttpServletRequest]: org.apache.catalina.connector.RequestFacade@6b6f9564 at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter$ServletHandlerMethodInvoker.resolveStandardArgument(AnnotationMethodHandlerAdapter.java:826) at org.springframework.web.bind.annot..

    [Js] ajax 파일 업로드하기

    이번 글에서는 ajax를 이용하여 파일을 서버에 업로드 하는 방법에 대해 알아보겠습니다. ajax를 사용하게 되면 굳이 파일 전송을 위하여 form 태그로 감싸줄 필요가 없습니다. 이 글은 스프링 기준으로 작성되었습니다. # Front 제출하기 ajax의 속성 나머지는 알거라 생각하고 processData만 짚고 넘어가보겠습니다. processData는 일반적으로 서버에 전달되는 데이터는 query string 이라는 형태로 전달됩니다. http://example.com/over/there?title=Main_page&action=raw ? 뒤에 쿼리스트링이 전달됩니다. 주의할 점은 파일 전송이 있을 경우 이를 반드시 false로 해주어야 합니다. # Back @Controller("mainControl..

    [Spring] Dispatcher-Servlet이란?

    Sevlet Container, Servlet에 대해 알아보았고 이번엔 Servlet의 대표격을 맡고 있는 Dispatcher-Servlet에 대해 알아보려고 합니다. # Dispatcher-Servlet의 정의 스프링에서 정의한 개념은 아래와 같습니다. Servlet Container에서 HTTP프로토콜을 통해 들어오는 모든 요청을 프레젠테이션 계층의 제일앞에 둬서 중앙집중식으로 처리해주는 프론트 컨트롤러(Front Controller) 좀 더 쉽게 설명하자면, 클라이언트가 요청을 보내오면 서블릿 컨테이너가 요청을 받게 됩니다. 그리고 이때 제일 앞에서 서버로 들어오는 요청을 처리하는 프론트 컨트롤러가 있는데 이를 Dipatcher Servlet이라고 합니다. # Dispatcher-Servlet의 흐..

    [Spring] 서블릿 컨테이너란?

    이 글은 제가 이해한 내용을 바탕으로 작성되었기 때문에 틀린 부분이 있을 수 있습니다. 있다면 언제든지 지적해주시면 감사하겠습니다 :) 서블릿 컨테이너를 이해하기 앞서 컨테이너가 무엇인지에 대해 알아볼 필요가 있습니다. 흔히 스프링을 사용하면서 서블릿 컨테이너와 스프링 컨테이너 이 두 단어를 많이 들어봤을 겁니다. 그럼 컨테이너란 과연 무엇일까요? # 컨테이너란? 우리가 생각하는 그 컨테이너와 용도가 비슷합니다. 무역을 할 때 상품을 관리하기 위하여 컨테이너마다 다르게 담아 배로 이송하는 것처럼 서블릿 컨테이너도 이와 비슷합니다. 호스트 운영체제에서 구동되며 그 바탕이 되는 하드웨어에 가상으로 액세스하는 게스트 운영체제를 뜻하는 가상머신과 마찬가지로, 컨테이너는 애플리케이션을 관련 라이브러리 및 종속 항..

    [Spring] 스프링에서 환경 변수 사용하기

    스프링에서 DB 정보를 같은 정보를 숨기기 위해 환경변수를 사용하는 방법입니다. 깃헙에 프로젝트를 올릴 때 DB정보가 있는 properties 파일만 gitignore를 사용하여 커밋안되게 할 수 있습니다. properties 파일의 경로입니다. /WEB-INF/config/jdbc.properties PropertyPlaceholderConfigurer 클래스의 속성을 이용하여 properties의 정보를 가져올 수 있습니다. ""안에 쓰실 필요 없습니다. 위와 같이 xml 파일에서 받을수 있습니다.

    [Spring] 스프링 servlet-context로 jsp 경로 설정하기

    스프링에서 빈을 이용한 jsp 경로 설정 방법입니다. bean을 이용하여 viewResolver 클래스의 속성을 위와 같이 설정해주시면 됩니다. ModelAndView mav = new ModelAndView("home"); views로 기준으로 상대경로를 적어주시면 됩니다. 만약 views/list/home.jsp 라면 view의 경로는 /list/home입니다. 뒤에 jsp를 붙이시면 안됩니다.

    [Spring] log4j 이용하여 로그 출력하기

    자바를 하게되면 콘솔에 데이터를 출력하기 위해 System.out.println()을 사용합니다. 하지만 스프링에서는 이를 사용할 필요없이 log4j라는 라이브러리가 로그 관련한 기능들을 관리해줍니다. 이 글은 STS(Spring toos Suite)로 생성한 스프링 프로젝트 기준으로 작성되었습니다. STS를 이용하여 프로젝트를 생성하는 방법은 가장 하단에 관련 글을 포스트합니다. 이 글은 자바웹을 다루는 기술 책을 참고하여 작성하였습니다. log4j란? 스프링으로 개발할때 보면 콘솔에 위와 같은 엄청 많은 로그들이 출력되는데 이 모든게 log4j 덕분입니다. 개발할 당시에 사용했던 로그 메시지들은 실제로 서비스할 때 전혀 필요없게 됩니다. 그럴 경우 일일이 찾아서 해당 로그들을 삭제해주어야 하는데 이는..

    [Js] window.open 함수로 팝업창 열기

    자바스크립트를 이용하여 팝업 창을 여는 방법에 대한 글입니다. l window.open() 함수 window.open() 함수를 이용하여 쉽게 팝업창을 사용할 수 있습니다. window.open("팝업창으로 사용할 파일(경로포함) 또는 uri","지정할 팝업의 이름","크기와 위치"); l 예시 window.open("test.html","팝업 테스트","width=400, height=300, top=10, left=10"); popup.html를 위와 같이 해주었습니다. 팝업창 호출할 팝업창의 html입니다. 세번째 인자를 조정하여 팝업의 크기 또한 조절이 가능합니다. 읽어주셔서 감사합니다. 질문은 언제나 환영합니다. "난 반드시 백엔드 왕이 될거야"

    List cannot be resolved to a type 에러

    l 원인 jsp에 List 관련 클래스가 없어서 에러가 납니다. l 해결 따라서 jsp에서 아래와 같이 import 시켜주면 됩니다.

    Tomcat 8 / 요청 타겟에서 유효하지 않은 문자가 발견되었습니다. tomcat rfc 7230 rfc 3986 오류

    l 원인 http://localhost:8080/adm/main_visual?mode=insert&orderKey=regist_dt&startPage=-1&orderVal=desc&searchKey[]=use_yn 톰캣에서 나는 오류로 다음과 같이 쿼리스트링에 [] 같은 특수문자가 있어서 나는 에러입니다. l 해결 server.xml에서 relaxedQueryChars="[,]" 을 추가해주면 해결 완료!

    [Spring] 메이븐과 STS를 사용하여 스프링 환경 구축

    메이븐은 오픈 소스 빌드 툴입니다. 메이븐을 사용하면 프로젝트 관련 라이브러리와 그 라이브러리에 의존하는 Dependency 자원까지 관리할 수 있습니다. 메이븐은 프로젝트 전반의 리소스 관리와 설정 파일 그리고 이와 관련된 표준 디렉터리 구조를 처음부터 일관된 형태로 구성하여 관리합니다. l 메이븐(Maven) 설치하기 maven.apache.org/download.cgi 로 접속하여 파일을 다운로드 합니다. 압축을 풀고 bin 파일 안에 있는 폴더를 C:\spring 폴더에 넣습니다. l 메이븐 환경 변수 설정하기 디렉터리 경로를 복사합니다. 시스템 속성에서 환경변수를 눌러줍니다. 새로만들기 버튼을 눌러 변수이름을 MAVEN_HOME으로 하고 아까 복사했던 경로를 붙여줍니다. Path를 선택하여 편집..

    [Spring] @Autowired 사용하기

    @Autowired를 이용하면 xml에서 빈을 직접 설정할 필요없이, 스프링 컨테이너가 알아서 원하는 클래스를 주입시켜줍니다. 그럼 바로 예시를 보여드리겠습니다. l 예시 package com.spring.ex02; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import o..

    [Spring] @RequestParam 사용하기

    @RequestParam 애너테이션을 사용하여 값을 얻는 방법입니다. l 예시 다음과 같은 view에서 아이디를 kbj, 이름을 김병준으로 입력하고 전송합니다. package com.spring.ex02; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.spri..

    [Spring] 스프링 어노테이션(Annotaion) 이란?

    스프링의 기능들중 하나인 DI와 AOP를 사용하려면 따로 XML 파일에서 설정을 해야했습니다. 하지만 XML파일에 이러한 설정들을 하기엔 너무나 복잡하고 어려웠습니다. 따라서 스프링에서는 DI 같은 자바 코드와 관련된 설정은 코드에서 직접할 수 있도록 했습니다. 그 기능을 애너테이션(Annotation)이라고 합니다. 현재 스프링에서는 XML파일 직접 설정과 애너테이션 2개를 혼합해서 사용하고 있습니다. l 스프링 애너테이션 제공 클래스 애너테이션을 이용하려면 XML 파일에서 다음 2개의 클래스를 빈으로 설정해주어야 합니다. 클래스 기능 DefaultAnnotationHandlerMapping 클래스 레벨에서 @RequestMapping을 처리합니다. AnnotationMethodHandlerMappin..