프로젝트
-
intellij 자동 포맷팅 시 줄 바꿈 처리 적용해주기프로젝트/게시판 프로젝트 2022. 5. 19. 10:08
자동 포맷팅이란? 코드를 정해진 방식대로 자동으로 정렬을 시켜주어 가독성을 높여주는 기능입니다. intellij에서 자동 포맷팅을 적용하는 단축키는 Ctrl + Alt + L입니다. 문제가 발생한 점 빌더 패턴을 사용하게 되면 코드가 길어지는 경우가 있어 자동 포맷팅을 적용을 하였습니다. 하지만 줄 바꿈은 동작하지 않았습니다. 기존의 코드 만약 다음과 같이 된다면 가독성이 훨씬 올라가겠죠? 해결 방법 1. File -> Settings로 이동합니다. ( 단축키 : Ctrl + Alt + S) 2. Code Style으로 검색하여 Java를 클릭합니다. 3. 중간 상단에 있는 Wrapping and Braces를 선택합니다. 4. Chained method calls에서 설정을 변경합니다. Wrap alw..
-
로그인 기능을 만들어보자프로젝트/게시판 프로젝트 2022. 5. 18. 01:23
로그인 기능을 만들기 위해 궁금한 점을 하나씩 해결해보겠습니다. 1. 로그인 방식은 POST일까 GET일까? 로그인은 사용자의 정보를 조회하는 것이니까 GET을 써야 하지 않을까?라고 생각했습니다. 하지만 GET 방식의 경우 입력받은 정보들을 URL 쿼리문으로 보내며 POST 방식은 body로 감싸서 보냅니다. 즉, GET의 경우에는 그대로 노출되고 POST의 경우에는 보안성이 증가됩니다. 로그인의 경우에는 민감한 정보로 보안이 필요하기 때문에 POST를 사용합니다. 하지만 만약 SSL을 사용한다면 GET/ POST둘다 암호화되기 때문에 GET을 사용하면 될 것 같다고 생각했습니다. 하지만 로그인하는 과정을 통해서 토큰 / 세션이 생성된다면 이는 POST가 또 맞다고 볼 수 있습니다. 또한 사용자가 UR..
-
JPA로 Update를 해보자!프로젝트/게시판 프로젝트 2022. 5. 14. 00:01
회원가입 로직을 작성하던 중 회원이 정보를 수정할 수 있기 때문에 JPA를 통해 Update를 해보고자 합니다. 하지만 Spirng Data JPA에서는 update 메서드가 없습니다. 그러면 JPA에서는 어떻게 Update를 할 수 있을까요? 이를 하기 위해서는 JPA의 Dirty Checking이란 것을 먼저 알아야 합니다. Dirty Checking이란? 여기서 Dirty란 상태의 변화가 생긴 정도로 이해하면 좋습니다. 즉, 상태 변화를 확인하는 것이 바로 Dirty Checking입니다. JPA에서는 트랜잭션이 끝나는 시점에 변화가 있는 모든 엔티티 객체를 데이터베이스에 자동으로 반영해 줍니다. 변화가 있다의 기준은 최초 조회 상태입니다. JPA는 엔티티를 조회하게 되면 해당 엔티티의 조회 상태를..
-
컨트롤러를 테스트해보자!프로젝트/게시판 프로젝트 2022. 5. 13. 00:01
Service나 Repository에 대해 테스트 코드를 작성하는 것은 익숙했습니다. 하지만 Controller를 테스트하기 위해서는? 어떻게 해야 하는지 감이 잘 오지 않습니다. 직접 Web UI로 하거나 아니면 조금 더 편리하게 Postman을 사용하여 테스트를 진행했습니다. 지금부터는 직접 테스트 코드를 작성해서 Controller를 테스트해보고자 합니다. 목표 컨트롤러를 테스트해보자 컨트롤러에서 인자로 받는 @Valid MemberRequestDTO가 제대로 검증되는지 테스트해보자 Controller Test 다음은 현재 Controller의 코드입니다. @RestController @RequiredArgsConstructor @RequestMapping("/members") public clas..
-
[에러 해결 완료] 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에 다음과 같은 의존성을 ..
-
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("변..