반응형

오목 보드판은 어떻게 구현했는가?

- 싱글톤 패턴을 사용하여 단 하나의 보드 객체만 생성함.

이유 1. 오목게임에서는 하나의 보드 객체만 필요 -> 동일한 인스턴스에 접근해야함 -> 인스턴스 공유함으로써 메모리 자원 절약 가능

이유 2. 어플리케이션 내에서 동일한 상태를 가진 단일 객체 유지

 

- 여러 요청에 걸쳐 게임 상태를 서버에 저장하고 검색하기 위해 HttpSession을 사용 (상태유지 행위).

 

승리, 패배 로그 저장은 어떻게했는가?

- View에서 보낸 win 혹은 lose 객체를 LohVO에 전송

 

웹 소켓으로 오목 플레이 구현은 어떻게 했는가?

  1. 웹 소켓 연결 설정: 코드 내에서는 서버의 IP 주소, 포트 번호, 및 애플리케이션의 컨텍스트 경로를 이용하여 웹 소켓 서버에 연결함
  2. 콜백 함수 설정: callBack() 함수를 호출하여 웹 소켓 통신에 필요한 콜백 함수를 등록함. 이 콜백 함수는 오목 착수 정보 및 시스템 메시지를 처리를 한다.

 

오목 게임 로직은 어떻게 구현했는가?

- 육목 :

  1. 알고리즘 설명: 주어진 좌표에서 가로, 세로, 대각선 방향으로 돌의 연속을 세어서 6개가 되는지 확인
  2. 코드 설명: 가로, 세로, 대각선 방향으로 반복문을 통해 돌의 연속을 세어나가며, 카운터가 6이 되는 경우에 육목으로 판단함

- 오목 :

  1. 알고리즘 설명: 주어진 좌표에서 가로, 세로, 대각선 방향으로 돌의 연속을 세어서 5개가 되는지 확인
  2. 코드 설명:  가로, 세로, 대각선 방향으로 반복문을 통해 돌의 연속을 세어나가며, 카운터가 5이 되는 경우에 오목으로 판단함

- 쌍삼

  1. 알고리즘 설명: 플레이어가 돌을 놓아서 수직, 수평, 또는 대각선 방향으로 돌이 3개가 연속된 상태에서 양쪽 끝이 열린 경우
  2. 코드 설명 checkDoubleThree 메서드에서는 모든 방향에 대해 checkThree를 호출하여 삼이 두 개 이상 형성되는 경우를 세고, 이를 쌍삼으로 간주합니다. checkThree 메서드에서는 주어진 위치에서 한 방향으로 삼이 형성되는지 확인합니다. 그리고 그 삼의 양 끝이 열린 공간인지 판단합니다.

Web Socket 이란?

- 클라이언트와 서버를 연결하고 실시간으로 양방향 통신이 가능하게 해주는 기술

- 채팅 어플리케이션이나 오목같은 예시를 들 수 있음

- 지속적으로 업데이트되는 정보를 수신하기 위함

 

-------------------------------------------------------------------------------------------------------------------------------------------------------------

게시판 검색 기능은 어떻게 구현 했는가?

- xml안에 sql 쿼리문을 만듬. like concat('%',#{keyword},'%') 를 사용해 해당 문자열에 맞게 검색을 해줌

 

페이징 순서 처리는 어떻게 구현했는가?

- 서브쿼리로 게시물 목록을 가져와서 ORDER BY로 최신 글 순으로 정렬 -> 지정된 skip 값부터 amount 개수만큼의 데이터를 가져와서 페이징을 수행

 

-------------------------------------------------------------------------------------------------------------------------------------------------------------

SNS 로그인 동작 원리

1. 로그인 요청이 들어오면 스프링 부트의 로그인 페이지를 리디렉셜할 필터(OAuth2 Request Redirect Filter)가 받음

2. 네이버면 네이버 인증 서버(외부 소셜 로그인 지원서비스)에 네이버 로그인할 수 있는 창을 띄어달라고 리디렉션

3. 로그인이 성공적으로 완료됏으면 인증 서버에서 우리의 서버 스프링 시큐리티 인증필터쪽으로 코드와 특정정보를 발급해줌

4. 발급받은 코드를 가지고 우리의 시큐리티 인증 필터가 다시 네이버 인증 서버에 엑세스 토큰을 발급받기 위해 리소스 서버로 전송함.

5. 리소스 서버에서 시큐리티 키 같은걸 검증을 맞친후에 다시 시큐리티 인증 필터에서 엑세스 토큰을 발급받음

5. 발급받은 엑세스 토큰을 가지고 사용자의 유저 데이터를 발급 받기 위해서  네이버의 내부 리소스 서버에다가 토큰과 특정한 이름을 보내줌.

6. 검증이 마치면 해당 로그인 데이터를 발급을 진행해줌

7. 유저 데이터를 OAuth2 유저 디테일 서비스에서 세션을 만들어서 DB에 저장

 

복잡한 내부 구조를 직접 구현할것인가?

- 아니다. OAuth2 클라이언트 의존성을 스프링부트에 추가해주면 내부에 이런 필터들이 자동 활성화됨. 특정한 변수만 지정해주면 OAuth2 클라이언트가 자동으로 처리해줌. 따라서 OAtuth2UserDetailsService와 OAtuth2UserDetails만 구현하면 됨

 

OAuth2 란 무엇인가?

인증을 위한 개방형 표준 프로토콜이다

구글, 페이스북, 카카오, 네이버 등에서 제공하는 간편 로그인 기능을 OAuth2 프로토콜 기반의 사용자 인증 기능을 제공

 

인증과 인가란?

인증 : 접근 자격이 있는지 검증하는 단계를 말합니다.

인가 : 자원에 접근할 권한을 부여하는 것입니다. 인가가 완료되면 리소스 접근 권한이 담긴 Access Token이 클라이언트에게 부여됩니다.

특정한 변수란 무엇을 말하나? 

application.properties에서 아래와 같은것을 말한다. naver라 치면 naver OAtuth2 등록을 위한 특정한 변수 세팅

#registration
spring.security.oauth2.client.registration.naver.client-name=naver
spring.security.oauth2.client.registration.naver.client-id=GNFGsMExi7ALJj5KgQlx
spring.security.oauth2.client.registration.naver.client-secret=7i8XMcYgnH
spring.security.oauth2.client.registration.naver.redirect-uri=http://localhost:8080/login/oauth2/code/naver
spring.security.oauth2.client.registration.naver.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.naver.scope=name,email

#provider
spring.security.oauth2.client.provider.naver.authorization-uri=https://nid.naver.com/oauth2.0/authorize
spring.security.oauth2.client.provider.naver.token-uri=https://nid.naver.com/oauth2.0/token
spring.security.oauth2.client.provider.naver.user-info-uri=https://openapi.naver.com/v1/nid/me
spring.security.oauth2.client.provider.naver.user-name-attribute=response

 

 

OAtuth2가 이러한 과정을 수행하기 위해서는 SecurityConfig에 설정을 해줘야 함

구글, 네이버 측에 우리가 어플리케이션을 사용할거라고 네이버 개발자 센터나 구글 클라우드 플랫폼에 등록해줘야함

네이버,구글 유저 정보는 UserEntity를 생성해서 UserRepository에 넣고 application.properties에서 업데이트

 

-------------------------------------------------------------------------------------------------------------------------------------------------------------

일반 로그인 구현은 어떻게 했는가?

1. 클라이언트가 로그인 요청을 하면 서블릿 톰캣 컨테이너를 지나서 스프링 부트에 보내진다.

2. 서블릿 톰캣 컨테이너는 여러개의 필터를 가지고 있고, 요청은 여러 필터를 통해 스프링부트에 들어오게 됨

3. 그런데 요청이 들어오면 필터에서 시큐리티 config가 검증을 하게 됨.

ㄴ 1) 해당 경로의 접근은 누구에게 열려있는 지

     2) 로그인이 완료된 사용자인지

     3) 해당되는 role을 가지고 있는지

4. 시큐리티 콘피그에 특정한 메소드(시큐리티필터체인)를 만들고 그 안에 빈을 등록.

5. 시큐리티 콘피그에  어드민, 일반 유저에 대한 접근을 허용시키는 코드 작성

6. 시큐리티 콘피그에 Bycrpt 암호화 메서드 생성

7. 회원가입 : joinform -> Join controller -> joinservice -> userentity -> userRepository -> DB에 저장

 

'IT > 면접' 카테고리의 다른 글

기업은 어떤 지원자를 뽑을까?  (0) 2024.05.11
ㅇㅇㅌㅋㅂㅈㅅ 기술면접 대비  (0) 2024.04.02

+ Recent posts