📙Language/☕Java

[Java] url 변수 동적으로 받도록 개선하기
MVC 프레임워크를 구현하던 중, url 변수를 동적으로 받도록 기능을 개선한 점을 공유하고자 합니다. AS-IS 문제가 된 예제 코드 Rq 클래스의 메서드는 다음과 같습니다. public String getPathParam(String paramName, String defaultValue) { if ( routeInfo == null ) { return defaultValue; } String path = routeInfo.getPath(); String[] pathBits = path.split("/"); int index = -1; for ( int i = 0; i < pathBits.length; i++ ) { String pathBit = pathBits[i]; if ( pathBit.equ..

[트러블 슈팅] url 패턴이 같을 경우에 Controller 메서드 구별하기
제가 구현중인 MVC 프레임 워크 프로젝트는 DI 컨테이너를 맵의 형태로 직접 구현하게 되었습니다. public class ControllerManager { private static Map controllerMap = new HashMap(); static { Reflections reflections = new Reflections(DbConfig.BASE_PACKAGE_PATH); Set

[JDBC] 동적으로 파라미터 바인딩 하기
SQL 매퍼를 구현 중 파라미터 수가 정해지지 않고 동적으로 입력을 받을 때, SQL문에 파라미터를 바인딩하는 경험을 적어보려고 한다. 우선 그전에 바인딩할 인자가 없을 때, 즉 SQL문을 바로 실행시켜도 괜찮을 때는 아래와 같은 함수를 사용했다. 바인딩이 필요 없는 쿼리 실행 public void run(String sql) { try (Connection conn = DriverManager.getConnection(url, username, password); Statement stmt = conn.createStatement()) { if (devMode) { System.out.println(sql); } stmt.executeUpdate(sql); } catch (SQLException e)..

[JDBC] Connection과 PreparedStatement, 그리고 ResultSet
이번에 자바로 ORM 기술을 이용하지 않고 JDBC를 구현하는 미션을 하게 되어 자바 코드에서 DB에 쿼리를 발생시키기까지 모든 단계를 구현해야 했다. 그중 가장 핵심인 Connection과 PreparedStatement를 제대로 알 필요가 있다고 생각해서 정리하게 되었다. Connection 데이터베이스와의 세션을 정의한다. 따라서 MySQL 워크벤치에서 커넥션을 생성할 때처럼, 연결을 위한 정보들이 필요하다. url, username, password이 그것이다. DriverManager.getConnection() 메서드를 사용해서 생성할 수 있으며, 나는 SampleDb라는 클래스에 해당 커넥션 정보들을 필드로 두고, 생성자를 통해 주입받을 수 있도록 했다. @Data public class S..

[Java] 스트림(Stream) 잘 사용하기
스트림이란? 스트림은 컬렉션이나 배열과 같은 데이터를 표준화된 방법으로 다루기 위한 것이다. 데이터를 스트림으로 변환하여 여러번의 중간 연산을 하고, 최종 연산을 통해 다룰 수 있다. 스트림의 동작 순서는 다음과 같다. 스트림 생성 중간 연산(반복 가능) 최종 연산 list.stream() // 스트림으로 만들고 -> 1번 과정 .distinct() // 중복을 제거하고, -> 2번 과정 .limit(2) // 일정 개수로 제한하고, -> 2번 과정 .sorted() // 오름차순 정렬하고, -> 2번 과정 .forEach(System.out::println) //각각의 값을 출력한다. -> 3번 과정 이 때 중간 연산의 경우 반복이 가능하다. 📚특징 스트림은 일회성이다. 재사용이 필요하면 .stream..

[Java] Jackson Databind 이용하기
자바의 객체, 즉 Object를 Json 데이터로 변환할 때 사용할 수 있는 라이브러리 의존성 추가 gradle 기준, build.gradle에 다음과 같은 의존성을 추가합니다. implementation 'com.fasterxml.jackson.core:jackson-databind:2.12.7.1' ObjectMapper import com.fasterxml.jackson.databind.ObjectMapper; public class Main { public static void main(String[] args) throws Exception { // ObjectMapper 객체 생성 ObjectMapper objectMapper = new ObjectMapper(); // JSON 문자열 Str..