java 24

[JPA] 칼럼명 _(언더바)자동 생성 설정 변경(CamelCase로 사용)

h2로 테스트 잘 하고 rds의 mysql 연결도 잘 되는걸 확인하고 나서 spring이랑 mysql이랑 연결하여 api 테스트를 하는데, 칼럼명이 자동으로 변경되는 것을 확인하였다. 가령 MemberId로 설정하면 member_id가 되거나 하는 형식으로 CamelCase -> underscore로 자동 변환되었다. DB를 내가 생성한게 아니라서 spring단에서 자동 변환을 막아야했고, 방법도 알아보고싶었다. application.yml에 다음과 같은 속성을 추가해주면 된다. jpa: hibernate: naming: implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl physical-strateg..

java/JPA 2022.11.01

[JPA] 단방향 매핑 CASCADE 설정하기

코드스테이츠 프리프로젝트 중, 단방향 매핑으로 설정을 해놨는데 CASCADE를 적용시키고 싶었다. 하지만 일반적으로 CASCADE 설정할 때는 양방향 매핑 후 참조되는 엔티티에서 설정을 해주었는데, 단방향이니 참조되는 엔티티에는 아무런 정보가 없어서 설정이 불가능해서 찾아보았다. 다음과 같은 설정이 있어서 적용시켰더니 정상적으로 동작하는 것을 확인할 수 있었다. @OnDelete(action = OnDeleteAction.CASCADE)

java/JPA 2022.10.29

[Spring] 서버에서 get 요청으로 이미지 전송

프로젝트 내용 중 get 요청을 받아서 aws 서버 안에 저장된 이미지를 전송하는 기능을 구현해야했다. 해당 내용으로 검색을 하니 보통 MultipartFile을 이용하여 전송하는 경우가 많았는데, postman으로 get 요청을 해서 바로 이미지를 확인할 수 있도록 구현하고 싶었기 때문에 다른 방법으로 구현하였다. Service @Transactional public byte[] pathToImages(String path) throws IOException { InputStream imageStream = new FileInputStream(path); byte[] imageByteArray = IOUtils.toByteArray(imageStream); imageStream.close(); retu..

java/spring 2022.10.18

[JPA] ddl-auto 옵션 설정

며칠 전에 로컬에서 테스트하던 프로젝트를 서버로 올렸다. 그 과정에서 수 많은 에러가 있었는데... 아쉽게도 카카오 데이터센터 화재로 티스토리까지 막히면서 포스팅하지 못했고, 결과적으로 어떤 오류들이 있었는지 기억이 나질 않는다ㅠ 아무튼 aws 서버에 올리면서 db 또한 rds 인스턴스와 연결시켰다. 그런데 spring.jpa.hibernate.ddl-auto: create 설정을 건드리지 않고 연결시켜버렸다. 당연히 테이블 내역 다 날아가고... 다행히 팀원분이 스냅샷을 따 놓으셔서 설정 찾아보면서 1시간만에 복구하였다. 스냅샷 말고도 복구 방식이 좀 더 있는것 같았다. 찾아보니까 이런 실수를 하시는 분들이 종종 계셨던 것 같다. 요런 사소한 실수로 데이터 날려먹는 일이 없었으면 좋겠다.

java/JPA 2022.10.18

[spring] mysql 연동시 Caused by: java.sql.SQLSyntaxErrorException: Table 'database.table' doesn't exist 에러 이상한 점

mysql 연동 실습 중 yml 설정을 완료하고 빌드를 했더니 다음과 같은 오류가 발생했다. 빌드가 완전히 종료되지 않는 것을 보니 어찌저찌 실행은 되고있는 느낌이긴 했다. 하지만 오류가 뜨니까 해결하고 싶은 마음에 해당 오류를 검색해봤다. 대부분은 대소문자 구분없이 사용했을 때 발생한 오류라고 한다. 하지만 내 경우에는 데이터베이스명, 테이블명이 모두 소문자이므로 문자 오류도 아니었다. 혹시 몰라서 post, get 요청을 몇번 테스트 해봤다. postman으로 request를 보냈을 때 response가 정상적으로 왔었다. 그래서 mysql에서 존재하지 않는다는 테이블 및 오류가 발생하지 않은 테이블을 각각 하나씩 확인해봤더니, 다음과 같이 정상적으로 연동이 되고 있음을 확인할 수 있었다. 정상적으로..

java/spring 2022.09.16

[Java Spring] POJO, IoC/DI, AOP, PSA

POJO (Plain Old Java Object) 이름 그대로 순수 자바 객체를 의미한다. POJO 프로그래밍에는 다음의 2가지 규칙이 따른다. Java나 Java의 스펙에 정의된 것 이외에는 다른 기술이나 규약에 얽매이지 않아야 한다. (ex. 2개 이상의 클래스로부터 상속 불가능) 특정 환경에 종속적이지 않아야 한다. (ex. tomcat의 api를 직접적으로 가져다 사용) POJO 방식 프로그래밍의 장점은 다음과 같다. 재사용성이 높고 확장이 가능한 유연한 코드 작성 용이 저수준 기술이나 환경 종속적인 코드 제거로 인한 가독성 향상 및 디버깅 효율 상승 객체지향적 설계를 제한 없이 적용 가능 IoC (Inversion of Cotrol) 어플리케이션 흐름의 주도권을 바꾼 것을 의미한다. 일반적인 ..

java/spring 2022.08.09

[Java] ArrayList<String[]> 정렬

멱집합 문제를 풀다가 문자열 배열을 원소로 가지는 어레이리스트를 정렬해야되는 문제가 나왔다. 처음에는 스트림 연산으로 정렬하려 했지만 스트림을 잘 몰라서 비교자 생성으로 해결하였다. Comparator 클래스를 상속한 비교자 클래스 생성 코드 // 문자열 배열 정렬 비교자 클래스 public static class StringArrayComparator implements Comparator { @Override public int compare(String[] o1, String[] o2) { return Arrays.toString(o1).compareTo(Arrays.toString(o2)); } } 비교자 사용 코드 // 사용자 지정 비교자로 ArrayList 정렬 Collections.sort(..

java 2022.07.30

[Java] Stack Class

자바에서 Stack은 Java.util.Vector클래스를 상속받아 이미 구현되어있다. 주요 메소드및 사용법은 다음과 같다. E push(E item) : item을 스택에 집어넣는다. E pop() : 스택 최상단의 값을 꺼내서 리턴한다. E peek() : 스택 최상단의 값을 꺼내지 않고 리턴한다. boolean empty() : 스택이 비어있는지 확인한다. int search(Object o) : o가 있으면 스택의 가장 높은 곳에 있는 o의 인덱스를 반환한다. 없을 경우 -1을 반환한다. 참고 문서 https://docs.oracle.com/javase/7/docs/api/java/util/Stack.html Stack (Java Platform SE 7 ) The Stack class repre..

java 2022.07.25