프로젝트/게시판 프로젝트
-
JWT란? JWT 원리, 사용법프로젝트/게시판 프로젝트 2022. 5. 24. 10:43
JWT란? JWT란 Json Web Token의 약자로써 Json 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token입니다. Claim이란 사용자 정보나 데이터 속성 등을 의미합니다. 즉, Claim 토큰이라 하면 토큰 안에 정보를 담고 있는 토큰을 의미합니다. 주로 회원 인증이나 정보 전달에 사용되는 됩니다. 일반 토큰 vs Claim 토큰의 차이점 일반 토큰 과거에 많이 사용하던 방식으로 주로 의미가 없는 문자열(Random String) 기반으로 구성되어 있으면 아래와 같이 표현됩니다. a9ace025c90c0da2161075da6ddd3492a2fca776 단순한 문자열이기 때문에 정보를 담거나 할 수 없습니다. Claim 토큰 사용자의 정보를 담고 있는 토큰을 의미..
-
Optional을 올바르게 활용해보기프로젝트/게시판 프로젝트 2022. 5. 24. 09:31
Optional이란? 간단하게 말하자면 값이 null일 수도 아닐 수도 있는 객체입니다. 즉, null이 될 수도 있는 객체를 포장해주는 Wrapper Class입니다. 여기까지만 읽었을 때 이해가 되지 않는다면 다음 글을 읽고 오면 좋습니다. https://junuuu.tistory.com/90 { result = member.getPassword().equals(memberLoginRequestDTO.getPassword()); }); return result; } ifPresent 메서드를 활용하여 userId가 존재한다면 패스워드 검증을 통해 true, false를 result에 기록하도록 하였습니다. 또한 내부의 result값을 전달하기 위해서 전역 변수인 result를 선언하였습니다. 하지만 ..
-
비밀번호를 암호화 하자!프로젝트/게시판 프로젝트 2022. 5. 19. 19:04
기존에는 그저 memberRequestDTO로 받아온 값을 그대로 저장했습니다. memberService.join(memberRequestDTO.toEntity()); 위의 방법은 유저의 비밀번호를 DB에 그대로 저장하게 됩니다. 이렇게 되면 DB를 관리하는 사람들이 유저의 비밀번호를 그대로 볼 수 있기 때문에 보안상으로 취약해집니다. 또한 법적으로도 개인정보에 대해 법률로 정하고 있고, 최소 기준도 제시하고 있습니다. 암호화란? 재화적 가치가 있는 데이터를 알아볼 수 없는 문자로 바꿈으로써 공격의 목적을 파괴하는 보안 솔루션입니다. 간단하게 어떤 정보를 누구도 알아볼 수 없도록 만들어 버립니다. 예를 들어 비밀번호 123456을 암호화해서 저장한다면 DB에는 fs32a3xzz0이 저장됩니다. 암호화는 ..
-
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..