IT/면접

기술 포트폴리오 면접 대비

Samsun 2024. 4. 1. 21:55
반응형

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

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

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

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

 

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

 

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

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

 

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

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

 

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

 

 특정 위치에서 가로,세로,대각선 방향으로 돌이 연속이 되는지.. 그리고 19x19 보드판 크기 안에 들어가는지.. 중첩이 되는지안되는지를 조건문을 통해 검사하는 방식으로 구현했습니다

 

 

- 육목 :

  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에 저장

 

람다식이란?

익명함수라고 불리기도 하고 코드의 간결성을 위해 메소드에 대한 정의없이도 간결하게 사용할 수 있게 해줌

 

스트림 api란?

컬렉션, 배열 안에 있는 요소들을 하나씩 참조하여 반복적인 처리를 할 수 있고 코드 간결성 유지해줌

 

자바 언어의 특성은?

자바는 객체지향 언어입니다. 클래스와 객체 개념으로 코드의 재사용성을 높이고 유지보수를 용이하게해줌. 

 

JSON 이란?

서버단에서 데이터를 저장하거나 전송할때 쓴다

 

Spring Security 란?

인증, 권한 관리 그리고 데이터 보호 기능을 포함하여 웹 개발 과정에서 필수적인 사용자 관리 기능을 구현하는데 도움을 주는 Spring의 강력한 프레임워크입니다.

 

DI 란? 스프링에서 등록한 Bean 클래스 혹은 함수같은 외부의 객체를 @Autowired 같은 어노테이션을 통해 가져오는 것

IoC란? 개발자는 직접 빈을 등록하는 등 수행을 해왔다. 하지만 스프링에서 이러한 권한을 뺏어서 스프링이 알아서 해주ㅝ서 제어의 역전이라 함.

AOP란? 트랜잭션이나 로깅 같이 중복이 되는 코드들을 방지해주는 역할 

 

마이바티스란?

SQL 실행결과를 Map 객체에 매핑해서 관리하는것

JPA란?

마이바티스와 다르게 간단한 CRUD 정도의 SQL 작성이 불필요하고 자동으로 SQL문을 만들어주고 실행해줍니다

 

List, Array, Map 차이점

- List는 순서가 있고 중복된 데이터를 가질수 있음

- Map은 키-값 쌍으로 이루어져있고 중복 키는 허용이 안됨

- Array는 고정된 크기의 동일한 데이터 요소들의 집합니다.

 

도커 : 컨테이너 이미지를 생성하고 실행하는 도구

쿠버네티스 : 이러한 컨테이너들을 대규모로 배포하고 관리하는 도구

 

오라클 DB 기술면접 대비 : https://sas-study.tistory.com/56

 

신입개발자 기술면접 #3 - Oracle DB

데이터베이스 용어정리1. 데이터베이스- 어느 한 조직에서 업무처리를 위해 다수의 응용시스템 혹은 다수의 사용자들이 공용으로 사용하기 위해 저장된 운영 데이터의 집합. 2. 데이터베이스 언

sas-study.tistory.com

 

리액트 기술면접 대비 : https://www.freecodecamp.org/korean/news/2022nyeone-alaya-hal-10gaji-riaegteu-inteobyu-jilmun/