본문 바로가기

All102

[Java] Random 4 종류 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)스레드마다 따로 작동하는 랜덤 인스턴스를 자동으로 사용 - 그러므로 여러 스레드가 동시에 사용해.. 2025. 7. 5.
[Tomcat] Tomcat 실행 흐름 (feat.setenv.bat 파일) 나는 무조건 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.. 2025. 7. 4.
[Spring] redirect 시, URL에 파라미터 붙는 이유 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:/.. 2025. 6. 28.
[Linux] Rich Rules - service name 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 서비스만 .. 2025. 6. 27.
[Docker] Docker Compose -p 옵션 도커 컴포즈로 여러 개의 컨테이너를 띄우다가 충돌이 발생했다. 분명 둘 다 다른 이미지들을 사용하고, 다른 디렉터리 안에서 구성되는데 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-.. 2025. 6. 18.
[Linux] Rich Rules 방화벽에서 매번 포트 설정만 열고 닫았는데, 수석님이 새로 설정하신 것에 rich rules가 있어서 이번 기회에 간단히 학습해 보았다. Rich Rules 란firewalld에서 고급 방화벽 규칙을 설정할 수 있도록 도와주는 방식리눅스에서 방화벽 설정을 할 때, 가장 많이 쓰는 명령어 중 하나가 firewall-cmd다. 보통 아래처럼 단순한 규칙만으로 포트를 열거나 닫을 수 있다.sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent하지만 때로는, 특정 IP에 대해서만 포트를 열거나, 로그를 남기거나, 포트포워딩을 적용하는 등 복잡한 조건을 걸어야 할 경우도 있다. 이럴 때 사용하는 것이 바로 rich rule. 왜 Rich Rule을 사용할.. 2025. 6. 17.
[Docker] dockerd / docker.socket 도커를 사용하면서 dockerd 혹은 docker.socket 이 두 가지 개념이 로그에서 보일 때가 있었는데, 명확하게 이해하지 못해서 이번에 이렇게 정리하며 파악해 보았다. dockerd란? dockerd(Docker Daemon)도커를 실제로 동작시키는 핵심 백그라운드 프로세스쉽게 말하면, 우리가 내리는 Docker 명령어들을 처리해 주는 ‘서버’ 역할을 한다.예를 들어 docker run, docker build 같은 명령어를 CLI에서 입력하면, 이 명령어는 dockerd에게 요청을 보냄.dockerd는 요청을 받아서 실제로 컨테이너를 실행하거나 이미지를 빌드함.즉, 도커의 실질적인 기능은 dockerd가 전담한다고 보면 된다. docker.socket이란?시스템에서 특정 요청이 들어올 때 do.. 2025. 6. 15.
[DEV] XSS 회사에서 XSS 관련 보안취약점이 나와서 서버 코드상에서 방어로직을 짰는데, 다 짜고 나니 막긴 막았는데 구체적으로 어떤 식으로 XSS 공격이 재현되는지 궁금해서 개념과 함께 간단히 찾아보았다. XSS란크로스 사이트 스크립팅사용자 입력값을 제대로 검증하지 않아 악성 스크립트가 실행되도록 허용되는 보안 취약점 XSS 예시사용자가 등록한 글에 를 삽입이 값이 필터링 없이 서버에 저장됨다른 사용자가 그 글을 볼 때, 브라우저에서 스크립트가 실행됨alert("XSS")가 브라우저의 JS 엔진에 의해 실행되었음 (즉, XSS 성공) 왜 문제가 되는가?세션 탈취 가능document.cookie를 탈취하여 로그인 상태를 가로챌 수 있음악성 JS 삽입 가능광고, 트래픽 리디렉션, 피싱 링크 주입 가능다른 사용자에게.. 2025. 6. 12.
[Spring] 이름이 [spring_web]인, 둘 이상의 fragment들이 발견되었습니다. 스프링 프로젝트 실행 시에 에러가 발생하면서 실행에 실패하였다. 에러 내용Caused by: java.lang.IllegalArgumentException: 이름이 [spring_web]인, 둘 이상의 fragment들이 발견되었습니다. 이는 상대적 순서배열에서 불허됩니다. 상세 정보는 서블릿 스펙 8.2.2 2c 장을 참조하십시오. 절대적 순서배열을 사용하는 것을 고려해 보십시오. 에러 파악둘 이상의 fragment들이 발견되었다는 에러이므로 lib 디렉터리에서 확인해 보니, 정말로 이름이 spring_web으로 된 동일한 라이브러리를 발견하였다. ㄴ C:\project\target\test\WEB-INF\lib\spring-web-5.3.21.jarㄴ C:\project\target\test\WEB-.. 2025. 6. 4.