GithubHelp home page GithubHelp logo

ceos-developers / ceos-be Goto Github PK

View Code? Open in Web Editor NEW
17.0 17.0 1.0 586 KB

CEOS 웹페이지 개편

Home Page: https://ceos-sinchon.com

Java 91.37% Dockerfile 0.05% Shell 0.19% HTML 8.39%
aws junit5 mysql spring-boot

ceos-be's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

Forkers

chaeshee0908

ceos-be's Issues

🚀[Feature] - otCheck, demodayCheck 필드 수정

🚀 Feature - otCheck, demodayCheck 필드 수정

📝 Description


지원서에 OT 날짜와 데모데이 날짜가 Date 형식으로 필요하다

✅ To Do List


  • Application 의 otCheck, demodayCheck 필드 수정 (Boolean -> LocalDate)

🚀[Feature] - Award 기능 구현

🚀 Feature - Award 기능 구현

📝 Description


수상이력 페이지 관련 기능을 구현합니다.

✅ To Do List


  • 수상 이력 전체 보기 api
  • 수상 이력 추가하기 api
  • 수상 이력 하나 보기 api
  • 수상 이력 수정하기 api
  • 수상 이력 삭제하기 api

🚀[Feature] - 메일 서비스 구현

🚀 Feature - 메일 서비스 구현

📝 Description


aws ses를 이용한 메일 서비스를 구현합니다

탬플릿 확정되고, 엔티티 머지되면 마저 진행할 예정

✅ To Do List


  • ses 서비스 셋팅
  • 메일 탬플릿 제작
  • 메일 전송 구현
  • example api 제작

🔨[Refactor] - application api validation 수정

🔨 Refactor - application api validation 수정

📝 Description


application api validation 수정

✅ To Do List


  • 엔티티 관련 validation 정리
  • 질문에 대한 답변 없을 경우 처리
  • [ ]

🔨[Refactor] - Project 리팩토링

🔨 Refactor - Project 리팩토링

📝 Description


  • 프로젝트 수정 API 리팩토링 수행 - queryParameter -> pathVariable
  • 에러코드 정리

✅ To Do List


  • 프로젝트 수정 API 리팩토링 수행
  • 에러코드 정리

🚀[Feature] - role, part 별 운영진 확인 api

🚀 Feature - role, part 별 운영진 확인 api

📝 Description


운영진 소개 페이지의 순서로 운영진을 조회하는 api가 필요하여 구현.

✅ To Do List


  • role 수정
  • part enum으로 수정
  • role, part별 운영진 확인 api 구현

🚀[Feature] - 500 에러 슬랙 알림 구현

🚀 Feature - 500 에러 슬랙 알림 구현

📝 Description


500 번대 에러 발생시 슬랙으로 에러 알림 전송되도록 함

✅ To Do List


  • dev, prod 구분
  • dev error용 slack 채널 생성
  • prod error용 slack 채널 생성
  • slack 알림 전송 구현
  • slack 알림 메세지 구현
  • httpservletrequest stream caching filter 적용

🚀[Feature] - Sponsor 기능 전체 구현

🚀 Feature - Sponsor 기능 전체 구현

📝 Description


sponsor 관련 모든 기능 구현

✅ To Do List


  • 스폰서 전체 보기(페이징)
  • 스폰서 추가
  • 스폰서 정보 수정
  • 스폰서 삭제

🔨[Refactor] - Management 구현 파일 리팩토링

🔨 Refactor - Management 구현 파일 리팩토링

📝 Description


  • management 구현 사항에 대한 리팩토링

✅ To Do List


  • Transactional 옵션 지정(readOnly)
  • 존재하지 않는 임원진 삭제 요청 시 에러 메시지 전송 설정
  • setter -> 객체 메소드 변경

🚀[Feature] - 배포 환경 설정

🚀 Feature - 배포 환경 설정 파일 작성

📝 Description

Docker & Github Action을 통한 ec2 서버 배포를 위한 파일 생성

✅ To Do List

  • docker 관련 파일 설정
  • github action 관련 파일 설정
  • nginx 관련 파일 설정
  • secret 추가

🐞[Bug] - Build with Gradle 중 에러

🐞 Bug - Build with Gradle 중 에러

🕵️‍♀️ Condition


�Github Action 실행 중 Build with Gradle 에서 에러가 발생한다.

📝 Description


* What went wrong:
Execution failed for task ':spotlessJavaCheck'.
> The following files had format violations:
      src/test/java/ceos/backend/domain/application/ApplicationControllerTest.java
          @@ -1,5 +1,6 @@
           package·ceos.backend.domain.application;
           
          +
           import·org.junit.jupiter.api.DisplayName;
           import·org.junit.jupiter.api.Test;
           import·org.springframework.beans.factory.annotation.Autowired;
          @@ -13,8 +14,7 @@
           @AutoConfigureMockMvc
           public·class·ApplicationControllerTest·{
           
          -····@Autowired
          -····private·MockMvc·mockMvc;
          +····@Autowired·private·MockMvc·mockMvc;
           
           ····@DisplayName("지원서·엑셀·파일·생성·시각·API·-·권한·X")
8 actionable tasks: 8 executed
           ····@Test
      src/test/java/ceos/backend/domain/application/ApplicationExcelServiceTest.java
          @@ -1,5 +1,6 @@
           package·ceos.backend.domain.application;
           
          +
           import·ceos.backend.domain.application.dto.response.GetCreationTime;
           import·ceos.backend.domain.application.service.ApplicationExcelService;
           import·org.assertj.core.api.Assertions;
          @@ -11,8 +12,7 @@
           @SpringBootTest
           public·class·ApplicationExcelServiceTest·{
           
          -····@Autowired
          -····ApplicationExcelService·applicationExcelService;
          +····@Autowired·ApplicationExcelService·applicationExcelService;
           
           ····@DisplayName("지원서·엑셀·파일·생성·시각")
           ····@Test
  Run './gradlew :spotlessApply' to fix these violations.

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.

* Get more help at https://help.gradle.org/

BUILD FAILED in 27s
Error: Process completed with exit code 1.

✅ To Do List


  • deploy.yml 수정

🚀[Feature] - Activity 관련 기능 구현 (1)

🚀 Feature - Activity 관련 기능 구현 (1)

📝 Description


Activity 관련 기능을 구현하고 테스트합니다.

✅ To Do List


  • 활동 추가하기 API 구현
  • 활동 추가하기 API 테스트
  • 활동 하나 보기 API 구현
  • 활동 하나 보기 API 테스트
  • 활동 하나 수정하기 API 구현
  • 활동 하나 수정하기 API 테스트
  • 활동 삭제하기 API 구현
  • 활동 삭제하기 API 테스트

🚀[Feature] - 소셜로그인

🚀 Feature - 소셜로그인

📝 Description


카카오 로그인 기능을 개발합니다.

✅ To Do List


  • 카카오 로그인 기능

🚀[Feature] - Presigned URL 구현

🚀 Feature - Presigned URL 구현

📝 Description


임원진 이미지, 스폰서 이미지, 활동 이미지를 위한 Presigned URL 구현

✅ To Do List


  • s3 버킷 생성 및 설정
  • s3 연동
  • presigned url 생성
  • 임원진 이미지 presigned url api
  • 스폰서 이미지 presigned url api
  • 활동 이미지 presigned url api

🐞[Bug] - Swagger 오류

🐞 Bug - Swagger 오류

🕵️‍♀️ Condition


서버에 배포된 Swagger 로 Execute 요청 시 에러가 발생한다

📝 Description


에러 메시지

index.js:109 Mixed Content: The page at 'https://www.ceos-sinchon.com/swagger-ui/index.html#/Faq/getCategoryFaq' was loaded over HTTPS, but requested an insecure resource 'http://www.ceos-sinchon.com/faq?category=RECRUIT'. This request has been blocked; the content must be served over HTTPS.

✅ To Do List


  • Swagger 설정에서도 API 호출을 HTTPS를 사용하도록 변경

🚀[Feature] - custom response 셋팅

🚀 Feature - custom response 셋팅

📝 Description


커스텀 response 구현

✅ To Do List


  • custom response 구현
  • ResponseBodyAdvice custom
  • example api 작성

🚀[Feature] - Activity 기능 수정

🚀 Feature - Activity 기능 수정

📝 Description


Activity 기능 수정합니다

✅ To Do List


  • WebSecurityConfig 수정
  • 전체 활동 보기 페이징 추가

🔨[Refactor] - application 리팩토링

🔨 Refactor - application 리팩토링

📝 Description


리팩토링 작업 사항

✅ To Do List


  • 인터뷰 시간 정하기 request 변경
  • application excel 서비스 레이어 분리
  • application helper, validation 분리
  • date 관련 util 클래스 정리
  • application validation 네이밍 변경 및, recruitment validation 분리

🚀[Feature] - 리프레시 토큰 관리

🚀 Feature - 레디스를 이용한 리프레시 토큰 저장

📝 Description


레디스를 통해서 리프레시 토큰을 관리하려고 합니다.

✅ To Do List


  • 로그인 로직 수정
  • 로그아웃 로직 수정
  • 리프레시토큰 발급 로직 구현
  • 도커파일 작성

🔨[Refactor] - FAQ, Sponsor, Management 조회 id 값 추가

🔨 Refactor - FAQ, Sponsor, Management 조회 id 값 추가

📝 Description


내용 전체 조회 시 id 값이 없어 수정할 때 id 값 입력 불가능
response dto 수정 필요

✅ To Do List


  • FAQ 관련 dto id 컬럼 추가
  • Sponsor 관련 dto id 컬럼 추가
  • Management 관련 dto id 컬럼 추가

🚀[Feature] - 합격 확인 기능 구현

🚀 Feature - 합격 확인 기능 구현

📝 Description


합격 확인 기능 구현

✅ To Do List


  • 서류 결과
  • 면접 참여 가능
  • 최종 결과
  • 활동 가능
  • slack 연결

🚀[Feature] - faq 전체 기능 구현

🚀 Feature - faq 전체 기능 구현

📝 Description


faq의 전체 기능을 구현합니다.
faq는 각 질문과 답변이 잘 변경되지 않을 것으로 예상되어
디자인팀에 전달하여 faq 하나씩 생성, 수정, 삭제하는 것으로 변경하도록 하였습니다.

✅ To Do List


  • 카테고리별 질문, 답변 불러오기
  • FAQ 추가하기
  • FAQ 삭제하기
  • FAQ 수정하기

🚀[Feature] - Admin User 관련 기능 구현

🚀 Feature - Admin User 관련 기능 구현

📝 Description


로그인, 로그아웃 등 Admin User 관련 기능을 구현합니다.

✅ To Do List


  • 회원가입 API
  • 로그인 API
  • 로그아웃 API
  • 아이디 찾기 API
  • 비밀번호 재설정 API
  • 임시 비밀번호 생성 메일 발송 API
  • 아이디 중복 확인 API

🚀[Feature] - DB 도메인 생성

🚀 Feature - DB 도메인 생성

📝 Description


DB 도메인을 생성한다.

✅ To Do List


  • domain 코드 작성
  • repository 코드 작성
  • 테이블 생성 확인

🚀[Feature] - Spring Security 설정

🚀 Feature - Spring Security 설정

📝 Description


스프링 시큐리티 설정

✅ To Do List


  • 스프링 시큐리티 설정
  • jwt provider 구현
  • Filter 구현
  • exception 및 error code 작성
  • 관련 변수 추가

🐞[Bug] - 서류 합격 결과 확인하기 500

🐞 Bug - 서류 합격 결과 확인하기 500

🕵️‍♀️ Condition


서류 합격 결과 확인하기 500

📝 Description


면접 시간 안정해져있으면, 500 response 전달됨

✅ To Do List


  • validation 추가

🚀[Feature] - Management 기능 구현

🚀 Feature - Management 기능 구현

📝 Description


Management 기능 구현

✅ To Do List


  • 임원진 전체 보기(페이징) api 구현
  • 임원진 추가 api 구현
  • 임원진 하나 보기 api 구현
  • 임원진 정보 수정 api 구현
  • 임원진 삭제 api 구현

🚀[Feature] - API 토큰 적용 해제

🚀 Feature - 토큰 재발급 로직 수정

📝 Description


/reissue API에서 토큰을 해제했습니다.
토큰 재발급 로직을 수정하였습니다.

✅ To Do List


  • 토큰 해제
  • spotless 적용

🚀[Feature] - 프로젝트 관련 기능 구현

🚀 Feature - 프로젝트 관련 기능 구현

📝 Description


  • 프로젝트 목록 보기
  • 프로젝트 하나 보기
  • 프로젝트 추가
  • 프로젝트 수정
  • 프로젝트 삭제
  • 프로젝트 이미지 업로드
    기능을 구현합니다.

✅ To Do List


  • 프로젝트 목록 확인
  • 프로젝트 하나 보기
  • '' 추가
  • '' 수정
  • '' 삭제
  • '' 이미지 업로드

🚀[Feature] - 지원서 다운로드 기능 구현

🚀 Feature - 지원서 다운로드 기능 구현

📝 Description


전체 지원서 데이터를 엑셀 파일로 만들어 제공한다

✅ To Do List


  • Apache POI
  • 엑셀 파일 생성 확인 테스트
  • 지원서 데이터 엑셀 파일로 변환
  • 다운로드 API
  • API 테스트

🚀[Feature] - 지원서 정보 보기 기능 구현

🚀 Feature - 지원서 정보 보기 기능 구현

📝 Description


지원서 정보 보기 기능 구현

✅ To Do List


  • 지원자 자소서 보기
  • 면접 시간 보기
  • 지원서 정보 보기
  • 지원자 목록 보기

🐞[Bug] - Swagger 설정 중 에러

🐞 Bug - Swagger 설정 중 에러

Screenshot 2023-05-09 at 1 02 17 AM

🕵️‍♀️ Condition


build.gradle

dependency {
         ...
	implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.0'
	implementation 'org.springframework.boot:spring-boot-starter-validation'
}

application.yml

springdoc:
  version: '@springdoc.version@'
  swagger-ui:
    display-request-duration: true
    groups-order: DESC
    operationsSorter: method
    disable-swagger-default-url: true
    use-root-path: true
  show-actuator: true
  group-configs:
    - group: stores
      paths-to-match: /store/**

OpenApiConfig

package ceos.backend.global.config;

import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class OpenApiConfig {

    @Bean
    public OpenAPI openAPI(@Value("${springdoc.version}") String springdocVersion) {
        Info info = new Info()
                .title("CEOS WEB API")
                .version(springdocVersion)
                .description("CEOS WEB API 입니다.");

        return new OpenAPI()
                .components(new Components())
                .info(info);
    }
}

WebSecurityConfig 에 SwaggerPatterns 과 SwaggerPatterns 에 대한 접근 모두 허용

    private static final String[] SwaggerPatterns = {
            "/swagger-resources/**",
            "/swagger-ui.html",
            "/swagger-ui/**",
            "/v2/api-docs"
    };
   
   @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
                ...
                .and()
                .authorizeHttpRequests()
                .requestMatchers(CorsUtils::isPreFlightRequest).permitAll()
                .requestMatchers(SwaggerPatterns).permitAll() // swagger
                .requestMatchers("/**").permitAll()
                .anyRequest().authenticated()
                .and()
                .headers().frameOptions().disable();
              ...

ExampleController 에 테스트용 API 추가

    @GetMapping(value = "/swagger")
    @Operation(summary = "GET 메서드", description = "GET 메서드입니다.")
    @ApiResponses(value = {
            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(schema = @Schema(implementation = SuccessResponse.class))),
            @ApiResponse(responseCode = "400", description = "bad request operation", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))
    })
    public String swagger() {
        return "Hi, Swagger";
    }

📝 Description


http://localhost:8080/swagger-ui/index.html 에 접속 시 다음 에러 발생

java.lang.ClassCastException: class ceos.backend.global.common.response.SuccessResponse cannot be cast to class java.lang.String (ceos.backend.global.common.response.SuccessResponse is in unnamed module of loader 'app'; java.lang.String is in module java.base of loader 'bootstrap')

전체 로그

2023-05-09T00:20:41.815+09:00 ERROR 71998 --- [nio-8080-exec-9] c.b.global.error.GlobalExceptionHandler  : Exception

java.lang.ClassCastException: class ceos.backend.global.common.response.SuccessResponse cannot be cast to class java.lang.String (ceos.backend.global.common.response.SuccessResponse is in unnamed module of loader 'app'; java.lang.String is in module java.base of loader 'bootstrap')
	at org.springframework.http.converter.StringHttpMessageConverter.addDefaultHeaders(StringHttpMessageConverter.java:44) ~[spring-web-6.0.8.jar:6.0.8]
	at org.springframework.http.converter.AbstractHttpMessageConverter.write(AbstractHttpMessageConverter.java:210) ~[spring-web-6.0.8.jar:6.0.8]
	at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:300) ~[spring-webmvc-6.0.8.jar:6.0.8]
	at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:194) ~[spring-webmvc-6.0.8.jar:6.0.8]
	at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:78) ~[spring-web-6.0.8.jar:6.0.8]
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:136) ~[spring-webmvc-6.0.8.jar:6.0.8]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:884) ~[spring-webmvc-6.0.8.jar:6.0.8]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797) ~[spring-webmvc-6.0.8.jar:6.0.8]
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.0.8.jar:6.0.8]
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1081) ~[spring-webmvc-6.0.8.jar:6.0.8]
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:974) ~[spring-webmvc-6.0.8.jar:6.0.8]
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1011) ~[spring-webmvc-6.0.8.jar:6.0.8]
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) ~[spring-webmvc-6.0.8.jar:6.0.8]
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) ~[tomcat-embed-core-10.1.8.jar:6.0]
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.0.8.jar:6.0.8]
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[tomcat-embed-core-10.1.8.jar:6.0]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-10.1.8.jar:10.1.8]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:110) ~[spring-web-6.0.8.jar:6.0.8]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:110) ~[spring-web-6.0.8.jar:6.0.8]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at ceos.backend.global.common.filter.MultiReadInputStreamFilter.doFilter(MultiReadInputStreamFilter.java:15) ~[main/:na]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231) ~[spring-security-web-6.0.3.jar:6.0.3]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:365) ~[spring-security-web-6.0.3.jar:6.0.3]
	at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:100) ~[spring-security-web-6.0.3.jar:6.0.3]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.0.3.jar:6.0.3]
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126) ~[spring-security-web-6.0.3.jar:6.0.3]
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120) ~[spring-security-web-6.0.3.jar:6.0.3]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.0.3.jar:6.0.3]
	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:131) ~[spring-security-web-6.0.3.jar:6.0.3]
	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:85) ~[spring-security-web-6.0.3.jar:6.0.3]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.0.3.jar:6.0.3]
	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100) ~[spring-security-web-6.0.3.jar:6.0.3]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.0.3.jar:6.0.3]
	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:179) ~[spring-security-web-6.0.3.jar:6.0.3]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.0.3.jar:6.0.3]
	at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-6.0.3.jar:6.0.3]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.0.3.jar:6.0.3]
	at ceos.backend.global.config.jwt.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:32) ~[main/:na]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.8.jar:6.0.8]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.0.3.jar:6.0.3]
	at ceos.backend.global.config.jwt.JwtExceptionHandlerFilter.doFilterInternal(JwtExceptionHandlerFilter.java:31) ~[main/:na]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.8.jar:6.0.8]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.0.3.jar:6.0.3]
	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:107) ~[spring-security-web-6.0.3.jar:6.0.3]
	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93) ~[spring-security-web-6.0.3.jar:6.0.3]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.0.3.jar:6.0.3]
	at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) ~[spring-web-6.0.8.jar:6.0.8]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.8.jar:6.0.8]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.0.3.jar:6.0.3]
	at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-6.0.3.jar:6.0.3]
	at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-6.0.3.jar:6.0.3]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.8.jar:6.0.8]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.0.3.jar:6.0.3]
	at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82) ~[spring-security-web-6.0.3.jar:6.0.3]
	at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69) ~[spring-security-web-6.0.3.jar:6.0.3]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.0.3.jar:6.0.3]
	at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62) ~[spring-security-web-6.0.3.jar:6.0.3]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.8.jar:6.0.8]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.0.3.jar:6.0.3]
	at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) ~[spring-security-web-6.0.3.jar:6.0.3]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.8.jar:6.0.8]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.0.3.jar:6.0.3]
	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233) ~[spring-security-web-6.0.3.jar:6.0.3]
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191) ~[spring-security-web-6.0.3.jar:6.0.3]
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:352) ~[spring-web-6.0.8.jar:6.0.8]
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:268) ~[spring-web-6.0.8.jar:6.0.8]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.0.8.jar:6.0.8]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.8.jar:6.0.8]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-6.0.8.jar:6.0.8]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.8.jar:6.0.8]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.0.8.jar:6.0.8]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.8.jar:6.0.8]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:166) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:894) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]

✅ To Do List


  • 오류 해결

🚀[Feature] - Swagger 설정

🚀 Feature - Swagger 설정

📝 Description


API docs tool 로 Swagger 를 설정한다.

✅ To Do List


  • Swagger 설정
  • Example API 만들기
  • JWT 토큰 설정
  • Swagger 비밀번호 설정

🚀[Feature] - 지원서 관련 변경 기능 구현

🚀 Feature - 지원서 관련 변경 기능 구현

📝 Description


지원서 관련 변경 기능 구현

검증 로직도 구현

✅ To Do List


  • 서류합격
  • 최종합격
  • 질문 변경
  • 면접 시간 결정
  • 검증 로직 구현

🚀[Feature] - 공통 에러 처리 셋팅

🚀 Feature - 공통 에러 처리 셋팅

📝 Description


공통 에러 처리를 구현

✅ To Do List


  • 공통 에러 처리 구현
  • Error Code 형식 정의
  • Error Response 정의
  • Base Exception 정의
  • example error exception 정의

🚀[Feature] - 관리자 기능 구현

🚀 Feature - 관리자 기능 구현

📝 Description


관리자 기능을 구현합니다.

✅ To Do List


  • Role 적용
  • admin 목록 보기
  • admin 권한 변경
  • admin 삭제

🔨[Refactor] - Admin 리팩토링

🔨 Refactor - Admin 리팩토링

📝 Description


  • 페이징 적용 및 필드 추가
  • 누락된 어노테이션 적용

✅ To Do List


  • Part 필드 추가
  • 페이징 적용
  • 어노테이션 추가
  • spotless 적용

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.