프로젝트/게시판 프로젝트
-
테스트코드에서는 H2 DB를 사용하자!프로젝트/게시판 프로젝트 2022. 5. 11. 21:48
H2 데이터베이스란? H2는 자바 기반 오픈소스 RDBMS입니다. 주로 인 메모리 데이터베이스로 사용되며 기능 테스트할 때 유용합니다. 인 메모리 데이터베이스는 휘발성 데이터베이스이기 때문에 컴퓨터를 종료하면 모든 데이터가 삭제됩니다. 스프링 부트에서 dependency를 추가하면 약 2MB 크기의 라이브러리로 H2 DB를 사용할 수 있습니다. H2 데이터베이스를 사용하는 이유는? 실제 서비스용 DB는 따로두고 테스트 코드용 DB와 분리하여 이용할 수 있습니다. 또한 휘발성 데이터베이스이기 때문에 테스트코드의 매번 DB를 지워주는 작업 없이 테스트 코드의 재사용성을 높일 수 있게 합니다. 인 메모리 데이터베이스이기 때문에 빠른 실행속도를 보여줍니다. 사용법 build.gradle에 다음과 같은 의존성을 ..
-
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..
-
Controller에 인자값은 어떤값이 올 수 있을까?프로젝트/게시판 프로젝트 2022. 5. 6. 00:01
Controller가 매우 다양한 인자 값을 받아올 수 있기 때문에 어떤 값들을 받아 올 수 있는지 어떻게 받아오는 게 적절할지 조사해보고자 합니다. Spring Controller에서 Parameter를 받는 방식 HttpServletRequest를 통해 받는 방법 @RequestMapping("/test") public String test(HttpServletRequest req) { String userId = req.getParameter("userId"); String password = req.getParameter("password"); return "test"; } getParameter()는 String값을 반환합니다. 이때 parameter로 보낸 변수명과 getParameter("변..
-
RestController에서 클라이언트에게 어떤 값을 반환해야 할까?프로젝트/게시판 프로젝트 2022. 5. 5. 03:41
Spring Boot를 활용하여 REST API를 만들던 도중 클라이언트에게 값을 반환하는 방법은 어떤 것들이 존재하며 어떤 값을 반환해야 할지 정리하면 좋을 것 같아 해보려고 합니다. 우선 반환하는 방법들에는 어떤것들이 존재할까요? 1. String반환(단순 문자열) @RestController public class testController{ @RequestMapping("/test") public String test1(){ return "test"; } } 문자열 데이터는 기본적으로 text/html 타입을 처리됩니다. "test"라는 메시지가 HTTP ResponseBody에 직접 쓰이게 됩니다. 2. 객체 반환 @RestController public class testController{ ..
-
Entity와 DTO를 분리하자!프로젝트/게시판 프로젝트 2022. 5. 4. 00:55
클라이언트에서 정보를 받아오면 Member Entity를 그대로 사용하려고 하였습니다. 하지만 그렇게 되면 Controller 및 Service에 사용하게 될 로직들이 Entity의 속성 값과 의존관계를 맺게 됩니다. 하지만 Entity는 매우 중요한 객체로 사용범위도 크고 모든 데이터를 갖고 있는 객체이므로 Entity와 서비스가 의존관계를 갖게 하는 것은 유지보수 측면에서나 관리측면에서 매우 부적합합니다. DTO 객체는 View Layer와 데이터를 주고받을 때 사용합니다. Entity 객체는 DB Layer와 데이터를 주고받을 때 사용합니다. 실제로 Controller에서 결괏값으로 여러 테이블을 join 해서 줘야 할 경우가 빈번하기 때문에 Entity 클래스만으로 표현하기 어려운 경우도 많습니다..
-
@Builder 제대로 알고 사용해보기프로젝트/게시판 프로젝트 2022. 4. 30. 02:27
Lombok의 @Builder를 사용하게 되면 빌더 패턴을 매우 간단하게 적용할 수 있습니다. 빌더 패턴이란? 빌더 패턴이란 인스턴스(객체)를 생성할 때 생성자만을 통해서 생성하는데 어려움이 있기 때문에 고안된 생성 패턴입니다. 예를 들어 클래스에 생성자 인자가 많으면 각 인자들이 어떠한 값을 나타내는지 알기 어렵기 때문입니다. 빌더 패턴에 대해서 잘 모르신다면 다음 글을 보고 오시면 좋을 것 같습니다. https://junuuu.tistory.com/247?category=968252 [Java] 빌더 패턴 빌더 패턴이란? 빌더 패턴은 인스턴스를 생성할 때 생성자(Constructor)만을 통해서 생성하는데 어려움이 있어서 고안된 패턴입니다. 클래스에 생성자 인자가 많다면 어떠한 인자가 어떠한 값을 나..
-
JPA로 CRUD 해보기 + 테스트코드프로젝트/게시판 프로젝트 2022. 4. 28. 22:15
https://junuuu.tistory.com/270?category=997278 Spring Initializr로 프로젝트 생성하기 + MySQL연동까지 https://start.spring.io/ Proejct : Gradle Project Language : Java Packaging : Jar(REST API server로 만들기 때문에 JSP필요 x) - Spring 문서에서도 JSP를 피하라고 명시 Java : 11(16으로 변경해서 사용 예.. junuuu.tistory.com 이전에 이어서 Spring Initailzr로 스프링 부트 프로젝트를 생성했으며 MySQL까지 연동된 상황입니다. 지난번에 resources/application.properties 에서 JPA에 대한 설정을 할때 ..
-
Spring Boot + MySQL 연동(feat. Spring initializr)프로젝트/게시판 프로젝트 2022. 4. 26. 02:19
https://start.spring.io/ Proejct : Gradle Project Language : Java Packaging : Jar(REST API server로 만들기 때문에 JSP필요 x) - Spring 문서에서도 JSP를 피하라고 명시 Java : 11(16으로 변경해서 사용 예정) Dependencies : Lombok, Spring Web, Spring Data JPA, MySQL Driver 이제 하단의 GENERATE를 눌러보겠습니다. 압축을 풀어주고 Anthill 폴더를 C:\intellij폴더 안에 넣어주겠습니다 이후에 Intellij를 실행! File -> Open... 선택 Anthill의 build.gradle 선택하고 OK Open as Project 클릭 Trus..