spring boot project with code review study

Overview

realworld

build codecov

Getting started

need Java 11 installed

$ ./gradlew build bootRun

프로젝트 진행 사항

  • 언어 : JAVA 11
  • 프레임워크 : Spring Boot
  • 빌드툴 : Gradle 6.9
  • db : h2
  • 테이블 구조 : 일요일에 각자 테이블 구조 제출 후 통합
  • 커버리지 : 70 (jacoco line coverage)
  • 의존성 : jpa / jdbctemplate
  • 브랜치 네이밍 : 원본브랜치 : 아이디, 작업 브랜치 : 아이디-이슈번호
  • 커밋 단위 : 기능당 최소단위 (TDD 옵션)
  • 리퀘 양식 :
issue: #이슈번호
## 작업 내용
작업1
작업2
## 생성/변경 로직 (구현한 내용에 대한 설명)
## 개인 코멘트 (구현하면서 느낀 내용 간단하게 가능)
  • Pull Request 제한 조건 : 3명 approve, build pass
  • 코드리뷰 추가 요청 사항 : approve가 되어도 풀리퀘 머지 담당자가 조금 미뤘다가 머지.
  • 컨벤션 : google java format build

API

API document WIKI

ERD

realworld_erd

Comments
  • [jinyoungchoi95-issue1] User 도메인 구현 및 회원가입 기능 구현

    [jinyoungchoi95-issue1] User 도메인 구현 및 회원가입 기능 구현

    Issue: #1

    작업 내용

    • User 도메인 구현 / data jpa
    • 회원가입 기능 구현
    • security 추가
    • password encoding 구현

    생성/변경 로직

    • POST "/api/users" 에 사용되는 도메인에 대한 설계 및 validate 테스트 진행
    • join 요청 시 username, email이 동일한 사람이 이미 있을 경우 exception 처리 > 임시로 RuntimeException 처리
    • Jackson을 통한 json type binding

    개인 코멘트

    • 이왕 하는김에 테스트 커버리지를 신경쓰다보니 어느 지점부터는 실패 케이스 작성을 위한 테스트 코드라기보다는 커버리지 작성을 위한 테스트 코드가 되는 것 같아 최대한 실패케이스를 만드는 방향으로 의식하면서 진행했습니다

    • 개인적으로 VO로 구현을 하려고 노력(?) 했던거 같네요 :)

    • db 테이블 내에는 물론 created_at, updated_ad, deleted_at이 있긴하지만 BaseEntity에 대한 생각을 조금 더 하고 구현을 하고 싶어서 미뤘습니다 😢

    • Response Entity에 대해서 ApiResult 클래스를 만들고 싶었는데 반환되는 json이 한정되어있던터라 어떻게 json 테스트가 진행되는지 몰라 내버려뒀습니다 😂

    ori user 
    opened by jinyoungchoi95 3
  • [jinyoungchoi95-issue60] Post Article 기능 구현

    [jinyoungchoi95-issue60] Post Article 기능 구현

    Issue: #60

    작업 내용

    • Profile 반환 부분 버그 수정
    • Article 도메인 구현
    • Tag 영속성 관련 메소드 추가
    • POST /api/articles

    생성/변경 로직

    • Profile 부분에서 잘못 구현된 내용이 있어 수정했습니다. (find할 user의 profile을 반환해야하는데 login user의 profile을 반환하는것을 확인하여 해당 부분 수정되었습니다.)
    • 변경 중 추가로 Profile내에서 follow 여부를 확인할 수 있는 필드를 추가하였습니다. (ProfileModel로 분리하여 반환하게되니 결과적으로 Article에서 사용할 때 클래스가 난잡해져서 이와같이 변경하였습니다.)
    • Tag에서 기존 tag가 있을 경우 repository에서 찾은 tag를 mapping하여 영속성 관리를 통해 Tag Lists가 들어오더라도 기존 tag가 있을 때 따로 save되지 않도록 처리했습니다.

    개인 코멘트

    • 생각보다 오래걸렸던 부분인 것 같네요 🤣 Tag를 그냥 저장하게 될 경우에 기존 db에 있는 Tag를 무시하고 unique를 반하게 되어 문제가 생겨서 이를 어떻게하면 깔끔하게 처리할 수 있을까를 고민하게 되었던 것 같아요. 조금 더 나은 방법이 있을 것 같기는한데 지금 상황에서는 현재 구조가 가장 최선으로 보이네요 :)

    • vo 를 효과적으로 사용하기 위해서 계속해서 단위를 쪼개고, 같은 단위를 묶으면서 사용하다보니 vo를 타고가는 vo가 계속해서 생겨나는 것 같아요. 이게 과연 나중에 갔을 때 좋은 구조인지는 다 구현하고 성능 테스트를 진행하면서 확인해보아야할 것 같아요 :)

    • 뭔가 file change가 많기는 한데 사실상 domain이 추가되면서 vo를 많이 쪼개다보니 이렇게 된거같은데, change된 것에 비해 로직 자체는 단순하니 너그럽게 용서해주세요 ㅜㅜ 🙇‍♂️

    feature ori 
    opened by jinyoungchoi95 2
  • [kwj1270-issue51] Exception 관련 리팩토링

    [kwj1270-issue51] Exception 관련 리팩토링

    Issue: #51

    작업 내용

    • Exception 관련되어서 리팩토링 했습니다.
    • RestControllerAdvice 적용

    생성/변경 로직

    • RestControllerAdvice 생성
    • 커스텀 Exception 생성
    • 익셉션 필터 및 관련 코드들 적용

    개인 코멘트

    • ExceptionTranslationFilter 적용하려 했으나 Interceptor 단계에서 동작하는 필터로 동작을 안하네요
    • RestDocs / log4j2 적용은 내일 올릴 다음 pr에 하겠습니다.
    woozi 
    opened by kwj1270 2
  • [jinyoungchoi95-issue16] 현재 유저 정보 반환 및 업데이트 기능 구현

    [jinyoungchoi95-issue16] 현재 유저 정보 반환 및 업데이트 기능 구현

    Issue: #16

    작업 내용

    • GET /api/user
    • PUT /api/user

    생성/변경 로직

    • 업데이트 요청 값이 null한 값이 들어올 수 있어 null에 대한 핸들링이 필요하여 service에 update용 model추가
    • 업데이트 불가한 상황들에 대해서 exception 혹은 업데이트 금지 로직 구현
    • user entity내 필드 변경 메소드(change...()) 추가
    • token 값 가져오는 부분이 공통되어 해당 메소드 분리(UserController.class)

    개인 코멘트

    • 두 가지가 제일 어려웠던 것 같아요. @AuthenticationPrincipal에 대한 mocking, Validation에 대한 처리
    • @AuthenticationPrincipal의 경우 현재 단위테스트만 하고 있는 구조상 내부 spring security filter에 대한 더 자세한 모킹이 필요했으나 진행을하다보니 굳이 이걸 하는데 공수가 들어야하나?라는 생각을 했고 단순히 테스팅하였습니다.
    • Spring Validation의 가장 큰 단점을 느꼈던 issue였던것 같아요. 파라메터에서만 받을 수 있는 validation의 특성상 update를 구현하는데 있어서 파일을 다 validate하면서 가져오자니 null한값이 들어올 수도 있는 아이러니한 상황이었기 때문이에요. 어쩔 수 없이 valid메소드를 분리하였는데 조금 이상해서 거슬리긴하네요 ... ㅎㅎ
    feature ori user 
    opened by jinyoungchoi95 2
  • [hoony-lab-issue23] authentication: jwt token 기능

    [hoony-lab-issue23] authentication: jwt token 기능

    Issue: #23

    작업 내용

    • JWT

    생성/변경 로직

    • Security
      • SecurityConfig
      • JwtAuthenticationFilter
      • JwtAuthenticationProvider
      • JwtUserDetailsService
    • JwtAuthenticationFilter (OncePerRequestFilter)
    • JwtProvider

    개인 코멘트

    • 저번주도 머리빠지고 이번주도 머리빠지고 다음주도 머리빠질예정이라 미리 PR을 올리겠습니다.
    • 빈 순환참조부터해서 어디선가 자꾸 빼먹고,,, 안되고,,, 엉망진창이였습니다.
    • ~~filter~~, ~~test~~
    • POST /api/users response 에서의 token 은 구현 안했습니다.
    • SECRET_KEY 는 곧 @Value 가 될 예정입니다.
    • GET /api/user 에서 SecurityContext 를 이렇게 핸들링 해도 되는지 모르겠습니다.
    hoony-lab 
    opened by hoony-lab 2
  • [hoony-lab-issue12] User 도메인 구현

    [hoony-lab-issue12] User 도메인 구현

    Issue: #12

    작업 내용

    • [x] Project Setting
    • [x] User : Entity, Repository, Service, Controller, DTO
    • [x] Authentication : POST /api/users/login (No authentication)
      • token 제외
    • [x] Registration : POST /api/users (No authentication)
      • token 제외
    • [x] Test
      • ~~악~~

    생성/변경 로직

    개인 코멘트

    • 처음부터 만들기는 참 힘들다
    • JUnit5 의 hello world는 참 힘들다
    • ~~What is TDD and DDD~~
    hoony-lab 
    opened by hoony-lab 2
  • [Povia-issue7] 사용자 회원 가입 기능 추가

    [Povia-issue7] 사용자 회원 가입 기능 추가

    Issue: #7

    작업 내용

    • 사용자 도메인 생성
    • 회원 가입 기능 추가

    생성/변경 로직

    • 조물주가 되버림(?)
    • 사용자 도메인에 해당하는 영역들 추가

    개인 코멘트

    • 사실 세팅하고 설정하고, 들어가는 스펙에 대한 공부하는게 프로젝트에서 제일 오래 걸리는데 이제 프로젝트에서 남은 건 그리 없다 생각하시면 좋겠읍니다. 같이 오래 해봅시다.
    feature povia user 
    opened by povia 2
  • [kwj1270-issue5] 회원가입 기능

    [kwj1270-issue5] 회원가입 기능

    Issue: #5

    작업 내용

    • JPA, Validation 적용
    • 회원가입 기능 구현
    • 나름대로? DDD 지향 구현(배우는 단계, VO는 없어요)

    생성/변경 로직

    • 프로젝트 설계
    • 회원가입 로직 구현
    • 테스트 코드 작성

    개인 코멘트

    • 시간이 안나서 클래스 생성은 자제하면서 구현했습니다 -> 차후 VO 리펙토링할 예정
    • 사실, 스프링 프로젝트는 거의 처음이라 구조적으로 문제가 많을 수 있어요 많은 회초리 부탁드립니다.
    • 어노테이션이나 몇몇 요소들에 대해서 딱 필요한 정도만 사용했으니 참고 부탁드려요
    user woozi 
    opened by kwj1270 2
  • [jinyoungchoi95-issue67] Comment 추가/조회/삭제 기능 구현

    [jinyoungchoi95-issue67] Comment 추가/조회/삭제 기능 구현

    Issue: #67

    작업 내용

    • POST /api/articles/{slug}/comments
    • GET /api/articles/{slug}/comments
    • DELETE /api/articles/{slug}/comments/{id}

    생성/변경 로직

    • comment's 도메인 구성
    • comment 추가/삭제 관련 메소드 구현
    feature ori 
    opened by jinyoungchoi95 1
  • [jinyoungchoi95-issue65] Article 전체 조회 기능

    [jinyoungchoi95-issue65] Article 전체 조회 기능

    Issue: #65

    작업 내용

    • 게시글 전체 조회 기능 구현
      • tag param filtering
      • author param filtering
      • limit, offset param filtering

    생성/변경 로직

    • ArticleRepository 내 filtering 쿼리 추가
    • Fetch join을 위한 @EntityGraph 추가
    • Pageable 인터페이스 설정 조절

    개인 코멘트

    • Jpql 쿼리짜는데 잘못 구현한 부분이 많아서 이상하게 엉켰던 구현내용인 것 같네요 :rofl:
    • 이번 구현을 진행하면서 Pagenation에서의 n+1문제에 대한 고민을 많이 할 수 있어서 좋았던 것 같아요. 어떤 부분에서 n+1이 발생하는지 찾고 개선해나가는 과정이 있어서 더 이해가 빠를 수 있었던 것 같네요 :)
    • favorited 부분은 일단 article favorite 부분을 구현한 후에 구현할 예정입니다 :)
    feature ori 
    opened by jinyoungchoi95 1
  • [jinyoungchoi95-issue63] Article 단일조회 /수정 / 삭제 기능 구현

    [jinyoungchoi95-issue63] Article 단일조회 /수정 / 삭제 기능 구현

    Issue: #63

    작업 내용

    • 게시글 단일 조회 기능 구현
    • 게시글 업데이트 기능 구현
    • 게시글 삭제 기능 구현

    생성/변경 로직

    • Article내에 delete_at 추가기능 구현 (soft delete)
    • Article field update 메소드 구현

    개인 코멘트

    • 로직짜는거 자체는 이전 user 도메인과 똑같아서 크게 어려운점 없이 기능 추가한 것 같네요.
    • 다만 authentication을 optional 하게 주는 api들이 몇가지 있을 것 같은데 차후에 정리해서 적용해야할 것 같아요 :)
    feature ori 
    opened by jinyoungchoi95 1
  • [hoony-lab-issue44] 사용자 업데이트

    [hoony-lab-issue44] 사용자 업데이트

    Issue: #44

    작업 내용

    • API PUT /api/user

    생성/변경 로직

    • PUT /api/user
    • SecurityContextHolder >> @AuthenticationPrincipal

    개인 코멘트

    • 뭔가 쓸대없고? 잦은? 코드수정을 하고싶은데 해도 되는지에 대한 의문이 든다
    • 다음 PR 들어가기전 확실히 마무리 해야겠다
    hoony-lab 
    opened by hoony-lab 1
  • [com8599-issue6] user 회원가입 기능

    [com8599-issue6] user 회원가입 기능

    Issue: #6

    작업 내용

    • 유저 회원가입 기능 추가

    생성/변경 로직

    • UserBean추가
    • 스웨거추가
    • UserController 추가
    • 에러 코드 추가(패킷결과)
    • result json 처리부분 추가
    • java secure key 관련 추가

    개인 코멘트

    • ~~ptmt 이슈 해결을 못했습니다. 이후 해결시 추가 푸쉬 하겠습니다.~~ map>>User객체 변경 후 해결완료되었습니다
    com8599 
    opened by com8599 0
Owner
null
该仓库中主要是 Spring Boot 的入门学习教程以及一些常用的 Spring Boot 实战项目教程,包括 Spring Boot 使用的各种示例代码,同时也包括一些实战项目的项目源码和效果展示,实战项目包括基本的 web 开发以及目前大家普遍使用的线上博客项目/企业大型商城系统/前后端分离实践项目等,摆脱各种 hello world 入门案例的束缚,真正的掌握 Spring Boot 开发。

Spring Boot Projects 该仓库中主要是 Spring Boot 的入门学习教程以及一些常用的 Spring Boot 实战项目教程,包括 Spring Boot 使用的各种示例代码,同时也包括一些实战项目的项目源码和效果展示,实战项目包括基本的 web 开发以及目前大家普遍使用的前

十三 4.5k Dec 30, 2022
循序渐进,学习Spring Boot、Spring Boot & Shiro、Spring Batch、Spring Cloud、Spring Cloud Alibaba、Spring Security & Spring Security OAuth2,博客Spring系列源码:https://mrbird.cc

Spring 系列教程 该仓库为个人博客https://mrbird.cc中Spring系列源码,包含Spring Boot、Spring Boot & Shiro、Spring Cloud,Spring Boot & Spring Security & Spring Security OAuth2

mrbird 24.8k Jan 6, 2023
Spring Boot Migrator (SBM) - a tool for automated code migrations to upgrade or migrate to Spring Boot

Spring Boot Migrator uses and is compatible to OpenRewrite, a powerful mass refactoring ecosystem for Java and other source code.

Spring Projects Experimental 231 Jan 2, 2023
An assistance platform made using Spring framework that analyses your code, and helps you either to start a devops project, or to turn an existing project into a devops project using open source software (Git, Docker, Jenkins..)

DevOpsify Description An assistance platform made using Spring framework that analyses your code, and helps you either to start a devops project, or t

obaydah bouifadene 14 Nov 8, 2022
Spring Boot Login and Registration example with MySQL, JWT, Rest Api - Spring Boot Spring Security Login example

Spring Boot Login example with Spring Security, MySQL and JWT Appropriate Flow for User Login and Registration with JWT Spring Boot Rest Api Architect

null 58 Jan 5, 2023
Example usage of work manager in Android, while doing this study, image downloading was preferred as a method.

android-workmanager-example Example usage of work manager in Android, while doing this study, image downloading was preferred as a method. Java 11 com

Adil Çetin 1 Jan 29, 2022
An android app that builds for students to find study partners.

Rinder The purpose of this project is to make a one-stop solution for finding the desired reading or research partner, sell their own products, and al

Md.Asraful Islam Asif 4 Dec 14, 2022
We are proceeding Algorithm Study from January, 2022.

AlgorithmStudy2022 We are proceeding Algorithm Study from January, 2022. 2022년 1월 부터 스터디를 진행하고 있습니다. The 1st quarter: 우리는 첫 시즌을 마무리 하였습니다. 첫 시즌은 알고리즘

Jung Hojin 2 Jul 5, 2022
This repository should serve as a guide to everybody who wants to study software and hardware for embedded systems but doesn't know where to start.

Roadmap to Embedded Engineering This repository should serve as a guide to anyone who wants to study software and hardware for embedded systems but do

Mateus Antonio da Silva 108 Jan 4, 2023
We are proceeding Algorithm Study from July, 2022.

Coding Test in Java 백준 고난이도 문제 ????‍?? 7월 4주차 (07.25 - 07.31) 문제 레벨 URL 승희 코드 호진 코드 수진 코드 연의 코드 문제 가져온 사람 문제 승희 문제 호진 문제 수진 문제 연의 ????‍?? 7월 3주차 (07.1

Jung Hojin (Edlin) 2 Jul 13, 2022
about learning Spring Boot via examples. Spring Boot 教程、技术栈示例代码,快速简单上手教程。

Spring Boot 学习示例 Spring Boot 使用的各种示例,以最简单、最实用为标准,此开源项目中的每个示例都以最小依赖,最简单为标准,帮助初学者快速掌握 Spring Boot 各组件的使用。 Spring Boot 中文索引 | Spring Cloud学习示例代码 | Spring

纯洁的微笑 28.3k Jan 1, 2023
spring boot 实践学习案例,是 spring boot 初学者及核心技术巩固的最佳实践。另外写博客,用 OpenWrite。

推荐工具: 微信公众号 Markdown 编辑器 - OpenWrite:Markdown 微信编辑器是一款专业强大的微信公众平台在线编辑排版工具,提供手机预览功能,让用户在微信图文 、文章、内容排版、文本编辑、素材编辑上更加方便。 - 更多介绍 博客群发平台 一、支持泥瓦匠 Spring Boot

泥瓦匠BYSocket 15.2k Jan 5, 2023
Spring-Boot-Plus is a easy-to-use, high-speed, high-efficient,feature-rich, open source spring boot scaffolding

Everyone can develop projects independently, quickly and efficiently! What is spring-boot-plus? A easy-to-use, high-speed, high-efficient, feature-ric

geekidea 2.3k Dec 31, 2022
Two Spring-boot applications registering themselves to an spring-boot-admin-server application as separate clients for the purpose of monitoring and managing the clients

Spring-boot-admin implementation with 1 Server and 2 clients Creating a Server application to monitor and manage Spring boot applications (clients) un

null 6 Dec 6, 2022
The Spring Boot Sample App on K8S has been implemented using GKE K8S Cluster, Spring Boot, Maven, and Docker.

gke-springboot-sampleapp ?? The Spring Boot Sample App on K8S has been implemented using GKE K8S Cluster, Spring Boot, Maven, and Docker. Usage To be

KYEONGMIN CHO 1 Feb 1, 2022
The project aim at easier to start a spring boot/cloud project.

easy-starters 是一个公共 starter 集合,旨在帮助 java 开发者快速构建 Springboot 与 Spring Cloud 项目. lx-starters的环境要求 JDK requirement: JDK 1.8+ Spring booter 2.x,+ 如何引用lx-s

null 3 Jul 11, 2022
Code katas for learning Spring® and Spring Boot.

What is the spring-course? The Spring course consists of two related tutorials that teach developers about Spring Framework and then Spring Boot. The

BNY Mellon 445 Nov 20, 2022
Sample Spring-Cloud-Api-Gateway Project of Spring Boot

Sample-Spring-Cloud-Api-Gateway Sample Spring-Cloud-Api-Gateway Project of Spring Boot Proejct Stack Spring Webflux Spring Cloud Gateway Spring Data R

Seokhyun 2 Jan 17, 2022
Zitadel.ch Example Project with Spring Boot and Spring Security

Zitadel Example Project with Spring Boot and Spring Security This example contains two Spring Boot Apps (app and api) which use the Zitadel IdP as Ope

Thomas Darimont 2 May 3, 2022