프로젝트
-
Spring REST Docs 적용하기(+ html 생성안됨 에러 해결, ./grdlew build 에러 해결, 각종에러해결)프로젝트/게시판 프로젝트 2022. 6. 7. 01:11
지난 포스팅을 통해 API 문서화를 위해 Swagger와 Spring Rest Docs를 비교하여 보았습니다. 그리고 분석을 통하여 좀 더 깔끔 명료한 문서를 만들 수 있고 문서와 코드의 괴리감이 생길 수 없는 Spring Rest Docs를 적용해보고자 합니다. 추가적으로 공부하다가 알게 된 점으로는 Postman으로도 API 문서를 만들 수 있습니다. 하지만 테스트 코드를 강제화 할 수 있는 Spring REST Docs를 사용하겠습니다. 공식문서와 다른 분들이 적용한 예시를 보고 포스팅을 작성해보겠습니다. Swagger vs Spring REST Docs https://junuuu.tistory.com/318?category=997278 API 문서화를 위한 Swagger와 Spring Rest D..
-
JPA Table에 Unique Index 달기프로젝트/게시판 프로젝트 2022. 6. 3. 21:54
기존 코드에서 개선사항 발생 JPA의 회원 Entity를 생성할 때 다음과 같이 Unique Column을 지정했습니다. import lombok.*; import org.hibernate.annotations.DynamicUpdate; import javax.persistence.*; @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter @Table(name = "member") @Entity @DynamicUpdate public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) //MySQL의 AUTO_INCREMENT를 사용 @Column(name = "member_id..
-
API 문서화를 위한 Swagger와 Spring Rest Docs 비교프로젝트/게시판 프로젝트 2022. 5. 31. 22:43
Swagger란? API 문서를 자동으로 만들어주는 라이브러리입니다. REST API를 편리하게 문서화해주고, 이를 통해 편리하게 API를 호출해보고 테스트할 수 있는 프로젝트입니다. 이를 활용하여 협업하는 클라이언트 개발자에게도 Swagger 만 전달해주면 API Path와 Request , Response 값 및 제약 등을 한 번에 알려줄 수 있습니다. Swagger 예시 글로만 보면 이해하기 어려울 수 있기 때문에 실제로 예시를 보여드리겠습니다. 아래의 사이트에서 직접 활용해볼 수 있습니다. https://petstore.swagger.io/?_ga=2.58706851.880875351.1654000882-1005427767.1652498303 Swagger UI petstore.swagger.io..
-
테스트 코드 리팩토링하기프로젝트/게시판 프로젝트 2022. 5. 31. 01:24
기존의 테스트 코드에는 매번 테스트를 위해 MemberRequestDTO를 만들어줬습니다. 결국에는 계속 중복되는 로직이 발생하였고 만약 요구사항의 변경으로 Entity가 변경된다면 모든 코드를 수정해줘야 하는 불편함도 겪었습니다. 따라서 매번 중복적으로 만들어주는 부분을 메서드로 뽑아 유지보수성과 가독성을 올리고자 합니다. 기존 코드 @Test @DisplayName("회원 가입 정상 로직") public void memberNotDuplicateTest() { //given MemberRequestDTO memberRequestDTO = MemberRequestDTO.builder() .userId("Test") .name("Test") .nickName("Test") .password("Test")..
-
뉴스 정보를 가져와 보자(크롤링, 네이버 뉴스 API 사용법)프로젝트/게시판 프로젝트 2022. 5. 25. 14:18
크롤링이란? Crwaling 사전적으로는 포복, 기다 라는 의미를 가지고 있으며 전산 쪽에서는 Web상을 돌아다니면서 정보를 수집하는 행위를 뜻합니다. 웹 크롤링, 스파이더링, 스크래핑, 데이터 긁기 등 다양한 단어로 불리기도 합니다. 크롤링 대상 크롤링의 대상은 Web상의 자원들입니다. 이 자원은 정적인 문서가 될 수 있고, API와 같은 서비스가 될 수 있습니다. 어느 쪽이던 다수의 데이터를 수집하고 여기서 필요한 정보만 추출하게 됩니다. 현재 진행하는 프로젝트에서는 어떤 키워드에 대한 네이버 뉴스데이터를 수집해보려고 합니다. 크롤링하기 전 주의 사항 개인정보가 들어있는 사이트들은 크롤링이 안 되도록 막고 싶을 수 있습니다. 무분별한 크롤링을 막고 제어하기 위해 1994년 6월 로봇 배제 규약이 만들..
-
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이 저장됩니다. 암호화는 ..