Spring
-
SMTP 서버를 통한 이메일 보내기Spring 2021. 10. 26. 22:43
spring에서 이메일 보내기 🌱 패스워드를 잊어버렸을때 임시비밀번호를 생성해서 등록된 유저의 이메일로 보내주도록 해보자. dependency org.springframework.boot spring-boot-starter-mail 먼저 메일을 이용하기 위해서 spring-boot-starter-mail을 dependency에 추가해준다. 네이버 이메일 host 등록하기 먼저 사용할 메일 환경설정에 들어가서 smtp사용을 사용함으로 설정해준다. application.properties #Mail spring.mail.host=smtp.naver.com spring.mail.port=가려진 포트번호를 가져와서 등록 spring.mail.username=보내려는 이메일 spring.mail.password=..
-
OAuth2 사용해서 react와 함께 소셜로그인 기능 만들기Spring 2021. 10. 26. 21:40
로그인 창에서 많이 볼 수 있는 소셜로그인 기능을 만들어보자. 여기서 인증이 완료된 후 생성한 토큰을 어떻게 프론트엔드로 다시 보낼까에 대한 부분이 어려웠다 😵💫 (결론은 쿠키를 통해서 확인된 uri에 생성된 토큰 붙인 새로운 uri 생성하고 다시 보내기...!) 구글 프로젝트 계정 만들기 https://console.cloud.google.com/apis Google Cloud Platform 하나의 계정으로 모든 Google 서비스를 Google Cloud Platform을 사용하려면 로그인하세요. accounts.google.com 먼저 홈페이지에 들어가서 로그인을 해준 후 , API 및 서비스 항목으로 들어간다. 적용할 프로젝트를 생성해준다. OAuth 동의화면으로 가서 앱 정보를 입력해준다. ..
-
TDD (Test Driven Development) : 단위 테스트 작성하기Spring 2021. 10. 26. 17:18
개발단계에서의 오류와 자체 버그 검출 능력을 향상시키기 위해서 TDD(테스트 주도 개발)의 개발이 사용되고 있다. TDD를 통해 개발을 진행한다면 코드 재사용과 관리가 용이해지므로 테스트 주도 개발을 하는 습관을 들이도록 하자. (나는 완전 초보이므로 ㅠㅠ 이제 단위테스트의 부분부분을 배워가고 있다) F.I.R.S.T 원칙 단위 테스트 코드를 작성할 때 주의해야 하는 원칙은 5가지 이다. F : Fast -> 테스트 코드는 빨리 진행이 되어야 한다. I : Independent -> 독립적으로 실행이 가능해야 한다. R : Repeatable -> 반복이 가능해야 한다. S : Self Validating -> 테스트 코드만 실행해도 성공여부를 확인할 수 있어야 한다. T : Timely -> 바로 사용..
-
JPA delete 쿼리가 실행되지 않을 때Spring 2021. 10. 26. 16:44
프로젝트 진행시에 JPA를 사용하면서 따로 쿼리설정을 해주지 않아도 findBy(column)의 형태가 가능하였다. 그래서 deleteBY(column)의 형태를 사용하려고 하였으나 데이터가 삭제되지 않았다 원인 EntityManager open -> SELECT 쿼리 실행 -> EntityManager closed -> DELETE쿼리 예외 발생 의 순으로 진행되기 되는데 이는 @Transactional 어노테이션이 붙어있는 JPARepository에 deleteBy...의 형태가 없기 때문이다. 해결 다음과 같이 사용하고자하는 deleteBy...에 @Transactional어노테이션을 붙여 해결하였다. public interface PostImageRepository extends JpaReposi..
-
Controller와 RestController ( + ResponseEntity)Spring 2021. 10. 26. 14:52
controller와 달리 restcontroller에서는 페이지를 반환하는 것이 아니기 때문에, 예외적인 상황에서 문제가 발생할 수 있다. 따라서 ResponseEntity를 이용하여 상태코드를 조절하도록 한다. Controller 전통적인 @Controller는 주로 view를 반환하기 위해 사용한다. 클라이언트가 URI 형식의 request를 보내면, mapping되는 handler와 타입을 찾는 dispatcher servlet이 요청을 처리하고, Controller에서 일을 처리한 후에 dispatcher servlet에게 보내면 view를 클라이언트에게 response로 보내는 형식이다. view를 반환하기 위해서는 ViewResolver가 사용되며 설정에 맞게 view를 찾아 렌더링 해준다...
-
DTO를 통해 mapping된 엔티티 데이터 묶어서 보내기 ( + 순환참조 방지 DTO)Spring 2021. 10. 26. 14:17
DTO를 통해 엔티티 정보와 함께 참조된 데이터를 백엔드에서 프론트엔드로 보내고자 할 때, 일일이 나열하여 하나씩 데이터를 보내는 것이 아닌 json객체의 형식과 같이 데이터 안에 데이터 묶음으로 전하고자 하였다. 엔티티 mapping 상태 @Entity @Table(name = "user") @Getter @Setter @NoArgsConstructor public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column(name = "firstname", nullable = false, length = 45) private String firstname; @Column(name = "l..
-
controller에서 파라미터를 받는 방법 : @RequestParam, @RequestBody, @PathVariable (+ DTO를 포함하는 DTO)Spring 2021. 10. 26. 13:18
스프링에서 프론트엔드에서 넘어온 데이터를 받는데에는 대표적으로 3가지 방식이 있다. @RequestParam @GetMapping("/activity") public ActivityDTO getActivity(@RequestParam(value = "id", required = true)String id){ Integer activityId = Integer.parseInt(id); return activityService.getActivity(activityId); } @RequestParam에서는 프론트엔드로부터 http://localhost:8080/activity?id=2 의 형식으로 요청이 넘어오게 된다면 물음표 뒤의 아이디 값을 받는 어노테이션이다. value 혹은 name으로 넘어오는 데이터..