자바(Java) 기반 애플리케이션 개발은 대부분 스프링으로 진행됩니다. 그런데 스프링 프레임워크(Spring Framework)도 있고 스프링 부트(Spring Boot)도 있습니다. 둘은 어떤 차이가 있는지 알아보겠습니다. 스프링 프레임워크 vs 스프링 부트 스프링 프레임워크는 2000년대 초반 개발됐습니다. 스프링 부트보다 더 오래된 근본(?) 스프링이라고 볼 수 있습니다. 의존성 주입(Dependency Injection), 관점 지향 프로그래밍(AOP), 트랜잭션 관리 등 많은 기능을 제공합니다. 스프링 부트는 스프링 프레임워크 위에 구축된 플랫폼입니다. 즉, 스프링 프레임워크를 좀 더 편리하게 쓸 수 있도록해서 애플리케이션 개발 속도를 더 빠르고 효율적으로 만듭니다. 스프링 부트는 애플리케이션 ..
자바(Java)에서 ClassCastException 에러는 특정 클래스의 객체를 호환되지 않는 다른 클래스의 객체로 변환하려고 할 때 발생하는 런타임 에러입니다. cast란 한 타입의 값을 다른 타입으로 변환하는 걸 의미합니다. 큰 데이터 타입을 작은 데이터 타입으로 변환하거나, 부모 클래스의 객체를 자식 클래스 타입으로 변환하는 등의 작업입니다. 그런데 자바는 타입 안전성을 갖는 언어이기 때문에 타입 변환이 불가능한 경우 런타임 환경에서 ClassCastException을 발생시킵니다. 예를 들어, dog라는 클래스의 객체를 cat이라는 클래스의 객체로 변환하려고 하면 예외가 발생하는 식입니다. Integer 타입의 객체를 String 타입의 객체로 캐스팅하는 경우에도 ClassCastExceptio..
국내에서 아직까지 가장 많이 사용되는 백엔드 언어는 자바(JAVA)입니다. 그 말은 자바로 개발된 웹 애플리케이션이 매우 많다는 의미이고, 그만큼 자바 기반의 WAS(Web Application Server)가 많이 사용됩니다. 자바 기반의 WAS를 볼 기회가 많습니다. WAS 역할 우선 WAS가 필요한 이유부터 알아보겠습니다. 자바 웹 애플리케이션을 실행하기 위해 서버에 필요한 기능들이 있습니다. 이런 기능들을 제공하는 게 WAS입니다. 개발자는 WAS를 활용해서 애플리케이션을 개발합니다. 1. Servlet과 JSP 실행 웹 애플리케이션은 주로 Servlet과 JSP(Java Server Pages)를 사용하여 개발되며, 이러한 컴포넌트들을 실행하고 관리할 수 있는 기능이 필요합니다. 2. 세션 관리..
자바 서블릿이란? 자바 서블릿(Servlet)은 웹 서버에서 실행되는 프로그램입니다. 동적 웹 페이지 생성, DB 작업, 사용자 인증 등을 처리합니다. 좀 더 구체적으로 말하면 서블릿은 클라이언트에서 서버로 보낸 요청을 처리하고 그 결과를 클라이언트에 다시 전송하는 자바의 클래스입니다. 일반적으로 웹 브라우저가 클라이언트 역할을 하고 요청과 응답 시에는 HTTP 프로토콜이 사용됩니다. 서블릿 실행은 아래와 같은 단계로 이루어집니다. 1. 클라이언트는 웹 서버에 요청을 보냅니다. 2. 웹 서버는 요청을 받습니다. 3. 웹 서버는 해당 서블릿에 요청을 전달합니다. 4. 서블릿은 요청을 처리하고 출력 형식으로 응답을 생성합니다. 5. 서블릿은 응답을 다시 웹 서버로 보냅니다. 6. 웹 서버는 응답을 다시 클라..
MyBatis는 java 언어 개발에서 주로 사용하는 오픈소스 SQL 매핑 프레임워크입니다. 자바 코드와 SQL 구문을 분리하기 위해 사용합니다. XML 또는 annotation을 통해 SQL 구문을 구성하고 이를 자바 객체와 매핑합니다. mybatis는 JAR(Java Archive) 형태로 제공됩니다. mybatis jar 파일을 프로젝트 라이브러리에 포함시키면 사용할 수 있습니다. Maven이나 Gradle 같은 빌드 도구를 사용하면 의존성을 추가하면 jar 파일이 프로젝트에 포함됩니다. [Maven - pom.xml] org.mybatis mybatis 3.5.7 [Gradle - build.gradle] dependencies { implementation 'org.mybatis:mybatis:..
jar 파일은 자바의 클래스 파일, 메타데이터, 리소스 파일 등을 포함하는 압축 파일입니다. 여러 파일을 묶어 놓은 형태이며 사실상 zip 파일과 다르지 않습니다. 그런데 jar 파일은 별도 압축 해제 과정 없이 그 자체로 자바 애플리케이션이 인식하고 안에 있는 클래스와 리소스를 로드합니다. 예를 들어, 오라클 DB 커넥터인 ojdbc14.jar 파일을 PC에 반디집 같은 압축 툴로 열어보면 압축된 클래스 및 리소스 구조를 확인할 수 있습니다. 압축 파일입니다. 그러나 jar 파일은 WAS의 라이브러리 폴더에 넣으면 압축해제를 하지 않더라도 안에 있는 jdbc 관련 함수를 호출해서 오라클 DB와 연결을 시도할 수 있습니다. 압축 상태로 사용할 수 있는 이유 이처럼 jar 파일이 압축된 상태에서 사용될 수..
Address already in use : bind 에러 메시지는 다른 프로세스에서 이미 사용 중인 포트에 네트워크 소켓을 바인딩하려고 할 때 발생합니다. 예를 들어, 8080 포트에 LISTENING 상태인 프로세스가 있는데 다른 프로세스가 8080 포트를 사용하려고 하는 경우입니다. Address already in use 에러 원인 1. 문제없이 사용하던 프로세스인데 갑자기 해당 오류가 발생하는 경우 의심해 볼 수 있는 건 프로세스가 완전히 종료되지 않은 상태에서 다시 시작한 경우입니다. 서비스를 종료하면 해당 서비스를 사용하고 있던 클라이언트와 연결을 해제하고 소켓을 닫는 과정을 거치는데, 소켓이 제대로 닫히지 않은 상태에서 다시 서비스를 시작하면 Address already in use 에러가..
자바 개발 시 JVM, JDK, JRE라는 용어를 접하게 됩니다. 처음엔 다 비슷한 맥락으로 쓰이는 것 같아 헷갈리기 쉽습니다. 각 개념의 차이를 알아보겠습니다. 결론적으로는 JDK > JRE > JVM 순으로 각각을 포함하고 있습니다. 자바 애플리케이션 개발 1. JDK (Java Development Kit) JDK는 자바 언어를 사용해서 애플리케이션을 개발하기 위한 소프트웨어 개발 키트입니다. 세 가지 중 가장 상위 개념입니다. JDK에는 JRE와 JVM이 포함되어 있습니다. 자바 소스를 컴파일하는데 필요한 컴파일러(javac), 아카이버(jar), 문서 생성기(Javadoc) 등 여러 도구를 포함하고 있습니다. 2. JRE (Java Runtime Environment) JRE는 자바 실행(런타임..
자바 애플리케이션을 구동하다 보면 hs_err_pidXXXX.log 형태의 로그가 남는 경우가 있습니다. hs_err 로그는 JVM이 생성해 주는 에러 로그입니다. 주로 자바 프로그램이 강제 종료되거나 시작되지 못하는 등의 치명적인 오류가 발생했을 때 그 원인을 알려주기 위해 생성됩니다. hs_err 로그 파일에 대해 알아보겠습니다. hs_err 파일이란? hs_err 파일은 HotSpot Error의 약자로 자바 프로그램이 치명적인 오류로 충돌 시 JVM에서 생성하는 로그 파일입니다. 파일명 형태는 hs_err_pidXXXX.log와 같은데 XXXX에는 프로세스의 PID가 들어갑니다. 해당 로그 파일은 애플리케이션이 설치된 경로에 생성됩니다. hs_err 파일에는 스레드 덤프, 메모리 사용량, 로드된 ..
class 파일과 class 파일 및 프로젝트에 필요한 구성 파일 등이 묶여 있는 war 파일의 내용을 확인할 때 유용하게 사용할 수 있는 툴이 있습니다. GUI 형태로 제공되는 디컴파일러인 JD-GUI입니다. jd-gui는 상당히 가벼운 툴이라 간단하게 다운받아서 war로 배포한 class 파일을 확인할 수 있습니다. war 파일이란? war(Web Application Resource 또는 Web Application ARchive) 파일은 jar 파일, jsp 파일, 자바 서블릿, 자바 클래스, xml 파일 등 애플리케이션을 구성하는 파일들을 압축한 파일입니다. 애플리케이션을 배포하거나 테스트할 때 **.war 파일 형태로 간단히 묶어 사용합니다. 보통 "와르"라고 읽습니다. 디컴파일러로 .war,..