no image
Web Socket
Web Socket 웹 기술에서 실시간 양방향 통신을 가능케 하는 프로토콜 중 하나입니다. 초기에 웹에서 주로 폴링이나 롱 폴링 같은 방식을 통해 실시간 통신을 시도했으나 이러한 방식들은 효율성이나 성능 면에서 한계가 있습니다. 웹 소켓은 이러한 한계를 극복하기 위해 설계되었습니다. 기존의 HTTP 프로토콜은 클라이언트가 서버에게 요청을 보내고, 서버가 응답을 보내는 단방향 통신이었습니다. 반면에 웹 소켓은 클라이언트와 서버 간에 양방향 통신이 가능하도록 하면, 이를 위해 TCP 접속을 유지하게 됩니다. 또한 웹소켓은 실시간 채팅 어플리케이션, 소셜 네트워크 서비스, 협업 도구, 멀티플레이 게임, 화상 회의 등 다양한 분야에서 사용되고 있습니다. 웹 소켓 동작 방식 1. 포트 및 프로토콜 선택 웹 소켓은..
2024.01.22
no image
지연로딩, 즉시로딩
즉시로딩 엔티티와 그와 연관된 엔티티들을 쿼리 할 때 한 번에 모두 가져오는 방식을 의미합니다. 한 개의 엔티티를 쿼리 할 때 이 엔티티와 연관된 다른 엔티티들도 즉시 로딩으로 설정되어 있다면, 해당 엔티티와 관계된 모든 데이터가 한 번에 가져옵니다. 이는 필요하지 않은 데이터까지 불러올 수 있어 성능에 영향을 줄 수 있습니다. 즉시 로딩 @ManyToOne, @OneToOne 과 같은 어노테이션에 fetch = FetchType.EAGER를 설정하여 구현할 수 있습니다. @Entity public class ParentEntity { @OneToMany(fetch = FetchType.EAGER) private List children; } 프록시와 즉시로딩 주의 지연로딩을 사용하는 것이 좋다. 데이터..
2023.12.26
no image
Proxy
Proxy 왜 사용하나???????? 사용 주요 목적은 데이터베이스 조회를 최적화하고 성능을 향상시킵니다 엔티티 간의 연관 관계가 있을 때, 항상 모든 연관된 엔티티를 함께 조회하는 것은 필요하지 않을 수 있습니다. 이로 인해 불필요한 데이터베이스 조회가 발생할 수 있습니다. 이러한 상황에서 실제로 해당 연관된 엔티티가 필요한 시점에 데이터베이스 조회를 지연시키기 위해 프록시를 사용할 수 있습니다. 프록시는 실제 엔티티 객체를 대신하여 엔티티에 접근할 수 있는 가짜 객체입니다. 이 가짜 객체는 실제 데이터를 가지고 있지 않고, 대신 실제 데이터가 필요한 시점에 데이터베이스에서 데이터를 로딩합니다. 이를 통해 불 필요한 데이터 로딩을 피하고, 필요한 시점에서만 데이터를 가져와 사용할 수 있습니다. 따라서 ..
2023.12.22
no image
@OneToOne/ @ManyToMany
OneToOne 양쪽이 서로 하나의 관계만 가진다. 예를 들어 사용자와 해당 사용자의 프로필 이미지를 저장하는 두 엔티티가 있다고 예를 들어보면 이 경우 OneToOne 관계를 사용하여 각 사용자는 하나의 프로필 이미지를 가지고 있고, 각 프로필 이미지는 특정 사용자와 연결됩니다. 주의사항 - OneToOne 기본형이 EAGER이기 때문에 LAZY 사용해야 함! @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; @OneToOne(mappedBy = "user", cascade = CascadeType.ALL) private Prof..
2023.12.21
no image
@ManyToOne / @OneToMany
ManyToOne 객체 간의 관계에서 하나의 쪽이 다수의 객체를 참조할 수 있는 관계입니다. 이런 관계에서 연관관계의 주인은 항상 Many(다) 쪽입니다. 주의 사항 - ManyToOne은 기본형이 EAGER 로 되어 있기 때문에 LAZY 사용!! 데이터 베이스 테이블의 1:N관계 외래키는 항상 다 쪽에 테이블에 존재하며, 객체 간의 매핑 시에도 이 원칙을 따릅니다. 객체 양방향 관계에서 연관관계의 주인 다대일 관계에서 연관관계의 주인(외래키)은 다 쪽에서 위치하게 됩니다. 객체 간의 다대일 관계에서 연관관계를 설정할 때, 이런 원칙을 고려하여 주인을 설정하고 관계를 매핑해야 합니다. OneToMany 다대일 관계의 반대 방향으로, 여러 객체가 하나의 객체를 참조(자바 컬렉션인 Collection, Li..
2023.12.20
no image
JUnit5 Basic
JUnit5 java언어 테스트 프레임워크이며 Junit Platform + Junit Jupiter + Junit Vintage 이 3개가 합쳐진 것입니다. Junit Platform 테스팅 프레임워크를 구동하기 위한 런처와 테스트 엔진을 위한 API를 제공합니다. Junit Jupiter JUnit 5를 위한 테스트 API와 실행 엔진을 제공합니다. Junit Vintage JUnit 3와 4로 작성된 테스트를 JUnit 5 플랫폼에서 실행하기 위한 모듈을 제공합니다. @Test 테스트로 사용할 때는 @Test를 메서드에 붙여주기만 하면 됩니다. 하지만 Test를 붙인 메서드는 private이면 안됩니다. public class Sum{ @Test void plus() { int sum = Calcu..
2023.12.18
no image
엔티티 매핑
@Entity JPA를 사용해 테이블과 매핑할 때는 @Entity 어노테이션을 필수로 붙여주어야 하며 @Entity 어노테이션을 클래스 위에 붙여 해당 클래스가 데이터베이스의 테이블과 매핑된 것을 명시합니다. @Entity가 붙게 되면 JPA가 관리하게 됩니다. @Entity public class User { @Id private Long id; private String username; private String email; } @Entity 주의사항 기본 생성자는 필수입니다. final 클래스, enum, interface, inner클래스는 사용 불가능 합니다. 저장 필드에 final을 사용하면 안 됩니다. @Table 엔티티 클래스가 매핑되는 데이터베이스의 테이블을 지정할 때 사용됩니다. 이 ..
2023.12.13
no image
MyBatis
MyBatis 자바 언어용으로 개발된 오픈소스 ORM프레임 워크입니다. 데이터 베이스와 객체 지향 프로그래밍 언어 간의 관계를 매핑해 주는 역할을 합니다. MyBatis는 SQL 쿼리와 객체를 매핑하기 위한 XML이나 애노테이션 기반의 설정을 통해서 동작합니다. 특징 SQL 객체 매핑 XML 또는 어노테이션 기반 매핑으로 SQL 쿼리를 XML 파일 또는 어노테이션을 통해 정의하고, 이를 자바 객체와 매핑하여 데이터 베이스 조작이 가능하게 합니다. ORM 지원으로 데이터 베이스 레코드와 자바 객체 간의 매핑을 쉽게 수행할 수 있습니다. 유연성 간결성 SQL과 자바 코드 분리로 인해 XML 또는 어노테이션을 통해 SQL을 작성하고, 자바 코드와 분리하여 유지 보수 및 관리를 용이하게 합니다. 동적 SQL 지..
2023.12.12
no image
Validation
Spring Validation 스프링 프레임워크에서 지원하는 기능으로 주로 입력 데이터나 외부 데이터의 유효성을 검증하는 데 사용됩니다. 이를 통해 잘못된 데이터가 시스템으로 들어가는 것을 방지하고 안전성을 높일 수 있습니다. 의존성 주입 @Validation javax.validation.constraints 패키지에 있는 어노테이션들을 필드에 적용하여 해당 필드의 제약조건을 정의합니다. @NotNull, @Size, @Email등을 사용하여 필드에 대한 유효성을 정의할 수 있습니다. Validation Interface Validator 인터페이스는 실제로 객체를 유효성 검사하는 데 사용됩니다. 스프링에서는 이 인터페이스를 구현하여 커스텀한 유효성 검사 로직을 작성할 수 있습니다. 스프링 MVC에서..
2023.12.06