java6 구버전 서버와 최신 JDK 서버, TLS 핸드셰이크 문제 해결기 이번에 유지보수를 하고 있는 고객사에서 문의가 들어왔다.10년 전에 우리가 납품했던 솔루션이 아직도 JDK 1.6 + Spring 3 기반으로 잘 돌아가고 있었는데,상대방 시스템을 업그레이드하면서 JDK를 Zulu OpenJDK 17로 올리려다 보니 문제가 생긴 거다.우리 쪽은 현실적으로 업그레이드가 불가능했다.Spring 3는 JDK 11부터 공식적으로 지원하지 않으니, JDK 버전만 올린다고 해결될 게 아니라사실상 재개발 수준으로 일이 커져버린다.그래서 결국 결론은 우리 서버는 현 상태 유지, 상대 서버만 JDK 업그레이드 진행으로 정리했다.근데 여기서 중요한 포인트가 하나 있었다.바로 JDK 버전 차이로 인한 TLS 통신 문제.TLS Handshake 이슈HTTPS 통신은 데이터를 주고받기 전에 먼.. 2025. 8. 19. 도메인 변경 중 SSL 에러 발생 -> 등록 및 갱신하기 며칠 전, 유지보수 중인 프로젝트에서 외부 시스템과의 연동에 문제가 생겼다.별건 아니고, 기존에 쓰던 도메인을 다른 걸로 바꾸면서 발생한 문제였다.URL만 바꿨을 뿐인데 갑자기 서버에서 API 요청이 실패하기 시작했다.에러 로그를 보니 다음과 같은 메시지가 남아 있었다.javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targetSSL 인증서 문제였다.모든 예시는 가칭입니다! 문제 요약도메인을 기존에서 *.new.or.kr 로 변경함 서버에서.. 2025. 7. 30. Spring MVC 에서 React 로 전환 🧩 React 도입 시 백엔드는 어떻게 구성하면 좋을까? (Spring MVC vs React 구조 정리)이번 프로젝트에서는 기존에 사용하던 Spring Framework + JSP 조합에서 프론트엔드를 React로 전환하는 작업을 하게 되었다.React는 프론트와 백이 완전히 분리되는 구조라 처음에는 기존의 MVC 패턴과 어떻게 연결될지에 대해 꽤 혼란이 있었다.특히 "React를 쓰면 기존의 Model-View-Controller는 어떻게 되는 거지?"라는 질문이 생겼다.그래서 React를 도입하면서 기존 Spring MVC 구조와 어떻게 달라지는지를 간단히 정리해봤다.(이 부분은 나중에 또 다른 프로젝트에서 참고할 일이 있을 것 같아서!)✅ 기존 방식: Spring MVC + JSP기존에는 브라우.. 2025. 7. 28. Tomcat, 서블릿 컨테이너, 그리고 서블릿 ✅ 1. Tomcat이란?Apache Tomcat은 Java 기반의 **웹 애플리케이션 서버(Web Application Server)**입니다.Tomcat의 역할:역할설명📦 웹 애플리케이션 실행.war 파일(웹 앱 패키지)을 실행🌐 HTTP 요청 처리클라이언트의 요청(예: 브라우저)을 받아 처리🔁 서블릿 실행서블릿을 실행하고 그 결과를 클라이언트에 반환📜 JSP 처리JSP(Java Server Pages)를 실행하고 HTML로 변환 핵심: Tomcat은 서블릿 컨테이너입니다!✅ 2. 서블릿 컨테이너란?💡 "서블릿 컨테이너 = 서블릿을 실행시키는 환경"서블릿은 자바 코드로 작성된 웹 컴포넌트예요.이 서블릿을 실행하려면 다음이 필요합니다:HTTP 요청을 받고,서블릿 객체를 생성하거나 재사용하고,d.. 2025. 7. 3. [JAVA] ImmutableMap : 변경 불가능한 맵(Map) 프로젝트 중 상사가 리팩토링한 코드 중에서 immutableMap 을 사용한 부분이 있었다. 몇가지 지정된 객체들을 특정 메소드에 파라미터로 보내는 과정에서 해당 맵을 사용했는데 처음 보는 맵의 종류라 정리하게 되었다. ImmutableMap 이란?Map 의 종류이지만 이 맵은 한 번 만들어지면 그 안의 키와 값이 변경될 수 없는 특징이 있다.즉, 이미 지정해둔 키와 값의 쌍을 수정하거나 삭제할 수 없으며, 새로운 키-값 쌍을 추가할 수도 없다. ⭐예제 /**첫번째 방법*/ImmutableMap map = ImmutableMap.of("bean", _bean, "regDt", _bean.getRegDt()); /**두번째 방법*/ ImmutableMap map2 = Immuta.. 2024. 7. 8. [JAVA] instanceof 연산자 : 인스턴스의 타입을 확인 프로젝트에서 코드를 리팩토링 하는 과정에서 같은 연산을 하지만은 상속받는 bean 이 다른 두개의 메소드가 있었다. 물론 다른 패키지 내부의 dao 에서 연산을 하는 것이라 별다른 리팩토링 필요성을 못느꼈는데 같은 연산을 두 패키지 뿐만 아니라 다른 곳에서도 쓰일 가능성을 보고 Util로 옮기며 intanceof 연산자를 사용하게 되었다. intanceof 연산자란? 사용하는 이유 : 개체가 어떤 클래스인지, 어떤 클래스를 상속받았는지, 즉 인스턴스의 실제 타입을 알아보기 위해 사용결과 : boolean (true 또는 false) ⭐문법object instanceOf typeobject 가 내가 확인하고 싶은 객체이고 type이 비교 대상이다. object == type 또는 type을 상속받는 다면 .. 2024. 7. 1. 이전 1 다음