반응형

프로그래밍/Java 23

[Java DB] 2-2. MyBatis - 실제 사용하기 (활용편)

1. Spring-MyBatis  앞선 글에서는 MyBatis를 이해하기 위해 jar파일로 임포트해서 사용하는 기초적인 방법을 사용했지만 실제 프로젝트에서는 대부분 스프링 부트에 얹어서 함께 사용한다. 스프링부트에서는 Mybatis starter를 지원한다. https://start.spring.io 나 IDE에서 스프링부트 프로젝트를 만들 수 있다.  MyBatis가 스프링을 만나면 훨씬 더 강력해진다. 우선 첫번째. DB와 상호작용이 필요할 때 SqlSessionFactory로부터 SqlSession을 만드는 과정을 스프링이 대신해준다. 두번째. SqlSession에서 매핑된 SQL 쿼리를 가져와서 자바 인터페이스로 활용하는 과정도 스프링이 대신해준다. 즉, 자바 인터페이스가 스프링 빈으로 등록되어 ..

[Java DB] 2-1. MyBatis - SQL 쿼리를 재사용하자 (개념편)

1. What is MyBatis  이전 글에서 자바와 DB가 상호작용할 수 있는 밑거름인 JDBC에 대해 알아보았다. JDBC는 DB와 가장 단순하게 연결하는 원시적인 방법이기 때문에 속도적인 측면에서 유리하나 (1) DB 접근이 필요한 코드마다 비슷한 SQL문을 반복해서 적어야 한다는 큰 단점이 존재한다. 또한 (2) SQL문이 자바 코드 안에 포함되기 때문에 유지 보수적인 측면에서도 불리하다. 쉽게 말해 휴먼 에러가 발생할 가능성이 높다. 추가적으로 (3) JDBC에서 SELECT문의 결과는 ResultSet으로 리턴되며 우리가 원하는 객체로 사용하기 위해서는 한번 더 처리가 필요하다는 불편함도 있다.    MyBatis는 이러한 단점들을 커버할 수 있는 강력한 SQL Mapper 라이브러리다. M..

[Java DB] 1. JDBC - Java와 DB 상호작용의 기초

0. 들어가기 전에.. - 웹 어플리케이션 요청 응답 프로세스  자바를 베이스로 한 웹 어플리케이션을 포함한 모든 언어의 웹 어플리케이션의 대략적인 구조는 다음과 같다. 먼저 유저가 웹사이트에 접근해 정보를 요청하면 웹 서버에 탑재된 WAS(Web Application Server)는 응답을 주는데, 이 때 해당 요청이 DB 데이터를 필요로 하거나 데이터를 저장해야 한다면 DB에 접근한다.  자바에 한정해 좀 더 구체화해보자. 예를 들어 Web Application은 Spring, WAS은 Tomcat, DB는 MySQL을 사용한다고 가정해보자.   (1) Tomcat이 열려있는 웹서버 포트에 유저의 요청이 도착하면 (2) Tomcat은 HttpServletRequest와 HttpServletRespon..

[Java] JDK 부수기 - (2) java.lang.System - 5. currentTimeMillis, nanoTime

5. currentTimeMillis, nanoTime 각각 OS로부터 밀리초, 나노초 단위로 시간을 받아온다. JVM 뜯어보기 System.currentTimeMillis(), System.nanoTime()은 System클래스에서 시간을 다루는 두 메서드지만 전자는 주로 현재 시간을 나타내거나 시간 차이를 비교할 때 사용하지만, 후자는 시간 차이를 정밀하게 비교할 때 사용한다. 두 메서드의 작동 방식에 차이가 있기 때문인데 JVM을 뜯어보면서 함께 비교해보자. System 클래스에서 두 메서드는 다음과 같이 코딩되어 있다. // src/java.base/java/lang/System.java public final class System { @IntrinsicCandidate public static..

[Java] JDK 부수기 - (2) java.lang.System - 4. getProperties

4. getProperties JVM의 시스템 속성을 리턴한다. JVM 뜯어보기 System.getProperties() 메서드는 JVM과 자바 애플리케이션 환경에 대한 설정을 담고 있는 Properties 객체를 리턴한다. 이 Properties 객체는 JVM이 시작될 때 설정되며 'java -DpropertyKey=value' 형식의 명령줄 인수를 이용해 시스템 속성을 설정해 줄 수도 있다. 이 글을 진행하면서 알게 되겠지만 System.setProperty("propertyKey", "value") 메서드를 사용해 시스템 속성을 새롭게 설정할 수도 있다. 시스템 속성에는 대표적으로 자바의 버전이나 CPU 정보, OS정보, OS의 File 구분자(Windows의 \, Linux의 /), OS의 행 구..

[Java] JDK 부수기 - (2) java.lang.System - 3. console

3. console 현재 실행 중인 JVM에 연관된 문자형 콘솔이 존재하는 경우 이를 리턴한다 JVM 뜯어보기 System.console() 메서드는 JVM이 콘솔 환경에서 실행될 때 해당 콘솔 객체를 리턴하고 없다면 null을 리턴한다. // src/java.base/java/lang/System.java public final class System { private static volatile Console cons; public static Console console() { Console c; if ((c = cons) == null) { synchronized (System.class) { if ((c = cons) == null) { cons = c = SharedSecrets.getJava..

[Java] JDK 부수기 - (2) java.lang.System - 2. arraycopy

2. arraycopy 배열의 일부를 다른 배열에 복사한다. JVM 뜯어보기 System.arraycopy() 메서드는 System의 스트림들 다음으로 많이 쓸 수 있는 메서드다. arraycopy() 메서드는 배열 객체의 일부를 다른 배열에 빠르게 복사할 수 있다. 배열을 복사하는 방법은 여러 가지가 있다. 예를 들어 for문을 이용해 배열의 요소를 반복적으로 추가해준다거나 Arrays.stream().toArray(), Arrays.copyOf(), clone()과 같은 메소드를 활용할 수도 있다. arraycopy() 메서드를 이용하면 위의 방법들과 동일한 결과를 얻을 수 있으며, 네이티브 메서드를 활용하므로 큰 배열을 복사할 경우에 비교적 더 빠른 결과를 얻을 수 있다. arraycopy()를 공..

반응형