신한은행 2022년 상반기 디지털/ICT 수시채용 삼성청년SW아카데미 특별전형 1차 면접 후기(불합격)

취업 과정|2022. 5. 28. 13:20
728x90

오늘(2022.05.25 수) 신한은행 1차 면접을 봤다.

서류 전형을 합격하고 나면 동시에 AI 역량검사, 코딩 테스트, 1차 면접에 대한 안내를 채용 사이트에서 확인할 수 있다.

아마 3가지를 종합적으로 산출하여 2차 면접 대상자를 뽑는 게 아닐까 싶다.

1차 면접은 역시 코로나 때문에 비대면으로 봤으며 사이트는 JOBFLEX를 이용하였다.

사이트로 이동하면 첫 화면에 면접 환경 체크하기, 플러그인 설치하기, 화상면접 시작하기 이렇게 3가지가 있고 환경 체크부터 차례대로 하면 된다.

다만 필자는 분명 다 체크하고 플러그인도 설치했는데 막상 시간 되고 들어가려 하니까 접속 오류가 떴었다......

원래 면접 때 잘 긴장하지 않는데 면접 시작 10분 전부터 접속이 가능한 상황에서 다 체크했다고 생각했지만 막상 접속 오류가 뜨니까 진정할 수가 없었다 ㅠ.ㅠ

그래서 안내 창에 있는 오픈 채널을 통해 연락을 했고 결국 방 번호를 통해 폰의 zoom으로 접속했었다.

근데 웬일..... 원래 폰도 한 번씩 재부팅을 해줘야 되는데 켜 둔 지 오래라 그런지 렉이 걸리는 바람에 2차 멘붕까지 왔었다.

여차 저차 해서 가까스로 접속을 하니 원래 시작 시간인 10분에서 14분 지난 24분에 시작을 하게 됐고 다행히 면접관님들께서 시스템 오류로 시간이 지났으니 최대한 감안하고 진행하겠다 하셨다.

상당히 당황을 많이 한 시점에서 면접을 진행하게 되어 의욕이 앞선 모습이 많이 나오긴 했지만 다행히 질문 자체가 어려운 것은 없었다.

주로 자소서 기반으로 질문이 나왔으며 40% 정도는 인성 질문이 나왔다.

다만 프로젝트 진행 중인 시기라 준비가 미흡한 부분에 대한 답변을 잘못 말한 건 아쉬움이 많이 남았지만 중간중간 "말씀 들어보니 많이 준비하신 것 같네요" 란 말을 들어서 망했다는 느낌은 들지 않았다.

면접 진행이 예정되었다면 반드시 플러그인 같은 것을 꼭 확인하고 실행해도 PC에 따라 적용 안 되는 경우가 있으니 꼭 예비용으로 폰에 zoom을 설치하는 것을 추천한다.

문제가 생기면 바로바로 카톡 채널로 연락하고 면접에 관해선 자신이 경험한 부분에 대해 꼬리 질문을 여러 가지 준비해보는 것을 추천한다.

충분한 준비가 안되었다면 알던 내용도 잘못 말할 수 있고 깔끔하게 정리된 문장으로 답하기 어려울 수 있기 때문이다.

결과 발표가 뜨는 대로 포스팅을 수정하도록 하겠다.

오늘 (2022.06.03 금) 결과 발표가 났다.

나름 어필을 잘했다 생각했는데 막상 불합격 소식을 들으니 씁쓸한 기분이 들었다.

백엔드나 프레임워크에 대한 경험이 없었을 때야 역량 부족인 것을 이해했지만 많이 준비하셨단 말을 듣고도 떨어지니 의욕이 많이 앞선 게 문제가 아닐까 추측만 하게 된다.

역량 면접에서 역량을 충분히 어필했다고 생각하기 때문이다.

어필할 역량을 충분히 쌓아서 맘 편하게 면접에 임했었는데 이젠 싸피를 통해 모의 면접으로 도움을 받아야겠단 생각이 든다.

취뽀하는 그날까지 열심히 달리도록 하겠다!!

728x90

댓글()

싸피 7기 1학기 후기

취업 과정|2022. 5. 21. 15:44
728x90

1월에 시작했던 싸피가 어느새 1학기 수료를 앞두고 있다.

공휴일을 제외한 평일 오전 9시부터 오후 6시까지 스케줄이 잡혀있다 보니 자연스럽게 잠도 줄고 부지런해진 것 같다.

원래도 잠이 많은 편은 아니었지만 스스로 준비를 하다 보니 동틀 때쯤 자서 8시간 정도 뒤에 일어나곤 했는데 강의 때문에 6~7시간 자고 일찍 일어나는 게 습관이 들었다.

또한 싸피를 진행하면서 만족스러울 만큼 많이 배웠다고 생각한다.

싸피의 1학기는 2주 정도의 몸풀기 느낌인 스타트 캠프를 시작으로 알고리즘, 서버, 웹, 프레임워크를 배운다.

솔직히 처음 싸피에 참여하는 내 태도는 "프레임 워크만 배우면 되겠다."였다.

이미 대부분의 기업 코테는 합격선이었으며 팀플이라 소규모 프로젝트였지만 팀장과 팀원의 입장에서 PHP를 이용한 DB 연동 수준의 웹 프로젝트를 여러 번 했었기에 프레임 워크에 대한 경험만 부족할 뿐이지 어느 정도 준비된 취준생이란 착각을 했었다.

심지어 파이썬의 자동화 도구를 이용한 웹 크롤링과 보안성도 떨어지는 md5 암호화 알고리즘을 접목한 경험이 우물 안 개구리처럼 자만심을 부추긴 것 같다.

현실은 간단한 웹에 쉬운 것만 찾아서 간단한 모듈 몇 가지를 사용한 것뿐이었는데 말이다.

물론 알고리즘과 웹 기본을 나갈 땐 비교적 여유롭긴 했다.

이미 알고 있었기 때문에 딱히 집중하진 않았지만 백엔드와 프레임 워크를 배울 땐 맘 편히 쉴 수 있는 날이 거의 없었던 것 같다.

1학기는 하나의 프로젝트에 점차 배운 것들로 살을 붙여 나가는 방식이며 2명의 팀을 이룬다.

그렇기 때문에 중간중간 내 것으로 만들지 못하고 지나가면 뒷부분들에 영향을 받게 되고 더군다나 두 명이서 진행하기 때문에 팀원에게 피해를 끼치기 싫어서 더더욱 열심히 하게 됐다.

보통의 학사 팀플은 4~5명이 진행하느라 부분적으로만 경험 가능하고 흔히 말하는 프리 라이더(Free Rider)처럼 책임감 떨어지게 행동하는 경우도 은근히 많지만, 2명이 진행하기 때문에 전체적으로 경험 가능하고 서로 책임감 있게 행동하여 원활한 협업이 이루어진다는 게 큰 장점 같다.

많이 배웠지만 그중에서도 크게 역량 성장을 이룬 점을 뽑자면 스프링 부트와 Mybatis를 이용하여 REST FUL 한 백엔드 구축, Vue를 이용한 SPA (Single Page Application) 형태의 프론트 엔드 구현, 여러 가지 Api 사용, 유지보수를 고려한 기능 분리(디자인 패턴 적용 등) 이렇게 뽑을 수 있을 것 같다.

처음 학습하고 사용하느라 많이 헤매고 어려워했던 부분도 있었지만 고생한 만큼 다양한 것을 배우고 면접에서도 풍부한 내용으로 어필할 수 있겠다는 근거 있는 자신감이 생기기도 했다.

특히 정해진 틀 안에서 단순 반복적으로 코드만 양산하는 코더(Coder)가 아닌 개발자(Developer)가 되기 위해서 스스로 어떻게 하면 효율적으로 코드를 관리할 수 있을까 고민을 많이 했던 것 같다.

물론 처음부터 그렇게 생각하진 않았지만 유튜브 라이브 강의를 들으며 교수님께서 이 코드를 왜 이렇게 구분하여 작성했는지 설명을 듣다 보니 필자 또한 막무가내로 작성된 프로젝트 코드를 수정하려 열어봤을 때 엄청 막막했던 경험이 떠올라서 실무를 대비한다는 생각으로 차후 유지보수를 고려해 고민하며 코드를 작성했다.

이렇게 생각하고 고민하는 개발자가 되겠다는 초기 마음 가짐을 잘 실행한 것 같아 뿌듯하기도 하다.

이제 절반이 지났고 2학기는 7주에 하나씩 총 3개의 프로젝트를 진행한다고 한다.

개인적으로 취업 준비로는 프로젝트만 한 것이 없다고 생각하기 때문에 기대 반 설렘 반이다.

물론 2학기가 끝나기 전에 취업에 성공한다면 더할 나위 없이 기쁘겠지만 안되더라도 분명 싸피를 수료할 즈음엔 어디라도 갈 수 있는 충분한 역량을 쌓을 수 있을 것이라 자신한다.

1학기 프로젝트를 마무리하면 1주일의 방학과 함께 한 달 정도 잡페어 등을 하며 여유로운 기간이 있다는데 남은 2학기를 달리기 위해 충분한 휴식을 취할 생각이다.

프로젝트 마무리를 하고 종강식을 진행했는데 기대치 않았던 프로젝트 최우수상을 받게 되었다.

사실 디자인도 이쁘지 않고 입과 목표로 삼았던 면접에서 충분히 어필할 수 있도록 강점을 갖기 위해 주로 고민을 많이 했었는데 그게 다른 팀들에게 아이디어를 주고 점수를 후하게 받은 게 아닌가... 싶다.

프로젝트 상은 다른 팀의 평가로만 이루어지는데 리허설 발표 때 상당히 반응이 좋았기 때문이다.

솔직히 반응이 좋았어도 1등 까진 생각지 못했었는데 어안이 벙벙하긴 했다.

아마 명세서를 위주로 구현하려는 다른 팀과 다르게 우리 팀이 자랑할 수 있을만한 아이템을 강점으로 삼아 발표를 한 게 큰 것 같다.

국비지원 때 파이썬으로 웹 크롤링을 접목하고 이를 실무자분께 호평받은 경험을 살려 이번에도 보안 취약점을 대비한 암호화 알고리즘, 뉴스 웹 크롤링, UX를 고려한 다음과 카카오 API 사용, 이메일 발송을 구현했고 강점으로 삼았기 때문이다.

덕분에 이 글을 쓰면서도 13팀 중 1등을 해서 상을 받았단 사실에 상당히 기분이 좋다.

개발자가 되기 위해 고민하는 사람이 있다면 일단 지원부터 해보란 말을 하고 싶다.

싸피를 통해 제대로 된 프로젝트 경험을 쌓으며 면접에서 충분히 자기 어필을 할 수 있기 때문이다.

또한 협업 하는 경험과 교수님들께 다양하게 배우는 내용이 피가 되고 살이 되어 분명 테스트나 면접에서 자신감의 원동력이 될 것이다.

비전공자는 파이썬반, 전공자는 자바반이며 전공자 중에 따라가기 벅찬 느낌을 받는 사람은 비전공자반으로 갈 수도 있다.

본인이 의지만 있다면 아주 좋은 기회란 것을 장담할 수 있다.

이 글이 개발자를 고민하는 사람들에게 도움 되길 바란다.

728x90

댓글()

신한은행 2022년 상반기 디지털/ICT 수시채용 삼성청년SW아카데미 특별전형 코딩 테스트 후기

취업 과정|2022. 5. 14. 12:28
728x90

오늘 (2022.05.14) 신한은행 디지털/ICT 부문 코딩 테스트를 봤다.

다른 기업들과 마찬가지로 프로그래머스에서 화상캠까지 연결하여 봤는데 해당 과정에서 다소 불편했던 점은 대부분의 기업들은 해당 링크와 전형 설명을 메일로 보내 확인하기 편리했지만 신한은행은 해당 채용 사이트의 마이 페이지로 들어가야 확인할 수 있다는 점이었다.

마이 페이지에는 코딩 테스트 안내는 물론 AI 역량 검사, 추후 면접 관련 내용까지 함께 있었다.

각설하고 신한 은행의 코딩 테스트는 처음 봤는데 다른 은행권들의 코테 수준에 비하면 다소 어려운 편인 것 같다.

오픈 단톡방의 반응을 보면 최근 시행된 국민은행보다 어려웠고 신한이 유독 이번 코테가 어려웠다고 한다.

물론 필자처럼 보통의 IT기업(네이버, 라인, 카카오)의 코테를 목표로 준비하였다면 충분히 다 풀 수 있는 건 사실이다.

다만 새마을금고 중앙회, IBK 기업은행 등의 코테를 본 경험에 의하면 역시 은행권 치고는 어렵게 나온 것 같다.

150분 동안 알고리즘 4문제, SQL 1문제가 나오므로 문제당 30분 정도이고 난이도도 그에 맞게 나온 것 같다.

근데 SQL은 상당히 어렵게 느껴졌다.

평소에 SQL은 기본적인 CRUD 기능만 사용하기에 준비가 안되어있기도 해서 문제를 읽어보고 기본적인 문법에 중첩 질의(Nested Query) 수준이라면 풀어볼 생각이었지만 그보다 더 복잡하게 나와서 처음으로 SQL문제를 포기한 것 같다.

알고리즘 문제는 다소 헷갈려서 시간을 오래 잡아먹은 문제도 있긴 했지만 IT기업의 코테를 목표로 준비했다면 충분히 다 풀 수 있는 수준이었다.

어려운 개념이 나온 것도 아니고 완탐, 조합, 구현 수준으로 나왔다.

특히 ssafy에서 알고리즘 강의시간에 순열 조합을 많이 풀어봐서 익숙한 편이었다.

팁이라 할 수 있는 것은 전체적으로 문제를 훑어보고 선택과 집중이 필요한 것 같다.

필자는 sql문제를 보고 해결하기 어렵다 판단하여 2분 만에 바로 포기했으며 가장 구현이 쉽고 바로 구현 방식이 떠오르는 문제부터 시작했다.

그렇게 푸니 대략적으로 3번은 7분, 1번은 20분 정도 걸려서 남은 시간 동안 여유롭게 2, 4번을 해결할 수 있었다.

머리를 써야 하다 보니 시간에 쫓기면 그만큼 문제 해결이 더뎌지기 때문이다.

단톡방의 투표를 보니 3, 2, 1, 4, 5, 0 순으로 제출이 많았다.

따라서 추측컨대 3 솔에서 채용인원에 따라 최대 2 솔까지가 합격이 아닐까 생각해본다.

결과 메일 오는 대로 수정하도록 하겠다.

728x90

댓글()

[BOJ] Python 백준 4485번 녹색 옷 입은 애가 젤다지? 골드 4

728x90

https://www.acmicpc.net/problem/4485

 

4485번: 녹색 옷 입은 애가 젤다지?

젤다의 전설 게임에서 화폐의 단위는 루피(rupee)다. 그런데 간혹 '도둑루피'라 불리는 검정색 루피도 존재하는데, 이걸 획득하면 오히려 소지한 루피가 감소하게 된다! 젤다의 전설 시리즈의 주

www.acmicpc.net

 

문제 풀이


왼쪽 위칸인 [0,0]에서 출발 후 오른쪽 아래칸인 [N-1, N-1]에 도착하는 경로를 생각하는 그래프 탐색 문제였다.

 

다만 흔히 Queue나 Stack을 이용하여 BFS, DFS로 탐색하는 방법이 아닌 Priority Queue를 사용한 다익스트라 문제였다.

 

이 문제에서 중요한 점은 거리의 최소가 아니라 비용, 즉 가중치의 최소가 중요하기 때문이다.

 

상당히 돌아가는 경로라 하더라도 비용이 최소면 해당 경로를 택하기 때문에 가중치의 합을 기준으로 최소 비용 경로를 고려해야 한다.

 

Priority Queue를 이용한 원리는 다음과 같다.

 

먼저 시작 노드에서 이동 가능한 노드를 가중치의 합과 함께 Priority Queue에 넣는다.

 

가중치의 합이 가장 작은 노드를 선택한 뒤 해당 노드에서 이동 가능한 노드를 가중치의 합과 함께 Priority Queue에 넣는 행동을 [N-1, N-1]에 도착할 때까지 반복한다.

 

[N-1, N-1]에 도착하면 해당 가중치를 저장하고 반복을 종료한다.

 

한 번은 중간에 이동 가능한 노드인지 체크하는 과정에서 이미 방문한 노드가 최소 가중치의 합을 보장하는지 의문을 품는 질문을 본 적이 있었는데 결론부터 말하자면 각 노드에서 가장 먼저 선택되었을 때의 가중치가 최소다.

 

Priority Queue를 통해 매번 가장 작은 가중치의 합을 선택하기 때문에 두 번째 방문할 때는 같거나 클 수밖에 없기 때문이다.

 

이제 전체 코드를 통해 설명하도록 하겠다.

 

import heapq
inf = float('INF')
dir = [[1, 0], [-1, 0], [0, 1], [0, -1]]
res_num = 1
while True:
    n = int(input())
    if n == 0:
        break
    else:
        graph = []
        queue = []
        res = [[inf for i in range(n)]for j in range(n)]
        for i in range(n):
            graph.append(list(map(int, input().split())))
        heapq.heappush(queue, (graph[0][0], 0, 0))
        res[0][0] = graph[0][0]
        while len(queue) > 0:
            temp = heapq.heappop(queue)
            if temp[1] == n-1 and temp[2] == n-1:
                break

            for i in range(len(dir)):
                dy = temp[1]+dir[i][0]
                dx = temp[2]+dir[i][1]
                if 0 <= dy < n and 0 <= dx < n and res[dy][dx] > temp[0]+graph[dy][dx]:
                    res[dy][dx] = temp[0]+graph[dy][dx]
                    heapq.heappush(queue, (temp[0]+graph[dy][dx], dy, dx))
        print("Problem %d: %d" %(res_num,res[n-1][n-1]))
        res_num += 1

 

4번째 줄까지는 Priority Queue를 사용하기 위한 heapq 선언, 방문하지 않은 노드는 무한대 선언, 노드의 방향 선언, 문제 번호 선언이다.

 

5번째 줄의 while문을 통해 0을 입력받을 때까지 반복적으로 문제를 처리했다.

 

12번째 줄의 res는 노드의 최솟값을 갱신하는 리스트로 마지막에 res [N-1][N-1]을 출력하면 된다.

 

15번째 줄은 시작 노드의 가중치와 y좌표, x좌표 순서대로 넣음으로써 자동으로 MinHeap 구조인 heapq에서 최소 가중치를 꺼내도록 하였다.

 

18번째 줄의 반복문은 Priority Queue가 빌 때까지 계속 원소를 꺼내는 작업을 하는데 도착지점에 도달한다면 탈출하도록 구현하였다.

 

방향 탐색을 하기 위해 22번째 줄에서 이동 가능한 노드인지 체크한 후 Priority Queue에 넣어주도록 구현하였다.

 

결과 화면
결과 화면

 

구현 방법이나 알고리즘 측면에서 어려운 문제는 아니었지만 우선순위 큐를 거의 사용해보지 않았다면 충분히 떠올리기 어려울 수 있다고 생각한다.

 

필자 또한 다양한 그래프 문제를 경험해봤지만 습관처럼 BFS, DFS를 사용했기에 해당 문제를 보고 바로 Priority Queue를 떠올리진 못했다.

 

보다 유연하고 다양하게 생각하도록 노력하는 게 중요한 것 같다.

728x90

댓글()

라인 2022 상반기 신입 공개 채용 필기 테스트 후기(불합격)

취업 과정|2022. 4. 2. 13:25
728x90

오늘(2022.04.02) 라인 필기 테스트를 봤다.

 

라인 필기 테스트만 3번째라 익숙해질 만도 한데 여전히 자신 있게 "많이 맞췄다!"라고 할 수 없다는 게 많이 아쉽기도 하다.

 

필기 테스트는 컴퓨터공학 기준으로 한 번쯤은 강의를 들어본 CS(Computer Science) 전반에 걸쳐서 문제가 나온다.

 

깊게 물어보는 것은 물론 강의에서 언급하지 않거나 "이런 게 있다" 하고 넘어간 부분에서도 나오기 때문에 열의를 가지고 다양하게 자료를 찾아보는 습관이 중요한 것 같다.

 

예를 들면 이번에 나오진 않았지만 TCP에서 네트워크 상의 효율을 위해 개발된 Nagle Algorithm의 수도 코드를 기반으로 출제될 수 있는 것처럼 직접적으로 강의를 하진 않아도 관심 가지고 찾아봄으로써 다양한 지식을 쌓는 게 중요하다.

 

범위도 넓은데 그 넓은 범위에서 골고루 나오는 것도 평소 실력을 테스트하겠단 의도 같다.

 

또한 이론만 아는 게 아니라 코드로 구현할 수 있는 부분(OOP, SQL 등)은 직접 구현해봐야 익숙하게 풀 수 있는 문제들이 꽤 있었다.

 

체감상 저번 필기 테스트보다는 조금 쉬운 편으로 나온 것 같지만 아마 합격하기엔 부족하지 않을까 생각한다.

 

그래도 다행인 점은 저번 시험 볼 때는 자바를 잘 모르는 상태라 OOP에 관한 지식을 외우다시피 했기 때문에 좀 더 디테일하게 물어보면 헷갈리거나 모르는 상황이 많았는데 SSAFY를 통해 자바와 OOP개념을 배운 결과 이해를 기반으로 접근할 수 있었다는 게 그만큼 성장한 것 같다.

 

원래 외우는 걸 별로 안 좋아하고 이해하는 것이 장기적으로 도움된다 생각하기 때문이다.

 

여담으로 수능 볼 때도 근의 공식조차 외우지 않은 상태에서 들어갔다. (시간도 넉넉했었고 30초면 충분히 유도할 수 있기 때문에)

 

필기 테스트엔 자신이 없어서 SSAFY 복습도 하고 다른 코테도 보면서 기대 없이 결과를 기다려야겠다.

 

결과 메일 오는 대로 포스팅을 수정하도록 하겠다.

 

불합격 후기


오늘 (2022.04.11 월) 필기 테스트 결과 메일이 왔다.

 

결과 메일
결과 메일

 

필기 테스트 이후 9일 만에 메일이 왔는데 예상은 했지만 그래도 불합격 메일을 확인하니 좀 씁쓸하기도 했다.

 

아무래도 결과가 서류와 필기 테스트를 합쳐서 나오다 보니 서류가 부족했는지 CS가 부족했는지 감이 잡히지 않는다.

 

또한 CS를 준비한다 해도 범위가 너무 방대하고 어느 정도 수준까지 해야 될지 감도 잡히지 않아서 라인은 나한테 상당히 어려운 기업 같다.

 

매번 코테는 쉽게 통과해도 번번이 필기 테스트에서 막히기 때문이다.

 

공채 시즌이라 몇몇 기업에 넣는 중인데 자소서를 조금 더 가다듬도록 해야겠다.

728x90

댓글()

라인 2022 상반기 신입 공개 채용 코딩 테스트 후기 (합격)

취업 과정|2022. 3. 26. 15:02
728x90

오늘(2022.03.26) 라인 코테를 봤다.

 

이미 코테만 두 번 합격한 경험이 있어서 비교적 편하게 봤던 것 같다.

 

라인은 코테보다 필기 테스트가 상당히 어렵기 때문이다.

 

3시간에 6문제가 나왔으며 문제당 30분 정도라 난이도도 수월할 것이라 짐작하고 천천히 일어나서 접속했는데 문제들을 쭉 훑어보니 이번엔 좀 더 쉽게 출제된 것 같았다.

 

문자열, 그리디, 완전 탐색, 힙 등 다양하게 나왔으며 디테일한 조건을 구현하는데 시간을 많이 뺏겨서 25분 남기고 5문제를 풀었다.

 

남은 25분 동안 6번 문제를 구현하기엔 힘들 것 같아서 그냥 제출해버렸다.

 

끝나고 단톡방에서도 5문제, 4문제, 3문제, 6문제 순서대로 푼 사람들이 많아서 확실히 이번엔 쉽게 나왔다는 것을 확신했다.

 

요새 코테 준비를 거의 안 해서 디테일한 조건을 놓치는 부분이 많아진 것 같다.

 

따라서 5문제를 풀었다고 해도 정확히 맞았다는 확신을 갖기엔 힘들 것 같고 아마 단톡방 분위기로 봐선 비교적 쉬운 난이도로 인해 합격 컷은 4개~5개쯤이 되지 않을까 생각한다.

 

어차피 라인은 필기시험이 어렵기에 마음 편하게 본 코테고 해야 할 거 하면서 결과 메일이 오길 기다려야겠다.

 

결과 메일 오는 대로 포스팅을 수정하도록 하겠다.

 

합격 후기


오늘(22.03.30 수) 결과 메일이 왔다.

 

코테 후 4일 만에 5시쯤 결과 메일이 온 건데 적당한 시기에 발표가 난 것 같다.

 

합격 메일
합격 메일

예상대로 합격하긴 했는데 단톡방 분위기를 보아하니 상당히 여유롭게 합격시킨 것 같다.

 

3솔 합이 있지만 4, 5솔 불 합격도 있어서 추측이긴 하지만 정확하게 3문제 이상 통과한 사람들을 합격시킨 것 같다.

 

다만 라인은 필기 테스트가 진짜라서 준비를 하긴 해야겠는데 SSAFY 강의도 있고 이론이 정리된 깃허브나 정보처리기사 수준으로 임하기엔 깊게 물어보는 문제도 있는 거로 기억해서 고민이 된다.

 

SSAFY 하면서 Back-End도 처음으로 접해 많은 역량 성장을 했지만 CS 전반의 이론 공부는 따로 해야 하기 때문이다.

 

틈틈이 자료 찾아보면서 잘 모르거나 까먹은 부분은 깊게 공부하고 여력이 된다면 블로그에 작성하도록 하겠다.

 

728x90

댓글()

Web API 쉽게 사용하기

카테고리 없음|2022. 3. 20. 23:05
728x90

방대한 Data를 사용하기 위해 모든 것을 DB에만 의존할 순 없다.

 

여태 프로젝트를 진행하면서도 DB만 사용했었는데 최대한 다양한 Data를 사용하도록 파일도 얻고 Python의 자동화 도구를 이용한 웹 크롤링도 해봤지만, Data를 넣는데 많은 시간이 걸리고 파일을 얻기 위해 찾아다녀야 한다는 단점들 때문에 API를 활용하는 게 좋아 보인다.

 

다만 SSAFY에서 강의를 듣는데 API 사용을 어려워하기도 했고 API를 활용하면 코드로 필요한 Data를 얻어서 다양하게 활용할 수 있으므로 나중을 위해 정리하는 겸 API에 대해 알아보자.

 

Web을 기준으로 대표적 비동기 통신 방식인 AJAX를 사용하여 정리하도록 하겠다.

 

API란?


API란 Application Programming Interface의 약자로 일종의 소프트웨어 인터페이스이며 다른 소프트웨어에 서비스를 제공하는 것이다.

 

보다 이해하기 쉽게 말하자면 엄청나게 많은 Data를 저장한 DB에서 개발자가 코드를 이용하여 필요한 Data를 불러오는 것을 뜻한다.

 

물론 아무나 접근할 수는 없게 회원 가입한 유저에게 유일한 서비스 키(Service Key)를 제공하여 인증된 사용자에게만 필요한 Data를 제공한다.

 

또한 개발자마다 코드 스타일이 다르고 각기 다른 코드에 동일한 결과를 제공하는 것은 불가능하기에 API를 제공하는 곳에서 요청(Request) 방식과 응답(Response) 방식을 구체적으로 명세해놓고 있다.

 

하지만 필자처럼 API를 처음 접하는 경우엔 해당 문서가 아무리 친절하고 세세하게 설명해놓았다 하더라도 코드를 복붙 하는 수준이 아니라면 어떻게 구현해야 하는지 감이 잡히지 않을 수 있다.

 

실제로 카카오 지도 API는 주석과 샘플 코드, 실제 작동방식 등을 Javascript, Javascript+HTML까지 구분하면서 아주 쉽게 이용할 수 있도록 해놨지만 같은 카카오의 개발 가이드에서 주소 검색하기 API는 Request에 대한 정보와 설명을 해놨기에 필요한 부분을 생각해서 조합하는 것은 예상외로 막힐 수 있기 때문이다.

 

직접 보면 어떤 느낌인지 알 수 있을 것이다.

 

지도 Web API 가이드 : https://apis.map.kakao.com/web/guide/

주소 검색하기 API 문서 : https://developers.kakao.com/docs/latest/ko/local/dev-guide#coord-to-address-response-address

 

API를 사용하기 위해선 알아야 할 개념들이 있다.

 

먼저 Data를 전송하는 방식엔 GET과 POST 두 가지 방식이 있다.

 

GET은 HTTP 패킷의 Header에 Data를 담아 보내는 방식인데 URI를 통해 Data를 전송한다고 생각하면 되며 브라우저에 따라서 길이에 제한이 있을 수 있다.

 

주소창에서 "?" 뒤를 쿼리 스트링(Query String)이라 하는데 "?변수명=변수값&변수명=변수값" 이런 식으로 나타나 있는 것을 본다면 GET 방식이구나 생각하면 된다.

 

POST방식보다 상대적으로 빠르며 인코딩되어 전달하는 경우도 있지만 일단 주소창에 노출되기 때문에 민감하지 않은 정보(페이지 번호 등)를 전달할 때 GET 방식을 주로 쓴다.

 

POST 방식은 HTTP 패킷의 Body에 Data를 담아 보내는 방식인데 GET과는 달리 사용자 입장에선 확인할 수 없다.

 

일단 Data가 겉으로 노출되지 않으므로 민감 정보(비밀번호 등)나 길이에 제한이 없으므로 긴 Data를 전송할 때 주로 사용한다.

 

여기까진 Data 전송 방식이고 지금부터는 Data의 형식에 대해 알아보도록 하겠다.

 

주로 사용하는 Data의 형식은 JSON과 XML이다.

 

JSON은 JavaScript Object Notation의 약자로 키와 값을 갖는 문자열 포맷이다.

 

Python의 딕셔너리를 생각하면 이해하기 쉬울 것이다.

 

다음으로 XML은 EXtensible Markup Language의 약자이며 구조가 HTML과 유사하다.

 

쉽게 말해 데이터들의 타입을 Semantic Tag로 나타내고 그 안에 Data를 넣어놨다고 생각하면 된다.

 

API 사용 방법


여기까지 이해했으면 이제는 직접 구현해야 할 차례다.

 

예제는 위의 두 링크를 기반으로 설명하도록 하겠다.

 

그전에 앞서 설명했듯이 API를 사용하기 위해선 사이트별로 Service Key를 할당받아야 한다.

 

https://developers.kakao.com/

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

 

해당 사이트로 이동해서 자신의 Web 애플리케이션을 등록하면 사진처럼 고유의 Service Key를 할당받는다.

 

본인을 인증하는 키이므로 외부에 유출되지 않도록 신경 써야 한다.

 

키는 상황에 맞게 사용하면 되는데 만약 코드는 잘 작성한 것 같고 개발자 도구에서 401 (Unauthorized) 오류가 뜬다면 정상적으로 인증이 되지 않았단 뜻이므로 바꿔가면서 테스트해보는 것을 추천한다.

 

그럼 먼저 지도 API를 사용해보자.

 

직접 보면 알겠지만, 상당히 구체적으로 설명이 적혀있다.

 

전체 코드와 주석을 보면서 설명하도록 하겠다.

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=자신의 키 입력"></script>
</head>
<body>
    <div id="map" style="width:500px;height:400px;"></div>

    <script>
            var container = document.getElementById('map'); //지도를 담을 영역의 DOM 레퍼런스
            var options = { //지도를 생성할 때 필요한 기본 옵션
                center: new kakao.maps.LatLng(33.450701, 126.570667), //지도의 중심좌표.
                level: 3 //지도의 레벨(확대, 축소 정도)
                };
            var map = new kakao.maps.Map(container, options); //지도 생성 및 객체 리턴
	</script>
</body>
</html>

 

8번째 줄에서 카카오 API를 사용하기 위한 코드를 입력했으며 자신의 키 입력 부분에 본인의 Service Key를 대신 입력하면 된다.

 

11번째 줄엔 웹 페이지에서 지도가 나타낼 영역을 div 태그로 잡았으며 이후 JavaScript 코드가 해당 div에 지도를 표시하는 내용이다.

 

먼저 id를 이용해 지도를 띄울 객체를 잡고 options 객체를 이용해 지도 객체에 옵션을 추가하는 비교적 간단한 방식이다.

 

이때 options는 키와 값을 갖는 객체인데 카카오에서 정한 키에 자신이 필요한 값을 넣어서 원하는 지도를 출력할 수 있다.

 

더 많은 기능을 사용하고 싶다면 Sample Page를 참고하면 수월하게 구현할 수 있을 것이다.

 

다음은 위에서 언급한 두 번째 링크에서 주소 검색하기 API를 사용해보자.

 

이번에는 지도 API와는 다르게 전체적인 코드가 없이 예시 정보만 알려주고 있다.

 

Request 예시
Request 예시

 

사실 API에 익숙하다면 위에 있는 정보를 충분하다 생각하겠지만, 필자처럼 API를 처음 접하는 사람에겐 각각의 줄이 무엇을 뜻하는지는 알아도 이걸로 직접 Data를 받아오기엔 막막할 수 있을 것으로 생각한다.

 

그래서 전체 코드를 통해 위에 있는 정보를 어떻게 수정했는지 설명하도록 하겠다.

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://code.jquery.com/jquery-3.6.0.js"
        integrity="sha256-H+K7U5CnXl1h5ywQfKtSj8PCmoN9aaq30gDh27Xc0jk="
        crossorigin="anonymous">
    </script>
</head>
<body>
    <script>
	$.ajax({
            method : "GET",
            url:'https://dapi.kakao.com/v2/local/search/address.json',
            data : {query : "전북 삼성동 100"},
            headers : {Authorization: "KakaoAK 자신의 키 입력"},
            success:function(data){
                console.log("API 불러오기 성공")
                console.log(data)
            },
            error:function(data){
                console.log("API 불러오기 실패")
            }
        })
	</script>
</body>
</html>

 

기본적으로 Console 창에 Data를 받아오는지만 체크할 수 있도록 구현하였다.

 

먼저 head에 선언한 script 태그는 JQuery의 AJAX를 사용하기 위한 코드이다.

 

저 온라인 CDN 코드가 있어야 AJAX 사용이 가능하다.

 

그다음 body의 script 태그가 AJAX를 이용해 카카오 API에서 Data를 받아오는 부분이다.

 

AJAX 안을 잘 보면 Sample Request에서 GET이라 있는 부분은 전송 타입을 뜻하므로 method : "GET"으로 작성하였다.

 

url은 Sample Request와 동일하게 작성하였고 data란 키의 값으로 query 부분을 작성하였다.

 

이때 Sample Request에서는 "query=전북 삼성동 100" 이렇게 전체를 문자열 처리하였지만, 실제 코드에는 키와 값으로 query : "전북 삼성동 100" 이렇게 작성하였다.

 

또한 Sample Request에서 -H는 헤더를 뜻하는데 AJAX 안에서 headers를 키로, 값은 {Authorization : "KakaoAK 자신의 키"} 이렇게 객체로 구현하였다.

 

실행 결과
실행 결과

 

결과에 보이다시피 Data를 잘 가져오는 것을 확인할 수 있다.

 

이런 식으로 주어진 정보를 자신의 상황에 맞게 잘 변환하면 다양한 API를 활용할 수 있을 것이다.

728x90

댓글()

2022 SK ICT Family 신입 개발자 채용 챌린지 코딩 테스트 2차 후기 (불합격)

취업 과정|2022. 3. 20. 17:24
728x90

오늘 (2022.03.19 토) 2022 SK ICT Family 신입 개발자 채용 챌린지 코딩 테스트 2차를 봤다.

 

1차는 오전(10시 ~ 13시)에 시작해서 3시간 동안 봤지만 2차는 4시간이라서 그런지 오후(13시 ~ 17시)에 시작해서 4시간 동안 봤다.

 

문제 개수는 똑같이 4문제로 문제당 시간이 늘어나면 그만큼 난이도는 올라간다는 소린데 역시나 상당히 어려웠다.

 

이번에는 대체적으로 구현 문제가 나왔는데 구현이 이렇게 어렵다는 게 자괴감이 살짝 들긴 했다.

 

문제를 전반적으로 훑어보고 상당히 어렵단 느낌이 들자 목표를 두 문제로 잡았지만 계속 오류와 씨름하고 시간을 보내느라 결국 한 문제밖에 풀지 못했다.

 

어떤 느낌이냐면 푸는 방법은 알겠으나 막상 구현하려고 하니까 정확한 구현이 안되고 계속 부분적으로 오류(인덱싱, 순서 등)가 나서 풀릴 거 같은데 안 풀리는 문제였다.

 

조금 특이한 점은 1차 때는 코드 제출만 되는 거였지만 2차 때는 정확한 구현이 필요한 문제라 그런지 카카오처럼 코드를 제출하면 실제 테스트 케이스를 돌려서 불합 여부를 확인할 수 있었다.

 

원래 멘탈도 비교적 좋은 편인데 긴 시간 동안 푸는 방법도 알겠지만 지속적으로 부분 부분 오류가 나서 해결이 안 되니 상당히 힘들긴 했다.

 

2시간 동안 2문제에 대한 구현은 했으나 오류 때문에 정작 한 문제도 제출을 못하자 그만 포기할까 생각이 들었으나 이것도 경험이라 생각하고 끝까지 붙잡고 있으니 결국 한 문제는 풀긴 해서 다행인 것 같다.

 

끝나고 오픈 단톡방에서도 반응을 확인해보니 다들 어려웠단 분위기라 나만 어려웠던 게 아니란 안도감이 들어서 다행이었다.

 

0문제 투표가 없어서 그런지 투표한 사람도 적긴 한데 30% 정도가 두 문제, 나머지는 한 문제라 대규모 공채가 아닌 점을 고려하면 아마 합격은 어렵지 않을까 생각한다.

 

스스로 아직 많이 부족하다는 것을 체감하게 된 아주 좋은 경험이었고 자만 없이 꾸준히 노력해야겠다.

 

결과 메일이 도착하면 포스팅을 수정하도록 하겠다.

 

불합격 후기


 

1차보다 더 늦은 6일 만에 결과가 나왔는데 아마 난이도가 어려워서 합격 컷 기준을 잡는데 시간이 더 걸리지 않았나 싶다.

 

결과는 예상대로 불합격이었다.

 

결과 메일
결과 메일

단톡을 보아하니 2문제로 SK에 합격했다는 글을 보아 한 문제만 더 맞혔으면 합격했을 텐데... 란 아쉬움이 많이 남았다.

 

아예 손을 못 댄 것도 아니고 풀이 방법은 고안했으나 디테일한 부분에서 오류가 발생하여 풀지 못했기 때문이다.

 

시간도 많은 상황에서 차근차근 논리를 주석으로 정리하며 침착하게 각 조건을 정확하게 구현했으면 충분히 풀었을 텐데 긴 시간과 "어렵다"란 생각이 발목을 붙잡은 것 같다.

 

최근에 본 토스 뱅크 코테도 6문제 중에서 4문제를 풀 수 있었지만 2번 문제에서 딱 하나의 테스트 케이스를 통과하지 못하여 3문제 푼 점이 상당히 아쉬웠는데 지금 상당히 딜레마에 빠진 상황이다.

 

SSAFY 강의에 대한 복습과 프로젝트 진행으로 시간이 여유롭지 않은 상태에서 기본 실력으로 코테를 보려 했으나 한동안 준비를 안 해서 그런지 현재 디테일한 구현을 정확하게 못하는 것 같다.

 

그렇다고 코테에 신경 쓰기도 뭐한 게 SSAFY 시작 두 달 정도는 Front-End와 알고리즘 기본을 해서 시간적으로 여유가 많았지만 지금은 처음 접하는 Back-End를 나가서 여유가 전혀 없기 때문이다.

 

내일 보는 라인 코테의 결과를 보고 좀 더 시간을 써야 할지 아니면 기본적으로 SSAFY에서 알고리즘 진도를 나가는 시기에 디테일한 부분을 잡도록 해야 할지 결정해야 될 것 같다.

 

침착함과 디테일한 구현을 위한 정리를 하는 습관이 필요하다는 것을 뼈저리게 느낀 경험이었다.

728x90

댓글()