목록전체 글 (103)
ㅇ.ㅇ

Oracle DB로 기동 된 서버의 웹소켓을 호출하는 부분에서 알 수 없는 로그와 함께 에러가 발생하였다. 에러 내용org.springframework.dao.DataAccessResourceFailureException: PreparedStatementCallback; SQL [INSERT INTO SPRING_SESSION_ATTRIBUTES (SESSION_PRIMARY_ID, ATTRIBUTE_NAME, ATTRIBUTE_BYTES) VALUES (?, ?, ?)]; IO 오류: Socket read interrupted; nested exception is java.sql.SQLRecoverableException: IO 오류: Socket read interrupted 에러 파악사용자가 기능을..
현재 작업하고 있는 내용이 있는데, 다른 브랜치를 수정해야할 때면 매번 stash를 하곤 했다. 그렇지만 그걸 반복하다보면 헷갈리기도 하고, 중간에 내용이 누락될 수도 있어 불안전하다고 느껴졌다. 그러다가 이번에 git worktree라는 기능을 알게되어 정리해보았다. 1. git worktree란git worktree는 하나의 Git 저장소에서 여러 작업 디렉토리를 사용할 수 있게 해주는 기능기존에는 다른 브랜치로 작업하고 싶을 때마다 git checkout으로 이동해야 했지만, worktree를 이용하면 여러 브랜치를 서로 다른 폴더에 동시에 checkout해 둘 수 있다.즉, clone처럼 보이지만 원격 저장소 없이, 하나의 Git 히스토리를 공유하며 여러 작업 폴더를 운영할 수 있다. 2. 기본..

최근 URL에서 // 와 같은 이중 슬래시를 사용한 것과 관련하여 핸들링 요청이 들어왔었다. 이중 슬래시 막는 방법을 찾아봤는데 다음과 같이 여러 방식이 있었다.400 에러로 직접 응답하는 방식슬래시를 하나로 치환(replace)하는 방식Spring Security 설정으로 제어하는 방식 등등..그러던 중, HttpFirewall이라는 Spring Security 속성을 알게 되었고, 그 내용을 정리해보게 되었다. HttpFirewall이란? Spring Security가 제공하는 URL 검사기FilterChain에 들어가기 전에 요청을 점검해 위험한 요청을 선제적으로 차단대표적으로 차단되는 경우이중 슬래시 / 디렉토리 이동 / 잘못된 인코딩이러한 요청들은 디렉토리 우회 공격이나 URL 인코딩 우회 등..

Random 종류1. java.util.RandomJDK 1.0부터 제공된 가장 기본적인 난수 생성기특정한 규칙에 따라 가짜 난수 생성 - 완전한 진짜 랜덤은 아니고, 시드가 같으면 항상 같은 숫자 나옴여러 스레드가 동시에 Random 객체를 사용할 경우, 내부에서 사용하는 값인 AtomicLong을 건드리면서 충돌 발생. 그로 인해 속도가 느려질 수 있고, 예상치 못한 문제가 생길 수 있다Random rnd = new Random();int r = rnd.nextInt(100); // 0~99 2. java.util.concurrent.ThreadLocalRandomJDK 7부터 도입 (thread-safe)스레드마다 따로 작동하는 랜덤 인스턴스를 자동으로 사용 - 그러므로 여러 스레드가 동시에 사용해..

나는 무조건 CATALINA_HOME, JAVA_HOME 등의 환경변수를 catalina.bat 안에 작성해야 한다고 생각했다. 그런데 톰캣 내부 구조를 보다 보니, 생각보다 몰랐던 내용들이 많이 있었다.이번 글에서는 Tomcat의 startup.bat부터 catalina.bat, 그리고 setenv.bat까지의 톰캣 실행 흐름을 정리해 보겠다. 우선, 흐름부터. Tomcat 실행 흐름./startup.bat을 입력하면 아래처럼 진행된다.startup.bat 실행내부에서 catalina.bat start 호출catalina.bat는 다양한 환경 설정을 로드함.setenv.bat (존재하는 경우)catalina.base / catalina.home 환경 변수 설정java 명령어를 이용해 org.apach..

redirect를 하였을 시, 서버에서 사용한 키가 url에 예시처럼 붙는 경우가 있었다. 그래서 원인을 파악하고 다른 방식을 찾아보게 되었다. http://localhost:8080/test/home?publicKey=ABCDEFG 원인 해당 부분에서는 redirect 시 데이터 전달 방식이 Model에 addAttribute()로 전달하는 것이었다. 이렇게 되면 Request scope에 저장되는데, jsp에 데이터를 넘기려면 이렇게 해야 한다고 생각해서 아래처럼 작성하게 되었다.// 예시@PostMapping("/submit")public String submit(Model model) { model.addAttribute("name", "dbswl"); return "redirect:/..

rich rule 등록 시에, 아래처럼 service name =”…” 와 같은 조건을 줄 수 있다. ssh를 예시로 어떤 차이가 있는지 비교해 보자.# 조건 Osudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="IP주소" service name="ssh" accept'# 조건 Xsudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="IP주소" accept' service name = "ssh" 조건 비교service name=”ssh” 있음해당 ip에서 SSH 서비스만 ..

도커 컴포즈로 여러 개의 컨테이너를 띄우다가 충돌이 발생했다. 분명 둘 다 다른 이미지들을 사용하고, 다른 디렉터리 안에서 구성되는데 A를 켜면 B가 꺼지고, B를 켜면 A가 종료되었다.이유를 찾아보며 그 원인을 정리해 보았다. docker-compose 프로젝트기본적으로 docker-compose는 프로젝트 단위로 동작한다.여기서 말하는 프로젝트는 컨테이너, 네트워크, 볼륨 이름을 묶어 관리하는 단위 기본 동작 방식 docker-compose는 디폴트로 현재 디렉토리명을 프로젝트 이름으로 사용한다. cd /home/labs/jenkins/workspace/TEST/docker-compose/docker-compose up -d네트워크 : docker-compose_default볼륨 : docker-..