목록분류 전체보기 (19)
탐구개발

@Transactional 방식 코드에서 아래와 같이 수정해줍니다. @Transactional(readOnly=true) 대신 사용할 수 있는 @TransactionalSlave 어노테이션을 추가했습니다. TransactionalSlave @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface TransactionalSlave { } RoutingDatabaseAspect.java @Aspect @Component public class RoutingDatabaseAspect { @Before("@annotation(TransactionalSlave)") public void setCurrentDataSourceN..

TransactionManager 설정 필요여부 master, slave 분기를 위한 데이터베이스 설정 시 DataSource 뿐 아니라 JpaTransactionManager도 함께 설정하는 예제가 많았습니다. @EnableTransactionManagement @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class}) @EnableJpaRepositories(basePackages = {"com.test.somoimapi"}) (생략) @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory(@Qualifier("dataSource") DataSource da..

Docker MySQL 1대 추가 - 3307포트 docker run --name mysql-container-slave -e MYSQL_ALLOW_EMPTY_PASSWORD=true -d -p 3307:3306 mysql:8.0.22 MySQL 데이터베이스 서버간의 Replication 설정은 따로 하지 않았고 데이터베이스 서버 2대를 띄워놓기만 했습니다. Application.java 수정 spring: datasource: master: driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: "jdbc:mysql://localhost:3306/somoim_db?autoReconnect=true&useUnicode=true&characterEncoding=UT..

Docker MySQL 실행방법과 MySQL 데이터베이스, 사용자, 테이블 생성은 이전 글을 참고부탁드립니다. Application.yml spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: "jdbc:mysql://localhost:3306/somoim_db?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC&tinyInt1isBit=false" username: somoim_user password: (password) hikari: auto-commit: false c..

토이프로젝트 버전관리를 위해 GitHub 연동까지는 필요 없지만 로컬 Git Repository 생성이 필요했습니다. 추후 소스코드 공유가 필요하면 GitHub으로 연동한다고 해도 혼자 노트북 하나 가지고 하는 프로젝트에 굳이 GitHub 연동을 하고 싶진 않았습니다. (GitHub은 Git의 기능을 확장한 레파지토리 호스팅 서비스로, fork, pull request는 원래 Git에는 없는 기능으로 GitHub에만 있는 기능이라고 알고 있습니다.) 그래서 로컬 Git Repository를 생성하면서 잠깐 헤맸던 내용을 기록에 남기고자 합니다. 잘못된 디렉터리로 로컬 Git Repository 생성 우선 저는 VCS로 Git은 지정했지만 GitHub 연동, Repository 생성 모두 안 한 상태였습니..

AWS에 배포할 JAR 파일을 생성해 보겠습니다. JAR 생성하기 Gradle의 bootJar task를 실행하면 build > libs 하위에 JAR 파일이 생성됩니다. (build task에도 bootJar 과정이 포함되어 있지만 JAR 파일만 생성하고 싶을 때 보다 빠르게 실행됩니다.) 궁금한 점 1 : .jar와 -plain.jar의 차이점 .jar는 모든 의존성을 포함하여, java -jar로 바로 실행이 가능합니다. plain.jar는 모든 의존성을 포함하지 않고, 클래스 파일과 리소스 파일만 포함하기 때문에 java -jar로 실행 시 에러가 발생합니다. 아래 사진은 실행한 화면입니다. plain.jar를 생성하지 않으려면 build.gradle에 다음 코드를 추가해 주면 됩니다. jar {..

본격적으로 개발하기 전에 간단한 테스트 코드부터 작성해 보겠습니다. H2는 메모리 기반의 관계형 데이터베이스로 경량이면서도 빠른 속도가 특징입니다. JPA, JDBC, ODBC를 지원하여 다양한 환경과 통합이 가능하기 때문에 주로 테스트 목적으로 활용합니다. JPA는 자바 진영의 ORM 스펙으로 JPA 구현체로는 Hibernate가 있습니다. ORM은 객체 지향 프로그래밍 언어와 관계형 데이터베이스 간의 데이터를 변환, 매핑하고 관리하는 기술입니다. Entity 클래스를 통해 DDL를 자동생성할 수 있으며, Repository 클래스를 통해 단순하고 반복적인 CRUD 쿼리 작성을 생략할 수 있습니다. 1. build.gradle에 H2, JPA 의존성 추가 dependencies { ... implem..

IntelliJ에서 새 Spring Boot 프로젝트는 생성하고 간단하게 실행해 보겠습니다. 새 Spring Boot 프로젝트 생성 Spring Boot 실행 1. 새 Spring Boot 프로젝트 생성 새 프로젝트(New Project) 버튼을 클릭합니다. 아래 이미지는 최근 열어본 프로젝트가 없는 경우 뜨는 화면입니다. (최근 프로젝트가 최근 프로젝트(Recent Project)가 있는 경우에는 오른쪽 상단에 버튼으로 노출되고, 이미 열려있는 프로젝트가 있으면 상단 메뉴 File > New를 클릭합니다) 왼쪽 패널에서 Spring Initializr를 클릭합니다. 프로젝트 이름(Name), 위치(Location)를 원하는 이름과 위치로 지정합니다. 저는 소모임 관련 API 서버를 만들 계획이라 아래와..

MySQL 설치가 완료된 후 다음과 같은 순서로 새로운 데이터베이스를 구축하겠습니다 새 데이터베이스 생성 사용자 생성 및 권한부여 테이블 생성 1. 새 데이터베이스 생성 Docker 컨테이너에서 MySQL 콘솔에 접속합니다. mysql -u root 새로운 데이터베이스를 생성합니다. CREATE DATABASE {DB이름} default CHARACTER SET UTF8; 생성된 데이터베이스를 확인합니다. show databases; 실제 실행화면입니다. root@963aee83dd50:/# mysql -u root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 9 Server version: 8.0..

1. Docker 설치 Docker 사이트에서 Docker를 설치합니다. 터미널에서 다음과 같이 설치 확인합니다. $ docker -v Docker version 24.0.2, build cb74dfc 2. Docker 이미지 다운로드 버전을 지정하지 않으면 최신버전을 다운로드합니다. $ docker pull mysql 특정 버전을 지정해서 다운로드합니다. $ docker pull mysql:8.0.22 Mac M1일 경우 다음과 같은 에러가 뜰 수도 있습니다. no matching manifest for linux/arm64/v8 in the manifest list entries 이럴 경우 --platform linux/amd64을 주면 됩니다. $ docker pull --platform lin..