전체 글 69

JPA 란? (2) - Spring Data JPA

JPA를 쉽게 사용할 수 있게 만들어 놓은 하나의 모듈이다.  JpaRepository ▼Spring 서버가 뜰 때 JpaRepository 인터페이스를 상속받은 인터페이스가 자동으로 스캔해당 인터페이스의 정보를 토대로 자동으로 SimpleJpaRepository 클래스를 생성하고 Bean으로 등록                                               ↑                                              JpaRepositoryImplementation      ↑SimpleJpaRepository  JpaRepository 을 상속받은 인터페이스 ▼/* Spring Data JPA에 의해 자동으로 Bean 등록 Enti..

JPA 란? (1)

애플리케이션에서 데이터를 DB에 저장해서 관리하기 위해 직접 Table을 만들고 SQL을 작성한 뒤, JDBC를 사용해서 직접 실행해서 SQL의 결과를 객체로 직접 만들어야 했었다. 이러한 경우 SQL에 의존적이라 변경에 취약하다는 단점이 있다.이러한 단점을 보안하기 위해 ORM을 사용할 수 있다.  ORM (Object Relation Mapping) ▼반복적이고 번거로운 SQL 작업을 줄여주기 위해 사용자바의 클래스와 DB의 데이터를 직접 매핑할 수 있다JPA는 자바 ORM의 표준 명세이다Hibernate ▼ 자바 언어를 위한 ORM 프레임워크이고 JPA의 구현체JPA 인터페이스를 구현하고 내부적으로 JDBC API를 사용한다.  JPA는 애플리케이션과 JDBC 사이에서 동작한다.DB 연결과정을 직접..

Spring Cloud 란? (2) - 클라이언트 사이드 로드 밸런싱

로드 밸런싱은네트워크 트래픽을 여러 서버로 분산시켜 서버의 부하를 줄이고, 시스템의 성능과 가용성을 높이는 기술.서버 간 트래픽을 고르게 분배하여 특정 서버에 부하가 집중되는 것을 방지하는 것. 클라이언트 사이드 로드 밸런싱 :클라이언트가 직접 여러 서버 중 하나를 선택하여 요청을 보내는 방식클라이언트는 서버의 목록을 가지고 있으며, 이를 바탕으로 로드 밸런싱을 수행한다. FeignClient : Spring Cloud에서 제공하는 HTTP 클라이언트로, 선언적으로 REST ful 웹 서비스를 호출할 수 있다.Eureka와 같은 서비스 디스커버리와 연동하여 동적으로 서비스 인스턴스를 조회하고 로드 밸런싱을 수행함.인터페이스와 어노테이션을 사용하여 REST API를 호출할 수 있는 선언적 HTTP 클라이언..

Spring Cloud 란? (1)

마이크로서비스 개발을 위해 다양한 도구와 서비스를 제공하는 스프링 프레임워크의 확장이며, 마이크로서비스 아키텍처를 쉽게 구현하고 운영할 수 있도록 도와준다. 주요 기능 ▼서비스 등록 및 디스커버리 : Eureka, Consul, Zookeeper로드 밸런싱 : Ribbon, Spring Cloud LoadBalancer서킷 브레이커 : Hystrix, Resilience4jAPI 게이트웨이 : Zuul, Spring Cloud Gateway구성 관리 : Spring Cloud Config분산 추적 : Spring Cloud Sleuth, Zipkin메시징 : Spring Cloud Stream Spring Cloud 주요 모듈Eureka :넷플릭스가 개발한 서비스 디스커버리 서버로, 마이크로서비스 아키텍..

MSA 란?

Microservice Architecture의 약자로 하나의 애플리케이션을 여러 개의 독립적인 서비스로 분리하여 개발, 배포, 유지보수를 용이하게 하는 소프트웨어 아키텍처 스타일이다. 서비스 간의 통신은 주로 HTTP/HTTPS, 메시지 큐 등을 통해 이루어 진다. 모놀리틱 아키텍처와 비교를 해보자 모놀리틱 아키텍처는 모든 기능이 하나의 애플리케이션 내에 포함되어 하나의 큰 코드베이스로 구성된 애플리케이션이다.작업하는 하나의 프로젝트에 회원, 주문 등등 작업하는 것이다.장점 : 모든 코드가 하나의 코드베이스에 포함되어 있어서 배포가 간단하다, 하나의 DB를 사용하여 데이터 일관성을 쉽게 유지할 수 있다.단점 : 특정 기능을 확장하려면 전체 애플리케이션을 확장해야함, 작은 변경 사항도 전체 애플리케이션을..

Entity란 무엇일까? (3) - Entity의 상태

JPA가 관리하는 상태 => 영속 상태 (MANAGED) ex) User user = new User() : 비영속 상태 준영속 상태 (Detached) : 영속성 상태에서 관리되다가 분리된 상태   영속 상태 -> 준영속 상태contains() : Entity 객체가 현재 영속성 콘텍스트에 저장되어 관리되는 상태인지 확인하는 메서드detach() : 특정 Entity를 영속성 콘텍스트 상태에서 분리시켜서 준영속성 상태로 만드는 메서드, 영속성 콘텍스트로 관리되고 있는 영속 상태일 때만 변경 감지가 일어난다.clear() : 컨텍스트를 완전 초기화 시킨 뒤, 영속성 콘텍스트에 있는 모든 Entity를 준영속 상태로 만든다. 하지만 영속성 콘텍스트의 틀은 유지해서 내용만 바뀐다. => 비우고 다시 사용cl..

Entity란 무엇일까? (2) - 영속성 콘텍스트의 기능

이전 내용과 더불어 영속성 콘텍스트의 기능에 대해 알아보자. 1차 캐시영속성 콘텍스트는 내부적으로 캐시 저장소를 가지고 있다.우리가 저장하는 Entity 객체들이 1차 캐시 (캐시 저장소)에 저장된다고 생각하면 된다.캐시 저장소는 Map 자료구조 형태로 되어있고, key에는 @Id로 매핑한 기본 키 value에는 해당 Entity 클래스의 객체를 저장한다. key에 저장한 식별자 값을 사용하여 Entity 객체를 구분하고 관리한다.만약 캐시 저장소에 조회하는 id가 존재하지 않는다면 저장 후에 조회를 한다.삭제할 Entity를 조회한 후, 캐시 저장소에 없다면 DB에 조회해서 저장한 뒤 Entity를 DELETED 상태로 만든 후 트랜잭션 commit 후 삭제된다.User user = new User()..

SyntaxError: ':has(*,:jqfake)' is 오류발생

개발자 모드를 실행시킨 상태로 웹 페이지를 동작하던 도중에 오류가 발생했다. 처음 만난 오류였고, 오류 메시지를 해결하기 위해 구글링과 gpt를 활용해봤지만...다 실패했다. jquery 문법 오류라는 점 말고는 해결방안이 없다고 생각하며 포기하려던 찰나에 튜터님께서 제시 해주신 해결방안으로 오류를 멈출 수 있었다. 방법은 생각보다 간단했는데, chrome에서 디버거가 실행되고 있는 상태였다. 해결 방법 ▼개발자 모드를 실행시킨 상태에서 새로고침을 시도하면 소스로 계속 이동하게 된다.이때 감시 글씨 위에 있는 실행모양의 버튼(현재는 일시정지 모양)을 클릭하고, 브라우저 화면에 나타나는 실행버튼을 클릭한다.이때 문제를 발견하고 해결하면 성공.해결되지 않는다면 포착되지 않은 예외에서 일시중지, 포착된 예외에..

Entity란 무엇일까? (1)

Entity란 데이터베이스에서 테이블과 1:1로 매칭되는 객체를 의미한다. Spring Boot의 JPA 기술을 사용할 때 사용되며, JpaRepository를 상속받은 클래스에서 ORM을 사용할 수 있다.@Entitypublic class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false, unique = true) private String username; @Column(nullable = false) private String password; @Entity : 해당하는 클래스가 JPA가 관리할 수 있는 Entity 클래스로..