Java 56

[HTTP Client] 예제; HttpURLConnection, Apache HttpClient, RestTemplate, OpenFeign, WebClient, RestClient

[HTTP Client] 예제 HttpURLConnection, Apache HttpClient, RestTemplate, OpenFeign, WebClient, RestClient Spring Cloud를 활용한 Http Client 예제를 이어서 작성하겠습니다.student-service와 school-service에 공통적으로 적용할 yml 파일을 config-server에 작성합니다.spring: datasource: driver-class-name: org.postgresql.Driver url: jdbc:postgresql://localhost:5432/students username: ride password: password jpa: hibernate: ..

Java 2024.06.14

[HTTP Client] 개요; HttpURLConnection, Apache HttpClient, RestTemplate, OpenFeign, WebClient, RestClient

[HTTP Client] 개요HttpURLConnection, Apache HttpClient, RestTemplate, OpenFeign, WebClient, RestClient0. HTTP ClientHTTP Client는 서버와 HTTP 통신을 담당하는 라이브러리 또는 도구를 의미합니다.이를 통해 웹 애플리케이션에서 데이터를 조회 할 수 있습니다.(MSA에서)다른 서버와 통합 작업을 가능하게 하고,(공공데이터와 같은)외부 API와 데이터를 주고 받을 수 있습니다.0.1 Spring Boot의 HTTP ClientSpring Boot는 다양한 HTTP Client를 사용할 수 있습니다.HttpURLConnection, Apache HttpClient, RestTemplate, Feign, WebCli..

Java 2024.06.14

[TDD] Test Driven Development

TDD란?TDD는 테스트 주도 개발을 의미합니다.개발자가 특정 기능에 대한 테스트를 작성한 다음,그 테스트를 통과하기 위한 최소한의 코드를 작성하고,리팩토링하는 과정으로 진행됩니다.과정 Red -> Green -> Refactor각 과정을 Red, Green, Refactor 라고 합니다.Red특정 기능에 해당하는 테스트를 작성합니다.(구현되지 않았기 때문에 실패합니다)Green테스트를 통과하기 위한 최소한의 코드를 작성합니다.(효율보다 통과를 우선시합니다)Refactor테스트가 통과하는 것을 확인하면서 코드를 리팩토링합니다.데모 프로젝트docker container 프로젝트 TDD용 프로젝트를 생성하겠습니다.ControllerTest 클래스를 생성합니다. @SpringBootTest 를 사용하지 않고 ..

Java 2024.05.23

[Spring AOP] 스프링 관점 지향 프로그래밍(Spring Aspect Oriented Programming)

짧막한 요약애플리케이션을 웹, 비즈니스, 데이터 등 여러 계층으로 나눌 수 있습니다.각 계층이 담당하고 있는 책임이 다르지만, 보안이나 로깅은 모든 계층에서 필요합니다.공통의 관심사를 구현하고,원하는 계층 별로 적용하는 것을 관점 지향 프로그래밍이라고 합니다.Spring AOP는 관점 지향 프로그래밍 프레임 워크 중 하나입니다.관점 지향 프로그래밍(AOP)?애플리케이션은 대부분 웹 계층, 비즈니스 계칭, 데이터 계층 등 계층적 접근을 적용합니다.(애플리케이션에 따라 층이 더 세분화 되거나 추가 되기도 합니다)웹 계층 - 뷰 로직, 컨트롤러, REST API의 JSON 변환비즈니스 계층 - 비즈니스 로직데이터 계층 - MySQL, MariaDB 등의 영속성(Persistence) 로직Cross Cuttin..

Java 2024.05.23

[Microservices] SpringBoot 3, Eureka, MSA 데모 프로젝트

0. MSA란?마이크로 서비스 아키텍처, MSA는 애플리케이션을 구성하는 소프트웨어 개발 접근 방식입니다.MSA는 느슨하게 결합도를 가졌습니다.MSA는 독립적으로 배포 가능한 서비스의 모음으로 구성됩니다.MSA의 각 서비스는 특정 기능을 수행하도록 되어있습니다.정의된 API를 통해 다른 서비스와 통신합니다. 각 서비스별로 개발, 배포할 수 있기 때문에 더 쉽게 업데이트할 수 있습니다.(더 빠른 릴리즈 주기를 가집니다) 현재 게시글에서 구현할 MSA는 아래와 같습니다.1. 애플리케이션의 gateway가 클라이언트의 요청을 받고2. Discovery server에 등록된 서비스를 바탕으로 리디렉션합니다.리디렉션은 HTTP 통신을 기반으로 진행합니다.Config server에서 각 애플리케이션의 구성 관리를 ..

Java 2024.05.01

[JPA(Jakarta Persistence API)] JPQL 문법(경로 표현식, 페치 조인, 다형성 쿼리, 엔티티 직접 사용, Named 쿼리, 벌크연산)

경로 표현식 JPQL에서 경로 표현식을 통해 ( . 점으로) 객체 그래프를 탐색할 수 있습니다. select m.name// 상태 필드로 그래프를 탐색 from Member m join m.team t// 단일 값 연관 필드 (단방향 연관관계) join m.orders o// 컬렉션 값 연관 필드 (orders 가 컬렉션인 경우) where t.name = 'A' 상태필드 상태 필드(state field)는 단순히 값을 저장하기 위한 필드이며, 더 이상 탐색할 수 없습니다. //JPQL select m.name, m.age from Member m //SQL select m.name, m.age from Member m 연관필드 연관 필드(association field)는 연관관계를 위한 필드입니다. ..

Java 2024.03.15

[JPA(Jakarta Persistence API)] JPQL 문법(SELECT, PAGING, JOIN, 서브쿼리, 조건식, 함수)

JPQL, Java Persistence Query Language JPQL은 객체지향 쿼리 언어이기 때문에, 테이블을 대상으로 쿼리하는 것이 아니라 엔티티 객체를 대상으로 쿼리합니다. JPQL은 SQL을 추상화해서 DB에 독립적입니다. select m from Member as m where m.age > 30 엔티티와 속성은 대소문자를 구분합니다(Member, age). JPQL 키워드는 대소문자를 구분하지 않습니다(SELECT, FROM, where). 테이블 이름이 아니라 엔티티 이름을 사용해야합니다. 별칭(as)을 사용해야 합니다(m). (SQL과 동일하게 as는 생략할 수 있습니다) TypeQuery, Query TypeQuery는 반환타입이 명확할 때 사용합니다. TypeQuery query..

Java 2024.03.14

[JPA(Jakarta Persistence API)] 다양한 쿼리 방법과 예시

DB에 요청하기 위해 SQL문을 사용합니다. JPA(Jakarta Persistence API)는 JPQL, JPA Criteria, QueryDSL, 네이티브SQL, JDBC API 등 다양한 쿼리 방법을 지원합니다 JPQL JPA 사용에 있어 토대가 되기 때문에 중요합니다. String jpql = "select m from Member m where m.age > 30"; List result = em.createQuery(jpql, Member.class).getResultList(); 객체 지향 쿼리 언어로, SQL 문법과 유사하며, SQL을 추상화하여 DB에 독립적입니다. SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN을 지원합니다. 가장 단순한 조회 방법입니다...

Java 2024.03.14

[JPA(Jakarta Persistence API)] 값 타입

JPA(Jakarta Persistence API)의 데이터 타입은 크게 두 가지로 분류됩니다. 엔티티 타입과 값 타입, 엔티티 타입은 @Entity로 정의하는 클래스 객체립니다. 식별자가 있기 때문에 데이터가 변해도 식별자를 통해 추적할 수 있습니다. 값타입은 int, Integer, String 등 으로 사용하는 자바 기본 자료형이나 객체(실제 사용되는 값, 내용물)를 말합니다. 식별자가 없고 값만 있으므로 변경 사항을 추적할 수 없습니다. 생명 주기를 주인 엔티티에 의존합니다. 사이드 이펙트을 예방하기 위해 불변 객체로 만드는 것을 권장합니다. 값 타입 값타입은 복잡한 객체를 단순화하기 위해 만든 개념입니다. 값 타입이라고 판단될 때만 사용해야 합니다. 값 타입에는 기본 값 타입, 임베디드 타입(복..

Java 2024.03.13

[JPA(Jakarta Persistence API)] 프록시와 연관관계 관리

프록시(Proxy) em.find() 는 DB를 통해 실제 엔티티 객체를 조회하지만, em.getReference() 는 DB 조회를 미룰 수 있도록 프록시 엔티티 객체를 조회합니다. (getReference 메서드를 호출하는 시점에는 DB 쿼리를 하지 않고 프록시 객체를 반환한 뒤, 사용되는 시점에 쿼리를 합니다) 프록시 객체는 실제 클래스를 상속받아서 생성되기에 실제 엔티티와 동일한 틀을 가졌습니다. 실제 객체의 참조(target)를 보관하고, 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드를 호출합니다. 프록시 객체는 처음 사용할 때 한 번만 초기화되며, 초기화 시 프록시 객체가 실제 엔티티로 변경되는 것이 아닙니다. (프록시 객체를 통해 실제 엔티티에 접근합니다) 프록시 객체는 원본 엔티..

Java 2024.03.13
728x90
반응형