본문 바로가기

전체 글348

[Spring Boot] 테스트 코드 작성하기 이 글은 이동욱 님의 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 책을 읽으며 정리한 글입니다. TDD란, 테스트가 주도하는 개발을 말한다. 테스트 코드를 먼저 작성하는 것부터 시작한다. 반면 단위 테스트는 TDD의 첫 번째 단계인 기능 단위의 테스트 코드를 작성하는 것을 말한다. 단위 테스트는 개발 단계 초기에 문제를 발견하도록 돕고, 나중에 코드를 리팩토링 하는 등 코드 변경이 있을 때 기존 기능이 올바르게 작동하는지 쉽게 확인이 가능해서 안전하다. 또한 Postman 같은 API 테스트 도구로 하나하나 테스트 하는 번거로움을 줄일 수 있어서 효율적이다. @SpringBootApplication public class Application { public static void main(String.. 2023. 2. 8.
[JPA] 값 타입 이 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의를 수강하며 정리한 글입니다. 기본값 타입임베디드 타입(복합 값 타입)값 타입과 불변 객체값 타입의 비교값 타입 컬렉션   JPA에서는 데이터 타입을 엔티티 타입과 값 타입으로 분류할 수 있다.엔티티 타입이란 `@Entity`로 정의하는 객체를 말한다. 데이터가 변해도 식별자로 추적이 가능하다. 값 타입은 `int`, `Integer`, `String`처럼 단순히 값으로 사용하는 자바의 기본 타입이나 객체를 말한다. 식별자가 없고 값 자체이므로 변경하면 추적이 불가능하다. 값 타임은 기본값 타입, 임베디드 타입, 컬렉션 값 타입으로 나눌 수 있다.  기본값 타입   생명 주기를 엔티티에 의존한다. 회원을 삭제하면 이름과 나이 필드가 .. 2023. 1. 25.
[Algorithm] 이분 탐색(Binary Search) 이분 탐색 BigO: O(log N)  결정 문제의 답이 이분적일 때(Yes or No) 사용할 수 있는 탐색 기법이다. 데이터가 오름차순 정렬된 배열에서 특정 값(N)을 찾아낸다. 정렬된 리스트에서 검색 범위를 줄여 나가면서 검색 값을 찾는다. 검색이 반복될 때마다 검색 범위가 반으로 줄어들기 때문에 속도가 빠르다.  예를 들어서 1~50의 숫자가 오름차순 정렬된 카드 더미에서 28번 카드를 찾는다고 가정하자. 첫 번째 카드부터 I번째 카드는 v[i], 28은 val로 정의할 때, 우리가 찾고자 하는 값은 i를 증가시키면서 v[i] >= val가 되는 지점(처음 결정 문제가 True가 되는 지점)의 i 값이다.이분 탐색의 아이디어는 경계를 포함하는 구간 [start, end]을 잡은 뒤 구간의 길이를 .. 2023. 1. 25.
[Algorithm] 분할 정복(Divide & Conquer) | 백준 2630번: 색종이 만들기 분할 정복   크고 방대한 문제를 쉽게 풀 수 있는 문제 단위로 나누고, 그것들을 다시 합쳐서 문제를 해결하는 방법이다. 일반적으로 재귀 함수를 통해 구현하며, 메모리 제한이 없다면 비교적 빠르게 문제를 해결할 수 있다. 부분 문제가 다른 부분 문제에 영향을 미치지 않는다. (DP의 경우 영향을 미친다.)Divide: 기존 문제를 작은 문제로 나눈다. → 큰 문제를 어떻게 나눌 것이고, 이 과정의 최종 목표는 무엇인가?Base Case: 더 작은 부분의 문제로 나누지 않아도 바로 답을 구할 수 있는 경우Recursive Case: 같은 형태의 부분 문제로 쪼개야 하는 경우Conquer: 나누어진 문제가 여전히 분할이 가능하면 또 다시 Divide를 수행하고, 그렇지 않으면 문제를 해결한다.Combine:.. 2023. 1. 25.
[JPA] 프록시와 연관 관계 관리 이 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의를 수강하며 정리한 글입니다. 프록시 즉시 로딩과 지연 로딩 영속성 전이(CASCADE)와 고아 객체 프록시 데이터베이스에서 member를 조회할 때, member의 이름만 필요한 경우(A)가 있고, member가 속한 team의 정보가 필요한 경우(B)가 있다. A는 member의 정보만 가져오는 것이, B는 team의 정보까지 가져오는 것이 효율적일 것이다. Member member = em.find(Member.class, 1L); printMember(member); // A printMemberAndTeam(member); // B 🌕 em.find() vs em.getReference() em.find(): 데이터베이스를 .. 2023. 1. 24.
[JPA] 고급 매핑(상속 관계 매핑, @MappedSuperclass) 이 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의를 수강하며 정리한 글입니다. 상속 관계 매핑@MappedSuperclass  상속 관계 매핑   관계형 데이터베이스는 상속 관계가 없다. 모델링 기법 중 슈퍼 타입 서브 타입 관계가 객체의 상속과 유사하다. 슈퍼 타입 서브 타입 논리 모델을 실제 물리 모델로 구현하는 방법에는 세 가지 방법이 있다. 1. 조인 전략  각각 테이블로 변환한다. 장점은 테이블 정규화가 되어 있고, 외래 키 참조 무결성 제약 조건을 활용할 수 있다는 점과 저장 공간이 효율화 되어 있다는 것이다.단점은 조회 시 조인을 많이 사용해서 성능이 저하되고, 조회 쿼리가 복잡하다는 것이다. (ALBUM의 데이터를 조회하려면 ITEM과 조인 해야 한다) 또한 데이터 .. 2023. 1. 23.