본문 바로가기

CS

(8)
[Test] 단위 테스트 vs 통합 테스트 vs 인수 테스트 이전부터 진행해온 [모카콩]에서는 단위 테스트와 인수 테스트를 작성하고 최근에 시작한 [Bibbi]에서는 단위 테스트와 통합 테스트를 작성하고 있습니다. 테스트 코드를 작성하면서 이 세 가지 유형의 테스트들이 필요한 이유, 목적을 정확히 파악하는 것이 중요하다 생각하여 해당 글에서 정리하겠습니다. 1. 단위 테스트 단위 테스트는 시스템에서 논리적으로 분리될 수 있는 가장 작은 코드인 단위를 테스트하는 방법이다. 소프트웨어 테스트는 코드 품질을 보장하는 데 도움이 되며 개발의 필수 요소라 할 수 있습니다. 소프트웨어를 작은 기능적 단위로 작성한 다음 코드 단위별 단위 테스트를 작성하는 것이 소프트웨어 개발 모범 사례입니다. 먼저 단위 테스트를 코드로 작성한 다음, 코드를 변경할 때마다 테스트 코드를 자동으..
[JPA] 프록시와 연관관계 관리 해당 포스트는 김영한 님의 [자바 ORM 표준 JPA 프로그래밍] 을 읽고 정리한 글입니다. ⭐️ 1. 프록시 1) 프록시 em.find(): 데이터베이스를 통해서 실제 엔티티 객체 조회 em.getReference(): 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 DB에 쿼리가 안나가는데 객체가 조회됨 hibernate가 가짜 객체를 줌 특징 실제 클래스를 상속 받아서 만들어짐 (형태가 같음) 프록시 객체는 실제 객체의 참조(target)를 보관 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드 호출 2) 프록시 객체의 초기화 Member member = em.getReference(Member.class, “id1”); member.getName(); 프록시 객체는 처음 사용할 ..
[JPA] 연관관계 매핑 해당 포스트는 김영한 님의 [자바 ORM 표준 JPA 프로그래밍] 을 읽고 정리한 글입니다. 1. 단방향 연관관계 @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; private int age; //@Column(name = "TEAM_ID") //private Long teamId; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; ... → 현재 상황에서 Team에서 member 접근은 불가 2. 양방향 매핑 테이블의 연관관계는 바뀌지 않은 채 양방향 객체 연관관계를 만든다. @Entity ..
[JPA] 엔티티 매핑 해당 포스트는 김영한 님의 [자바 ORM 표준 JPA 프로그래밍] 을 읽고 정리한 글입니다. 1. @Entity JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션을 필수로 붙여야 한다. 이 어노테이션이 붙은 클래스는 JPA가 관리하는 것으로, 엔티티라 부른다. ## 주의사항 기본 생성자는 필수다 JPA가 엔티티 객체를 생성할 때 기본 생성자를 사용하기 때문 Final 클래스, enum, interface, inner 클래스에는 사용할 수 없다 저장할 필드에 final을 사용하면 안된다 2. @Table 엔티티와 매핑할 테이블을 지정한다. 생략하면 매핑한 엔티티 이름을 테이블 이름으로 사용한다. 3. 데이터베이스 스키마 자동 생성 JPA는 데이터베이스 스키마를 자동으로 생성하는 기능을 지..
[JPA] 영속성 관리 해당 포스트는 김영한 님의 [자바 ORM 표준 JPA 프로그래밍] 을 읽고 정리한 글입니다. 1. 엔티티 매니저 팩토리와 엔티티 매니저 데이터베이스를 하나만 사용하는 애플리케이션은 일반적으로 persistence.xml에 있는 정보를 바탕으로 EntityManagerFactory를 하나만 생성한다. 엔티티 매니저 팩토리는 엔티티 매니저를 만드는 공장인데 공장을 만드는 비용이 상당이 크다. 하지만 공장에서 엔티티 매니저를 생성하는 비용은 거의 들지 않는다. 엔티티 매니저 팩토리는 여러 스레드가 동시에 접근해도 안전하여 서로 다른 스레드 간에 공유해도 되지만, 엔티티 매니저는 여러 스레드가 동시에 접근하면 동시성 문제가 발생하여 스레드 간에 절대 공유하면 안된다. 하나의 EntityManagerFactory..
[JPA] JPA 소개 해당 포스트는 김영한 님의 [자바 ORM 표준 JPA 프로그래밍] 을 읽고 정리한 글입니다. 1. SQL을 직접 다룰 때 발생하는 문제점 자바로 개발하는 애플리케이션은 대부분 관계형 데이터베이스를 데이터 저장소를 사용한다. 데이터베이스에 데이터를 관리하려면 SQL을 사용해야 한다. 특히 자바로 작성한 애플리케이션은 JDBC API를 사용해서 SQL를 데이터베이스에 전달해야 하므로 서버 개발자들은 능숙하게 SQL을 다룰 줄 알아야 한다. 1) 반복적인 작업 ① 반복, 반복 그리고 반복 데이터베이스는 기본적으로 객체 구조와는 다른 구조이므로 객체를 데이터베이스에 직접 저장하거나 조회할 수 없다. 그렇기에 개발자가 이를 위해서는 직접 SQL과 JDBC API를 사용해서 객체지향 애플리케이션과 데이터베이스 중간..
[HTTP 웹 기본 지식] HTTP 메서드 해당 글은 김영한님의 '모든 개발자를 위한 HTTP 웹 기본 지식' 강의를 수강하고 중요한 내용을 정리하고 보충한 글입니다. 1. HTTP API 만들기 HTTP API를 설계하는 것은 중요하면서도 기초적이고 필수적인 과정이다. 이번 글에서는 회원이라는 개념을 리소스로 간주하여 이를 URI에 매핑하고, 리소스와 행위를 분리하는 방법을 설명한다. 1) API URI 설계 - 리소스 식별 여기서는 회원이라는 개념 자체가 바로 리소스이다. 회원이라는 리소스만 식별 -> 회원 리소스를 URI에 매핑 회원 목록 조회: /members 회원 조회: /members/{id} 회원 등록: /members/{id} 회원 수정: /members/{id} 회원 삭제: /members/{id} 그런데 회원 조회/등록/수정/삭..
[HTTP 웹 기본 지식] Stateful, Stateless 해당 글은 김영한님의 '모든 개발자를 위한 HTTP 웹 기본 지식' 강의를 수강하고 중요한 내용을 정리하고 보충한 글입니다. 0. 개요 컴퓨터 시스템과 네트워크 프로토콜에서 Stateful와 Stateless라는 용어는 서버가 클라이언트와 상호작용하고 세션 정보를 관리하는 방식을 나타낸다. 1. Stateless (무상태 프로토콜) 무상태 프로토콜 혹은 시스템은 클라이언트와의 과거 상호작용에 대한 어떠한 정보도 저장하지 않는다. 즉, 서버가 클라이언트의 상태를 보존하지 않는다. 각각의 요청은 서버에 의해 독립적으로 처리되며 이전 요청과는 아무런 관련이 없다. 1) 특징 장점 서버가 클라이언트의 상태를 보존하지 않기 때문에, 서버의 확장성이 높아짐 무한한 수의 서버를 추가하여 시스템의 성능을 쉽게 향상시킬..