MySQL

    TimeZone으로 인한 데이터 조회 실패

    TimeZone으로 인한 데이터 조회 실패

    현재 Voca-World라고 하는 언어 학습 웹 서비스를 운영중이다. 최근에 AWS와 Docker를 이용하여 서버를 배포했는데 저장한 영어 단어가 조회되지 않는 현상이 발생했다. 이 문제를 해결한 과정을 기록하려고 한다. 🔍 문제 해결 과정 문제의 원인을 살펴보기 위해 서버의 로그 파일을 확인해 보았다. 단어 저장시 문제가 생겼을 수 있기 때문에 단어 저장 -> 단어 조회 순서로 로그를 확인해봤다. 저장한 시간보다 9시간 늦은 시간으로 표기되었지만 타임존이 다른걸 생각해보면 문제는 없어보였다. 하지만 로그를 편하게 보기 위해 로그의 시간 기록도 한국 시간으로 바꿔주었다. [logback-variables.properties] LOG_PATTERN=[%-5level] %d{yyyy-MM-dd HH:mm:s..

    [DB] MySQL 아키텍처: MySQL엔진

    [DB] MySQL 아키텍처: MySQL엔진

    🔍 MySQL 아키텍처 MySQL의 아키텍처는 머리 역할을 하는 "MySQL 엔진"과 손 역할을 하는"스토리지 엔진"으로 나눠진다. MySQL 엔진은 요청된 SQL 문장을 분석, 최적화 하는 역할을 하며, 실제 데이터를 조작하는 작업은 스토리지 엔진이 전담한다. 사용자가 서버로 SQL 쿼리를 전달하면 서버는 다음과 같은 과정을 거친다. 대부분의 작업은 MySQL 엔진에 의해 처리되며, 마지막 단계인 데이터의 읽기/쓰기만 스토리지 엔진이 처리된다. SQL 파서 -> 옵티마이저 -> SQL 실행기 -> 데이터 읽기/쓰기 디스크 MySQL의 작동 MySQL엔진과 스토리지 엔진에 대해 공부하기 전에 MySQL 서버가 어떻게 작동하는지 알아보자. MySQL 서버는 스레드 기반으로 작동하며 크게 "포그라운드 스레드..

    MyBatis, MySql, Spring Boot를 이용한 간단 예제

    MyBatis, MySql, Spring Boot를 이용한 간단 예제

    [도입] 자바에서는 데이터베이스를 이용하기 위해 JDBC API를 이용하는데, 개발자가 작성해야 하는 코드가 너무 많아 불편했다. 이런 JDBC를 사용하기 쉽게 SQL Mapper를 이용한 MyBatis의 간단 예제를 살펴보자. [MyBatis 동작 원리] 1. 애플리케이션이 시작되면 SqlSessionFactoryBuilder는 MyBatis 설정 파일을 참고해서 SqlSessionFactory를 생성한다. 2. 애플리케이션에서 Sql 요청이 들어오면 SqlSession을 생성한다. 3. 생성한 SqlSession는 수행하는 쿼리문이 담겨져 있는 mapper를 참고하여 DB작업을 수행한다. [Mapper Interface] MyBatis 3.0이전에는 xml파일에 쿼리 명령문을 작성했어야 했는데, 3...