Code Monkey home page Code Monkey logo

nbc-spring-assignment-blog's Introduction

spring-lv1

Questions


Q1) 수정, 삭제 API의 request를 어떤 방식으로 사용하셨나요? (param, query, body)

A1) 수정, 삭제 API는 API 명세서에 보면 알수 있듯이 JSON body를 사용해서 request를 해주었다.


Q2) 어떤 상황에 어떤 방식의 request를 써야하나요?

A2)

  1. param:
    • 주소에 포함된 변수를 담는다. 예를 들면 http://localhost8080/api/post/1234라는 주소가 있으면 1234를 담는다.
    • resource를 식별해야하는 상황에서는 Path Variable이 적합.
  2. query
    • url에 ? 이후에 변수를 담는다. 예를 들면 http//localhost8080/api/post?post_id=12345
    • &으로 연결하여 여러 데이터를 넘길 수 있다. 예를 들면 http//localhost8080/api/post?post_id=12345&key=value | query string = post_id=12345&key=value, query parameter = post_id, key
    • 정렬이나 필터링을 해야하느 상황에 이 적합하다.
  3. body
    • XML, JSON등의 데이터를 담는다. 주소에서 확인 불가
    • 개발자 도구에서 볼수 있어서 민감한 데이터의 경우 암호화!!
    • 매우 많은 인수가 있는 상황에 body를 쓰는게 적합하다.

Q3) RESTful한 API를 설계했나요? 어떤 부분이 그런가요? 어떤 부분이 그렇지 않나요?

A3) 제 API명세서에서 Post, Put, Delete에 posts 복수를 써주면 더 좋은건가요??


Q4) 적절한 관심사 분리를 적용하였나요? (Controller, Repository, Service)

A4) 네! MVC 패턴으로 잘 분리해서 잘 주입 받아서 설계를 하였습니다


요구사항

  1. 요구사항을 기반으로 Use Case 그려보기

  2. 전체 게시글 목록 조회 API

    • 제목, 작성자명, 작성 내용, 작성 날짜를 조회하기
    • 작성 날짜 기준 내림차순으로 정렬하기
  3. 게시글 작성 API

    • 제목, 작성자명, 비밀번호, 작성 내용을 저장하고
    • 저장된 게시글을 Client 로 반환하기
  4. 선택한 게시글 조회 API

    • 선택한 게시글의 제목, 작성자명, 작성 날짜, 작성 내용을 조회하기 (검색 기능이 아닙니다. 간단한 게시글 조회만 구현해주세요.)
  5. 선택한 게시글 수정 API

    • 수정을 요청할 때 수정할 데이터와 비밀번호를 같이 보내서 서버에서 비밀번호 일치 여부를 확인 한 후
    • 제목, 작성자명, 작성 내용을 수정하고 수정된 게시글을 Client 로 반환하기
  6. 선택한 게시글 삭제 API

    • 삭제를 요청할 때 비밀번호를 같이 보내서 서버에서 비밀번호 일치 여부를 확인 한 후
    • 선택한 게시글을 삭제하고 Client 로 성공했다는 표시 반환하기

Use Case Diagram

use Case Diagram

API

API specification


spring-lv2

Questions


Q1) 처음 설계한 API와 ERD에 변경사항이 있었나요? 변경되었다면 어떤 점 때문일까요? 첫 설계의 중요성에 대해 생각해보세요

A1) 첫 설계는 기본 틀을 잡아주는 역할로써 개발하는데 가이드를 해주는 역할이라고 생각합니다.


Q2) ERD를 먼저 설계한 후 Entity를 개발했을 때 어떤 점이 도움이 되셨나요?

A2) Class 다이어그램을 설계하고 객체지향적인 코드를 짜듯이 비슷한 도움이라고 생각합니다.


Q3) JWT를 사용하여 인증/인가를 구현 했을 때의 장점은 무엇일까요?

A3) JWT는 따로 JWT 토큰을 저장할 필요없이 토큰자체를 브라우저에 Request하고 그 브라우저는 Response 하면 그냥 검증만 하면 되기 떄문에 쿠키-세션보다 더 효율적일 수 있다.


Q4) 반대로 JWT를 사용한 인증/인가의 한계점은 무엇일까요?

A4)

  1. 구현의 복잡도가 생각보다 많다.

  2. JWT에 담는 내용 즉, JWT 길이가 길어지면 네트워크 비용이 증가한다.

  3. Secret Key 유출시 JWT 조작이 가능하다 현재 프로젝트에선 application.properties파일에 JWT secret Key를 설정 하는데 보통은 이렇게 허술하게 관리되지 않고 실제로 키를 볼수 없다. 오직관리자만이 알수 있게 따로 관리된다. 왜냐하면 저 키를 알면 값을 다 디코딩 할수 있기 떄문이다.


새로운 요구사항을 구현

  1. 회원 가입 API

    • username, password를 Client에서 전달받기
    • username은 최소 4자 이상, 10자 이하이며 알파벳 소문자(a~z), 숫자(0~9)로 구성되어야 한다.
    • password는 최소 8자 이상, 15자 이하이며 알파벳 대소문자(a~z, A~Z), 숫자(0~9)로 구성되어야 한다.
    • DB에 중복된 username이 없다면 회원을 저장하고 Client 로 성공했다는 메시지, 상태코드 반환하기
    • 참고자료
      1. https://mangkyu.tistory.com/174
      2. https://ko.wikipedia.org/wiki/정규_표현식
      3. https://bamdule.tistory.com/35
  2. 로그인 API

    • username, password를 Client에서 전달받기
    • DB에서 username을 사용하여 저장된 회원의 유무를 확인하고 있다면 password 비교하기
    • 로그인 성공 시, 로그인에 성공한 유저의 정보와 JWT를 활용하여 토큰을 발급하고, 발급한 토큰을 Header에 추가하고 성공했다는 메시지, 상태코드 와 함께 Client에 반환하기

요구사항에 맞게 수정

  1. 전체 게시글 목록 조회 API
    • 제목, 작성자명(username), 작성 내용, 작성 날짜를 조회하기
    • 작성 날짜 기준 내림차순으로 정렬하기
  2. 게시글 작성 API
    • 토큰을 검사하여, 유효한 토큰일 경우에만 게시글 작성 가능
    • 제목, 작성 내용을 저장하고
    • 저장된 게시글을 Client 로 반환하기(username은 로그인 된 사용자)
  3. 선택한 게시글 조회 API
    • 선택한 게시글의 제목, 작성자명(username), 작성 날짜, 작성 내용을 조회하기 (검색 기능이 아닙니다. 간단한 게시글 조회만 구현해주세요.)
  4. 선택한 게시글 수정 API
    • 수정을 요청할 때 수정할 데이터와 비밀번호를 같이 보내서 서버에서 비밀번호 일치 여부를 확인 한 후
    • 토큰을 검사한 후, 유효한 토큰이면서 해당 사용자가 작성한 게시글만 수정 가능
    • 제목, 작성 내용을 수정하고 수정된 게시글을 Client 로 반환하기
  5. 선택한 게시글 삭제 API
    • 삭제를 요청할 때 비밀번호를 같이 보내서 서버에서 비밀번호 일치 여부를 확인 한 후
    • 토큰을 검사한 후, 유효한 토큰이면서 해당 사용자가 작성한 게시글만 삭제 가능
    • 선택한 게시글을 삭제하고 Client 로 성공했다는 메시지, 상태코드 반환하기

API 명세서

image

ERD

image

-> lv2 코드 보고 싶거나 복습하고 싶으면 인가된 사용자가 작성한 게시글 POST/PUT/DELETE Commit에서 새로운 브랜치 만들어서 보면 된다!!


spring-lv3

추가된 요구사항을 구현

  1. 회원 가입 API

    • username, password를 Client에서 전달받기
    • username은 최소 4자 이상, 10자 이하이며 알파벳 소문자(a~z), 숫자(0~9)로 구성되어야 한다.
    • password는 `최소 8자 이상, 15자 이하이며 알파벳 대소문자(az, AZ), 숫자(0~9)', 특수문자로 구성되어야 한다. (특수문자 추가!!!!)
    • DB에 중복된 username이 없다면 회원을 저장하고 Client 로 성공했다는 메시지, 상태코드 반환하기
    • 회원 권한 부여하기 (ADMIN, USER) - ADMIN 회원은 모든 게시글, 댓글 수정 / 삭제 가능
    • 참고자료
      1. https://mangkyu.tistory.com/174
      2. https://ko.wikipedia.org/wiki/정규_표현식
      3. https://bamdule.tistory.com/35
  2. 로그인 API

    • username, password를 Client에서 전달받기
    • DB에서 username을 사용하여 저장된 회원의 유무를 확인하고 있다면 password 비교하기
    • 로그인 성공 시, 로그인에 성공한 유저의 정보와 JWT를 활용하여 토큰을 발급하고, 발급한 토큰을 Header에 추가하고 성공했다는 메시지, 상태코드 와 함께 Client에 반환하기
  3. 댓글 작성 API

    • 토큰을 검사하여, 유효한 토큰일 경우에만 댓글 작성 가능
    • 선택한 게시글의 DB 저장 유무를 확인하기
    • 선택한 게시글이 있다면 댓글을 등록하고 등록된 댓글 반환하기
  4. 댓글 수정 API

    • 토큰을 검사한 후, 유효한 토큰이면서 해당 사용자가 작성한 댓글만 수정 가능
    • 선택한 댓글의 DB 저장 유무를 확인하기
    • 선택한 댓글이 있다면 댓글 수정하고 수정된 댓글 반환하기
  5. 댓글 삭제 API

    • 토큰을 검사한 후, 유효한 토큰이면서 해당 사용자가 작성한 댓글만 삭제 가능
    • 선택한 댓글의 DB 저장 유무를 확인하기
    • 선택한 댓글이 있다면 댓글 삭제하고 Client 로 성공했다는 메시지, 상태코드 반환하기
  6. 예외 처리

    • 토큰이 필요한 API 요청에서 토큰을 전달하지 않았거나 정상 토큰이 아닐 때는 "토큰이 유효하지 않습니다." 라는 에러메시지와 statusCode: 400을 Client에 반환하기
    • 토큰이 있고, 유효한 토큰이지만 해당 사용자가 작성한 게시글/댓글이 아닌 경우에는 “작성자만 삭제/수정할 수 있습니다.”라는 에러메시지와 statusCode: 400을 Client에 반환하기
    • DB에 이미 존재하는 username으로 회원가입을 요청한 경우 "중복된 username 입니다." 라는 에러메시지와 statusCode: 400을 Client에 반환하기
    • 로그인 시, 전달된 username과 password 중 맞지 않는 정보가 있다면 "회원을 찾을 수 없습니다."라는 에러메시지와 statusCode: 400을 Client에 반환하기

요구사항에 맞게 수정

  1. 전체 게시글 목록 조회 API
    • 제목, 작성자명(username), 작성 내용, 작성 날짜를 조회하기
    • 작성 날짜 기준 내림차순으로 정렬하기
    • 각각의 게시글에 등록된 모든 댓글을 게시글과 같이 Client에 반환하기
    • 댓글은 작성 날짜 기준 내림차순으로 정렬하기
  2. 게시글 작성 API
    • 토큰을 검사하여, 유효한 토큰일 경우에만 게시글 작성 가능
    • 제목, 작성자명(username), 작성 내용을 저장하고
    • 저장된 게시글을 Client 로 반환하기
  3. 선택한 게시글 조회 API
    • 선택한 게시글의 제목, 작성자명(username), 작성 날짜, 작성 내용을 조회하기 (검색 기능이 아닙니다. 간단한 게시글 조회만 구현해주세요.)
    • 선택한 게시글에 등록된 모든 댓글을 선택한 게시글과 같이 Client에 반환하기
    • 댓글은 작성 날짜 기준 내림차순으로 정렬하기
  4. 선택한 게시글 수정 API
    • 수정을 요청할 때 수정할 데이터와 비밀번호를 같이 보내서 서버에서 비밀번호 일치 여부를 확인 한 후
    • 토큰을 검사한 후, 유효한 토큰이면서 해당 사용자가 작성한 게시글만 수정 가능
    • 제목, 작성 내용을 수정하고 수정된 게시글을 Client 로 반환하기
  5. 선택한 게시글 삭제 API
    • 삭제를 요청할 때 비밀번호를 같이 보내서 서버에서 비밀번호 일치 여부를 확인 한 후
    • 토큰을 검사한 후, 유효한 토큰이면서 해당 사용자가 작성한 게시글만 삭제 가능
    • 선택한 게시글을 삭제하고 Client 로 성공했다는 메시지, 상태코드 반환하기

API 명세서

image

ERD

image

spring-lv4

Questions


Q1) Spring Security를 적용했을 때 어떤 점이 도움이 되셨나요?

A1) config에서 접근 허용부분을 손쉽게 설정 할 수 있고 프레임워크에서 주는 이점들을 잘 활용할 수 있어서 편리했습니다.


Q2) Spring Security를 사용하지 않는다면 어떻게 인증/인가를 효율적으로 처리할 수 있을까요?

A2) 직접 인증 인가 부분 Filter를 만들어야 합니다.


Q3) AOP에 대해 설명해 주세요!

A3) AOP는 관점 지향 프로그래밍이다. 프로그래밍을 하다보면 공통적인 기능이 많이 발생한다. 보통 공통적인 기능을 핵심 기능 부분에 여러번을 넣게 되면 중복적이게 되고 곧 이것은 좋은 코드가 아니다! 왜냐하면 수정에 용이하지 않다는 단점이 있기 떄문이다! 그러기 떄문에 AOP가 생겨났다. 예를 들면 API의 호출 시간을 측정하고 싶다고 하면 공통 관심 사항으로 호출 시간 측정 로직을 따로 만들어서 공통적인 기능으로 사용할 수 있는것이다.


Q4) RefreshToken 적용에 대한 장/단점을 작성해 주세요! 적용해 보지 않으셨다면 JWT를 사용하여 인증/인가를 구현 했을 때의 장/단점에 대해 숙련주차의 답변을 Upgrade 하여 작성해 주세요!

A4) JWT를 사용하여 인증/인가를 구현 했을떄 장/단점 장점: DB를 따로 살 필요가 없다 왜냐하면 secret key가 외부 DB에 저장되어 있는게 아니라서 서버 자체에서 검증이 가능하다, 요즘 로그인을 Oauth를 많이 사용하는데 JWT를 사용한다! 단점: 구현의 복잡도가 상당하고 Secret key가 유출 시 조작이 가능하므로 위험성 부담이 있고 강제 로그아웃이 불가해서 어떤 서비스냐따라 JWT 토큰을 지향해야한다.


Q5) 즉시로딩 / 지연로딩에 대해 설명해 주세요

A5) 즉시로딩: 연관관계가 설정된 Entity의 즉시 정보를 가져오기 지연로딩: 연관관계가 설정된 Entity의 필요한 시점의 정보를 가져오기(조회시 반드시 영속성 컨텍스트가 존재해야한다 = @Transactional)


추가된 요구사항을 구현해 보세요!

  1. 게시글 좋아요 API
    • 사용자는 선택한 게시글에 ‘좋아요’를 할 수 있습니다.
    • 사용자가 이미 ‘좋아요’한 게시글에 다시 ‘좋아요’ 요청을 하면 ‘좋아요’를 했던 기록이 취소됩니다.
    • 요청이 성공하면 Client 로 성공했다는 메시지, 상태코드 반환하기
  2. 댓글 좋아요 API
    • 사용자는 선택한 댓글에 ‘좋아요’를 할 수 있습니다.
    • 사용자가 이미 ‘좋아요’한 댓글에 다시 ‘좋아요’ 요청을 하면 ‘좋아요’를 했던 기록이 취소됩니다.
    • 요청이 성공하면 Client 로 성공했다는 메시지, 상태코드 반환하기
  3. 예외처리
    • 아래 예외처리를 AOP 를 활용하여 구현하기

요구사항에 맞게 수정해 보세요!

  1. 회원 가입 API

    • username, password를 Client에서 전달받기
    • username은 최소 4자 이상, 10자 이하이며 알파벳 소문자(a~z), 숫자(0~9)로 구성되어야 한다.
    • password는 최소 8자 이상, 15자 이하이며 알파벳 대소문자(a~z, A~Z), 숫자(0~9), 특수문자로 구성되어야 한다.
    • DB에 중복된 username이 없다면 회원을 저장하고 Client 로 성공했다는 메시지, 상태코드 반환하기
    • 회원 권한 부여하기 (ADMIN, USER) - ADMIN 회원은 모든 게시글, 댓글 수정 / 삭제 가능
    • 참고자료
      1. https://mangkyu.tistory.com/174
      2. https://ko.wikipedia.org/wiki/정규_표현식
      3. https://bamdule.tistory.com/35
  2. 로그인 API

    • username, password를 Client에서 전달받기
    • DB에서 username을 사용하여 저장된 회원의 유무를 확인하고 있다면 password 비교하기
    • 로그인 성공 시, 로그인에 성공한 유저의 정보와 JWT를 활용하여 토큰을 발급하고, 발급한 토큰을 Header에 추가하고 성공했다는 메시지, 상태코드 와 함께 Client에 반환하기
  3. 전체 게시글 목록 조회 API

    • 제목, 작성자명(username), 작성 내용, 작성 날짜를 조회하기
    • 작성 날짜 기준 내림차순으로 정렬하기
    • 각각의 게시글에 등록된 모든 댓글을 게시글과 같이 Client에 반환하기
    • 댓글은 작성 날짜 기준 내림차순으로 정렬하기
    • 게시글/댓글에 ‘좋아요’ 개수도 함께 반환하기 (구현)
  4. 게시글 작성 API

    • 토큰을 검사하여, 유효한 토큰일 경우에만 게시글 작성 가능 ⇒ Spring Security 를 사용하여 토큰 검사 및 인증하기! (구현)
    • 제목, 작성자명(username), 작성 내용을 저장하고
    • 저장된 게시글을 Client 로 반환하기
  5. 선택한 게시글 조회 API

    • 선택한 게시글의 제목, 작성자명(username), 작성 날짜, 작성 내용을 조회하기 (검색 기능이 아닙니다. 간단한 게시글 조회만 구현해주세요.)
    • 선택한 게시글에 등록된 모든 댓글을 선택한 게시글과 같이 Client에 반환하기
    • 댓글은 작성 날짜 기준 내림차순으로 정렬하기
    • 게시글/댓글에 ‘좋아요’ 개수도 함께 반환하기 (구현)
  6. 선택한 게시글 수정 API

    • 토큰을 검사한 후, 유효한 토큰이면서 해당 사용자가 작성한 게시글만 수정 가능 ⇒ Spring Security 를 사용하여 토큰 검사 및 인증하기! (구현)
    • 제목, 작성 내용을 수정하고 수정된 게시글을 Client 로 반환하기
    • 게시글에 ‘좋아요’ 개수도 함께 반환하기 (구현)
  7. 선택한 게시글 삭제 API

    • 토큰을 검사한 후, 유효한 토큰이면서 해당 사용자가 작성한 게시글만 삭제 가능 ⇒ Spring Security 를 사용하여 토큰 검사 및 인증하기! (구현)
    • 선택한 게시글을 삭제하고 Client 로 성공했다는 메시지, 상태코드 반환하기
  8. 댓글 작성 API

    • 토큰을 검사하여, 유효한 토큰일 경우에만 댓글 작성 가능 ⇒ Spring Security 를 사용하여 토큰 검사 및 인증하기! (구현)
    • 선택한 게시글의 DB 저장 유무를 확인하기
    • 선택한 게시글이 있다면 댓글을 등록하고 등록된 댓글 반환하기
  9. 댓글 수정 API

    • 토큰을 검사한 후, 유효한 토큰이면서 해당 사용자가 작성한 댓글만 수정 가능 ⇒ Spring Security 를 사용하여 토큰 검사 및 인증하기! (구현)
    • 선택한 댓글의 DB 저장 유무를 확인하기
    • 선택한 댓글이 있다면 댓글 수정하고 수정된 댓글 반환하기
    • 댓글에 ‘좋아요’ 개수도 함께 반환하기
  10. 댓글 삭제 API

    • 토큰을 검사한 후, 유효한 토큰이면서 해당 사용자가 작성한 댓글만 삭제 가능 ⇒ Spring Security 를 사용하여 토큰 검사 및 인증하기! (구현)
    • 선택한 댓글의 DB 저장 유무를 확인하기
    • 선택한 댓글이 있다면 댓글 삭제하고 Client 로 성공했다는 메시지, 상태코드 반환하기
  11. 예외 처리 (구현)

    • 토큰이 필요한 API 요청에서 토큰을 전달하지 않았거나 정상 토큰이 아닐 때는 "토큰이 유효하지 않습니다." 라는 에러메시지와 statusCode: 400을 Client에 반환하기
    • 토큰이 있고, 유효한 토큰이지만 해당 사용자가 작성한 게시글/댓글이 아닌 경우에는 “작성자만 삭제/수정할 수 있습니다.”라는 에러메시지와 statusCode: 400을 Client에 반환하기
    • DB에 이미 존재하는 username으로 회원가입을 요청한 경우 "중복된 username 입니다." 라는 에러메시지와 statusCode: 400을 Client에 반환하기
    • 로그인 시, 전달된 username과 password 중 맞지 않는 정보가 있다면 "회원을 찾을 수 없습니다."라는 에러메시지와 statusCode: 400을 Client에 반환하기
    • 회원가입 시 username과 password의 구성이 알맞지 않으면 에러메시지와 statusCode: 400을 Client에 반환하기 (구현)

API 명세서

image

ERD

image image

nbc-spring-assignment-blog's People

Contributors

uiseongsang avatar

Watchers

 avatar

nbc-spring-assignment-blog's Issues

To. 튜터님 - 게시글 삭제(영속성 전이 삭제) <- 질문

문제

댓글이 여러개 달러 있고 게시글에도 좋아요 댓글에도 좋아요가 달려 있을 때 게시글을 삭제를 하면 영속성 전이 삭제로 한 번에 지워지지 않을 까 해서 Postman으로 시도 해봤는데 아래와 같은 오류로 삭제가 안 되는것을 발견 하였습니다!!

에러내용:

원인

이 에러가 발생한 원인은 @OnetoOne이나 @OneToMany에 붙혀주는 영속성 전이 Cascade 떄문에 일어난 문제였습니다.
�전 아래의 코드처럼 @OneToMany에 영속성 전이를 붙여준 상태입니다.

@OneToMany(mappedBy = "post", cascade = CascadeType.REMOVE)
private List<Comment> commentList = new ArrayList<>();

Cascade를 사용할 떄 두가지 조건을 만족해야 사용이 가능하다고 하더라고요.

  1. 등록 삭제 등 라이프 사이클이 똑같을 떄

  2. 단일 ENtity에 완전히 종속일 때

부모와 자식이 연관관계를 맺고 있을 떄 자식은 부모 이외 다른곳에서도 관계를 맺고 있다면 사용하면 안된다.

해결방법

아래의 코드처럼 Post 삭제부분에서 연관 되어 있는 것들도 같이 Repository에서 지워주니깐 삭제가 되었습니다.
정확히 말하자면 82 Line에서 90 Line부분을 추가를 해주었습니다!

public void deletePost(Long id, User user) {
// 해당 포스트가 DB에 있는지 체크
Post post = findPost(id);
// 사용자 체크
if(!user.getRole().equals(UserRoleEnum.ADMIN) && !post.getUser().equals(user)) {
throw new RejectedExecutionException();
}
CommentLike commentLike = commentLikeRepository.findByPostIdAndUser(id,user);
if(commentLike != null) {
commentLikeRepository.delete(commentLike);
}
PostLike postLike = postLikeRepository.findByPostIdAndUser(id,user);
if(postLike != null) {
postLikeRepository.delete(postLike);
}
// 내용 삭제
postRepository.delete(post);
}


여기서 튜터님한테 하고 싶은 질문이
제가 해결한 방법이 올바른 방법인지가 궁금합니다!
만약에 아니라면 보통 이런 부분은 어떻게 처리 하는지? 좋은 방법이 뭐가 있는지도 궁금합니다!!

제가 경험해본 어떠한 게시판 사이트는 댓글이 하나라도 달리면 게시글 삭제를 못하도록 막는게
이런 제한적인 기능도 위에 문제 때문에 나온거 같기도 하는 생각도 들긴하네요...

미리 답변 감사의 말씀을 올립니다!!

To. 튜터님 - @Transactional 동시성 문제 <- 질문

좋아요 기능을 구현하면서 동시성 문제 부분을 생각을 해봤습니다!

예를 들어 하나의 게시글에 게시글 좋아요를 동시에 API를 요청 했을 경우
curl -X POST 'http://localhost:8080/api/post/1/likes' & curl -X POST 'http://localhost:8080/api/post/1/likes'

좋아요 카운트는 하나만 올라 가는걸로 알고 있는데

동시성 문제는 어떻게 해결 할 수 있을까요??

선우튜터님이 팀 프로젝트 피드백으로 동시성 이슈가 생길 수 있는 모든 부분에는 @transactional 전부 사용해줘야 하고

또한 다른 service의 delte의 경우 데이터가 있는지 확인하고 제거하는 작업을 할 떄도 @transactional 필요하다고 하는데

사실 아직 잘 이해가 안 되고 구글링 해도 잘 모르겠어서 요청을 드립니다!!

요약하자면
동시성 이슈 및 삭제할 떄 @transactional의 대해 궁금합니다!!
혹시 제 코드를 보고 부연설명 해주시면 더 감사 드리겠습니다!! (ex 이 메소드에는 @transactional 붙여주는게 좋다 등등)

주특기 주차 LV2 과제 리뷰

CommentController 리뷰

  1. HttpStatus.CREATED.value()를 사용하면 더 좋을것 같습니다.
    https://github.com/uiseongsang/spring-lv2/blob/706f7f0d05d962bb61c40aa1ca876cfcd2d6463f/src/main/java/com/sparta/springlv2/controller/CommentController.java#L34

  2. ResponseEntity 를 사용하신 점 잘하셨습니다.
    ResponseBody와 차이점을 한번 찾아보시면 좋을것 같습니다.

  3. status를 아래와 같이 작성하신 점 잘하셨습니다.
    https://github.com/uiseongsang/spring-lv2/blob/706f7f0d05d962bb61c40aa1ca876cfcd2d6463f/src/main/java/com/sparta/springlv2/controller/CommentController.java#L41-L43

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.