-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[FEAT] ERD 기반 Entity 정의 #15
Conversation
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생하셨습니다!
수정해야 할 사항, 제 의견 작성해두었습니다! 읽어보시고 판단해주시면 감사하겠습니다!!
backend/src/main/java/kernel360/techpick/config/JpaAuditingConfiig.java
Outdated
Show resolved
Hide resolved
backend/src/main/java/kernel360/techpick/entity/admin/Topic.java
Outdated
Show resolved
Hide resolved
backend/src/main/java/kernel360/techpick/entity/admin/CrawlingTopicMapping.java
Outdated
Show resolved
Hide resolved
backend/src/main/java/kernel360/techpick/entity/article/Article.java
Outdated
Show resolved
Hide resolved
backend/src/main/java/kernel360/techpick/entity/admin/Administrator.java
Show resolved
Hide resolved
backend/src/main/java/kernel360/techpick/entity/event/AricleViewEvent.java
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Article과 User 엔티티의 다대다 관계에 대해서는 논의가 필요할 것 같습니다.
- 엔티티들마다 AllArgsConstructor와 Builder 모두 존재하지 않았는데.. 객체를 어떤 방식으로 생성하게 되는지 궁금합니다.
- p6spy logger 도입한 이유에 대해 궁금합니다.
고생하셨습니다.
backend/src/main/java/kernel360/techpick/entity/admin/CrawlingTopicMapping.java
Show resolved
Hide resolved
backend/src/main/java/kernel360/techpick/entity/article/Article.java
Outdated
Show resolved
Hide resolved
backend/src/main/java/kernel360/techpick/entity/article/ArticleDetail.java
Outdated
Show resolved
Hide resolved
@Column(name = "default_image", nullable = false) | ||
private String base64Image; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
db에 블로그 기본 대표 이미지를 직접 저장한다는 것으로 이해해도 괜찮을까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@Gyaak
넵 블로그마다 대표 이미지가 있어서, 게시글에 image가 없는 경우 해당 블로그 대표 이미지를 끌어다 쓰도록 했습니다.
이미지는 있을거면 다 있어야 해서, nullable=false
로 했습니다.
지금은 지정 블로그만 하니까 걔네 대표 이미지를 넣어주고,
이후 사용자별 블로그 추가 기능이 도입될 때, 그 블로그의 대표 이미지를 생성하는 이미지 생성기가 구현되면 어떨까 싶네요.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- 이미지를 파일로 저장하지 않고 base64로 인코딩해 db에 직접 저장하는 이유가 궁금합니다.
- base64로 인코딩해서 db에 저장하는 경우
@Blob
어노테이션을 붙여byte[]
타입으로 저장해야하는것으로 알고 있습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
질문 1. 이미지를 base64로 저장하는 이유
이미지URL이 null일 경우 프론트엔드가 처리하기 편해서 이렇게 저장했습니다.
파일로 저장하면 프론트가 별도 api로 2번 요청해야 합니다.
- 만약 파일로 저장할 경우 상황 예시입니다.
- 백엔드에서 이미지 cdn 주소 (
걔네 이미지 주소, null일 수 있음
) 를 프론트에게 보냅니다. - 프론트는 img 태그에 해당 주소를 넣어 이미지를 렌더링 합니다.
- 만약 글에 이미지가 없어서 서버로부터 url이 null로 온다면, 프론트측에서 api로 기본 이미지를 한번 더 요청 합니다.
- 서버는 프론트에게 기본 이미지 파일을 보내줍니다.
이를 위해 image api 를 하나 파서, 이미지 파일을 서빙 하면 됩니다.
그런데 이를 base64 data url로 저장한다면, 프론트가 이미지가 null인지 체크하고 한번 더 요청할 필요 없이
바로 반환값을 img 태그에 이미지를 넣을 수 있습니다.
1. 블로그의 이미지가 있는 경우
<img src="해당 블로그의 CDN 주소">
2. 블로그의 이미지가 없는 경우, 예외 처리 없이 우리의 dataURL 그대로 사용
<img src="우리가 보내준 base64 url">
위 이유로 base64 data url로 저장하는 걸 생각했습니다.
결론
파일로 저장하면 이미지 링크가 null일 경우 두번 요청해야 하나
base64로 하면 프론트가 신경 안써도 됨.
서버는 이렇게 처리하면 될 것 같습니다.
- 게시글의 이미지 url이 null인지 체크
- 만약 null이면, 기본 이미지로 저장해둔 base64 를 url 자리에 넣어준다.
질문 2. base64로 인코딩해서 db에 저장하는 경우
만약 서버쪽에서 decode, encode를 해야 할 경우는 그렇게 해야 할 것 같아요.
따로 서버에서 편집이 안들어가면 VARCHAR(MAX)에 저장해도 될 것 같습니다.
이건 좀 더 알아보겠습니다...!
참고 - Which SQL data type to store Base64 encoded file?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
자세한 설명 감사합니다 이미지를 별도로 저장하는것에 대한 충분한 설명이 된것 같습니다.
@Gyaak @sangwonsheep 변경사항 확인해주세요~ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
수정 사항 확인했습니다! 고생하셨습니다 👍
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
* [FEAT] 백엔드 프로젝트 설정 (#3) * feat: backend initial setup * refactor: .gitignore 수정 * refactor: .env 적용 방법 이미지 수정 * Update README.md * Update .env.sample * feat : backend pr 빌드봇 추가 (#6) * feat: swagger 설정 추가 (#13) * feat : springdoc swagger 의존성 추가 * feat : swagger config 추가 * feat: ERD 기반 Entity 정의 (#15) * feat: RSS 기능 구현 (#22) * feat: Entity 재정의 (#26) * feat: 기획 변경에 따른 Entity 재정의 * refactor: 서비스 이름 변경에 따라 linkpick으로 수정 * refactor: 리뷰 반영, 불필요한 클래스, 오타 수정, url BLOB 타입으로 지정 * refactor: linkpick -> techpick 변경 * feat: 엔티티 최종 수정 (#34) * ♻️ refactor: 멀티 모듈을 고려한 디레토리 구조 정리 * ♻️ refactor: 불필요한 디렉토리 제거 * ♻️ refactor: Admin 제거 (User로 통합) * ♻️ refactor: dummy readme 이동 * ♻️ refactor: 최종 Entity 수정 * ♻️ refactor: 최종 Entity 수정 * ♻️ refactor: url을 Blob에서 varchar로 변경 * feat: 디렉토리 구조 및 공통 예외처리 설정 (#43) * ♻️ refactor: 디렉토리 구조 변경 * ♻️ refactor: 디렉토리 구조 추가 및 예시용 코드 작성 * ✨ ApiException * ♻️ refactor: Class 이름 변경 * ♻️ 예외 코드를 같이 표시 합니다 * ♻️ 예외 코드를 같이 표시 합니다 * ♻️ 스웨거 interface 분리 * feat: 소셜로그인 구현 (#44) * feat : security 관련 의존성 추가 * feat : Jwt token provider 구현 * feat : jwt 설정 추가 및 oauth 설정 분리 * feat : jwt 관련 의존성 추가 * feat : cookie 관련 유틸 추가 * feat : jwt 관련 유틸 추가 * feat : thymeleaf 의존성 추가 * feat : oauth2 인증을 위한 메소드 추가 * feat : providerId 필드 추가 * feat : Jwt에 role도 포함되도록 수정 * feat : oauth2 config 설정 yaml * feat : oauth2 구현 * feat : oauth 로그인 유저 생성을 위한 user 엔티티 수정 * fix : 토큰 유효성 검증 메소드명 수정 : validateToken->isValidToken * fix : 쿠키 검색 메소드 분리 * fix : 불필요한 주석 삭제 * fix : var -> Object 로 명시적으로 보이게 수정 * fix : 개행 추가 * fix : var -> Object 로 명시적으로 보이게 수정 * fix : User 엔티티 패키지 수정 * fix : 패키지 구조 변경 적용 * fix : User static factory method 파라미터 수정 * feat : OAuth2 exception 및 errorcode 추가 * refactor: 에러 코드 기능별 분리 (#49) * 🎨 ApiErrorCode 각 기능 별로 분리 * 🎨 ApiOAuth2ErrorCode 추가 * ♻️ chore: 단순 주석 통일 및 개행 제거 * ♻️ chore: 접근 지정자 제한 * ♻️ feat: 핸들러 함수 위임 * ♻️ chore: env 샘플 업데이트 * ♻️ chore: exception abstract 제거, 주석 추가 * ♻️ chore: exception abstract 제거, 주석 추가 * 🐛 fix: servletRequest / Response 받지 않는 것으로 변경 (수형님 리뷰) * feat: 테스트 api 서버 배포 (#64) * Back/feat/#54 (#55) * 🚀 feat: 배포용 action 설정 * 🚀 feat: 배포용 action 설정 * 🚀 feat: 배포용 compose 설정 * 🚀 feat: 배포용 action 설정 * 🚀 feat: 배포용 action 설정 * deploy: api 서버 배포 테스트 (#56) * 🚀 feat: 배포용 action 설정 * 🚀 feat: 배포용 action 설정 * 🚀 feat: 배포용 compose 설정 * 🚀 feat: 배포용 action 설정 * 🚀 feat: 배포용 action 설정 * 🚀 feat: 배포용 action 설정 * deploy: api 서버 배포 테스트 (#57) * 🚀 feat: 배포용 action 설정 * 🚀 feat: 배포용 action 설정 * 🚀 feat: 배포용 compose 설정 * 🚀 feat: 배포용 action 설정 * 🚀 feat: 배포용 action 설정 * 🚀 feat: 배포용 action 설정 * 🚀 feat: 배포용 action 설정 * 🚀 feat: 배포용 action 설정 * deploy: api 서버 배포 테스트 (#58) * 🚀 feat: 배포용 action 설정 * 🚀 feat: 배포용 action 설정 * 🚀 feat: 배포용 compose 설정 * 🚀 feat: 배포용 action 설정 * 🚀 feat: 배포용 action 설정 * 🚀 feat: 배포용 action 설정 * 🚀 feat: 배포용 action 설정 * 🚀 feat: 배포용 action 설정 * 🚀 feat: 배포용 action 설정 * 🚀 feat: 배포용 action 설정 (#60) * deploy test (#61) * 🚀 feat: 배포용 action 설정 * 🚀 feat: 배포용 action 설정 * Update test-server-deploy.yml * Update test-server-deploy.yml * Update test-server-deploy.yml * Update test-server-deploy.yml * Update test-server-deploy.yml * 🚀 feat: 배포용 action 설정 * 🚀 feat: 배포용 action 설정 * 🚀 feat: docker compose 내용 변경 * 🚀 feat: github action 환경 변수 분리 * 🚀 feat: github action 환경 변수 분리 * 🚀 feat: github action 환경 변수 분리 * 🚀 feat: github action 환경 변수 분리 * 🚀 feat: github action 환경 변수 분리 * 🚀 feat: github action 환경 변수 분리 * feat: RSS 기능 구현 (#46) * feature: RSS 기능 구현, csv 파일로 초기 데이터 설정, RssRawData column 제약 조건 제거 * refactor: package 구조 변경으로 인해 import 수정 * refactor: 리뷰에 따라 코드 리팩토링 * Update test-server-deploy.yml * �[feat] Link CRUD 구현 (#63) * feat : (임시) favicon 추가 * feat : swagger 경로 설정 추가 * feat : Link exception, error code 추가 * fix : logging 항목 변경 * fix : swagger url 추가 * feat: Link를 가지고있는 pick 확인 메소드 구현 * feat: Link 엔티티 수정 및 정적 메소드 추가 * feat: Link dto 구현 * feat: Link CRUD 구현 * feat: Link swagger 인터페이스 추가 * fix: LinkService 메소드명 명확하게 수정 * fix: LinkService 메소드명 명확하게 수정 * fix: LinkController 리팩토링 * feat: LinkMapper 추가 * refactor: Transactional 어노테이션 추가 * fix: Path 수정 * refactor: LinkProvider 추가 * refactor: PickTag 엔티티 필드 변경 user->pick (#73) * [feat] 태그 API 구현 (#71) * refactor: 불필요한 클래스 삭제 * refactor: 불필요한 클래스 삭제 * feat: Tag 예외처리 및 에러코드 구현 * refactor: order필드 및 생성 및 삭제를 위한 정적 메소드 추가 * feat: 태그 crud 구현 * feat: 태그 컨트롤러 및 swagger 명세 구현 * feat: (임시) 태그 삭제시 검증을 위한 PickTagRepository 구현 * fix: createTag 메소드에 ApiUserException 추가 * refactor: tag 삭제방식 변경 * refactor: validate 로직 분리 - TagValidator 추가 * refactor: TagRepository 사용하지 않는 메소드 삭제 * refactor: mapper, provider 패키지 구조 변경 * feat: order 중복 에러 추가 및 pick 존재 에러 삭제 * feat: 사용자가 등록한 태그를 map 타입으로 제공하는 메소드 추가 * feat: 중복 order 검증 로직 추가 * refactor: Tag update 로직 수정 - 중복 order 검증, 사용자 태그 검증 로직 변경 * refactor: delete 로직에서 메소드명 typo 수정 및 주석 추가 * refactor: typo 수정 * refactor: tag order 가 음수일때 검증 로직 추가 * refactor: tag order 가 0부터 시작하도록 수정 * refactor: orElse -> orElseGet 으로 리팩토링 * refactor: format refactoring * refactor: tag update시 검증 로직 변경 * refactor: snake case -> camel case로 리팩토링 * refactor: Tag 엔티티 order 필드명 수정 -> order -> tagOrder * refactor: userTagList 제공 메소드 정렬기준에 따라 분리 - OrderByTagOrder, OrderByTagId * refactor: userTagList 제공 메소드 정렬기준에 따라 분리 - OrderByTagOrder, OrderByTagId * refactor: updateTag 로직 수정 validator에서 update할 tag의 index를 가져옴 * refactor: 불필요한 메소드 삭제 * refactor: TagUpdater 클래스 추가 * refactor: TagUpdater 클래스를 사용해 updateTag 로직 구현 * refactor: format 수정 * refactor: 미사용 메소드 삭제 * refactor: validator 삭제 및 관련 로직 service로 이관 * refactor: 다음 tagOrder 가져오는 메소드 명 명확하게 수정 * [test] 테스트용 mysql 분리 (#79) * test: test용 mysql 분리 * refactor: 테스트용 db가 분리됨에 따라 패키지 구조 변경 * refactor: 테스트용 db가 분리됨에 따라 패키지 구조 변경 * refactor: 개발 db와 테스트 db의 mysql관련 파일 패키지 분리 * Refactor: Security, Exception, Package 리팩토링 (#82) * [refactor] 태그 수정 검증로직 추가 및 태그 순서 필드명 수정 (#89) * refactor: 중복 이름 검증 로직 추가 및 순서,이름 로직를 하나로 묶음 * refactor: 태그 순서 필드명 수정 order -> tagOrder * refactor: 태그 순서 필드명 수정 order -> tagOrder * refactor: 태그 수정시 결과 리스트 tagOrder로 오름차순 정렬하여 반환 * [test] 테스트 Fixture 구현 (#86) * refactor: 테스트를 위한 lombok 의존성 추가 * refactor: env 파일 적용 * test: 테스트를 위한 fixture 객체 구현 * refactor: lombok 의존성 변경 * Feat: 테스트 서버 API 설정 (#91) * ♻️ refactor: Exception core 패키지를 각 기능별 패키지로 이동 * ♻️ refactor: 시큐리티 - ACCESS_TOKEN_KEY 직접 비교로 수정 * ♻️ refactor: Exception - OAuth 예외도 auth 패키지 안으로 이동 * ✨ feat: API 에러 레벨 구현 * ✨ feat: 에러 코드에 에러 레벨 적용 * ✨ feat: 에러 레벨 별 다른 작동 구현 * ♻️ refactor: dto를 service 패지키로 이동 * ♻️ refactor: api 테스트 서버 설정 * ♻️ refactor: api 테스트 서버 설정 * ♻️ refactor: api 테스트 서버 설정 * ♻️ refactor: api 테스트 서버 설정 * ♻️ refactor: 배포 스크립트에 환경 변수 추가 * Refactor: RSS Exception 처리 (#81) * feat: Rss 에러 코드, Exception 구현 * refactor: dto 경로 변경에 따라 import 수정, 주석 제거 * feat: rss exception 처리 및 provider로 분리 * refactor: retry 로직 추가, 예외 처리 수정 * refactor: 충돌 해결 및 에러 레벨 추가 * refactor: RssRawData에 RssBlogId 추가, 도커 경로 변경으로 인해 csv 파일 추가 * refactor: oauth uri 변경 (#94) * fix: /api/login uri 접근 허용 (#97) * fix: /api/login uri 접근 허용 (#99) * refactor: cors 설정 추가 (#102) * feat: mysql에서 rss blog url sql 파일 import (#100) * feat: rss blog url setting 방법 추가, blog url unique 추가, csv 파일에 중복 제거 * feat: sql 파일 도커 경로로 추가 * refactor: 미사용 설정 / 파일 제거 (#105) * refactor: 스케줄러 설정 추가 (#110) * [feat] Folder 기본 설계 (#111) * feat: folder entity 구현 * feat: folder 예외, 에러코드 구현 * feat: User 추가 * feat: FolderType 필드 접근제어자 추가 * [feat] FolderStructure 설계 (#113) * feat: FolderStructure Entity 구현 * feat: FolderStructure Repository, Provider 구현 * Feat: Parser Dto 및 구조 작성 (#118) * 🚧 Parser Dto 및 구조 작성 * ♻️ refactor: FolderAction 제거 * ♻️ refactor: 함수 이름 수정 * ♻️ refactor: 공백 제거 * ♻️ refactor: 미사용 파일 제거 * [feat] Folder Service 구현 (#121) * fix: 생성자와 정적메소드에 User 파라미터 추가 * feat: Folder update 메소드 추가 * feat: Folder dto 구현 * feat: Folder Mapper 구현 * feat: Folder Provider Repository 구현 * feat: Folder Service 구현 * feat: 부모 폴더 업데이트 메소드 구현 * feat: 사용자의 미분류폴더, 휴지통 조회하는 메소드 구현 * feat: 특정폴더를 본인의 미분류폴더, 휴지통으로 이동시키는 메소드 구현 * refactor: 검증로직에 assertion 추가 * refactor: 검증로직 기존코드로 롤백 * feat: Pick DTO 설계 (#124) * feat: pick error code, exception 구현 * refactor: link entity에 imageUrl 추가 * refactor: link mapper에 imageUrl 추가 * refactor: link dto에 imageUrl 추가 * refactor: 패키지 구조 변경에 따라 import 수정, linkFixture imageUrl 추가 * refactor: pick에 folder 연관 관계 추가 * feat: pick, pickTag dto 구현 * refactor: pick dto 필드명 수정 * refactor: pick entity folder 변수명 변경 * [FEAT] 프론트 로그인 로컬 테스트를 위한 redirect url 설정 (#129) * feat: 인증 성공 후 redirect url 추가 * feat: 인증 성공 후 redirect url 추가 * [�REFACTOR] 기본 폴더 CRUD 관련 리팩토링 (#127) * refactor: 필드명 수정 parent -> parentFolder로 수정 * refactor: 필드명 수정 parent -> parentFolder로 수정 * refactor: 필드명 수정 parent -> parentFolder로 수정 * refactor: 기본폴더 조회 메소드 수정 * feat: 회원가입시 기본폴더 생성 로직 구현 * feat: 기본폴더 수정 및 삭제 방지 로직 구현 * feat: 기본폴더 변경 불가 에러코드 설명 구체적으로 수정 * refactor: 필드명 수정 parent -> parentFolder로 수정 * refactor: 필드명 수정 parent -> parentFolder로 수정 * refactor: 필드명 수정 parent -> parentFolder로 수정 * refactor: EnumSet을 이용해 BasicFolderType을 검증하도록 수정 * refactor: 프론트 로컬 테스트를 위한 설정 (#135) * [REFACTOR] 프론트 로컬 테스트를 위한 설정 (#137) * refactor: 프론트 로컬 테스트를 위한 설정 * refactor: 프론트 로컬 테스트를 위한 설정 * fix: @NotNull 어노테이션 제거 (#132) * [FEAT] 기본 폴더로 root 폴더 추가 (#140) * feat: 기본 폴더로 root 폴더 추가 * feat: 회원가입시 root 폴더 생성 * [feat] 클라이언트 폴더 구조 JSON 파싱 (#147) * 🚧 Parser Dto 및 구조 작성 * ♻️ refactor: FolderAction 제거 * ♻️ refactor: 함수 이름 수정 * ♻️ refactor: 공백 제거 * ♻️ refactor: 미사용 파일 제거 * ✨ 파서 에러 코드 추가 * ✨ 파서 인터페이스 변경 * ✨ 파서 테스트 코드 * ✨ feat: 파서 구현 * ♻️ refactor: 구현체 코드 정리 * ♻️ refactor: 구현체 코드 정리 * ♻️ refactor: enum 변환에 custom exception 추가 * ♻️ refactor: 코드 리뷰 반영 * ♻️ refactor: 미사용 파일 제 * ♻️ refactor: 리팩토링 주석 추가 * ♻️ refactor: 테스트 케이스 최종 수정 * ♻️ refactor: Jackson으로 구조 리팩토링. * ♻️ refactor: 디렉토리 이동 * ♻️ refactor: 테스트 케이스 작성 모두 완료 * ♻️ refactor: 함수명 수정 * ♻️ refactor: 함수명 수정 * ♻️ refactor: 주석 추가 * ♻️ refactor: 리팩토링 제안 주석 제거 (이슈로 등록) * ♻️ refactor: 코드 리뷰 반영 * ♻️ refactor: 코드 리뷰 반영 * [FEAT] FolderService 추가 비즈니스 로직 구현 및 리팩토링 (#143) * feat: root 폴더 조회 로직 구현 * refactor: 업데이트 메소드 분리 (이름/부모폴더) * refactor: 업데이트 메소드 분리 (이름/부모폴더) * refactor: 업데이트 메소드 분리 (이름/부모폴더) & 삭제시 휴지통으로 이동되도록 수정 * refactor: 부모 폴더가 삭제되면 자식 폴더/픽도 삭제되도록 @onDelete 추가 * feat: 휴지통에 있지 않은 폴더를 삭제하려 할 때, 발생하는 오류 추가 * feat: 현재 폴더가 어떤 기본폴더에 속해있는지 반환하는 메소드 추가 * feat: 휴지통에 있는 폴더 영구 삭제하는 기능 추가 * refactor: 폴더 이름 변경시에도 구조json 검증 * refactor: 재귀 로직 수정 --------- Co-authored-by: Minky <minkyeki@student.42seoul.kr> * feat: 로그인 확인용 쿠키(techPickLogin) 구현 (#155) * [HOTFIX] 로그인 쿠키 버그 수정 (#156) * feat: 로그인 확인용 쿠키(techPickLogin) 구현 * fix: 로그인 확인용 쿠키(techPickLogin)가 access_token을 덮어씌우는 버그 수정 * [FEAT] 직렬화 비직렬화 및 데이터 세팅 과정 구현 (#151) * ♻️ refactor: 테스트 케이스 업데이트 * ♻️ refactor: 미사용 파일 삭제 * ♻️ refactor: 테스트 케이스 업데이트 * ♻️ refactor: 디렉토리를 스트럭쳐로 이름 변경 * ✨ feat: 클라이언트용 구조 노드 DTO * ✨ feat: 서버용 구조 노드 DTO * ✨ feat: 파일 위치 이동 * ✨ feat: 파일 위치 이동 * ✨ feat: 클라이언트 전송을 위한 name 데이터 설정 - provider * ✨ feat: 최종 Structure 완료 * ✨ feat: 최종 Structure 완료 * ✨ feat: 코드 리뷰 바탕으로 한번에 로드하는 메소드 추가 * [FEAT] Folder Api 구현 및 FolderService 리팩토링 (#161) * refactor: 접근권한이 없는 폴더 에러코드 HttpStatus 403으로 변경 * feat: dto 세분화 * refactor: validator 분리 * feat: Structure api에서 사용할 FolderStructureService 분리 * feat: Folder Api 구현 * refactor: FolderStructureService 반환형식 수정 * refactor: updateFolderName 메소드 응답 누락 해결 * refactor: @PathVariable 어노테이션 추가 * refactor: 잘못된 검증 로직 수정 * [FEAT] Structure와 연관된 Pick Service 구현 (#163) * feat: pick dto 세분화 * refactor: pick update, delete 추가 * feat: Structure 관련된 pick 구현 * feat: pick service 틀 잡기 * refactor: 변수명 수정, 잘못 사용한 메서드 변경 * [FEAT] Structure API 구현 및 Folder Create 로직 수정 (#164) * refactor: 누락된 검증 로직 추가 * refactor: 폴더 생성 로직 변경 parentId는 별도 주입 * refactor: Folder Dto 수정 * refactor: Folder Create 로직 변경 (create->move 한세트로) * refactor: 불필요한 필드 삭제 * refactor: Structure Json 엔티티 이름 명확하게 변경 * refactor: StructureJson Repository Structure 패키지로 이동 * refactor: Structure API 구현 * refactor: StructureJson 이름 변경 * refactor: FolderCreate 로직 분리 * refactor: PickDeleteDto 분리 * feat: Structure Dto 및 Mapper 구현 * feat: Structure Service 구현 * refactor: Mapper 에 UserRepository 의존성이 추가되면서 임시로 수정 * refactor: ApiDirectory->ApiStructure로 이름 변경 * feat: 회원가입시 자동으로 root,recycle_bin이 빈 폴더구조json 생성 * refactor: model 패키지 이동 * refactor: model 패키지 이동 * refactor: create folder시 무조건 parentId가 null이므로 그에대한 로직 추가 * refactor: model 패키지 이동 * refactor: @RequestBody 추가 * refactor: Structure를 필드로 직접 가지도록 수정 * refactor: 포맷수정 * feat: StructureJsonProvider 구현 * refactor: 불필요한 클래스 삭제 * refactor: StructureJson 업데이트 로직 Provider로 이관 * refactor: Folder 생성자 수정 * refactor: Structure ErrorCode 코드명/주석 수정 * refactor: var 제거 * refactor: 부모폴더가 없을 시 parentFolderId = -1로 응답하도록 수정 * hotfix: getParentFolderId -> findParentFolderId JPA 오류 수정 * refactor: access_token 사용하도록 설정 (#175) * [FEAT] Structure Validator 구현 (#178) * refactor: 불필요한 메소드 삭제 및 Folder 조회 조건 변경(ParentFolder Not Null) * refactor: 불필요한 메소드 삭제 * refactor: 메소드명 구체화 * refactor: 유저 픽 리스트 조회 메소드 추가 * feat: StructureValidator 구현 및 적용 * refactor: 메소드 이름 명확하게 변경 * feat: 로그 추가 * refactor: 메소드명 통일 IsNotEmpty -> IsNotNull * refactor: root, recycleBin 정보 요청으로 받지 않고 db에서 받도록 수정 * [HOTFIX] swagger 쿠키 설정 수정 (#179) * refactor: access_token 사용하도록 설정 * fix: swagger 쿠키 설정 수정 * hotfix: swagger 쿠키 설정 수정 * hotfix: samesite 설정 제거 * [REFACTOR] UserService 구현 포함, 전체 코드 리팩토링 (#180) * ♻️ docker compose 테스트 DB 설정 제거 * ✨ feat: UserService 기능 구현 * ♻️ refactor: Tag Feature 리팩토링 (의존성 제거) * ♻️ refactor: Pick 도메인 리팩토링 * ♻️ refactor: Structure 도메인 리팩토링 * ♻️ refactor: Link 도메인 리팩토링 * ♻️ refactor: Folder 도메인 리팩토링 * ♻️ refactor: FolderStructure 도메인 리펙토링 * ♻️ refactor: FolderStructure 도메인 리펙토링 (기존 코드 삭제) * ♻️ refactor: OAuth 도메인 리펙토링 * ♻️ refactor: User 이름 랜덤 생성기 추가 * ♻️ refactor: Folder 예외 추가 * ♻️ refactor: Parser 테스트 주석 처리 (provider 의존성 필요) * ♻️ refactor: 주석 오류 수정 * ♻️ refactor: 테스트 코드 준비 * ♻️ refactor: 코드 리뷰 피드백 반영 * ♻️ refactor: 코드 리뷰 피드백 반영 * ✨ feat: 태그 color 추가 (#185) * 🐛 fix: 익스텐션 CORS 추가 * [FEAT] Pick �API + Service 구현 (#186) * feat: Link Service 기능 추가 * feat: UserProvider 구현 * refactor: TagService 수정 * feat: Pick Service 구현 * feat: Pick Tag 구현 * feat: Pick Api 구현 * refactor: FolderMapper 모두 general 타입으로 들어가는 문제 해결 * feat: folder type 메서드 추가 * refactor: Authentication 제거 * refactor: dto 삭제 * refactor: UserId -> User로 변경 및 메서드명 통일 * refactor: Request Param 변경 * refactor: 리뷰 반영 * [HOTFIX] Valid 관련 에러 설정 (#189) * feat: Link Service 기능 추가 * feat: UserProvider 구현 * refactor: TagService 수정 * feat: Pick Service 구현 * feat: Pick Tag 구현 * feat: Pick Api 구현 * refactor: FolderMapper 모두 general 타입으로 들어가는 문제 해결 * feat: folder type 메서드 추가 * refactor: Authentication 제거 * refactor: dto 삭제 * refactor: UserId -> User로 변경 및 메서드명 통일 * refactor: Request Param 변경 * refactor: 리뷰 반영 * refactor: valid 수정 * 🐛 fix: link 생성 순서 오류 수정 및 swagger에 baseURL 수정 * [CI] API V1 브랜치 - 서버 설정 (#193) * 🚀 api 경로에 v1 prefix 추가 * 🚀 api github action 버저닝 추가 * ♻️ refactor: 미사용 import 제거 * chore: api version 배포 테스트 * chore: api version 배포 테스트 * chore: api version 배포 테스트 * chore: api version 배포 테스트 * chore: api version 배포 테스트 * 🎨 chore: api version 배포 테스트 완료 * chore: api version 정보 삭제 (기존으로 되돌린것) * chore: api version 정보 삭제 (기존으로 되돌린것) * chore: api version 정보 삭제 (기존으로 되돌린것) * chore: api version 정보 삭제 (기존으로 되돌린것) * chore: api version 정보 삭제 (기존으로 되돌린것) * chore: api version 정보 삭제 (기존으로 되돌린것) * chore: api version 정보 삭제 (기존으로 되돌린것) * fix: 환경 변수 업데이트 * fix: 환경 변수 쓰레기값 제거 * fix: 도메인 시큐리티 복구 * feat: 프론트엔드 도메인 추가 (#199) * [FEAT] 픽 중복 조회 기능, 로그아웃 API, CORS 설정 추가 (#207) * feat: pick 중복 확인하는 기능 구현 * refactor: 사용하지 않는 메서드 제거 * feat: cors에 익스텐션 아이디 추가 및 로그아웃 api 설정, access_token 상수 config로 이동 * feat: api url 추가 * refactor: csrf 활성화, 로그아웃 메서드 체이닝 * hotfix: csrf 비활성화 * 🚨 fix: 로그아웃 쿠키 삭제 로직에도 Domain 추가 * 🚨 fix: TechpickLogin 쿠키도 강제 삭제 추가 * 🚨 fix: 로그아웃 리다이렉트 삭제 추가 * refactor: pick Path -> Param으로 변경, 픽 중복 생성 방지 (#218) * [HOTFIX] Pick 생성 시 존재하지 않는 픽 조회하여 예외 터지는 문제 해결 (#219) * refactor: pick Path -> Param으로 변경, 픽 중복 생성 방지 * hotfix: pick 생성 시 존재하지 않는 픽을 조회하여 Exception 터트리는 문제 해결 * 🚨 fix: 픽 중복 확인 코드 제거 (#220) * [REFACTOR] url로 Pick 조회 시 리턴 타입 변경 (#223) * refactor: url로 Pick 조회 시 리턴 타입 long에서 pickReponse로 변경 * refactor: 리뷰 수정사항 반영 * [FEAT] 프론트엔드 디버깅용 로그 출력 추가 (#224) * fix: 프론트 디버깅용 로그 추가 * fix: 프론트 디버깅용 로그 추가 * [FIX] Structure Validator 버그 수정 (#226) * fix: 프론트 디버깅용 로그 추가 * fix: 프론트 디버깅용 로그 추가 * fix: 잘못된 JSON 검증 로직 수정 * fix: synchronized 추가 * fix: 폴더 이름에 유니크 제약조건 추가 * hotfix: CookieUtil 도메인 주석 처리 해제 * fix: 쓰레드 싱크 테스트 (#238) * undo: 쓰레드 싱크 테스트 복구 * fix: DB DDL 직접 명시 (#242) * hotfix: 모든 크롬 익스텐션 cors 허용 * hotfix: 모든 크롬 익스텐션 cors 허용 * hotfix: 모든 크롬 익스텐션 cors 허용 * hotfix: link imageUrl 생성 누락 수정 * hotfix: 로그 추가 * hotfix: pick update 로직 변경 * hotfix: 잘못된 의존성 삭제 * hotfix: 로그 추가 * hotfix: 검증을 위한 Pick 조회 로직 수정 * hotfix: 검증을 위한 Pick 조회 로직 수정 --------- Co-authored-by: Minky <minkyeki@student.42seoul.kr> Co-authored-by: Gyaak <gyak404@gmail.com>
What is this PR? 🔍
Changes 📝
ERD 기반 엔티티 13개 추가
crawling_topic_mapping
: 블로그 태그 - 토픽 매핑 설정 테이블raw_crawled_article
: 크롤링데이터를 밀어넣는 Raw 테이블.ER 다이어그램 링크
SQL 로깅 + logback 설정
/data
경로에 로그 파일을 생성함.Precaution
not null
을 최대한 설정했음.