분류 전체보기 512

테스트 예외처리

오늘 테스트 코드를 작성하다 공부한 내용을 정리해보려한다. 먼저, 현 시점 기준으로 SpringBoot가 사용하는 테스트 유닛은 Junit5이다. 고의로 예외를 발생시키는 실패 테스트에서 작성자는 어떻게 예외를 처리해야할까? 상황 가정 회원 저장소에 회원을 저장하는데 이름이 같은 중복회원있으면 Exception 저장할 때 중복회원이 존재하는지 체크하여 존재한다면 throw new IllegalStateException() try-catch 가장 기본적인 예외처리 방식인 try-catch문을 사용하는 방식 @Test public void 중복회원_예외() { Member member1 = new Member(); member1.setName("son"); Member member2 = new Member(..

[백준] 14500번 > 테트로미노

https://www.acmicpc.net/problem/14500 14500번: 테트로미노 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변 www.acmicpc.net 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변끼리 연결되어 있어야 한다. 즉, 꼭짓점과 꼭짓점만 맞닿아 있으면 안 된다. 정사각형 4개를 이어 붙인 폴리오미노는 테트로미노라고 하며, 다음과 같은 5가지가 있다. 아름이는 크기가 N×M인 종이 위에 테트로미..

엔티티 설계 주의점

엔티티에는 가급적 Setter를 사용하지 말자 Setter가 모두 열려있으면 변경 포인트가 많아지고, 어디서 변경되었는지를 알아내기가 어려워진다. ==> 유지보수가 어렵다. ★모든 연관관계는 지연로딩으로 설정(FetchType.LAZY) ==> 중요!!!!!! 더보기 EAGER는 하나의 객체를 DB로부터 읽어올 때 참조 객체들의 데이터까지 전부 읽어오는 방식을 뜻한다. 반대로 LAZY 타입은 게을러서, 참조 객체들의 데이터들은 무시하고 해당 엔티티의 데이터만을 가져온다. EAGER은 예측이 어렵고, 어떤 SQL이 실행될지 추적하기 어렵다. JPQL을 실행할 때 N + 1 문제가 자주 발생 모든 연관관계는 LAZY(지연로딩)으로 설정해야함. 연관된 엔티티를 함께 DB에서 조회해야 하면, fetch join..

[백준] 1009번 > 분산처리

문제 재용이는 최신 컴퓨터 10대를 가지고 있다. 어느 날 재용이는 많은 데이터를 처리해야 될 일이 생겨서 각 컴퓨터에 1번부터 10번까지의 번호를 부여하고, 10대의 컴퓨터가 다음과 같은 방법으로 데이터들을 처리하기로 하였다. 1번 데이터는 1번 컴퓨터, 2번 데이터는 2번 컴퓨터, 3번 데이터는 3번 컴퓨터, ... , 10번 데이터는 10번 컴퓨터, 11번 데이터는 1번 컴퓨터, 12번 데이터는 2번 컴퓨터, ... 총 데이터의 개수는 항상 ab개의 형태로 주어진다. 재용이는 문득 마지막 데이터가 처리될 컴퓨터의 번호가 궁금해졌다. 이를 수행해주는 프로그램을 작성하라. 입력 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 정수 a와 b가 주어진다...

도메인 모델, 테이블 설계

회원 - 주문 = 1 : N 회원은 여러 상품을 주문할 수 있다. 주문 - 상품 = N : M 주문은 여러 상품을 선택할 수 있고, 상품은 여러 주문에 들어갈 수 있으므로 다대다 관계 하지만 RDB는 물론 엔티티에서도 다대다 관계는 거의 사용하지 않는다. 주문 상품이라는 중간 테이블을 만들어 1대다 + 다대1 관계를 통해 다대다 관계를 구현 상품 상품은 도서, 음반, 영화로 구분 상품이라는 공통 속성을 사용하므로 상속 구조 엔티티 회원(Member) 이름, 임베디드 타입인 주소(Address), 주문 리스트(orders) 더보기 2021.05.17 - [Java/JPA] - @Embedded, @Temporal @Embedded, @Temporal @Embedded (임베디드 타입) 임베디드 타입이란 새..

@Embedded, @Temporal

@Embedded (임베디드 타입) 임베디드 타입이란 새로운 타입을 사용자가 직접 정의하여 사용하는 것을 뜻한다. 이는 int, String처럼 값 타입이다. 임베디드 타입을 사용하지 않는 Member @Entity public class Member { @Id @GeneratedValue private Long id; private String name; @Temporal(TemporalType.DATE) Date startDate; @Temporal(TemporalType.DATE) Date endDate; private String city; private String zipcode; } 위와 같이 상세한 데이터를 모두 가지고 있는 것은 객체지향적이지 않고 효율적이지 못하다. 이를 근무 기간, 주소..

Java/JPA 2021.05.17

JPA, DB 설정 + 간단한 테스트

https://start.spring.io/ 스프링 프로젝트를 처음 생성하면 기본적으로, application.properties라는 SpringBoot의 설정 파일을 제공한다. 이 설정 파일은 다양한 형식을 제공하는데 그 중에서 가독성이 높고 권장하는 형식인 yml로 살정해보려한다. 기본으로 생성된 application.properties를 지우고 그 위치에 application.yml 파일을 생성하면 된다. 위와 같은 형태로 환경 설정을 하게 되는데, 이는 들여쓰기 형식으로 작성되기 때문에 가독성이 높다. 또한, 반복되는 suffix에 대한 작성을 막아준다. 위의 yml형식의 파일을 properties로 작성하게되면 spring.datasource.url=jdbc:h2:tcp://localhost/~..

5/14 공부 내용

ModelAttribute를 사용하면 Item객체를 자동으로 생성하여 파라미터를 주입(setter를 사용함) model에 addAttribute를 통해 객체를 넣음. @ModelAttribute의 name속성을 생략할 수 있는데 이렇게 하면 클래스 타입의 첫글자를 소문자로 변경하여 이를 name으로 인식한다. Item -> item 즉 위는 @ModelAttribute("item")과 같다. 리다이렉트 스프링에서 리다이렉트는 redirect:/~~~으로 지원 컨트롤러에 매핑된 PathVarialbe의 값을 여기서도 사용가능 PRG Post/Redirect/Get 웹 브라우저의 새로 고침(F5)은 마지막에 서버에 전송한 데이터를 다시 전송 예를 들어 설명해보면, 위와 같은 형식으로 동작하는 웹 사이트가 있..

Spring/Spring MVC 2021.05.14

ThymeLeaf 공부

컨트롤러에서 뷰를 호출하고 이를 템플릿 엔진인 thymeleaf를 사용하여 동적으로 변경해보자. 컨트롤러 정적 리소스(HTML 파일) 상품 목록 상품 등록 ID 상품명 가격 수량 1 테스트 상품1 10000 10 2 테스트 상품2 20000 20 이를 타임리프를 사용하여 동적으로 변경하여보자. 타임리프를 사용하기 위한 th 네임스페이스 추가 xmlns:th="http://www.thymeleaf.org" BootStrap 경로 절대경로로 변경 상대 경로로 설정되어 있던 bootstrap파일 경로를 타임리프를 사용하여 절대 경로로 변경하였다. 위와 같이 작성하면 타임리프가 기존에 있던 href를 날리고 th가 붙은 href로 설정함 href="value1" 을 th:href="value2" 의 값으로 변경..

Spring/Spring MVC 2021.05.13

[백준] 14503번 > 로봇 청소기

https://www.acmicpc.net/problem/14503 14503번: 로봇 청소기 로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어 www.acmicpc.net 문제 로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 벽 또는 빈 칸이다. 청소기는 바라보는 방향이 있으며, 이 방향은 동, 서, 남, 북중 하나이다. 지도의 각 칸은 (r, c)로 나타낼 수 있고, r은 북쪽으로부터 떨어진 칸의 개..

반응형