Skip to content

Trouble

soyeon edited this page Feb 22, 2024 · 12 revisions

접속자 수

private Map<String, Integer> connectUsers;

@PostConstruct
private void setUp() {
    this.connectUsers = new HashMap<>();
}

public void connectUser(String status, String roomId, ChatMessage chatMessage) {
    if (Objects.equals(status, "Connect")) {
        connectUsers.putIfAbsent(roomId, 0);
        int num = connectUsers.get(roomId);
        connectUsers.put(roomId, (num + 1));
        saveFile(chatMessage);
    } else if (Objects.equals(status, "Disconnect")) {
        int num = connectUsers.get(roomId);
        connectUsers.put(roomId, (num - 1));
    }
    log.info("현재 인원 : " + connectUsers.get(roomId));
}

많은 사람이 채팅을 시작하고 종료하면서 접속자 수가 제대로 count 되지 않는 문제가 생겼다.

blog 정리




랜덤 채팅

문제점

랜덤 채팅을 시도를 하는 과정에서 접속자 수가 1명인 상태에서 20초가 초과되면 자동으로 접속이 끊겼다.

그런데 랜덤 채팅을 test 하던 과정에서 20초 시간이 지나기 전 강제 종료 후 다시 랜덤 채팅을 시도할 경우

기존 통신 시도와 새로 시작하는 것이 섞여서 띄워지게 되었다.

blog 정리




OAuth2

블로그에 정리(아래 적힌 error를 제외한 나머지 error 정리 글) → Oauth2 적용


문제 : 로그인이 되지 않음

1. HTTP ERROR 402

image

2. invalid_user_info_response

[invalid_user_info_response] An error occurred while attempting to retrieve the UserInfo Resource: 404 Not Found: "{"msg":"Not Found","code":-404}"

해결 : application-oauth.properties 수정

기존에 Kakao라는 entity를 User로 바꾸면서 전부 수정을 했는데 이 부분이 application-oauth.properties까지 바뀌게 되면서 kakao가 user로 변경되었고

spring.security.oauth2.client.provider.kakao 가 아닌 spring.security.oauth2.client.provider.user로 설정되어있었다.

그래서 1번과 2번은 user로 된 일부 설정을 kakao로 다시 설정했더니 제대로 동작하였다.

2번은 spring.security.oauth2.client.provider.kakao.user-info-uri = https://kapi.kakao.com/v2/user/me 부분이 잘못 작성됨



문제 : authorization_request_not_found

로그인 인증이 성공적으로 끝난 후 CustomOAuthService가 실행이 되는데

db에 없는 값을 저장하는 과정에서 에러가 떴다.

해결 : Mapper 수정

저장할때 nickname을 "sub"으로 세팅해뒀는데 받은 값에서는 "sub"라는 값이 없어서 오류가 났다.

받아오는 값에 대해 다시 설정

Map<String, Object> kakao_account = (Map<String, Object>) attributes.get("kakao_account");
Map<String, Object> properties = (Map<String, Object>) oAuth2User.getAttributes().get("properties");
return User.builder()
    .kakaoId((Long) attributes.get("id"))
    .email((String) kakao_account.get("email"))
    .password("")
    .nickname( (String) properties.get("nickname"))
    .build();
}



Authorization Request failed: java.lang.IllegalArgumentException: Invalid Client Registration with Id: user

이 부분에 대해서 오류는 검색이 되었지만 해결방법이 나와있지 않아서 디버깅도 해보고 db도 다시 만들어서 해보다가 추측하게 되었다.

@GetMapping("/user/login")
public String login(){
    return "login";
}

이 부분은 내가 로그인 구현할 때 Controller에 /user/login 으로 적용했는데 로그인 하려고하는 url로 직접 들어가면서 생긴 오류같다.

다른 url로 입력해서 Security가 알아서 로그인하는 페이지로 접속하게 해줘야 해당 오류가 뜨지 않았다.




roomId 가져오기

redis를 통해서 roomId를 가져오는데 가끔 제대로 실행이 안될 때가 있다.

이유는 잘 모르겠다.

그래서 일단은 roomId를 제대로 가져오지 못하는 상황자체가 발생하기 때문에 다른 방법을 적용하기로 했다.