Spring - 회원 팔로우 기능 구현
·
Spring
배경 요즘 취업 준비때문에 정신이 없다. 틈내서 사이드 프로젝트를 진행중이다. 이번에 회원 팔로우 기능을 구현했다. 구현한 과정을 정리해본다. 개발 환경 Java 11 Spring 2.x JPA Gradle MySQL, Redis IntelliJ 요구사항 회원을 팔로우할 수 있습니다. 팔로우한 회원을 언팔로우 할 수 있습니다. 회원의 팔로워 수와 팔로잉 수를 확인할 수 있습니다. 관계 Member의 자기 참조 관계를 사용해서 Follow 엔티티를 구현했다. Follow는 Member를 참조하고 있고, 이를 통해서 팔로워(follower)와 팔로잉(following) 간의 관계를 나타내게 했다. 구현 Member @Entity @Getter @DynamicInsert @NoArgsConstructor(ac..
Spring - Spring Boot 초기 데이터 설정 (data.sql)
·
Spring
프로젝트를 진행하면서 회원 가입할 때 선택할 수 있는 관심사 태그가 필요했다.Enum으로 관리할지 테이블로 관리할지 고민했었는데, 동적으로 관리해야 할 필요가 있어서 테이블로 관리하기로 했다.관심사 태그는 미리 지정되어 있기 때문에 데이터를 미리 넣어 사용하도록 해야 했다.그럼 Spring Boot에서 어떻게 초기 데이터를 설정하는지 알아보자 yml 설정spring: ... jpa: hibernate: ddl-auto: create defer-datasource-initialization: true sql: init: mode: alwaysspring.jpa.hibernate.ddl-auto: create:  Hibernate가 데이터베..
Spring - 통합 테스트에서 S3 Mock 객체로 S3 자원 아끼기
·
Spring
배경 파일 업로드를 위해 S3를 연결하고 테스트하는 과정에서 문제가 발생했다. S3에 테스트를 위해 생성한 파일들이 계속 저장되어 있던 것! 단위테스트는 Mock을 사용하기 때문에 문제가 없었지만 통합테스트에서는 모든 로직이 그대로 실행되서 저장되는 로직이 포함된 만큼 파일이 S3에 저장됐다. 프리티어를 사용하고 있었기 때문에 GET, POST를 요청을 보낼 수 있는 횟수 제한이 있었고 정신없이 테스트를 돌리다보니 GET 500회, POST 900회나 실행되고 있었다. 이 문제를 해결하기 위해 통합 테스트에서도 S3를 Mock으로 만들어 사용해야 했다. 구현 AwsS3Config 기존에 AmazonS3 Bean을 생성하기 위한 코드이다. 해당 Bean을 사용하지 않도록 Test용 Bean을 만들어서 사용..
Spring - 좋은 단위 테스트를 만드는 방법(JUnit)
·
Spring
이 글은 KSUG 최한뫼님이 번역하신 블로그를 정리한 것입니다. 원본은 링크를 참조해주세요. 비용을 천문학적으로 증가시킴에도 불구하고 프로젝트에 정말 아무런 도움이 되지도 않는 단위 테스트를 작성하기란 정말 쉽다. 단위 테스트는 버그를 찾기 위한 것이 아니다.단위 테스트의 의도를 정확히 이해하는 것이 중요하다. 단위 테스트는 단순히 버그를 찾기 위한 효과적인 방법이 아니다.단위 테스트는 시스템의 각각의 단위들을 개별적으로 조사하는 것이다. 시스템이 구현되어 실제 환경에서 동작할 때 모든 단위들은 완벽하게 하나의 유기체로 동작해야 한다.단위 테스트가 독립적으로 잘 작동한다고 전체 기능이 잘 작동하는 것이 아니다. 따라서 단순히 버그를 찾기 위한 것이라면 통합 테스트에서 진행하는 것이 효과적이다. 단위 테스..
Spring - 이메일 인증 구현해보기 (랜덤 인증번호 보내기)
·
Spring
배경새로 시작하게 된 프로젝트에서 회원가입 중 이메일 인증을 하도록 했다.Spring에서 제공하는 API를 사용하면 생각보다 쉽게 구현할 수 있다. 나는 Google SMTP 서버를 이용해서 이메일 인증을 진행하도록 했다. 개발 환경Java 11Spring 2.xGradleMySQL, RedisIntelliJ 흐름사용자는 회원가입 화면에서 가입하려는 이메일을 입력 후 이메일 인증 버튼 클릭클라이언트 서버에게 사용자의 이메일로 인증 번호 전송 요청서버는 랜덤 인증 번호 생성. 인증 번호를 Redis에 저장 후 사용자의 이메일로 인증 번호 전송사용자는 인증 번호 확인 후 인증 번호 입력 후 확인 버튼 클릭클라이언트는 서버에게 인증 번호 검증 요청서버는 전달받은 인증 번호가 Redis에 저장된 인증 번호와 동..
Spring - 로컬 환경을 위한 Embedded Redis 적용하기 (+ Can't start redis server. Check logs for details)
·
Spring
배경JWT를 활용한 Spring Security를 작업하면서 Refresh Token을 저장하기 위해서 처음으로 Redis를 Spring에 적용해 봤다. Redis를 공부하면서 알게 된 Embedded Redis가 무엇인지 정리해 보고 적용했던 과정을 정리해 본다. Embedded RedisEmbedded Redis는 로컬 개발 환경이나 테스트 환경에서 Redis를 쉽게 실행할 수 있도록 도와주는 도구이다. Embedded Redis를 사용하면 외부 Redis 서버를 설치하고 구성할 필요 없이 애플리케이션 내에서 Redis를 실행할 수 있다. 기존에는 Redis는 서버에서 실행되고 Redis 클라이언트가 Redis 서버에 연결해서 데이터를 조작한다. 하지만 Embedded Redis를 사용하면 애플리케이..
Spring - Redis를 사용해보자
·
Spring
배경 진행 중인 프로젝트의 Security 작업을 담당하면서 JWT Refresh Token을 Redis에 저장하여 관리하기로 했다. 왜 Redis? Redis는 메모리 기반의 Key-Value 저장소이다. 메모리에 데이터를 저장하기 때문에 훨씬 빠르게 데이터에 접근할 수 있다. 따라서, Redis를 캐시로 사용하면 웹 서버에서 반복적으로 사용되는 데이터를 메모리에 저장하여 매번 데이터베이스에서 읽어오는 비용을 아낄 수 있다. 가장 큰 이유는 Redis는 TTL(Time-To-Live) 기능을 제공하기 때문에 데이터의 만료 시간을 설정할 수 있기 때문이다. 이를 통해 서버에 저장할 Refresh Token의 만료 시간을 쉽게 설정할 수 있게 된다. 만료된 Refresh Token은 Redis에서 자동으로..
Spring - Spring Security + JWT 4편: Access Token 재발급
·
Spring
Spring Security + JWT 적용기 3편: 로그아웃에 이어지는 글입니다. Spring - Spring Security + JWT 적용기 3편: 로그아웃Spring Security + JWT 적용기 2편: JWT검증 이어지는 글입니다. Spring - Spring Security + JWT 적용기 2편: JWT 검증 `Spring Security + JWT 적용기 1편: 로그인`에 이어지는 글입니다. Spring - Spring Security + JWT 적용기 1green-bin.tistory.com이번에는 Refresh Token으로 Access Token을 재발급하는 과정에 대해 정리해보려고 한다. 왜 Refresh Token을 사용할까?로그인을 통해 JWT를 발급 받고 요청을 보낼 때 A..
Spring - Spring Security + JWT 적용기 3편: 로그아웃
·
Spring
Spring Security + JWT 적용기 2편: JWT검증 이어지는 글입니다. Spring - Spring Security + JWT 적용기 2편: JWT 검증`Spring Security + JWT 적용기 1편: 로그인`에 이어지는 글입니다. Spring - Spring Security + JWT 적용기 1편: 로그인 Spring Security란? Spring Security는 Spring에서 인증(Authentication)과 인가(Authorization) 기능을 지원하green-bin.tistory.com만약 사용자가 로그아웃을 하게되면 발급했던 토큰은 어떻게 관리해야 할까? 이번 시간에는 사용자가 로그아웃을 했을 때의 Security 처리에 대해 알아보자 로그아웃 흐름클라이언트에서 서버로..
Spring - Spring Security + JWT 적용기 2편: JWT 검증
·
Spring
`Spring Security + JWT 적용기 1편: 로그인`에서 이어지는 글입니다. Spring - Spring Security + JWT 적용기 1편: 로그인Spring Security란? Spring Security는 Spring에서 인증(Authentication)과 인가(Authorization) 기능을 지원하는 보안 프레임워크로써, Spring MVC 기반 애플리케이션에 보안을 적용하기 위한 표준이다. Spring Security 덕green-bin.tistory.com이전 글에서 Spring Security + JWT를 통한 로그인을 통해 서버에서 JWT를 생성해서 클라이언트에 보내주었다. 이제 클라이언트에서 요청과 함께 전달한 JWT Access Token을 검증해야 한다. JWT 검증 ..
Cold Bean
'Spring' 카테고리의 글 목록 (2 Page)