728x90
반응형

Java 79

MockMvc

MockMvc MockMvc란 실제 객체와 비슷한데 Test를 할때 필요한 기능만 가지는 가짜 객체를 만들어 스프링MVC 동작을 재현할 수 있는 클래스이다. build.gradle testCompile('org.springframework.boot:spring-boot-starter-test') 의존성을 추가해준다. 가장 간단한 GET방식을 알아볼 것인데, Http Method의 post, put, patch, delete 들은 어디서 넣으면 테스트 할 수 있는지 별도의 주석으로 첨부하도록 하겠다. Controller 추가 일단 Controller를 추가해준다. @RestController public class MockTestController{ @GetMapping("/mockTest"..

Java 2022.08.04

Mock, Mockito

Mock Mock이란 테스트 더블 이라고도 하며, 실제 사용되어야 하는 객체의 대역을 의미한다. Mock객체는 대상의 행위를 검증하는데에 있어서 사용하기 때문에 객체가 가지고 있어야하는 기본 정보를 반드시 가지고 있다. 테스트를 해야하는 어떠한 객체를 검증해야 할 경우 그 객체가 가지고 있는 정보들을 미리 갖고 있어야 한다. Mock객체를 직접 생성하는 경우에는 일일이 클래스를 만들기 어려울 것이다. 그러므로 우리는 Mockito라는 라이브러리를 이용한다. Mockito란? 단위 테스트를 위한 Java Mocking Framework이다. 또한 Mockito는 Junit위에서 동작하며 Mocking과 Verification을 도와주는 Framework이다. 의존성 추가 build.gradle에 다음과 같..

Java 2022.08.04

[JPA] 엔티티 매핑

깃허브 바로가기 JPA에서 가장 중요한 것은 엔티티와 테이블 매핑을 정확히 하는 것이다. 매핑 어노테이션을 잘 숙지해야 한다. 객체와 테이블 매핑 : @Entity, @Table 기본 키 매핑 : @Id 필드와 컬럼 매핑 : @Column 연관관계 매핑 : @ManyToOne, @JoinColumn @Entity JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션을 필수로 붙여야 한다. @Entity가 붙은 클래스는 JPA가 관리하는 것으로 엔티티라고 부른다. 속성 기능 기본값 name JPA에서 사용할 엔티티 이름을 정한다. 보통 기본값인 클래스 이름을 사용한다. 만약 다른 패키지에 이름이 같은 엔티티 클래스가 있다면 이름을 지정해서 충돌하지 않도록 해야 한다. 설정하지 않으면 클래스 ..

JPA 2022.08.04

[JPA] 영속성 관리

깃허브 바로가기 이번 발표는 내가 진행하였다. 그래서 이해하기가 더욱 더 쉬웠다. JPA가 제공하는 기능은 크게 엔티티와 테이블을 매핑하는 설계부분과 매핑한 엔티티를 실제 사용하는 두가지 부분으로 나눌 수 있다. 여기서는 매핑한 엔티티를 엔티티 매니저를 통해 사용하는 것을 알아보자. 영속성 관리 엔티티 매니저는 엔티티를 저장, 수정, 삭제, 조회 등등 엔티티와 관련된 모든 일을 처리한다. 말그대로 엔티티를 관리하는 것이다. 엔티티 매니저 팩토리와 엔티티 매니저 DB를 하나만 사용하는 애플리케이션은 일반적으로 EntityManagerFactory를 하나만 생성한다. 팩토리를 만드는 것으로 생성할 때 비용이 아주 많이 든다. EntityManagerFactory emf = Persistence.createE..

JPA 2022.08.04

[JPA] JPA 스터디 2장

2장 요약정리 처음 2장은 바로 설치부터 maven 의존성, 라이브러리 설정을 진행한다. 테이블도 생성하는데 이부분은 생략하도록 하겠다. 어노테이션 정리 @Entity 이 클래스를 테이블과 매핑한다고 JPA에게 알려줌. 이렇게 @Entity가 사용된 클래스를 엔티티 클래스라고 함 @Table 엔티티 클래스에 매핑할 테이블 정보를 알려줌 @Table(name = "테이블명") 으로 매핑가능함 name속성을 생략하면 클래스 이름을 테이블 이름으로 매핑한다 @Id 엔티티 클래스의 필드를 테이블의 기본 키에 매핑한다. @Id가 사용된 필드를 식별자 필드라고 한다. @Column 필드를 칼럼에 매핑한다 매핑 어노테이션이 없는 경우 생략하면 필드명을 사용하여 컬럼명으로 매핑 대소문자를 구분하는 DB를 사용한다면 @..

JPA 2022.08.04

[JPA] JPA 스터디 1장

1주차 학습내용 깃허브 바로가기 1주차 스터디에 대해 간략하게 정리하는 내용이다. JPA란? Java Persistence API 의 줄임말로써, 자바 진영의 표준 ORM 기술이다. JPA는 다른 JDBCTemplate 나 Mybatis 등등 객체와 관계형 데이터베이스의 차이를 메우기 위해 SQL을 작성을 해서 개발을 진행해야했었는데, 반복적인 CRUD 뿐만아니라 객체 모델링과 관계형 데이터베이스의 차이를 해결해주었다. JPA의 핵심은 바로 SQL이 아닌 객체 중심으로 개발을 진행하기 때문에 생산성과 유지보수에서 용이하다. 이렇게 되면 테스트를 작성하기에도 편리하다. SQL을 직접 다룰 때 발생하는 문제점 지금까지 실무에서 Mybatis나 iBatis를 사용하였다. 그래서 소스코드를 보거나 내가 구현해야..

JPA 2022.08.04

[알고리즘] 그리디

그리디 알고리즘 그리디 알고리즘은 단순하지만 강력한 문제 해결 방법이다. 단어 그대로 번역하자면 탐욕법이다. 이 부분에서 탐욕적이라 함은 '현재 상황에서 지금 당장 좋은 것만 고르는 방법'이다. 이 알고리즘은 매 순간 가장 좋아 보이는 것만 선택하고, 그 선택이 나중에 어떤 영향을 미치는지에 대해서는 고려하지 않는다. 거스름돈을 예시로 살펴보자 당신은 음식점의 계산을 도와주는 점원이 되었다고 가정하자. 500원, 100원, 50원, 10원짜리 동전은 무한히 존재한다. 손님에게 거슬러줘야 하는 돈이 N원일 때, 거슬러 줘야 할 동전의 최소 개수를 구해라 (단, 거슬러줘야 할 돈 N은 항상 10의 배수이다.) 이럴때는 단순하게 가장 가격이 큰 동전 부터 돈을 거슬러 주는 것이다. 이렇게 되면 ..

CS 2022.08.04

[Java] Enum

Enum 소스코드를 분석을 하다 보니 너무 많은 if-else 가 엮여져 있는 코드들을 많이 봐서 너무 어지러웠다. 이것을 어떻게 할 수 없을까에 대한 고찰을 가지고 있다가 처음엔 switch조건을 생각해서 메소드로 따로 빼내자고만 생각했다. 근데 Enum을 찾아본 결과 너무 좋아서 포스팅하게 되었다. Enum이란 Enum은 Eumeration로 열거형이라고 불리며, 서로 연관된 상수들의 집합을 의미한다. 자바에서 final static String, int와 같이 문자열이나 숫자들을 나타내는 기본자료형의 값을 Enum으로 대체해서 사용할 수 있다. 인터페이스나 클래스로 상수를 정의하는 것을 보완하여 IDE의 지원을 적극적으로 받고 타입 안정성도 갖출 수 있게 된다. 예를 들면 이런 코드였다. Strin..

Java 2022.08.03

[JPA] JPA Auditing

JPA Auditing이란? 보통 엔티티에는 해당 데이터의 생성시간과 수정시간을 포함한다. 언제 만들어졌고, 언제 수정되었는지 등등 나중에 유지보수에 중요한 정보이기도 하다. 그래서 매번 DB를 insert, update 할 때 날짜 데이터를 등록/수정하는 코드들이 들어간다. 아래의 내용은 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 에서 읽은 내용이다. //생성일 추가 코드 예제 public void savePosts(){ ... posts.setCreateDate(new LocalDate()); postsRepository.save(posts); ... } 이런 단순한 코드가 모든 테이블, 서비스 메소드에 포함 된다고 생각하면 귀찮고 코드가 지저분해진다. 그래서 쓰는것이 JPA Auditing이다..

JPA 2022.08.03

[Java] 디자인 패턴 - Composite 패턴

오랜만에 디자인 패턴 글을 포스팅한다. 한동안 회사의 프로젝트 프로토타입을 만드는 것과 새로운 라이브러리를 사용법을 익히고 하느라 정신없이 하루하루 지나갔던것 같고 그에따라 포스팅이 늦어진 점을 되게 반성하게 된다. 오늘은 디자인 패턴의 구조패턴 중 Composite pattern 에 대해 공부한 내용을 정리한다. 컴포지트란? OOP에서 컴포지트는 하나 이상의 유사한 객체를 구성으로 설계된 객체로 모두 유사한 기능을 나타낸다. 이를 통해 객체 그룹을 조작하는 것처럼, 단일 객체를 조작할 수 있다. 컴포지트 패턴은 무엇인가? 컴포지트 패턴은 클라이언트가 복합 객체(group of object)나 단일 객체를 동일하게 취급하는 것을 목적으로 한다. 여기서 컴포지트의 의도는 트리 구조로 작성하여, 전체-부분(..

디자인패턴 2022.08.03
728x90
반응형