728x90

java 98

RestTemplate과 WebClient(feat. 서버 간 데이터 주고 받기)

RestTemplate과 WebClient 스프링 어플리케이션에서 HTTP 요청할 때 사용하는 방법으로 RestTemplate과 WebClient가 있다. 스프링 5.0 이전까지는 클라이언트에서 HTTP 접근을 위해 사용한 것은 RestTemplate 이었다. 스프링 5.0 에서 WebClient가 나왔고 현재는 WebClient를 사용하기를 권고하고 있다. 이번 팀 프로젝트를 진행하면서 RestTemplate을 도입하였었다. 하지만 RestTemplate이 deprecated 될 가능성이 있다는 얘기를 들었고 새로 시작하는 프로젝트에서는 WebClient를 쓰는 것이 좋겠다는 의견이 있어 WebClient를 적용해보게 되었다. 그럼 RestTemplate과 WebClient는 어떤 특징이 있으며 왜 W..

Spring 2022.12.02

테이블에 행 추가하는 이벤트

버튼을 클릭하여 테이블에 행을 추가하는 방법 테이블에 행 추가하기 - insertRow(), insertCell() insertRow(), insertCell() 함수 테이블에 행(Row)를 추가하기 위해서는 insertRow(), insertCell() 함수를 사용합니다. insertRow() var newRow = HTMLTableElement.insertRow(index); table element에 새로운 행을 추가해 줍니다. 파라미터(index) 새로 생성된 행(row)가 테이블에 들어갈 위치 index를 넣어줍니다. 파라미터를 입력하지 않으면 default 값은 '-1'이고, 테이블의 가장 마지막에 새로운 행을 추가합니다. 리턴 새로 추가된 행(row)를 가리키는 reference를 나타냅니다..

Javascript 2022.11.16

ResultSet 인터페이스 사용 시 유의점(특히 필드 순서가 1부터 인점..!)

ResultSet.getXXX() ResultSet 객체가 결과물(필드)을 가져올 수 있는 행으로 이동이 되었다면 해당 행의 실제 결과물(필드)을 가져와야 한다. ResultSet 인터페이스에는 결과물(필드)을 가져오는 수많은 메서드(getXXX())를 제공한다. getXXX() 메서드는 XXX에 Oracle의 자료형 타입에 따라 호출해주면 된다. 예를 들어 id 컬럼이 varchar2 타입이면 getString() 메서드를 사용하고, number 타입이면 getInt() 메서드를 사용하면 된다. getXXX() 메서드는 두개씩 오버로드 되어 정의되어 있는데 하나는 정수를 인자로 받는 것과 String 타입으로 인자를 받는 메서드를 제공하고 있다. 첫번째 정수를 받는 타입은 SELECT 문 다음에 쓰는 ..

JDBC 2022.11.15

영속성 전이(CASCADE)에 관해

영속성 전이 : CASCADE 특정 엔티티를 영속 상태로 만들때 연관된 엔티티도 함께 영속 상태로 만들고 싶을때 사용합니다. eg. 부모 엔티티 저장시 자식 엔티티도 저장하게끔. 언제 쓰느냐? 하나의 부모가 자식들을 관리할 때 ( 단일 엔티티에 종속적인 경우) 라이프사이클이 같을때, 단일 소유자 쓰면 안되는 케이스? 자식의 연관 관계가 2개 이상일때 예를 들어 다음과 같은 경우에는 쓰면 안된다. 그림처럼 C 라는 엔티티가 A, B 에 의해서 관리된다고 하자. 이런 경우에서는 영속성 전이를 사용해서는 안된다. 참고 CASCADE 의 옵션은 ALL, PERSIST, REMOVE, MERGE, REFRESH, DETACH 가 있지만 주로 사용되는건 ALL, PERSIST, REMOVE 정도이고 실무에서 사용되..

JPA 2022.10.06

SpringBoot JPA Multiple Databases 설정

1. 다중 DB 설정 시, 알아야 할 것 다중 DB설정은 Auto Configuration 되지 않기 때문에 설정파일(application.yml or application.properties) 값을 읽어와서 연동 할 DB 수 만큼 Datasource를 수동 설정해야함 주요 설정 내용 리소스 경로 설정 Repository basePackages 경로 설정 Entity 경로 설정 DB 정보 설정(Datasource) driver 이름 URL Id/Password Hibernate 설정 ddl-auto dialect 설정된 다중 DB는 Repository package 명으로 구분 초기 설정이 복잡한 편이나, 천천히 살펴보면 크게 어렵지 않음 2. 소스코드 이 글에서는 1개의 Entity로 2개의 Datab..

JPA 2022.10.02

(Springboot 관련) mongoDB 초기 설정

몽고 DB 초기 설정 몽고 DB가 설치되면 https://start.spring.io/ 로 이동하여 다음 세 가지를 dependencies를 모두 추가하자. Spring Data JPA도 빼먹지 말고 추가하자. 이제 project를 open 하여 다음 코드들을 추가해보자. (공식 문서 참조했습니다.) public class Recipe { @Id public String id; public String name; public String type; public Recipe() {} public Recipe(String name, String type) { this.name = name; this.type = type; } } public interface RecipeRepository extends Mo..

Spring 2022.10.01

(Amazon AWS ELB 관련) 로드 밸런싱이란

인터넷의 발달로 인해 데이터 통신이 활발해졌고, 이는 트래픽의 폭발적인 증가로 이어졌다. 방금 누른 페이스북 ‘좋아요’와 친구에게 카톡으로 전송한 동영상, 좋아하는 유튜버의 채널 시청까지 어느 것 하나 인터넷을 통하지 않은 것이 없을 정도이다. 그 결과 아무리 성능이 뛰어난 서버라고 해도 단 한대의 서버로는 모든 트래픽을 감당해내기 어려워졌다. 이에 기업들은 서버를 추가로 구비하고 여러 대의 서버에 동일한 데이터를 저장해 수많은 트래픽을 효과적으로 분산하여 처리한다. 그런데 단순히 다수의 서버를 구축해 운영한다고 해서 모든 클라이언트의 요청에 일관성 있게 응답할 수 있을까? 쏟아지는 트래픽을 여러 대의 서버로 분산시켜주는 기술이 없다면 한 곳의 서버에 모든 트래픽이 몰리는 상황이 발생할 것이다. 이때 필..

AWS 2022.10.01

map() 과 flatMap() 의 차이

.map() .map()은 단일 스트림의 원소를 매핑시킨 후 매핑시킨 값을 다시 스트림으로 반환하는 중간 연산을 담당한다. 필터가 조건을 충족시키는 새로운 스트림을 생선한다면, Map은 각각의 아이템을 변경하여 새로운 컨텐츠를 생성하는 기능이다. List list = Arrays.asList( new Person(20,"kim"), new Person(21,"moon"), new Person(22,"sub"), new Person(23,"park") ); list.stream().map(Person::getName) .forEach(System.out::println); kim moon sub park .flatMap() flatMap() 은 여러개의 스트림을 한개의 스트림으로 합쳐준다. 복잡한 스트림을..

JAVA 2022.09.22

queryDsl로 like 문 구현

회원 페이지를 개발했는데 검색 기능이 필요하다. Querydsl의 like로 코드를 작성하고 확인해보니 컬럼의 풀텍스트가 일치하는 것만 출력이 된다. 앞뒤로 %를 붙이니 부분 텍스트만 입력해도 일치하는 것으로 리스트가 출력된다. contains는 어떨까 싶어서 확인해보니 %를 넣지 않아도 like에다가 %를 앞뒤로 붙인 것과 같은 결과가 출력된다. 차이를 레퍼런스를 통해서 확인했는데 둘 다 StringExpression 클래스에 속해있고 간단한 설명은 다음과 같다. query = query.where(qUserEntity.email.like(userEmail)); //지정된 str(userEmail)과 같으면 return query = query.where(qUserEntity.email.contains..

QueryDSL 2022.09.19

JWT 초기 설정

프로젝트 생성 자바 버전은 11로 하였고 아래의 Dependencies를 추가해줍니다. Spring Web Spring Security Spring Data JPA H2 Database Lombok Validation 테스트 컨트롤러 생성 해당 프로젝트가 잘 작동하는지 테스트 하는 컨트롤러를 만들어줍니다. @RestController @RequestMapping("/api") public class HelloController { @GetMapping("/hello") public ResponseEntity hello(){ return ResponseEntity.ok("hello"); } } Postman으로 GET요청을 했을때 401인증오류가 뜨는 것을 볼수 있습니다. SecurityConfig를 생성..

JWT 인증 2022.09.16
728x90