목록Today I Learned (20)
ㅇ.ㅇ
의문화면에서 404 에러가 노출되고, Failed to delete generated class(java) file 에러가 계속 발생하였다. 찾아보니 tomcat의 work에 카탈리나에 지워지지 않은 파일들이 쌓여서 생긴 것이기 때문에, 정말 work를 날리기만 해도 문제는 해결되었다. 그런데 여기서 work 파일이 뭐 하는 애인지 확실히 뭔지 몰라서 정리해보려고 한다. work 디렉토리란,tomcat - work 디렉토리 work 디렉토리 : jsp 페이지와 서블릿 클래스와 같은 동적 콘텐츠 + 세션파일을 저장하는 임시 디렉토리html코드와 java코드로 이루어진 jsp파일이 서버에 도착하면 컴파일이 되고, java servlet으로 변환되어 그 servlet 클래스는 톰캣 work 디렉토리에 저장된다..
의문하나의 톰캣에 두개 이상의 서비스를 구축하기 위해서는 여러 방법이 있지만 그 중에서도 가장 간편한 것은 port를 다르게 하는 것과 context-path를 다르게 하는 것이다. 톰캣의 server.xml 파일에서 설정하면 되는데, 나는 지금껏 port를 같게 하면 context 또한 무조건 설정을 따로 해줘야 한다고 생각했다. 그런데! 따로 context-path 지정을 안해줘도 정상적으로 작동한다는 것을 발견했다..! 답잘 동작하는걸 떠나서 context 지정을 따로 안 해줬는데 그럼 어떤 걸 path로 삼고 나뉘어지는가에 대해 찾아보니 appBase라는 결론에 도달했다. appBase에 지정된 폴더로 찾아가서 리소스를 찾는 것이다. 그리고 그 리소스 명으로 context가 나뉘어지고 있었다. ..
상황회사 솔루션 맨 처음 설치 할 때 session에서 데이터를 가져오는 로직을 타는데 항상 설치 페이지가 나와야하는데 에러페이지가 떴다. 뭔가 봤더니 session이 null 이라서 nullpoint가 뜨고 있었다.. 어떻게 보면 정말 단순한 에러였는데 나는 왜 false로 해두었던걸까? 그런김에 다시 정리해보자..해결getSession(), getSession(true), getSession(false)getSession(), getSession(true) : HttpSession이 존재하면 현재 HttpSession을 반환하고 존재하지 않으면 새로운 세션을 생성getSession(false) : HttpSession이 존재하면 현재 HttpSession을 반환하고 존재하지 않으면 새로운 세션을 생성..
최근에 회사에서 사용자가 등록한 특정 ip가 아니면 로그인 허용을 안하게 하는 로직을 구현한 적 있었는데, ip 등록 기능 때 유저가 제대로 입력했는지 validation 할 때 사용했던 정규식이다. 나는 원래 다른 패턴을 사용하고 있었는데 수석님께서 더 깔끔한 방법으로 알려주셔서 수정된 사항이다. 그런데 정규식.. 원래 구글링하는거 아닌가요? 진짜 빠르게 코드 적어나가시는 게 놀라웠다.. 1. 일반적인 IPv4 정규식- (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.) : 세 번 반복하고 그 다음에 '.'을 빼고 한번 더 private static final String IPV4_REGEX_PATTERN = "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-..
의문회사에서 코드를 짜던 중 component, controller, service, mapper등이 아니라서 마음대로 @autowired, @resource 등을 해서 가져다가 쓸 수 없었다. 그래서 bean 등록이 안되는 부분에 mapper, service등을 가져와 사용하고 싶을 때는 어떻게 해야할까? 답TestMapper mapper = (TestMapper) ApplicationContextProvider.getApplicationContext().getBean("testMapper");List List = mapper.test();WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(request.getS..
의문select 1 from dual 쿼리는 언제 왜 사용하는걸까?답커넥션 유지!1나 오면 잘되고있는거고, 1이 안나오면 오류겠지..? 스프링에서 db연결했을 때 주기적으로 select 1 from dual같은 아무 쿼리라도 날려줘야 커넥션을 유지하기때문에 보통 사용한다. 안 할 경우에는 스프링과 db연결이 끊길 수 있으므로.
상황회사에서 쿼리를 짜고 있는데 중복적인 데이터들을 처리하기 위하여 distinct를 사용하려고 하였다. 그렇지만 오라클의 CLOB 유형은 distinct와 같이 사용할 수 없다고 에러를 뱉어내었다. 해결그럴때는 clob 데이터들을 TO_CHAR()로 감싼다.SELECT DISTINCT TO_CHAR(CLOB_FIELD) from table;
상황회사코드에서 로컬 디렉토리에서 파일들의 이름을 하나씩 가져와서 새로 선언한 hashMap에 넣는 로직이 있었는데, 분명 디렉토리에서는 제대로 된 정렬로 가져오는데 put 할때는 뒤죽박죽으로 저장이 되었다.원인hashmap은 정렬이 안된다. 넣은 순서대로 저장되지않고 뒤죽박죽이다.해결정렬을 지키고 싶으면 linkedHashMap을 사용하면 된다.linkedHashMap이란?Map 인터페이스를 구현한 클래스 중 하나로, put을 통해 입력한 순서를 기억하는 자료구조이다. (LinkedHshMap에 저장되는 키와 값은 Map.Entry 클래스를 구현한 Node 클래스에 저장된다. Node 클래스에는 before, after 멤버가 있는데, LiknkedhashMap에 입력된 순서에 따라 연결리스트 구조를 ..
처음에 intellij에서 자바 프로젝트 파일 열 때클래스들의 상위 폴더가 패키지로 안 되어있고 디렉토리로 되어있는 상황!게다가 new -> 새로운 패키지를 생성하려고 해도 패키지 자체가 목록에 없었다.정말 엥 스럽다... 그럴때는 해당 폴더가 sources root 로 설정되어있지 않아서 그렇다고 한다.우클릭 - Mark Directory as - Sources Root 로 하면 모두 패키지로 변신!src 폴더도 파랗게 변한다. 그럼 끝! 잘못된 부분이 있으면 댓글 남겨주세요 :)
com.oracle.database.jdbc - ojdbc8 를 확인하려고 하는데어떤게 stable한 버전인지 특별한 표시가 없었다. 그럴때는 공식 홈페이지에 들어가서 확인하면 된다.나는 오라클 공식 홈페이지에 들어가 검색을 해보았다.https://www.oracle.com/kr/database/technologies/appdev/jdbc-downloads.html long term release 버전이 따로 있었음.사실 어찌보면 너무 당연하고 기초적인 것..