반응형

🚀 한국재정정보원

 

한국재정정보원 기획재정부 산하 기관이다. 가고 싶었던 곳 중 하나였는데,, 결론적으로는 결과가 좋지 않았다. 서술형 2문제, 단답형 2문제에 80분이 나온다고 하길래 시간을 너무 많이 주는 것이 아닌가.. 라고 생각해봤는데 대분류로 4문제이고 소분류로 5문제정도 나왔다..

 

전공 난이도는 크게 높지 않았지만, NCS가 정말 극악의 난이도였다. 자소설닷컴에서는 찍기대회 였다고 말들이 많았다. 풀면서 탈락을 예감했지만 막상 결과 화면을 보니 씁슬했다.

 

반응형
반응형

🚀 Intro

입사한지 한 달이 지나 연차가 1개 생겨 첫 휴가를 쓰고 한양대학교에 면접을 보러 가게 되었다. 한양대역에서 내렸고 지하철을 나오자마자 한양대학교가 있어서 너무 놀랬다. 이게 진짜 대학교역이구나.. 예전에 한성대학교입구역에서 살았었는데 한성대입구에서 한참 떨어져있기 때문이다.

 

@한양대학교

 

🚀 채용 절차

서류 > AI인적성 > 코딩 테스트 · 처장단 면접 > 임원 면접 

 

여기서.. 코딩 테스트가 너무 골치였던 것이 정보가 없어도 너무 없다. 현직자 분께서 만들어주신 오카방에서도 정보를 절대 찾을 수 없었다.

 

🚀 코딩 테스트

일단 코딩 테스트 라기 보다는 학교에서 보는 중간·기말 고사와 매우 비슷했다.

 

출제 범위는 SQL 2문제, 알고리즘 2문제, 웹 1문제

 

SQL 같은 경우는 테이블을 보여주고, 결과에 대한 설명이 나와있다. 그러면 그 결과를 도출하기 위한 쿼리를 작성하고 결과값을 하단의 표로 입력하면 된다.

 

알고리즘 같은 경우는 특정 알고리즘을 제시하고, 그를 JAVA로 구현하면 된다.

 

마지막으로 WEB은 동작과정을 글로 설명하고, 그에 맞게 구현하면된다. 

 

근데 여기서 가장 중요한건 컴퓨터로 보는 시험이 아니라 공책과 펜으로 보는 시험이라는 점이다. 이게 코드를 한 줄 한 줄 손으로 적다보니깐 시간이 생각보다 많이 걸린다. 아 그리고 주어진 시간은 총 1시간 !

 

🚀 면접

코딩테스트가 끝나면 바로 면접 대기실로 이동한다. 대략... 1시간 정도 대기 후 면접을 보게되었다. 다대다 인건 알고 있었지만 와.... 7분이나 들어오실지는 꿈에도 몰랐다. 시간이 좀 지나서 면접 질문은 기억 안나지만.. 대충 적어보자면

 

  • 자기소개
  • 직장인의 덕목 중 가장 중요하게 생각하는 것
  • 자신이 좋아하는 컴퓨터 언어를 소개하고 다른 언어와 비교하여 가진 장점
  • 면접관은 지원자의 답변과 다르게 그 부분을 좋다고 생각한다. 이에 대한 지원자의 생각은? (꼬리 질문)
  • 전공에 대한 자기계발을 어떻게 하고 있는지
  • 모바일에 대한 경험을 말하고 어떤식으로 구현하였는지
  • 대답을 들어보니 IOS 개발 경험은 없는 것 같은데, 해당 업무가 주어진다면 어떻게 해결할 것인지? (꼬리 질문)
  • 4차 산업 혁명과 관련된 다양한 기술들이 있는데, 교직원으로써 이를 활용한 프로젝트를 진행한다면 어떤 주제로 진행할 것인지

일단은 이정도로만 기억이 난다.

 

 

🚀 결과

 

문자 메세지 안내부터 면접까지 직원분들의 친절함을 느낄 수 있었다. 떨어졌지만, 한양대학교에 좋은 이미지가 생겼다. 면접비는 계좌로 들어온다는데 아직 안 들어왔다. 다음을 기약하며... 쌔굳빠

반응형
반응형

📂 Javascript

 

스코프(Scope)

변수에 접근할 수 있는 범위로. 지역 스코프와 전역 스코프가 있다.

 

클로저(Closer)

함수 내부에 함수를 작성할 때 마다 생기는 것으로 외부 함수의 변수를 사용할 수 있기 때문에 반환하여 사용한다.


📂 Java

 

오버로딩

한 클래스 내에 동일한 이름의 메소드를 둘 이상 정의하는 것이다. 단, 매개변수의 선언이 달라야 한다.

void println(int n);
void println(int n, int m);

 

오버라이딩

상위 클래스에 정의된 메소드를 하위 클래스에서 다시 정의하는 행위이다. 즉 상위 클래스의 메소드를 무효화 시키는것이다. 단, 변수는 오버라이딩이 가능하지 않다.

class A{
	public void println(){
    	System.out.println("This is A.class");
    }
}

class B extends A{
	public void println(){
    	System.out.println("This is B.class");
    }
}

 

어노테이션

자바 컴파일러에게 메세지를 전달하기 위한 목적의 메모이다.

//Example
@Controller
@Overide
@Bean

 

인터페이스

구현체마다 동작하는 방법이 다르기 때문에 인터페이스를 제공한다.

 

메소드 영역

인스턴스의 생성 및 클래스 변수의 접근을 위해 생성되는 메모리 공간

 

스택 영역

지역 변수와 매개 변수가 저장되는 공간

 

힙 영역

인스턴스가 할당되는 역역. 인스턴스의 소멸 시점과 방법은 지역 변수와 다르다. 그러기 때문에 서로 별도의 공간에 저장한다.

 

가비지 컬렉션

인스턴스의 소멸 시점에 인스턴스를 소별하는 방식

String str1 = "AAA";
String str2 = "BBB";

//가비지 컬렉션에 의해 소멸되는 시점
str1 = null;
str2 = null;

 

오토박싱

Integer a = 10;
/*
	아래와 같은 내용으로 변경되어, 자동으로 컴파일 된다.
	Integer a = new Integer(10);
*/

 

오토 언박싱

Integer a = 10;
int b = a;
/*
	아래와 같이 자동으로 변경되어 컴파일 된다.
	int b = a.intValue();
*/

 

List와 ArrayList 차이

List는 인터페이스이고 ArrayList는 List에 상속된 클래스이다.

 

Enum

기존 Java에서 인터페이스로 열거하여 사용하던 중 발생된 문제점을 해결하기 위해 나온 새로운 열거체

 

Optional

기존에는 객체의 Null 값을 확인하기 위해 조건문을 통해 확인을 해야했다. 어려운 작업은 아니었으나, 번거롭다는 단점이 있었다. 이와 같이 NullpotionException을 방지하기 위해 나온 클래스이다.


📂 Spring

 

View가 호출되는 원리

컨트롤러에서 리턴 값으로 문자를 반환하면 뷰 리졸버(viewResolver)가 화면을 찾아서 처리한다.

 

객체를 API로 만드는 방법

컨트롤러에 @ResponseBody 어노테이션을 사용하면 된다. @ResponseBody를 사용하면 스프링 컨테이너는 viewResolver 대신에 HttpMessageConverter가 동작한다.

 

프로젝트 테스트하는 방법

main이 아닌 test 폴더에 접근하여 진행한다. 이때 @SpringBootTest라는 어노테이션을 클래스에 첨부하고 테스트 메소드에는 @Test라는 어노테이션을 붙인다. 

 

스프링 빈 주입하는 방법

@Autowired 어노테이션이 있으면 스프링이 연관된 객체를 스프링 컨테이너에 찾아서 넣어준다.

  • @Component 어노테이션이 있으면 스프링이 빈으로 자동 등록된다. @Service @Controller @Repository도 @Componen에 속한다.
  • 자바 코드로 직접 스프링 빈을 등록한다. Config 역할을 할 class를 만들어 준 후 @Congifuration 어노테이션을 클래스에 사용한다. 이후 등록될 빈과 그 위에 @Bean을 작성한다.
  • XML로 Config를 만들어서 사용했지만, 최근에는 잘 사용하지 않는다. 

 

AOP

흩어진 관심사를 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것이다. 예를 들어 모든 메소드의 호출 시간을 측정하라는 지시가 내려왔다면, 모든 메소드에 System.currentTimeMillis()를 사용하여 측정할 것인가? 이는 메소드 수가 적으면 가능하지만 50개만 넘어도 매우 힘들것이다. 이를 측정하기 위해 AOP 역할을 하는 클래스를 만들어 모든 메소드가 호출될 때 자동으로 실행되게 분리하는 개념이다.

@Aspect
@Component
public class TimeTraceAop {

    @Around("execution(* hello.hellospring..*(..))")
    public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
        long start = System.currentTimeMillis();
        System.out.println("START: " + joinPoint.toString());
        try {
            return joinPoint.proceed();
        } finally {
            long finish = System.currentTimeMillis();
            long timeMs = finish - start;
            System.out.println("END: " + joinPoint.toString() + " " + timeMs + "ms");
        }
    }
}

 

반응형
반응형

> 이 글에 대한 정리

 

OOP(Object Oriented Programming)

OOP는 객체의 관점에서 프로그래밍을 하는 것이다. 추상화, 캡슐화, 상속, 다형성과 같은 특징이 있으며 코드의 재사용성과 중복제거가 가장 큰 목적이다.

 

 

Exception, Error 차이

Error는 컴파일 시 문법적인 오류와 런타임 시 널 포인트 참조와 같은 오류로 프로세스에 심각한 문제를 야기시켜 프로세스를 종료 시킬 수 있다. 또한, 하드웨어의 오동작, 고장 등 개발자가 미리 예측할 수 없다.

 

Exception은 시스템 동작 중 예기치 않았던 이상 상태가 발생하여 수행 중인 프로그램이 영향을 받는것으로. JAVA에서는 try문으로 이미 예방할 수 있다.

 

 

Statement Prestatement 차이

두 명령어는 아래와 같은 실행 단계를 거친다.

 

1) 쿼리 문장 분석

2) 컴파일

3) 실행

 

statement는 매번 쿼리를 수행 할 때 마다 1~3단계를 거친다. 무슨 SQL 인지 파악하지는 좋지만 매번 컴파일 하지 때문에 성능에 좋지 않다. 하지만 Dynamic SQL을 사용할 경우는 statement를 사용해야한다. prestatement는 1~3단계를 캐시에 저장하기 때문에 재사용 측면에서 좋다. 쿼리를 반복적으로 수행한다면 DB에 부하를 줄여준다.

 

 

Connection Pool을 사용하는 이유

미리 커넥션을 생성하여 client에서 접속 시 이용가능 하도록 한 후 사용 후 pool을 회수하는 방식. JAVA에서 DB와 Connection을 맺는 일은 매우 느리며 자원을 많이 소비한다. 사전의 일정량의 Connection 객체를 만들어 공유된 저장소에 담아둔다. 이전에는 직접 작성하였다고 한다 지금은 JDBC로 대체 하고 있다. Connection Pool은 큐넷에서 시험을 접수하는 것을 예로 들 수 있다. Pool은 10개 할당했다고 가정하면, 10명의 접속자는 홈페이지에서 DB와 접속하여 작업을 하고 이후에 들어온 사람들은 대기 순번이 생기고 차례를 기다리는 것이다.

 

 

DI(Dependency Injection)

DI 의존성 주입. 스프링 IOC 컨테이너의 핵심 개념 중 하나이다. 소스코드의 변경 없이 환경 설정(sprinc config.xml, bean 객체 등) 만으로 프로그램을 제어할 수 있다. 즉 클래스간의 의존관계를 빈 설정  정보를 바탕으로 컨테이너가 자동으로 연결해주는 것을 말한다.

 

 

그 외 Spring의 특징

1) AOP - 트랜잭션이나 로깅, 보안과 같이 공통적으로 필요로 하는 모듈을 실제 핵심 모듈로 분리해서 적용 할 수 있다. 공통된 기능을 재사용하는 기법. (이해만 함)

2) POJO - 컨테이너에 저장되는 객체는 특정한 인터페이스를 구현하거나 특정 클래스를 상속받지 않아도 된다.

 

 

MVC 패턴이란

Model, View, Controller로 프로젝트를 구성할 때 구성 요소를 세 가지 역할로 구분한 디자인 패턴.

 

 

MVC 패턴의 장점

서로 분리되어 각자의 역할에 집중 할 수 있게끔 하여 유지보수성, 애플리케이션의 확장성, 유연성 증가, 중복 코딩 문제점을 사라지게 해준다. 유연성이란 클라이언트의 새로운 요구사항에 대해 최소한의 비용으로 보다 유연하게 대체하는 것을 말한다.

 

 

Ouath 2.0 Token이란

인증과 권한부여에 관련된 기능이다. 서버와 클라이언트 사이에 인증을 완료하면 서버는 권한 부여의 결과로써 accee token을 발행한다. ouath 2.0은 외부 서비스의 인증 및 권한 부여를 관리하는 범용 프레임워크이다. 비밀번호를 제공하지 않고 다른 웹싸이트 상의 자신들의 정보에 대해 웹싸이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단이다. 예를 들면 페이스북, 카카오, 구글 ID로 회원가입을 하는 것.

 

 

Outah 2.0 Token 발생 Flow

client와 resource owner 간 요청과 반응을 3단계로 걸쳐서 부여 및 인증한다. (자세하진 않음)

 

 

JWT란?

JWT는 jsonwebtoken의 약어이다.(놀라웠다) JSON 포맷을 이용하여 사용자에 대한 속성을 저장하는 cliam 기반의 Web Token이다. 주로 회원 인증이나 정보 전달에 사용한다. 또한, *Cros를 해결하기 위해 사용한다.

*cros는 cross origin resource sharing의 약어로 port 번호가 다른 환경과 통신한 때 발생하는 이슈.

 

 

Ouath 2.0 과 JWT에 대한 차이(뇌피셜)

Ouath 2.0은 권한과 인증에 중점을 두고 있는 것 같다. 그 예시로 ouath를 사용하기 위해서는 릴레이션에 role이라는 필드가 필요하다. 해당 필드로 role이 0이면 일반 회원, 1이면 admin과 같이 구분할 수 있기 때문이다. 그리고 그 권한을 기준으로 자신의 정보를 본인만 조회할 수 있게해준다. JWT는 정보를 안전하게 전달해주는데 초점을 맞추고 있는것 같았다. 해당 정보를 열람하기 위해선 sign key가 필요하고, 이 key를 모르면 jsonwebtoken이 발행해주는 정보를 복호화하여 사용할 수 없기 때문이다. sign key가 특별한 건 아니고 '11111' 또는 'abadjflkjalkdsjf' 과 같이 남들은 모르게 지정해주면 된다.

 

 

Hint란

오라클 옵티마이저에게 SQL 문 실행을 위한 데이터 스캐닝하는 경로, 조인하는 방법 등을 알려주기 위해 SQL 사용자가 SQL 구문에 작성하는 것을 말한다. 오라클이 항상 최적의 실행 결로를 만들어 내기는 불가능하기 때문에 개발자가 직접 최적의 실행 경로를 작성한다.

 

 

Plan 이란

옵티마이저는 우리에게 어떤 경로로 테이블에 접근할 건지, 어떤 방식으로 조인하는지, 어떤 인덱스 자원을 사용하는지 등에 대한 계획을 알려준다. 해당 계획을 통해 SQL을 수정하여 자원의 낭비를 줄일 수 있다.

 

 

테이블 정규화란 ?

정규화는 릴레이션 내에서 중복을 제거하는 과정이다. 즉 중복을 줄이고 무결성을 향상 시킨다.


마치며..

🤦‍♂️ 그당시 질문에 대한 답변을 지금에서야 회고하면서 나 자신에 대해 더욱 반성하게 되었다. 또한, 내가 왜 그동안 면접에서 탈락했는지.. 얼마나 부족한 사람인지 깨달았다. 코딩 능력도 중요하다. 하지만 본질이 더욱 중요하다는 것을 알게되었다. 여기에 없는 답변은 천천히 이어나갈 예정이다

반응형

'취준 > 면접 준비' 카테고리의 다른 글

[면접 준비] 빅데이터 엔지니어  (0) 2020.06.30

+ Recent posts