IT 공부/자바와 웹 애플리케이션37 [Log4j2] - MyBatis 데이터베이스 관련 팁 (feat. slf4j Binding) [Log4j2] - Log4j2 개념과 작동 원리 및 사용법 총 정리 1. 로깅 시스템과 Log4j2 라이브러리 로그(log)란 소프트웨어 개발 과정, 혹은 프로그램 작동 시 발생하는 이벤트에 대한 기록을 말한다. 블랙박스로 주행 중, 주차 중에서 발생하는 이벤트를 기록 linocraft.tistory.com 이전 포스팅에서 Log4j2 라이브러리는 xml 파일을 이용해 레벨(Level)을 조정하는 방식으로 로그 수준을 조절할 수 있다고 포스팅했다. 그리고 자바의 여러 단독 라이브러리들 중 꽤 많은 라이브러리들이 Log4j2를 내부적으로 사용하고 있고, 이것이 slf4j Binding 기술을 이용해 개발자가 설정한 로깅을 자동으로 따른다. 마이바티스(MyBatis) 또한 내가 설정한 Log4j2를 그대로.. 2024. 1. 20. [마이바티스] - 동적 쿼리 아주 간단한 예시 mybatis – 마이바티스 3 | 동적 SQL 동적 SQL 마이바티스의 가장 강력한 기능 중 하나는 동적 SQL을 처리하는 방법이다. JDBC나 다른 유사한 프레임워크를 사용해본 경험이 있다면 동적으로 SQL 을 구성하는 것이 얼마나 힘든 작업인지 mybatis.org 마이바티스의 장점 중 하나는 동적 쿼리를 작성할 수 있다는 점인데, 동적 쿼리란 조건에 따라 쿼리 자체를 뜯어 고치는 것을 말한다. 단순히 #{} 구문으로 데이터를 집어 넣는 개념과는 다르다. 예를 들어, 위와 같은 쿼리를 작성할 수 있을 것이다. 이 코드는 태그를 이용해 조건절을 동적으로 생성하고 있다. 예를 들어, finished의 값이 true라면 finished=1 조건을 넣고 싶고, false라면 조건을 넣고 싶지 않고 싶을 때.. 2024. 1. 20. [Model Mapper] - Model Mapper 라이브러리 및 DTO, VO가 분리되는 이유 1. 웹 MVC 패턴 MVC 패턴은 웹에서 사용되는 기초적인 디자인 패턴으로, 사용자의 요청에 대해 컨트롤러가 주도적으로 요청을 받고, 그것을 해석해 모델에서 적절한 처리를 요청한뒤, 그 결과를 뷰에 전송하는 패턴을 말한다. 객체지향이 으레 그렇듯이, 이러한 분업의 원리는 각자 자신이 해야할 것을 독립적으로 분리하고 각자의 역할에 전담하기 위해서다. 뷰(view)는 데이터를 받아 적절한 데이터 구조 및 그래픽 모양에 알맞게 배치하는 역할을 담당하고, 컨트롤러(controller)는 사용자의 요청을 해석해 모델과 뷰를 이어주는 역할이다. 모델(model)은 다소 추상적인데, 컨트롤러와 뷰를 제외한 나머지가 모델로 불리는데다 내부적으로 다시 여러 계층의 합으로 구성되기 때문이다. 크게 보면 모델(Model).. 2024. 1. 16. [자바] - 커넥션 풀(HikariCP)과 DataSource 스펙 1. JDBC 프로그래밍의 문제점 JDBC는 JavaSE의 표준 스펙 중 하나로, 데이터베이스 서버와 연결해 SQL 쿼리를 실행할 수 있게 만든 자바 표준 API다. API에 불과하므로 구체적인 데이터베이스와 연결해 사용하기 위해서는 데이터베이스 회사(MySQL, Oracle, MariaDB, ....)에서 만든 JDBC 드라이버가 필요하다. 이 드라이버 라이브러리는 maven repository에서 아주 쉽게 다운받을 수 있다. // 커넥션에 필요한 정보 String url = "jdbc:mariadb://localhost:3306/db"; String user = "user"; String password = "1234"; // JDBC 사용 코드 Class.forName("org.mariadb.jd.. 2024. 1. 11. [JPA] - 자바 진영의 데이터베이스 처리 기술 발전 1. JPA와 Mybatis의 차이 1) JDBC의 문제는 무엇인가 우선 자바 애플리케이션이 내부적으로 데이터베이스와 상호 작용이 필요할 때, 사용할 수 있는 기술은 크게 보면 JDBC, MyBatis, JPA(with QueryDSL) 등이 있다는 점을 기억하자. 그리고 MyBatis와 JPA는 모두 JDBC의 단점을 해소하기 위해 사용되는 기술이라는 점도! 결국 JPA와 MyBatis를 이해하기 위해서는 JDBC의 단점이 무엇인지 아는 것으로 시작해야 한다. 자바 애플리케이션은, 특히 백엔드라면, 애플리케이션 로직에 따라 DB를 활용해야 하는 순간이 반드시 오기 마련이다. 그때 데이터베이스 상호작용의 상세 사항을 숨기고(정보 은닉), 적절한 캡슐화를 통해 자바 애플리케이션 입장에서는 자바 인터페이스에.. 2024. 1. 9. [스프링] - 스프링이 Java Bean이 유효성을 검증하는 방법 ※ 이 포스팅은 스프링 프레임워크가 어떻게 @Valid 같은 어노테이션을 체크하고 실행하는지 그 원리를 공부한 것을 정리한 포스팅입니다. 저에게 어려운 주제라 오류가 있을 수 있습니다. 1. 유효성 검증은 JavaEE 스펙. 스프링 프레임워크는 자동으로 @Valid와 같은 어노테이션을 식별하고, 관련 데이터의 각종 유효성들을 검증해준다. 그리고 그 결과를 BindingResult 객체에 정보를 저장하고 컨트롤러에게 넘겨준다. 이렇게 이야기를 듣고 기술을 쓰면은 마치 유효성 검증이 스프링의 특수한 기능처럼 들린다. 그러나 파고 들더가면 오히려 스프링이 유효성 검증 스펙을 사용하는 입장일 뿐이라는 것이 드러난다. 즉, 유효성 검사와 관련된 API와 기능들은 스프링에 종속된 개념들이 아니다. 우선, 유효성 검.. 2024. 1. 8. [스프링] 한글 깨짐 문제의 원리와 해결 쿼리 스트링이나 POST의 body 파라미터로 한글 데이터를 전달하면 자바 애플리케이션 내부에서 한글이 깨져버린다. [자바] - 한글이 깨지는 문제의 원리 1. 문자열과 인코딩 문자열을 다루기 위해서는 인코딩(encoding)에 예민해야 한다. 컴퓨터는 0과 1로 이루어진 비트를 기반으로 정보를 처리한다. 따라서 컴퓨터로 유용한 일을 하기 위해서는 0과 1 linocraft.tistory.com 한글이 깨지는 원리는 위 링크에 포스팅했다. 다만 이것은 인코딩과 관련된 일반적인 문제의 원리를 다루므로 구체적으로 스프링에서 한글이 깨지는 근거는 아래의 링크에서 찾을 수 있다. [서블릿] - ServletRequest의 Character Encoding을 utf-8로 설정해야 하는 이유 1. 서블릿 Reque.. 2024. 1. 8. [자바] - JDBC 드라이버 표준 타입 매핑 1. java의 데이터 타입과 DB의 데이터 타입 변환 문제 개발을 하면서 데이터를 영구 처리하고 싶을 때는 데이터베이스를 활용한다. 이때 데이터베이스는 종류가 굉장히 많은데, 관계형 데이터베이스만 해도 MySQL, Oracle, Postgre 등이 있다. 데이터베이스를 클라이언트 프로그램으로 서버와 직접 통신해서 사용할 수도 있다. 그러나 자바 애플리케이션 개발을 할 때는 자바 애플리케이션이 데이터베이스 서버와 연결을 시도하고 쿼리를 날려야 한다. 이 사이를 매개하는 기술이 JDBC이며, JDBC는 JavaSE 표준이다. 물론 MyBatis, JPA 같은 기술이 많다. 하지만 그 모든 기술도 내부적으로는 JDBC를 사용한다. 그런데 각 데이터베이스는 각자의 데이터 타입을 구현해 사용한다. 대부분 큰 그.. 2024. 1. 8. [마이바티스] - 마이바티스 스프링 빌드 방법 마이바티스는 단독으로도 라이브러리를 사용할 수 있지만(링크를 클릭하면 방법이 나온다), 친절하게도 스프링 프로젝트에서는 마이바티스를 함께 사용하는 라이브러리를 제공해준다. 이를 이용하면 아주 쉽게 스프링 프로젝트에서 마이바티스를 이용할 수 있다. 실제로 스프링 프로젝트 시 마이바티스를 단독으로 사용하진 않는다고 들었다. 내가 따로 마이바티스 단독 설정을 정리하고 포스팅한 이유는 스프링에서 마이바티스 설정 시, 단독 과정과 비교하면 설정을 이해하기가 수월하기 때문이었다. 그 내용을 간략하게 요약하면, 1) SessionFactory에게 파일로 데이터베이스 드라이버와 Datasource, 그리고 매퍼 xml을 알려준다. 2) SqlSessionFactory가 xml 정보를 토대로 session을 생성하고, .. 2024. 1. 7. 이전 1 2 3 4 5 다음