반응형
AOP를 활용해서 메서드 실행시간 측정하기
개발 기록2024. 9. 8. 10:35AOP를 활용해서 메서드 실행시간 측정하기

개발을 하다보면, 간단하게 메서드의 실행시간을 측정해보고자 할 일 이 많습니다.그동안 저는 이럴 때 보통 아래처럼 System.currentMillis()를 측정하고자 하는 메서드의 위아래로 찍어 시간을 측정했습니다.public class MyClass { public void MyMethod() { long startTime = System.currentMillis(); // .. 로직 long endTime = System.currentMillis(); long resultTime = endTime - startTime; System.out.println("resultTime = " + resultTime + "ms"); }} ..

Spring Security 없이 확장성을 고려한 OAuth2.0 소셜 로그인 개발(1) - 구글 Client ID, Client Secret 발급받기
개발 기록2024. 8. 11. 18:18Spring Security 없이 확장성을 고려한 OAuth2.0 소셜 로그인 개발(1) - 구글 Client ID, Client Secret 발급받기

회사에서 신규 서비스를 개발하면서, OAuth2.0을 활용한 소셜 로그인 기능을 개발하게 되었습니다. 이전에도 사이드프로젝트에서 소셜 로그인 기능 개발은 해봤었는데, 단순히 동작하는 것에만 의의를 두고 여러 레퍼런스들을 참고해가며 거의 복사 붙여넣기로 개발을 했었습니다... 거의 맨땅에 헤딩하던 식으로 '구현' 자체는 성공했던 기억이 있는데, 이후 OAuth2.0 흐름에 대하여 정리를 하거나 코드 흐름에 대하여 딱히 다시 돌이켜본 적은 없었기에, 시간이 지나고 나니 머릿속에 아무것도 남아있지 않더군요.. 그래도 한번 해봤던 것과 아예 안해본 것의 차이는 있기에, 다시 보니 기억나는 부분도 있고 이전에 사이드 프로젝트를 진행할 때 보다는 짬바(?)가 좀 늘어서 별 탈 없이 업무는 성공적으로 마무리할 수 있..

사이드 프로젝트 [국비의 모든것] - 게시글 삭제 구현
개발 기록2023. 6. 13. 00:13사이드 프로젝트 [국비의 모든것] - 게시글 삭제 구현

목차요구사항 분석구현테스트 이번에는 비교적 간단한 게시글 삭제 기능을 개발하여보겠습니다. 위의 게시글 상세보기 화면에서, 빨간색 동그라미를 친 삭제하기 버튼을 눌러봅니다. 위와 같은 Confirm 창이 뜨고, 확인을 누른다면 게시글 삭제 기능을 수행합니다.요구사항 분석게시글 상세보기 페이지에서, 현재 로그인된 사용자와 일치하는 사용자가 게시글 삭제를 요청한다면 게시글을 삭제합니다.게시글 삭제가 완료되면, 삭제된 게시글의 카테고리에 해당하는 게시물 목록 페이지로 이동합니다. 구현- BoardController.java@Slf4j@RestController@RequiredArgsConstructor@RequestMapping("/api/v1/boards")public class BoardApiControll..

사이드 프로젝트 [국비의 모든것] - 게시글 작성 구현
개발 기록2023. 6. 12. 23:23사이드 프로젝트 [국비의 모든것] - 게시글 작성 구현

목차UI요구사항 분석기능 구현 여느 커뮤니티 사이트에 있는 필수 기능인 게시글 작성 기능을 개발해보도록 하겠습니다.UI - BoardController.java/** 커뮤니티 작성 폼 */@GetMapping("/community/new")public String boardForm(@ModelAttribute CommunityFormDto form) { return "board/community/communityForm.tiles1";}먼저 /boards/community/new 로 Get 요청시, communityForm.jsp 를 서버사이드 렌더링합니다. 렌더링된 화면은 다음과 같습니다.  요구사항 분석위의 UI를 토대로 요구사항을 정의해보겠습니다.글 작성한 뒤, 간단하게 클라이언트에서 유효성 ..

사이드 프로젝트 [국비의 모든것] - 게시글 추천, 댓글 추천 기능 구현
개발 기록2023. 6. 12. 21:15사이드 프로젝트 [국비의 모든것] - 게시글 추천, 댓글 추천 기능 구현

목차UI/UX요구사항추천서비스 개발결과 쿼리UI/UX 요구사항추천은 게시글 추천, 댓글 추천을 할 수 있습니다.추천을 한 상태에서 한번 더 추천을 누르면(요청을 한다면) 추천을 취소합니다.추천서비스 개발먼저 요청을 처리하는 LikeController를 만들어 다음과 같은 코드를 넣어줍니다. -  LikeController.javaprivate final LikeService likeService;/** 게시글에서 추천 클릭시 처리 API */@PostMapping("/board")public BaseResponse boardLike(@RequestParam Long memberId, @RequestParam Long boardId) { String deleteOrInsert = likeService..

개발 기록2023. 6. 11. 06:08사이드 프로젝트 [국비의 모든것] - 게시물 단건 조회(2) 계층형 댓글 조회 구현

목차계층형 댓글 조회계층형 댓글 조회먼저 CommentsRepository에서 findCommentListByBoardId 메소드를 살펴보겠습니다. - CommentsRepository.java@Query("select c from Comments c join fetch c.member left join fetch c.parent where c.board.id = :boardId order by c.parent.id asc nulls first, c.id asc")List findCommentListByBoardId(@Param("boardId") Long boardId);JPQL을 정리해보면,select cfrom Comments cjoin fetch c.memberleft join fetch c.pa..

사이드 프로젝트 [국비의 모든것] - 게시글 단건 조회 (1) 조회수 증가, 광고, 이전글/다음글, 해시태그 조회 구현
개발 기록2023. 6. 11. 05:26사이드 프로젝트 [국비의 모든것] - 게시글 단건 조회 (1) 조회수 증가, 광고, 이전글/다음글, 해시태그 조회 구현

목차기능 요구사항 분석조회 수 증가광고 조회이전글/다음글 조회해시태그 조회기능 요구사항 분석이번에는 게시글 목록 페이지에서 게시글 하나를 클릭하였을 때 들어갈 수 있는 게시물 상세보기 페이지 백엔드 부분을 개발해보도록 하겠습니다. 먼저 기존에 개발해놓은 게시물 상세보기 페이지 화면은 다음과 같습니다.     화면에 출력할 필요한 데이터게시글 작성자 : 프로필이미지, 닉네임, 활동점수게시글 : 조회수, 제목, 내용, 추천 수, 이전글제목, 이전글번호, 다음글제목, 다음글번호, 댓글목록, 게시물 작성일자댓글 작성자 : 프로필이미지, 닉네임, 활동점수댓글 : 추천 수, 블라인드 설정 여부, 내용, 부모댓글 번호광고 : 광고 이미지 파일명 화면에서는 상위-하위 댓글로만 구성되어있지만 추후 변경될 수 있으므로 계..

사이드 프로젝트 [국비의 모든것] - 페이징 게시글 목록 조회 기능 구현
개발 기록2023. 6. 9. 09:19사이드 프로젝트 [국비의 모든것] - 페이징 게시글 목록 조회 기능 구현

목차기능 요구사항 분석요구사항 구현 계획계획대로 구현하기기능 요구사항 분석이번에는 게시판 목록 조회 기능을 개발해보겠습니다. 게시판 목록을 조회했을 시 화면을 먼저 살펴보겠습니다.조회하고자 하는 카테고리에 해당하는 게시물 목록을 조회해야 합니다. 이 때 만약 국비학원 카테고리나 교육과정 카테고리일 경우 기본적인 게시물 데이터 + 추가적인 데이터를 조회해야합니다.검색창에 검색어를 입력한다면, 해당 검색어가 포함된 글제목의 글 목록을 보여주어야 합니다.페이징처리가 되어야 합니다.공지사항 카테고리의 필독 공지사항은 모든 게시물 목록 조회 화면에서 조회해야 합니다.최신순, 댓글순, 추천순, 조회순으로 정렬할 수 있어야 합니다.요구사항 구현 계획해당 기능은 게시판 서비스에서 가장 많은 호출이 일어나는 서비스이므로..

개발 기록2023. 6. 9. 06:58사이드 프로젝트 [국비의 모든것] - 계정 삭제 기능 구현

목차기능 요구사항 분석계정 삭제 구현하기기능 요구사항이번엔 계정 삭제 기능을 구현해보도록 하겠습니다. 요구사항은 다음과 같습니다.클라이언트에서 계정 삭제 버튼을 누르면 계정 삭제 API를 호출합니다.계정 삭제 API에서는 회원과 관련된 모든 데이터를 삭제합니다계정 삭제 구현하기일반적인 서비스에서는 계정을 삭제한다면 데이터베이스에 isDeleted 와 같은 컬럼을 두어서 데이터 자체를 삭제하지는 않고, update 처리를 통하여 삭제 처리를 진행한 다음 데이터베이스의 스케줄러 기능을 이용하거나, 스프링 스케줄러를 이용하여 삭제한 시점부터 몇일이 지나게 된다면 삭제되도록 구현하는 방법으로 구현됩니다. 하지만 저는 실제 운영을 해볼 서비스를 개발하는 목적이 아니기 때문에 계정 삭제버튼을 누른다면 회원과 관련된..

개발 기록2023. 6. 7. 21:20사이드 프로젝트 [국비의 모든것] - 회원정보 수정 기능 구현 (2)

목차Member 엔티티 내부에 변경 메소드 만들기FileManager 클래스요청 처리하기 Member 엔티티 내부에 변경 메소드 만들기1편에서 말한 JPA 변경감지를 사용하기 위하여, 엔티티 내부에 변경 메소드를 만들어주도록 하겠습니다.Setter를 통하여 변경감지를 할 수도 있지만, 저는 엔티티에는 Setter를 사용하지 않았습니다. 이유는 엔티티의 필드에 Setter가 있게 된다면 엔티티를 생성하고 저장하기 위하여 값을 주입하는 것인지, 변경감지를 위하여 Setter를 사용하는 것인지 의도를 파악하기 힘들고 어느 부분에서 엔티티의 변경이 일어났는지도 파악하기 힘들기 때문입니다. 반대로 change() 같은 엔티티의 내부 메소드를 사용하게 된다면 메소드 이름을 통하여 개발자의 의도도 직관적으로 파악할 ..

사이드 프로젝트 [국비의 모든것] - 회원정보 수정 기능 구현 (1)
개발 기록2023. 6. 7. 20:28사이드 프로젝트 [국비의 모든것] - 회원정보 수정 기능 구현 (1)

목차기능 요구사항변경감지, merge 어떤걸 사용하지?파일 업로드기능 요구사항이번엔 마이페이지에서 회원정보를 수정할수 있도록 하는 기능을 개발해보겠습니다. 1. 회원은 이름, 닉네임, 프로필이미지, 이메일수신동의 여부 상태를 변경할 수 있습니다.2. 기존 이름, 닉네임, 프로필이미지, 이메일수신동의 여부 상태가 변경되어야만 [저장] 버튼을 누를 수 있습니다.3. 프로필이미지를 변경하지 않는다면 이름, 닉네임, 이메일수신동의 여부 상태에 대해서만 변경을 해주어야 합니다.4. 프로필이미지를 변경한다면 서버의 images 폴더에 변경하고자 하는 이미지 파일을 저장해주고 기존 프로필이미지가 기본이미지인 "user.PNG"가 아니라면, 해당 폴더에서 파일을 삭제해줍니다.  변경감지, merge 어떤걸 사용하지?J..

사이드 프로젝트 [국비의 모든것] - 일반회원가입 기능 구현
개발 기록2023. 6. 5. 04:25사이드 프로젝트 [국비의 모든것] - 일반회원가입 기능 구현

목차기능 요구사항중복검사 기능 만들기이메일 인증코드 전송하기Google reCAPTCHA v2 적용하기회원 정보 저장기능 요구사항프로젝트에서는 회원의 종류가 일반회원, 교육기관회원, 관리자로 나누어져있습니다.일반회원과 교육기관 회원은 회원가입을 할 수 있는 페이지가 따로 있습니다.어차피 교육기관회원이라고 해봤자 일반회원보다 입력받는 값만 조금 더 있을 뿐이지 기능 구현의 흐름은 일반회원가입과 같기 때문에 일반회원 가입 기능에 대하여만 포스팅하겠습니다. 클라이언트에서 userId 값을 입력시, keyup 이벤트로 서버에 userId 값이 중복되는지 검사요청을 하여 중복된다면 가입을 막습니다.위와 같은 과정은 unique 제약이 있는 필드(userId, nickname, email) 에 대하여 모두 진행합니..

반응형
image
loading