안녕하세요. 오늘은 JPA를 이용하여 @Entity 클래스를 설계하는 도중 공통 속성인 created_at(insert time), updated_at(update time) 컬럼에 대하여 모든 @Entity 클래스에서 공통적으로 소유할 가능성이 보여 따로 공통 엔티티 클래스인 BaseEntity 클래스로 분리하는 방법에 대해 소개하겠습니다. 먼저 기존 코드입니다. @AllArgsConstructor @Getter @ToString @EqualsAndHashCode(of = "user_seq") @Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Lon..
안녕하세요. 최근 사이드 프로젝트를 하면서 JPA를 활용하고 있는데요. JPA가 MyBatis를 추격하며 꽤 많이 채용공고나 라이브러리 검색 비율을 높여가고 있는걸로 알고있습니다. 이에 따라 저도 사이드 프로젝트에서 JPA를 활용해서 프로젝트를 진행중입니다. 그 중 스펙이 Spring Boot 2.2 버전, Spring Data JPA, H2 Database 를 이용하여 개발하고 있습니다. 일단 H2 데이터베이스는 Test 에서만 활용하고자 하였으나 AWS RDS 비용이 얼마나 나오게 될지 두려워서.. 이미 EC2로 임시서버 배포한 후, IOS/React 웹이 붙어서 AWS 요금이 얼마나 과금될지 두려워서 H2를 쓰려고 하였습니다. 그렇게 발생된 문제는! 서버를 내렸다가 배포하게되면 그동안 쌓였던 데이터..
update, insert 쿼리보통 update, insert 를 하는 경우 mapper xml 파일에 다음과 같이 적곤 한다. INSERT INTO TABLE_A (column1, column2, column3) VALUES (#{param1}, #{param2}, #{param3}); UPDATE TABLE_A SET column2 = #{param} WHERE seq = #{seq}; 거의 대부분은 이런식일 것이다. 이렇게 seq가 정해지고 딱딱 들어간다면 얼마나 좋을까..하지만 실무에서는 특정 where 절에 대하여 조건을 가진 행만이 update되고 이는 사전에 어떤 seq를 가지는 row가 update 처리가 될지 미리 예측하기는 같은 조건으로 select를 해보기 전에는 모르는게 일반적이다...
우리는 흔히 insert 작업을 할때 (Oracle 기준입니다.) insert into tbl_board(bno, title, content, writer) values(seq_board.nextval, #{title},#{content},#{writer}) 위와 같이 insert를 할 것이다. bno 컬럼은 sequence 객체의 값이 들어가는 자리로 VO가 있다면 vo에 저장되어 넘어가지 않고 sequence 객체의 nextval 함수를 통해서 실행될 것이다. 그런데 만약, 자동으로 추가된 PK 값을 확인해야 하는 상황이 온다면 어떻게 할까요? - sequence 객체의 currentval 함수를 이용하면 앞으로 들어갈 PK 를 확인할 수 있는데. 임의의 갯수 임의의 번째 실행이라면? 제약사항이 있다..
보통 mybatis xml 파일에 쿼리문을 작성할 때 parameterType 과 resultType을 적어 파라미터의 자료형과 반환 타입의 자료형을 적습니다. select * from tblBoard where boardSeq = #{boardSeq} 이 쿼리문의 parameterType은 Integer이고 resultType은 개발자가 직접정의한 VO 객체입니다. resultType의 VO객체의 주소를 적는 부분에 클래스 주소명이 들어가게 되는데... 저렇게 많이 들어가게 될경우 한눈에 보기 불편하고 매번 저렇게 VO에 있는 패키지 주소를 긁어와서 복붙해주어야 안전하게 될겁니다. 하지만 이런 객체타입을 return 할때 불필요하게 패키지 주소를 적지 않고도 할수 있는 방법이 있습니다.!! 바로 ali..
안녕하세요. 오늘 공유할 내용은 Spring mybatis에서 사용하는 #{} 문법과 ${} 문법의 차이와 ${}문법을 사용했을때 발생할 수 있는 SQL Injection이라는 해킹 방법에 대하여 내용을 공유하고자 합니다. 먼저 Spring이란 웹개발을 할때 기업에서 주로 사용하는 프레임워크로 전자정부 프레임워크로 지정되어 사용되는 우리나라에서 개발하는 사람들은 대부분 거쳤을 만큼 대중적인 프레임워크입니다. 그중에서 JDBC를 사용하여 DB와 연동하는 것으로 MyBatis라는 라이브러리를 사용하게 됩니다. 그중에서 VO나 DTO를 매개변수로 하여금 데이터의 이동을 하게하는데요. 그 기능으로 $와 #문법이 있습니다. 즉, VO에 name이라는 변수가 있고 getter가 getName()이라는 메소드로 되어..