BE 프로젝트 일대기9 AOP로 API 시간 측정하기 로깅은 사용자의 요청을 추적하여 시스템이 애플리케이션이 어떻게 돌아가고 있는지 효율적으로 확인할 수 있는 수단이에요. 그님스 백엔드 팀에서는 모든 API 호출 시, 로그를 남기고 이에 더해 응답 시간을 계산해서 제공하고 있습니다. 목차 1. AOP 살짝 맛보기 2. API 응답 시간 Aspect 1. AOP 살짝 맛보기 AOP는 여러 객체에 공통으로 적용할 수 있는 기능을 분리해서 재사용성을 높여주는 프로그래밍 기법이에요. 이에 대한 자세한 설명은 제가 작성한 블로그에서 확인하실수 있습니다. (스프링5 프로그래밍 입문 - ch7. AOP 프로그래밍 - (2) AOP) API 응답 시간을 남기는 AOP 코드를 보기전에 AOP에 대해 살짝 맛볼게요 (1) @Asepect AOP를 적용할 클래스에 명시합니다... 2023. 4. 1. [Be] 비밀번호 재설정 안녕하세요. 이번 글에서는 Gnims 서비스의 비밀번호 재설정을 할 때 서버에서 어떻게 동작하는지 소개해볼려고 합니다. 목차 비밀번호 재설정 흐름 코드 생성 및 이메일 발송 코드 복붙하기 코드 체크 비밀번호 재설정 추가로 고려한 사안 트러블 슈팅 마무리 (개선할점 등) 1. 비밀번호 재설정 흐름 먼저 비밀번호 재설정 흐름을 소개할려고 합니다. 1) 이메일 날리는 api 호출 2) 코드 생성 및 이메일 발송 2.5) 사용자가 인증 코드를 복붙 3) 인증 코드 확인하는 api 호출 3.5) 비밀번호 재설정하는 페이지로 넘어감 4) 비밀번호 재설정하는 api 호출 2. 코드 생성 및 이메일 발송 먼저 비밀번호 재설정 버튼을 누르면 뜨는 화면입니다. 인증 요청 버튼 클릭 시 해당 api가 호출 됩니다. 이제 해.. 2023. 3. 13. Gnims - 인증 방식 안녕하세요. 이번 글은 그님스 서비스의 인증 방식과 앞으로 인증 방식 관련 개선할 수 있는 사항들에 대해 소개해 보려합니다. 목차 인증 / 인가? 인증 방식? 해결 방안 왜 Jwt 토큰을 사용 했는가? 앞으로 적용해 볼 수 있을 것들! 인증 / 인가? 인증이란 내가 누구인지 인증한다 라고 설명할 수 있습니다 어떤 웹 서비스를 이용한다고 가정할 때 이 웹은 사용자가 누구인지 모릅니다 그래서 로그인을 통해서 내가 누구인지 알려주고, 등록된 회원이면 '인증된 회원' 등록안 된 회원이면 '등록 안 된 회원' 등으로 구분 할 수 있습니다. 인가는 어떤 리소스에 대한 권한이라고 생각하시면 편하겠습니다. 예를 들어, 철수와 맹구라는 아이들이 있고 철수는 매일 비밀 '일기'를 쓰고 있다고 가정하겠습니다. 그리고 맹구는.. 2023. 3. 11. [BE] 소셜 로그인 목차 1. 소셜로그인을 도입한 이유 2. OAuth2 인증 이란? 3. 소셜서버와의 연결 과정 4. 엑세스 토큰 얻기 5. 사용자 정보 얻기 6. 아쉬웠던 점 1. 소셜 로그인을 도입한 이유 ○ 제일 큰 이유는 사용자의 편의성이라고 생각합니다. 버튼을 몇번 클릭하는 것만으로도 간편하게 로그인 할 수 있고, 이러한 편의성 하나하나들을 통해서 사용자들이 더 이 서비스를 찾을 이유가 될 수 있다고 생각하기 때문입니다. 2. OAuth2 인증 이란? 소셜 로그인 구현을 구글에 검색하면 OAuth2 인증이 같이 검색이 되는 것을 알 수 있습니다. 그럼 OAuth2 인증이 무엇일까요? ○ OAuth2 인증이란, 요약해서 인증을 소셜서버에 위임하는 것이라고 말할 수 있습니다. 예를 들어, 사용자가 카카오 로그인을 클.. 2023. 3. 9. GNIMS - 유저검색하기 안녕하세요. 그님스 백엔드 유민우입니다! 오늘은 유저 검색하기 부분을 만들면서 검색부분이 어떻게 발전해왔는지 적어볼까합니다. 우선 유저 이름으로 검색했을 때, 조회 될 것은 유저Id, 유저이름, 유저프로필이미지, 그리고 현재 로그인 한 유저가 검색된 유저를 팔로우 했는지 여부였습니다. (+ 로그인한 본인의 이름은 안나오게) ERD를 보시면 아시겠지만 유저와 팔로우의 테이블이 따로 되어있습니다. 1) JPA를 이용한 첫번째 방법이었습니다. 이 코드를 들여다 보면... 1. username으로 매칭되는 이름들을 모두 찾고 2. myName으로 로그인한 본인의 이름은 안나오게 했으며 3. Pageble 매개변수를 활용하여 페이징 처리까지 해주었습니다. 결과는 ... 검색어 '유'로 최대 1000개의 데이터 조.. 2023. 2. 27. 그님스 BE는 코드 리뷰를 합니다. 그런데 잘되고 있나요...? BE 팀은 언제 코드 리뷰를 하나요? 코드 리뷰는 다음과 같이 이뤄집니다. 1. 개인 repository feature 브랜치에서 작업 진행 2. 조직 repository dev 브랜치로 작업물 PR (최소 한 명의 리뷰어에게 승인을 받아야 merge 가능) 3. 코드 리뷰 4. merge 코드 리뷰를 도입하게된 계기 지금으로부터 약 7주 전, 스프링 1주차, 2주차 미션을 수행하면서 김선용 멘토님, 고성빈 멘토님께 코드 리뷰를 받았었는데요. 좋았어요. 그래서 실전 프로젝트에는 코드 리뷰를 도입하고 싶었습니다. 그렇다면 7주 전에 제 자신은 도대체 코드 리뷰의 무엇이 좋았던 것일까요? 성장하는 느낌 효과적인 코드리뷰를 위한 리뷰어의 자세에서 나오는 좋은 리뷰어의 자세를 가지고 코드 리뷰를 진행해주셨습니다.. 2023. 2. 26. GNIMS - 수락/거절 대기중인 일정 조회 API 최적화 일대기 안녕하세요. 그님스 백앤드 이재헌입니다. 오늘도 저의 주된 업무는 쿼리 최적화입니다. 오늘은 목차 없이 편하게 써볼게요. 우선, 오늘로 제가 맡은 조회 API 쿼리 최적화 작업을 끝냈습니다. 와이어 프레임을 잘 못 해석한 탓에 수락 대기중인 스케줄 조회 API를 이상하게 만들었어요. 그럼에도 불구하고 잘 만들어주신 FE 동환님께 무수한 감사를 드립니다:) 뭐가 이상하냐구요? 와이어 프레임을 한 번 보시죠. 와이어 프레임을 보면 초대 받은 사람의 이름, 프로필을 딱히 내려줄 필요는 없었어요. 최적화 작업을 진행하는 김에 응답 API도 변경했습니다. 별 일 아닌데 왜 글까지 쓰는거야? 언뜻 보면 Event, Schedule이 양방향 연관관계이기 때문에 Users 엔티티에 자유롭게 접근할 수 있는 것처럼 보입.. 2023. 2. 22. GNIMS - 디데이 계산 방식이 변경됩니다! 안녕하세요. 그님스에서 일정, 팔로우 도메인을 맡고 있는 이재헌입니다. 오늘은 일정 도메인 기능 중 디데이와 관련 부분에 큰 변화가 있어 공유해보려고 합니다. 목차 1. 기존 d-day 방식 2. 변경된 d-day 방식 3. scheduler 선택 이유 4. d-day 조회 방식 변경 사유 기존 d-day 방식 아래 사진은 현재 그님스의 메인페이지 와이어 프레임입니다. 일정 카드를 보시면 좌측 하단에 디데이가 표기되는걸 볼 수 있습니다. 기존 코드에서 디데이를 계산하는 방식은 아래와 같습니다. 1. DB에서 조회 API에 필요한 Event 테이블 정보 SELECT 2. 메모리 상에서 디데이를 계산하여 프론트 서버로 응답 1. DB에서 Event 테이블의 정보를 가지고 옵니다. @Query(value = .. 2023. 2. 16. GNIMS - JPA 쿼리 최적화를 해봅시다! 안녕하세요. 그님스에서 일정, 팔로우 도메인을 맡은 BE 이재헌입니다. 저는 오늘 JPA를 사용하면서 성능을 위해 꼭 해결해야할 문제 중 하나인 N + 1에 대해 공유하려고 합니다. 목차 1. 그님스 프로젝트로 N + 1문제에 대해 알아봐요. 2. 그래서 N + 1은 왜 발생하나요? 3. 어떻게 해결하실거죠? 4. 성능 비교 그님스 프로젝트로 N +1 문제에 대해 알아봐요:) 1번 쿼리를 날렸을 때 의도치 않게 연관된 엔티티의 쿼리가 N번 추가로 실행되는 것을 말합니다. 현재 제가 맡은 도메인의 ERD는 아래와 같습니다. 스케줄 상세 조회 API의 응답하는 데이터 구조는 아래와 같습니다. 보시는 봐와 같이 단건의 스케줄 조회 API에서는 이벤트, 유저 엔티티가 스케줄 엔티티와 연관되어 있습니다. 그래서 .. 2023. 2. 14. 이전 1 다음