본문 바로가기

IT/JAVA&SpringBoot17

반응형
Java 암호화 핵심 요약: AES, RSA, SHA, BCrypt, JWT 완벽 비교 분석 Java 기반의 백엔드 시스템을 개발하거나 보안 아키텍처를 설계하다 보면 반드시 마주치는 개념이 있습니다. 바로 데이터 암호화입니다.로그인 비밀번호를 데이터베이스에 저장할 때, 외부 API와 중요 데이터를 주고받을 때, 혹은 JWT 기반의 사용자 인증을 구현할 때 우리는 각기 다른 보안 알고리즘을 선택해야 합니다. 하지만 AES, RSA, SHA, BCrypt 등 비슷한 듯 다른 암호화 용어들 때문에 "어떤 상황에서 무엇을 써야 할지" 혼란스러울 때가 많습니다.패스워드를 RSA로 암호화하거나, 대용량 파일을 처리할 때 속도가 느린 비대칭키를 잘못 사용하는 등의 실수는 실무에서 치명적인 성능 저하나 보안 취약점으로 이어질 수 있습니다.이번 포스팅에서는 Java 환경을 기준으로 가장 널리 사용되는 4가지 핵.. 2026. 3. 27.
Spring 서비스에서 DB 커넥션 및 메모리 과다 사용 이슈 해결(feat. 스프링 톰캣 2번 기동 이슈) 프로젝트 진행 시 Spring 서비스에서 DB 커넥션 및 메모리를 과다 사용하는 이슈가 있었고 이를 해결한 방법에 대해 정리해 보았습니다. 1. 이슈 상황Spring 서비스 기동 시(Spring 4. Tomcat 으로 기동) Spring 서비스에서 DB로 연결하는 커넥션 수 및 서버 메모리 사용량이 2배 이상 사용하는 문제가 있었습니다.2. 문제 원인 / 해결 방안문제의 원인은 Spring 애플리케이션이 기동 시 톰캣 인스턴스는 1개인데, 그 안에서 스프링 컨텍스트가 2번 올라가면서 로그가 두 번씩 찍히고 메모리 및 DB 커넥션을 두 배로 먹는 현상이었습니다 (Double Deployment)이 현상은 다음 조건이 겹쳤을 때 발생합니다.server.xml 하단에 처럼 컨텍스트를 수동으로 지정해 두었다... 2026. 3. 13.
Spring 서비스에서 getRemoteAddr()로 IP가 정상 추출되지 않을 때 조치 방법 안녕하세요레거시 프로젝트를 진행하다 보면 Spring 서비스를 Tomcat WAS에 올려서 구동하는 경우가 있는데요이때 애플리케이션에서는 유입된 클라이언트 IP를 추출하기 위해(IP 허용여부 체크 등을 위해) request.getRemoteAddr() 메소드를 주로 사용합니다과거 레거시 애플리케이션이 적용된 아키텍쳐에서는 getRemoteAddr() 메소드가 클라이언트 IP를 정상 채번하지만, 만약 Tomcat 이전에 ALB나 WAF 등이 적용이 될 경우 getRemoteAddr() 메소드를 사용하면 클라이언트 IP가 아닌 Tomcat을 호출한 직전의 IP(ALB 나 WAF 등 Proxy IP)를 추출하게 됩니다.때문에 호출한 직전의 IP가 아닌, 클라이언트 IP를 추출하게 하기 위해서는 다음과 같은 조.. 2026. 3. 13.
Spring Boot 3 PageHelper 완벽 가이드: 페이징 처리의 정석 (MyBatis 필수 설정) 수천만 건의 데이터를 다루는 환경에서 효율적인 페이징(Pagination) 처리는 서버 비용 절감과 사용자 경험(UX) 향상에 직접적인 영향을 미칩니다. Java 기반의 엔터프라이즈 환경, 특히 Spring Boot 3와 MyBatis를 사용하는 프로젝트에서 가장 강력하고 검증된 페이징 솔루션인 PageHelper의 설정부터 실무 적용 방법까지 상세하게 정리했습니다. 1. 개발 환경 및 필수 라이브러리 설정 (Gradle 기준)2025년 현재, Java 생태계의 표준인 JDK 17 이상과 Spring Boot 3.x 버전을 기준으로 설명합니다.과거 Spring Boot 2.x 시절의 설정을 그대로 가져올 경우 javax와 jakarta 패키지 충돌 문제로 인해 심각한 오류가 발생할 수 있습니다.가장 먼.. 2025. 12. 17.
[Java 21] 서버 성능을 10배 높이는 비밀: 블로킹 vs 논블로킹, 그리고 가상 스레드의 혁명 백엔드 개발을 하다 보면 "트래픽이 몰리면 왜 서버가 느려질까?", "AWS 비용을 줄이면서 동시 접속자를 늘릴 수는 없을까?"라는 고민에 빠지게 됩니다. 서버의 성능을 결정짓는 가장 핵심적인 요소는 바로 '데이터 입출력(I/O)을 어떻게 처리하느냐'에 달려 있습니다. 오늘은 자바 애플리케이션의 심장부라 할 수 있는 I/O 모델에 대한 설명과, 최근 Java 21 업데이트로 인해 완전히 뒤바뀐 새로운 트렌드까지 아주 쉽고 친절하게 정리해 드리겠습니다. 1. 전통적인 방식: "한 놈만 팬다" 블로킹 I/O (Thread-per-Request)가장 먼저 우리가 오랫동안 사용해왔던 RestTemplate이나 OpenFeign, 그리고 최신의 RestClient가 기본적으로 사용하는 방식인 블로킹 I/O에 대.. 2025. 12. 15.
[Spring Boot] 백엔드 개발자 필독! HTTP 클라이언트 5대장 완벽 비교 & 실전 코드 예시 모음(Restclient, WebClient, OpenFeign, HttpExchange) 서버 개발을 하다 보면 외부 API를 호출하는 경우가 늘 있습니다. 그런데 Spring 생태계에는 통신을 위한 도구들이 너무나도 많아, 도대체 뭘 써야 할지, 코드는 어떻게 짜야 할지 고민되는 경우가 많습니다. 오늘은 자바 백엔드 개발의 역사와 함께해 온 5가지 핵심 HTTP 클라이언트의 특징을 짚어보도록 하겠습니다. 1. 아키텍처 기반: I/O 모델과 스레딩의 이해우선 HTTP 클라이언트에 대해 설명하기 전에 다음 글을 보고 I/O 모델 & 멀티 스레딩에 대해 이해하시면 글을 읽는데 도움이 될 것 같습니다.2025.12.15 - [IT/SpringBoot] - [Java 21] 서버 성능을 10배 높이는 비밀: 블로킹 vs 논블로킹, 그리고 가상 스레드의 혁명 2. RestTemplate: 구관이 .. 2025. 12. 15.
Java 21(JDK 21) 개발자가 꼭 알아야 할 핵심 변경점 및 마이그레이션 가이드 안녕하세요오늘은 자바 생태계에서 가장 뜨거운 감자이자, 많은 기업들이 도입을 서두르고 있는 JDK 21(Java Development Kit 21)에 대해 아주 깊이 있게 파헤쳐 보려고 합니다.아마 많은 분들이 현재 JDK 8이나 JDK 11, 혹은 가장 최근의 장기 지원 버전(LTS)이었던 JDK 17을 사용하고 계실 텐데요.2023년 9월에 출시된 JDK 21은 단순한 버전업을 넘어, 자바 역사상 가장 혁신적인 기능 중 하나인 가상 스레드(Virtual Threads)가 정식으로 포함된 기념비적인 LTS 버전입니다. 기존 JDK 17 대비 어떤 점이 획기적으로 좋아졌는지, 그리고 실제 코드 레벨에서는 무엇이 달라졌는지 상세하게 분석해 드리겠습니다.https://www.oracle.com/java/te.. 2025. 12. 15.
반응형