Tech23 단위 테스트를위한 ReflectionTestUtils Mockito를 이용한 테스트 코드 작성시 발생한 이슈를 간단히 정리하고자 합니다. @Table(name = "category") @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Category extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "name") private String name; @Column(name = "parent_id") private Long parentId; @Builder public Category(String name, Long pare.. Tech/Spring 2021. 3. 23. Springboot + GCP Cloud Storage 연동(파일 업로드, 다운로드) 회원 정보 수정에서 썸네일 업로드가 필요했습니다. 파일을 Gloud에 저장하여 업로드 및 다운이 필요했기에 현재 사용하고 있는 Google Cloud Platform을 선택하였습니다. 적용하는데 발생한 이슈위주로 적는 글이라, 자세한 설정은 아래 블로그를 참조해주세요. jyami.tistory.com/54 GCP Cloud Storage + Springboot 연동하기 이번 외주를 맡은 내용이 Google Cloud Storage를 이용해서 file을 업로드, 다운로드하는 API 기능을 구현해서 이 내용을 정리하고자 한다. Cloud Storage를 다루는 방법으로 Google Cloud Console, Cloud SDK를.. jyami.tistory.com 설정 gradle 설정을 다음과 같이 했습니다.. Tech/Spring 2021. 3. 22. Spring Boot에서 Actuator 및 Spring Actuator Admin 설정 방법 Actuator은 애플리케이션 관련 데이터 및 모니더링 정보를 제공해준다. 단순히 Actuator만 사용한다면 JSON 형식 혹은 XML로 확인할 수 있다. 하지만 GUI로 보고 싶다면 Actuator 기반 UI인 Spring Boot Admin을 사용하면 된다. (오픈소스) 자세한 내용은 백기선님의 "우아한 스프링 부트"를 참고하길 바란다. www.youtube.com/watch?v=z0EaPjF3pCQ 서버 애플리케이션 우선 admin 전용 서버를 띄우기 위해 프로젝트를 생성해야 한다. 멀티모듈로 해도되지만 필자는 그냥 start.spring.io를 통해서 프로젝트를 하나 생성했다. 라이브러리로 Spring Boot Admin (Server)를 추가해준다. ※ 주의할점 이것 때문에 약간 헤맸는데, 클.. Tech/Spring 2021. 3. 21. Google 소셜 로그인 Google API 클라이언트 라이브러리 + GoogleIdTokenVerifier 사용하는 방법 Rest API 서버에서 OAuth2.0을 사용하여 소셜 로그인을 구현해야 했습니다. 프론트는 리액트를 사용했기에 SPA방식을 고려해야 했습니다. 보통 아래와 같은 흐름으로 구현이 됩니다. 그림상으로는 1~3번 까지는 SPA에서 처리한다음 4번에서 code와 redirect_url을 반환합니다. 현재 진행하는 프로젝트에서는 5번의 access_token과 id_token값까지 프론트에서 받은 다음, access_token을 백엔드 서버에 제공하여 소셜 정보를 받는 과정으로 변경하였습니다. 구글 소셜 로그인 API를 구현하는 방식은 아래 블로그에 잘 설명되어 있습니다. (accessToken 값을 제공받는 과정까지 있습니다.) antdev.tistory.com/68 [Google Login API] Goo.. Tech/Spring 2021. 3. 15. Spring Boot Validation 순서 정하기 & 테스트 코드 프론트에서 유효성 검사를 수행하지만, 백단에서도 유효성 검사를 수행해야 안전한 애플리케이션을 만들 수 있습니다. Spring Boot의 Validation은 가장 많이 쓰이는 유효성 검사 라이브러리 입니다. 적용하는 방법은 구글링하면 수많은 포스팅이 존재하니 생략하고 바로 이슈 및 해결을 설명드리겠습니다. public class UrlDto { public static class Request{ @Data @Builder @NoArgsConstructor @AllArgsConstructor public static class Save{ @NotBlank(message = "Link 필드는 필수입니다.") @Pattern(regexp="^((http(s?))\\:\\/\\/)([0-9a-zA-Z\\-]+\.. Tech/Spring 2021. 3. 15. SpringBoot에서 HttpOnly 쿠키방식을 이용한 refreshToken 발급 jwt의 access_token과 refresh_token를 구현하는 과정에서 프로젝트 프론트 팀원분이 refresh_token은 쿠키에 담아서 전송해달라는 요청이 들어왔다. 과정은 대략 아래와 같다. 전송방식은 Http Only 방식으로 쿠키에 담아 전송하였다. httpOnly란 Set-Cookie HTTP reponse 헤더에 포함되는 flagf이다. cookie를 생성할 때 HttpOnly를 사용하는 것은 브라우저가 HttpOnly를 지원할 경우 쿠키는 클라이언트 측 스크립트에 접근할 수 없다. 악성 스크립트(XSS 공격)에 의한 위험을 완화시켜준다. 즉, http only 쿠키 방식으로 저장된 정보는 Javscript의 Document.cookieAPI로 접근이 불가능하다. 따라서 XSS 취약점 .. Tech/Spring 2021. 2. 27. @Controller와 @RestController의 차이점 1.개요 Spring MVC의 @RestController은 @Controller와 @ResponseBody의 조합입니다. Spring 프레임 워크에서 RESTful 웹 서비스를 보다 쉽게 개발할 수 있도록 Spring 4.0에서 추가되었습니다. 근본적인 차이점은 @Controller의 역할은 Model 객체를 만들어 데이터를 담고 View를 찾는 것이지만, @RestController는 단순히 객체만을 반환하고 객체 데이터는 JSON 또는 XML 형식으로 HTTP 응답에 담아서 전송합니다. 물론 @Controller와 @ResponseBody를 사용하여 만들 수 있지만 이러한 방식은 RESTful 웹서비스의 기본 동작이기 때문에 Spring은 @Controller와 @ResponseBody의 동작을 조.. Tech/Spring 2021. 2. 12. [취준생을 위한 스프링부트 백엔드 프로그래밍] 3주차 과제 brunch.co.kr/@springboot/538 스프링부트 백엔드 프로그래밍 (5) 5. 예외 처리 및 테스트 코드 작성 | "스프링부트 백엔드 프로그래밍"이라는 주제로 약 8주간 글을 작성할 예정입니다. 스터디가 잘못된 방향으로 가지 않도록, 의견 및 조언을 아낌없이 해주시 brunch.co.kr #필수과제 1. 사용자에 의한 키워드 검색 시 네이버 Open API 영화 검색 결과를 애플리케이션 내부에 정의한 자료구조에 저장해놓기(캐싱 역할로 사용) (Map or Set or 커스텀한 자료구조 등 자유롭게 정의해보기) 예) Map을 사용해서, Key에는 검색어를 Value는 검색 결과를 저장 2. 사용자에 의한 키워드 검색 시 특정 키워드에 해당하는 데이터가 자료구조에 이미 저장되어있다면, 네이버 .. Tech/Spring 2021. 1. 26. [취준생을 위한 스프링부트 백엔드 프로그래밍] 2주차 과제 brunch.co.kr/@springboot/532 스프링부트 백엔드 프로그래밍 (3) 3. 스프링 IoC, DI | "스프링부트 백엔드 프로그래밍"이라는 주제로 약 8주간 글을 작성할 예정입니다. 스터디가 잘못된 방향으로 가지 않도록, 의견 및 조언을 아낌없이 해주시길 부탁드립니다. brunch.co.kr brunch.co.kr/@springboot/533 스프링부트 백엔드 프로그래밍 (4) 4. 스프링부트 AutoConfiguration | "스프링부트 백엔드 프로그래밍"이라는 주제로 약 8주간 글을 작성할 예정입니다. 스터디가 잘못된 방향으로 가지 않도록, 의견 및 조언을 아낌없이 해주시길 부 brunch.co.kr # 필수과제 1. 임베디드 톰캣의 쓰레드 풀 사이즈를 변경해보세요. (성능 테스트 .. Tech/Spring 2021. 1. 21. [취준생을 위한 스프링부트 백엔드 프로그래밍] 1주차 과제 brunch.co.kr/@springboot/530 취준생을 위한 스프링부트 백엔드 프로그래밍 (1) 1주차 1교시 - 스프링부트란 무엇인가? | "취준생을 위한 스프링부트 백엔드 프로그래밍"이라는 주제로 약 8주간 글을 작성할 예정입니다. 제가 잘못된 길로 가지 않도록, 댓글로 의견 및 조언 brunch.co.kr brunch.co.kr/@springboot/531 취준생을 위한 스프링부트 백엔드 프로그래밍 (2) 2. 간단한 API 서버 만들어보기, 앞으로 커리큘럼 소개 | "취준생을 위한 스프링부트 백엔드 프로그래밍"이라는 주제로 약 8주간 글을 작성할 예정입니다. 제가 잘못된 길로 가지 않도록, 댓글로 brunch.co.kr 필수 과제 1. 어노테이션이 어떤 기능을 하는지 정리 스프링 : @Res.. Tech/Spring 2021. 1. 10. Gradle로 빌드하고 jar파일 실행하기(터미널) dncjf64.tistory.com/223 IntelliJ IDEA와 Git Bash 연동하기 medium.com/@violetboralee/intellij-idea%EC%99%80-git-bash-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0-63e8216aa7de IntelliJ IDEA와 Git Bash 연동하기 JetBrains 계열의 IDEA와 Git Bash를 연동하는 방법을 소개.. dncjf64.tistory.com 앞서 올린 인텔리제이에 Git Bash 연동하기를 선행한 기준으로 기록 터미널을 열면 프로젝트 루트경로가 뜸 명령어 순서 1 : ./gradlew build로 빌드 2 : cd build -> cd libs로 이동 (libs 폴더가 생성되지 않았으면 빌드가 .. Tech/Spring 2020. 11. 29. 이전 1 2 다음