소셜 로그인, 로컬에서는 되는데 배포에서는 안됩니다

  security:
    oauth2.client:
      registration:
        kakao:
          clientId: 
          clientSecret: 
          clientAuthenticationMethod: client_secret_post
          authorizationGrantType: authorization_code
          redirectUri: "{baseUrl}/{action}/oauth2/code/{registrationId}"
  oauth2:
    authorizedRedirectUris:
      - https://j10d109.p.ssafy.io/api/oauth/kakao/callback
      - https://j10d109.p.ssafy.io/oauth/kakao/callback
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        System.out.println("securityFilterChain");
        log.info("securityFilterChain start");
        try {
            http.cors(AbstractHttpConfigurer::disable);
            http.sessionManagement((sessionManagement)->sessionManagement.sessionCreationPolicy(SessionCreationPolicy.STATELESS));
            http.csrf(AbstractHttpConfigurer::disable);
            http.formLogin(AbstractHttpConfigurer::disable);
            http.httpBasic(AbstractHttpConfigurer::disable);
            http.exceptionHandling((exceptionHandling)->exceptionHandling.authenticationEntryPoint(new RestAuthenticationEntryPoint()).accessDeniedHandler(tokenAccessDeniedHandler));
            http.authorizeHttpRequests(authorize -> authorize.requestMatchers(CorsUtils::isPreFlightRequest).permitAll().requestMatchers("/swagger-ui/**", "/v3/**", "/api/**", "/swagger-resources/**").permitAll().anyRequest().authenticated());
            http.oauth2Login(oauth2 -> oauth2.authorizationEndpoint(authorization -> authorization.baseUri("/oauth2/authorization").authorizationRequestRepository(oAuth2AuthorizationRequestBasedOnCookieRepository()))
                    .redirectionEndpoint(redirection -> redirection.baseUri("/*/oauth2/code/*"))
                    .userInfoEndpoint(userInfo -> userInfo.userService(oAuth2UserService))
                    .successHandler(oAuth2AuthenticationSuccessHandler())
                    .failureHandler(oAuth2AuthenticationFailureHandler()));

            http.addFilterBefore(tokenAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
            log.info("securityFilterChain succeess");
        } catch (Exception e) {
            log.error("error : securityFilterChain", e);
        }
        return http.getOrBuild();
    }

코드를 어디까지 첨부해야 할 지 몰라 일단, 관련 문제인 것 같은 것들을 올립니다.
로컬에서는 잘 되던 것이, 배포만 하면 404가 출력됩니다.

안녕하세요

404 발생될 때 브라우저의 URL은 어떻게 될까요?

아 맞다, 로컬에서는 devleloper 통계에 API 횟수도 잡히는데,
여기서는 소셜로그인 후
https://j10d109.p.ssafy.io/login/oauth2/code/kakao?code=(토큰?)
로 리디렉션되면서 404가 출력되는 상황입니다.

image

해당 주소 접근 시, spring 도달 전 오류 발생되는 것으로 보이는데요
nginx 에서 해당 url로 접근 가능하게 설정되었는지 확인해 보시는게 좋을것 같습니다.

서비스는 웹과 API를 /api path prefix 한 형태로 구분하고 있는것 같네요

인프라 쪽을 좀 더 살펴보겠습니다.

그런데, 로컬에서는 api 요청 통계가 찍히는데, 지금은 api요청 통계조차도 출력되지 않는다는 것은,

https://developers.kakao.com/docs/latest/ko/kakaologin/js
여기서 step1의 5번은 되었는데, 이 5번의 uri에 대응하는 ServiceServer의 uri가 없기 때문에,

Step2-2 의 토큰 발급이 없기 때문에 api요청 통계가 카운트되지 않는다고 보면 되는 것인가요?

네, 현재 인가코드 요청이후 다른 요청이 들어오고 있지 않습니다.

nginx에서 api가 붙은 것을 백엔드로 보내도록 설정한 것 같습니다.

ubuntu@ip-172-26-8-174:~/nginx/conf.d$ cat default.conf
upstream app {
  server j10d109.p.ssafy.io:8080;
}

server {

    server_name j10d109.p.ssafy.io;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.html;
        try_files $uri $uri/ /index.html;
    }


    location /api {
     proxy_pass http://app;
     proxy_set_header Host $host;
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_set_header X-Forwarded-Proto $scheme;
    }

    location /.well-known/acme-challenge/ {
        root /var/lib/letsencrypt/;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    listen 80;
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/j10d109.p.ssafy.io/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/j10d109.p.ssafy.io/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
    if ($host = j10d109.p.ssafy.io) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    #return 404; # managed by Certbot
}

application.yml 의 redirectUri: “https://j10d109.p.ssafy.io/api/login/oauth2/code/{registrationId}” 로 설정했음에도
리다이렉트에서 다음과 같이api/가 빠집니다

https://j10d109.p.ssafy.io/login/oauth2/code/kakao?code=OhrBoO8N9gtTiJsHG5pQrWx_IWI9Zzg2LP4sbRVQ_NiUspX-ZhV9OPCvBlMKKwzUAAABjn1u-b1b9Pmr5eg_ZA&state=GddZB8z4HL52H2LvJ9za1KcMHayKORypBIRJ7PKS41Q%3D

api/ 를 직접 넣어줘도 다음 토큰 수령에 있어서 api가 또 빠집니다.
https://j10d109.p.ssafy.io/oauth/kakao/callback?token=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIzMzk5OTc5MzYxIiwicm9sZSI6IlJPTEVfVVNFUiIsImV4cCI6MTcxMTkzMzEwNn0.F5rqROuepwM8je3DfU7hjWbFJkDTDjqtlTRZ-ZJQqio

api/가 빠져서 생기는 문제가 아닐까 싶습니다.

제거하시거나 “/api/oauth2/code/*” 로 변경해보시겠어요?

이것으로 바꾸니 1-3에도 진입이 안됩니다.

오타가 있었는데요 .*이 아닌 /*로 해보시겠어요?
서비스측 spring 설정에 의해 redirect_uri 가 사용하는 baseuri가 다른 값으로 고정되고 있습니다.