[JPA] H2 DDL 초기 테스트 데이터 설정
요구 사항 만약, 아래와 같은 Entity 를 H2 데이터베이스 같은 곳에서 자동으로 DDL 이 이루어진 다음, 그 후에 스크립트 기반으로 데이터를 미리 넣어서 테스트 코드로 데이터를 사용하고 싶다고 해보자 @Builder @Getter @NoArgsConstructor @AllArgsConstructor @Entity @Table(name = "BOOKS") @DynamicInsert @DynamicUpdate public class Books { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "ID", nullable = false) private Long id; @Column(name = "BOOK_CODE", null..
2022.10.01
no image
[Spring] Kafka 이용 시 __TypeId__ 에 대하여
Kafka 를 사용하다보면 __TypeId__ 이라는 Header 를 마주하는 경우가 있다. 이 Header 를 보았다면 아마도 JsonSerializer 를 사용하는 Kafka Producer 에서 생성된 메세지의 Header 를 보았을 가능성이 매우 높다. 이 __TypeId__ 라는 헤더는 메세지를 보낼 때의 데이터 객체 타입 이름을 가지고 있다. 아래처럼 Value 타입이 Object 인 JsonSerializer 를 사용하는 Kafka Producer 에서 send 메서드를 통해 메세지를 보낼 때, 메세지 파라미터의 데이터 타입에 따라 해당 데이터의 타입 이름이 들어가게 된다. @Override public ListenableFuture sendQueue(@NonNull final PostKaf..
2022.08.02
no image
[Spring] @ModelAttribute 파라미터에서 사용 방법 및 원리
@ModelAttribute 는 클라이언트로부터 일반 HTTP 요청 파라미터나 multipart/form-data 형태의 파라미터를 받아 객체로 사용하고 싶을 때 이용된다. 사용 방법 @ModelAttribute 는 parameter, method 레벨로 두 가지의 방식을 지원하고 있다. @Target({ElementType.PARAMETER, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface ModelAttribute { ... } @ModelAttribute 를 이용할 DTO 클래스에서는 아래처럼 생성자를 구현해도 사용할 수 있다. 단, 요청 파라미터와 매개변수 이름이 서로 같아야 한다. pack..
2022.07.30
no image
[Spring] JPA 에서 Oracle DB 사용할 때 DB 함수 사용하기
JPAExpressions 와 SQLExpressions 를 섞어서 사용할 수 없기 때문에 사용자가 수동으로 함수를 등록해주어야 한다. (대소문자는 상관없다) 이는 QueryDSL 에서도 적용이 되는데, 먼저 DB 설정에서 Adapter 를 설정해줄 때 아래와 같이 코드를 입력해주고, EntityManagerFactory 에서 사용하도록 해준다. ... @Bean public JpaVendorAdapter dbJpaVendorAdapter() { HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter(); adapter.setDatabasePlatform("kr.pe.karsei.configs.DbDialect"); // Dialect 연결 ..
2022.04.04
no image
[Spring] JPA 와 Mybatis 동시 사용 시 Connection Deadlock 벗어나기
PHP 에서 Java 로 작업을 진행하면서 기존에 작성했던 Query 문을 사용해야 할 필요가 생었겼다. 근데 한번에 효율적으로 데이터들을 불러오려고 작성된 Query 를 사용하려다보니 우선은 Query 문의 길이가 길었고, DBMS 의 고유 기능을 사용한 것이 많았다. 사내에서 작성된 Query 들을 되돌아보니 DB 테이블들이 상당히 많아 복합적으로 Join 을 하거나 서브쿼리가 많이 존재했고, Oracle 의 START WITH ... CONNECT BY ... 처럼 특수 기능을 사용하고 있거나, LOB 관련 함수 등 그저 JPA 만으로는 분명 해결하기 까다로운 이슈들이 있다고 생각했다. 난이도도 있고 QueryDSL 를 사용한다고 해도 다른 사람들이 유지보수를 할 때 과연 잘 할 수 있을까? 하는 ..
2022.04.04
[PHP] Codeigniter 에서 Helper 를 활용한 asset 폴더 생성
예를 들면 view를 통해서 javascript나 css를 불러오고 싶은데 ci 주소 특성상 일반적인 주소 접근으로는 어렵다. 폴더 계층으로 보면 system/ application/ assets/ css/ images/ 이렇게 위치한 상태의 assets 폴더를 사용하는 방법이다. 1. 우선 application/helpers 폴더 안에 다음과 같은 내용을 적고 utility_helper.php 파일로 저장한다. 2. application/config/autoload.php 파일을 열고 $autoload['helper'] 의 배열에 utility를 추가시킨 후 저장한다. $autoload['helper'] = array('url', 'file', 'utility'); 3. application/confi..
2016.08.30
[PHP] 코드이그나이터(CI) config.php 설정
base_url //$config['base_url'] = ''; $config['base_url'] = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") ? "https" : "http"); $config['base_url'] .= "://" . $_SERVER['HTTP_HOST']; $config['base_url'] .= str_replace(basename($_SERVER['SCRIPT_NAME']), "", $_SERVER['SCRIPT_NAME']); 이 방법은 가끔 어떤 경우에는 통하지 않는 경우가 있으니 주의해서 사용합니다. index_page $config['index_page'] = ''; 주소에서 index.php를 삭제하려면 공백..
2016.08.28
[PHP] 코드이그나이터(CI) 에서 index.php 없애기
코드이그나이터(CodeIgniter)에서 URL 규칙은 다음과 같다. (3.X버전, 2.X버전) http://example.com/[controller-class]/[controller-method]/[arguments] 사실 위의 경우처럼 하려면 중간에 index.php가 들어가야 하는데 보통 주소를 간단하게 하기 위해서 index.php 를 포함시키지 않는다. 이를 위해서는 아래의 두 가지 중 하나를 진행해야 한다. 1. config.php 설정 index_page 항목에서 index.php 값을 공백으로 변경한다. /* |-------------------------------------------------------------------------- | Index File |-----------..
2016.08.28