인기 게시글
· Spring Boot
2024.01.07 - [Spring Boot] - [Spring Boot] 로그인 기능 구현 (0) - 공통 기능, 코드 구현 [Spring Boot] 로그인 기능 구현 (0) - 공통 기능, 코드 구현 0. 상황 설명 여러가지 방법을 사용해서 로그인 기능을 구현하려 함 공통인 기능과 코드는 이 게시글에서 모두 정리 방법마다 다른 코드는 각 게시물에서 따로 정리 * 구현한 로그인 기능 프로젝 blogan99.tistory.com 1. OAuth 란 ? 사용자가 비밀번호를 사용하지 않고 소셜 서비스 (구글, 카카오톡 등) 의 접근 권한을 현재의 다른 애플리케이션에 안전하게 위임할 수 있도록 하는 개방형 표준 프로토콜 쉽게 말하면 사이트에 회원가입하지 않고 구글, 카카오톡 등으로 로그인 하는 기능 액세스 ..
· Spring Boot
2024.03.15 - [Spring Boot] - [Spring Boot] JSON 객체 송수신 예제 [Spring Boot] JSON 객체 송수신 예제 1. JSON 이란 JSON : JavaScript Object Notation 데이터 저장, 전송 등에 사용되는 데이터 교환 형식 서버와 클라이언트 사이의 데이터 교환에 주로 사용됨 키 : 값 형태를 가짐 ex : "name": "홍길동" 2. 기본 클 blogan99.tistory.com 위의 게시물과 내용이 이어짐 1. JsonString 를 Object 로, Object 를 JsonString 으로 변환 방법 Json 형태로 입력받은 String을 Object로 변환 입력받은 Objcet 를 Json 형태의 String으로 변환 JSONPars..
· Spring Boot
다양한 사이트에서 쉽게 볼 수 있는 회원가입 시 이메일 검증스프링 부트로 사용자에게 메일 전송 기능 구현 1. 구글 Gmail SMTP 사용 위한 설정 구글 사이트 > 프로필 클릭 > Google 계정 관리 검색창에 > "앱 비밀번호" 검색 앱 이름 설정 > 만들기 16자리의 앱 비밀번호가 생성됨 2. build.gradledependencies { // 메일 전송 위한 라이브러리 추가 implementation 'org.springframework.boot:spring-boot-starter-mail' // 예제에서 확인을 위한 타임리프 추가 (필요하지 않다면 넣지 않아도 됨) implementation 'org.springframework.boot:spring-boot-s..
· Spring Boot
2024.01.07 - [Spring Boot] - [Spring Boot] 로그인 기능 구현 (0) - 공통 기능, 코드 구현 [Spring Boot] 로그인 기능 구현 (0) - 공통 기능, 코드 구현 0. 상황 설명 여러가지 방법을 사용해서 로그인 기능을 구현하려 함 공통인 기능과 코드는 이 게시글에서 모두 정리 방법마다 다른 코드는 각 게시물에서 따로 정리 1. 프로젝트 버전 정보 / DB 스 blogan99.tistory.com 0. 스프링 시큐리티란 ? 스프링 시큐리티에 대한 내용은 이전 게시물 ( 2024.01.07 - [Spring Boot] - [Spring Boot] 로그인 기능 구현 (3) - 스프링 시큐리티 로그인) 참고 1. JWT 란 ? JWT (Jason Web Token) :..
· Spring Boot
1. Maven MySQL 연동 MySQL dependency 추가하기 1. https://mvnrepository.com/ 2. 검색창에 mysql 검색 3. MySQL Connector/J 클릭 4. 현재 MySQL 버전 클릭 5. Maven 선택 > 코드 복사 6. pom.xml에 붙여넣기 pom.xml 4.0.0 jpa-basic ex1-hello-jpa 1.0-SNAPSHOT 21 21 UTF-8 org.hibernate hibernate-entitymanager 5.6.15.Final com.mysql mysql-connector-j 8.2.0 javax.xml.bind jaxb-api 2.3.0 persistence.xml 프로젝트 > src > main > resources 에 아래 이름의..
· Spring Boot
2024.01.07 - [Spring Boot] - [Spring Boot] 로그인 기능 구현 (0) - 공통 기능, 코드 구현 [Spring Boot] 로그인 기능 구현 (0) - 공통 기능, 코드 구현 0. 상황 설명 여러가지 방법을 사용해서 로그인 기능을 구현하려 함 공통인 기능과 코드는 이 게시글에서 모두 정리 방법마다 다른 코드는 각 게시물에서 따로 정리 1. 프로젝트 버전 정보 / DB 스 blogan99.tistory.com 1. 스프링 시큐리티 (Spring Security) 란 ? 스프링에서 제공하는 프레임워크, 애플리케이션에 인증, 인가 기능을 제공함 동작 원리 로그인 시도 시, 인증 필터가 작동하여 사용자의 id, 비밀번호를 가져옴 인증 필터는 id, 비밀번호를 Authenticati..
최신 게시글
1. 문제 상황 파악프로젝트에 쿠폰을 보유하지 않은 회원 목록에 대해 이메일 전송 기능을 구현함샘플 유저 데이터 20개를 삽입 후 이메일 전송 기능을 테스트했을 때 시간이 꽤 걸리는 것을 확인 ⇒ 실제 소요 시간을 찍어보기로 함 1-1. 전송 시간 측정 결과구현한 api는 이메일 주소 1개에 대해 이메일을 전송하는 기능을 가짐따라서 api 호출만의 소요 시간으로는 여러개 이메일 전송에 걸리는 시간을 측정하기 어려울 것이라 판단⇒ 현재 FE에서 비동기적으로 api를 호출하므로 총 시간을 브라우저의 콘솔에 출력해보기로 함더보기FE 코드 일부 // 이메일 전송 함수 일부try { await Promise.all(selectedEmails.map(async (email, index) => { ..
· MongoDB
1. Mongo DBNoSQL 데이터베이스, 문서 지향 데이터베이스NoSQL : ‘Not Only SQL’RDBMS와는 데이터 저장 방식이 다름스키마가 고정되지 않아, 다양한 형태의 데이터 저장 가능구조화되지 않은 데이터나 반정형 데이터 (JSON, XML 등) 효과적 처리 가능데이터를 JSON과 유사한 BSON (바이너리 JSON) 형식으로 저장유연한 데이터 모델링 가능, 스키마가 변경되더라도 적응이 쉬움 1-1. Mongo DB 사용 이유 및 장점유연한 스키마위에 언급했듯이 스키마가 고정되어 있지 않아, 데이터 구조 변경이 쉬움데이터를 여러 서버에 분산 저장 가능 ⇒ 데이터 증가에 유연한 대응 가능성능대량 데이터 읽고 쓰기가 빠름인덱스 및 샤딩 (sharding) 을 통해 쿼리 성능 최적화 가능복잡한..
1. 문제 상황 파악프로젝트에 STOMP를 통해 1:1 채팅 기능을 구현함페이지네이션 적용해 무한 스크롤까지 구현된 상황 채팅 전송위의 그림과 같은 순서를 가지며 매번 채팅을 전송할 때마다 DB에 접근함채팅 조회⇒ 다수의 사람이 채팅을 전송 및 조회할 때 모든 요청이 DB에 접근하게 된다면 과부하가 발생하거나 성능이 저하될 것이라고 판단해 성능 개선하려고 함 2. 해결 방법 및 현재 상황에 적용일반적인 방법 혹은 채팅 아키텍처가 아니지만 프로젝트 진행 도중 조금이라도 성능 개선할 수 없을까하는 생각에 도입함 2-1. 캐싱(caching)자주 사용되는 데이터를 임시 저장소 ( = 캐시, cache)에 저장해 동일한 요청이 들어왔을 때 더 빠른 응답이 가능하게 하는 기술캐시일반적으로 메모리에 위치함 (대표적..
1. 문제 상황 파악프론트엔드에서 무한 스크롤 기능을 추가함에 따라 백엔드에서 채팅 조회 시 페이지네이션을 적용함약 1000~2000개의 채팅 추가 후 확인 시 조금씩 느려짐을 확인함 데이터가 많아지면 느려지는 문제를 확인해보기 위해 아래의 과정대로 1,000,000개의 데이터를 삽입하고 테스트를 진행함1. 채팅 메시지 테이블에 1,000,000개의 샘플 데이터를 삽입2. 가장 마지막 20개의 채팅 조회⇒ 백만개의 데이터 (생성일 기준 내림차순) 중 가장 마지막에 해당하는 20개를 조회할 때 2.08초가 소요됨3. 그렇다면 데이터가 1억, 10억개 ... 등 더 많이 존재한다면 조회 시간이 기하급수적으로 늘어날 것이라고 판단해 성능 개선하려고 함 2. 문제 원인 파악2-1. 기존의 페이지네이션 기법off..
1. 문제 상황 파악쿠폰 보유 회원 목록 조회 시 CouponMember 테이블에서 특정 쿠폰 id에 해당하는 객체를 가져오는 메서드 호출함// CouponAdminService.java 의 findCouponMembers() 메서드 내부Page couponMembers = couponMemberRepository.findByCouponId(pageRequest, couponId);// CouponMemberRepository.javaPage findByCouponId(Pageable pageable, Long couponId);의도한 바는 쿠폰id를 비교해서 가져오는 쿼리 한 번 발생하는 것임⇒ 그러나 의도한 쿼리 이외에 쿼리가 3개 더 생성되었음! 추가적으로 발생한 3개의 쿼리는 쿠폰을 보유한 회원을..
1. 문제 상황 파악컨트롤러 단위 테스트 코드 작성 (@WebMvcTest 사용)시 아래와 같은 에러 발생// 에러가 발생한 테스트 코드@WebMvcTest(CartController.class)@AutoConfigureMockMvc(addFilters = false) // 필터 제외 (JWT 검증 제외)@TestMethodOrder(MethodOrderer.OrderAnnotation.class)@DisplayName("장바구니 컨트롤러 단위 테스트")class CartControllerTest { @Autowired private MockMvc mockMvc; @MockBean private CartService cartService; @Autowired private..
공대생안씨
공대생의 코딩 일기