전체 글
-
컨트롤러를 테스트해보자!프로젝트/게시판 프로젝트 2022. 5. 13. 00:01
Service나 Repository에 대해 테스트 코드를 작성하는 것은 익숙했습니다. 하지만 Controller를 테스트하기 위해서는? 어떻게 해야 하는지 감이 잘 오지 않습니다. 직접 Web UI로 하거나 아니면 조금 더 편리하게 Postman을 사용하여 테스트를 진행했습니다. 지금부터는 직접 테스트 코드를 작성해서 Controller를 테스트해보고자 합니다. 목표 컨트롤러를 테스트해보자 컨트롤러에서 인자로 받는 @Valid MemberRequestDTO가 제대로 검증되는지 테스트해보자 Controller Test 다음은 현재 Controller의 코드입니다. @RestController @RequiredArgsConstructor @RequestMapping("/members") public clas..
-
[백준] 1516번 : 게임 개발 - 자바(JAVA)알고리즘/백준 2022. 5. 12. 00:01
https://www.acmicpc.net/problem/1516 1516번: 게임 개발 첫째 줄에 건물의 종류 수 N(1 ≤ N ≤ 500)이 주어진다. 다음 N개의 줄에는 각 건물을 짓는데 걸리는 시간과 그 건물을 짓기 위해 먼저 지어져야 하는 건물들의 번호가 주어진다. 건물의 번호는 1부 www.acmicpc.net 문제 해석 모든 건물이 완성되기 위한 시간을 구해야 합니다. 건물에는 순서가 존재할 수 있습니다. 예를 들어 A건물을 지어야지 B건물을 지을 수 있는 경우가 존재하기 때문에 이점을 고려해야 합니다. 건물의 수와 각 건물의 짓는 데 걸리는 시간과 해당 건물을 짓기 위해 지어져야 하는 건물들의 번호가 주어집니다. 짓기 위해 지어야 하는 건물은 여러 개가 존재할 수 있습니다. 각 줄은 -1으..
-
[에러 해결 완료] Type definition error , InvalidDefinitionException프로젝트/게시판 프로젝트 2022. 5. 12. 00:01
@Valid 애노테이션을 활용하여 데이터 검증을 테스트하기 위해서 POSTMAN으로 회원가입 POST 요청을 보내는 과정에서 400 BAD REQUEST를 기대하였으나 500 에러가 발생하였습니다. 왜 그럴까 하고 실제로 에러 메시지를 출력해보았습니다. 다음과 같은 에러가 발생했습니다. Type definition error: [simple type, class anthill.Anthill.dto.member.MemberRequestDTO]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `anthill.Anthill.dto.member.MemberRe..
-
테스트코드에서는 H2 DB를 사용하자!프로젝트/게시판 프로젝트 2022. 5. 11. 21:48
H2 데이터베이스란? H2는 자바 기반 오픈소스 RDBMS입니다. 주로 인 메모리 데이터베이스로 사용되며 기능 테스트할 때 유용합니다. 인 메모리 데이터베이스는 휘발성 데이터베이스이기 때문에 컴퓨터를 종료하면 모든 데이터가 삭제됩니다. 스프링 부트에서 dependency를 추가하면 약 2MB 크기의 라이브러리로 H2 DB를 사용할 수 있습니다. H2 데이터베이스를 사용하는 이유는? 실제 서비스용 DB는 따로두고 테스트 코드용 DB와 분리하여 이용할 수 있습니다. 또한 휘발성 데이터베이스이기 때문에 테스트코드의 매번 DB를 지워주는 작업 없이 테스트 코드의 재사용성을 높일 수 있게 합니다. 인 메모리 데이터베이스이기 때문에 빠른 실행속도를 보여줍니다. 사용법 build.gradle에 다음과 같은 의존성을 ..
-
[프로그래머스] 2019 KAKAO BLIND RECRUITMENT - 무지의 먹방 라이브 - 자바(JAVA)알고리즘/프로그래머스 2022. 5. 11. 00:01
https://programmers.co.kr/learn/courses/30/lessons/42891 코딩테스트 연습 - 무지의 먹방 라이브 programmers.co.kr 문제 해석 회전판에 먹어야 할 N개의 음식이 존재합니다. 각 음식에는 1부터 N까지 번호가 붙어있으며, 각 음식을 섭취하는데 일정 시간이 소요됩니다. 무지는 다음과 같은 방법으로 음식을 섭취합니다. 무지는 1번 음식부터 먹기 시작하며, 회전판은 번호가 증가하는 순서대로 음식을 무지 앞으로 가져다 놓는다. 마지막 번호의 음식을 섭취한 후에는 회전판에 의해 다시 1번 음식이 무지 앞으로 온다. 무지는 음식 하나를 1초 동안 섭취한 후 남은 음식은 그대로 두고, 다음 음식을 섭취한다. 다음 음식이란, 아직 남은 음식 중 다음으로 섭취해야 ..
-
Spring Rest API 예외처리 (feat. 스프링의 기본적인 예외 처리 방법과 Best Practice)프로젝트/게시판 프로젝트 2022. 5. 10. 18:46
긴글을 읽기 싫은 분들을 위한 요약 1. Spring은 기본적으로 예외 처리를 지원합니다.(whitelabel 에러 페이지) 2. 하지만 기본예외처리는 404에러가 나도 500에러를 보여줍니다. 3. try-catch를 사용하면 가독성이 떨어지기 때문에 이를 해결하기 위해 Spring은 다양한 에러처리 방법을 지원합니다. 4. @ResponseStatus의 단점 에러 응답 내용을 수정할 수 없음 5. @ExceptionHandler 컨트롤러 내에서 사용되면 중복된 코드가 발생됨 6. @ControllerAdvice와 @RestControllerAdvice를 활용하면 전역적으로 예외를 처리할 수 있음(Best Practice) 7. 실제 프로젝트 적용예시(try-catch로 하던 예외처리를 @RestCon..
-
Java는 왜 Pure OOP가 아닐까?Java 2022. 5. 10. 00:38
Pure OOP란? 말 그대로 순수하게 완전히 OOP를 지향하고 관련 기능을 지원하는 언어를 말합니다. 프로그래밍 언어가 Pure OOP를 지원하기 위해서는 7가지 특성이 충족되어야 합니다. Encapsulation/Data Hiding(캡슐화/은닉화) Inheritance(상속) Polymorphism(다형성) Abstraction(추상화) All predefined types are objects (이미정의 된 타입들은 모두 객체여야 한다) All user defined types are objects (사용자가 정의한 타입들은 모두 객체여야 한다.) All operations performed on objects must be only through methods exposed at the obje..
-
[백준] 10282번 : 해킹 - 자바(JAVA)알고리즘/백준 2022. 5. 10. 00:01
https://www.acmicpc.net/problem/10282 10282번: 해킹 최흉최악의 해커 yum3이 네트워크 시설의 한 컴퓨터를 해킹했다! 이제 서로에 의존하는 컴퓨터들은 점차 하나둘 전염되기 시작한다. 어떤 컴퓨터 a가 다른 컴퓨터 b에 의존한다면, b가 감염되면 www.acmicpc.net 문제 해석 네트워크 시설의 한 컴퓨터가 해킹되었습니다. 서로 의존하는 컴퓨터들은 점차 하나씩 감염되기 시작합니다. 어떤 컴퓨터 a가 다른 컴퓨터 b에 의존한다면 b가 감염되면 일정 시간 뒤에 a도 감염됩니다. 하지만 b가 a를 의존하지 않는다면 a가 감염되더라도 b는 안전합니다. 컴퓨터 번호와 각 의존성이 주어질 때 , 총 몇 대의 컴퓨터가 감염되며 그에 걸리는 시간이 얼마인지 구하세요 문제 풀이 전..