버블 정렬은 가장 간단한 정렬 알고리즘으로 꼽을 수 있다. 구현이 매우 간단하여 급하게 정렬 알고리즘이 필요할 때 요긴하게 쓰인다. 하지만, 시간 복잡도에서 최악의 경우 O(n^2)이 나오기 때문에 대용량 데이터에서 빠른 성능을 기대하기는 어렵다. 그럼에도 불구하고, 버블 정렬도 몇가지를 개선하면 나름의 성능을 끌어올릴 수가 있다. 이것을 주제로 발...
일어나야해! 넌 조선의 자존심이야! (2/2)
전편에서는 클라이언트와 서비스 방향이 중점이였다면, 이번 편은 조금 더 백엔드 중심적인 이야기이자 기술적인 내용을 담고 있다. 서버 이슈 Web Mediapipe 전편에서 말한 결과로 사용자 상태 분석은 백엔드에서 이뤄지게 됐는데, 사용자 상태 분석에 사용되는 프레임워크인 mediapipe는 Web과 모바일, Python을 지원했다. 백엔드가 n...
일어나야해! 넌 조선의 자존심이야! (1/2)
크래프톤 정글의 마지막 프로젝트로 로아(LOA, Learn On Air)를 개발했다. 로아는 온라인 학습 도우미를 목표로 온라인 학습에 집중하기 어려운 수강생들을 위해 집중도를 유지할 수 있게 도와주는 서비스이다. 이를 위해 비전 AI와 자연어 처리 AI가 사용됐다. 원래는 백엔드를 책임지는 역할이었으나 필요한 곳에 유동적으로 투입되어 개발하다 보니 ...
일반화와 추상화
CS 관련 도서를 읽을 때면 일반화라는 말과 추상화라는 말을 자주 접한다. 이전까지는 두 말의 의미를 “핵심적인 것만 본다” 정도로 이해했으나 두 의미는 비슷하면서도 달랐다. 또 어떤 개념을 일반화한다는 말이 나오면 이유는 모르겠으나 계속 눈에 밟혔다. 그래서 두 용어를 이번에 확실히 정리해 보려 한다. 일반화(Generalization) 일반화...
C(repas)로 그린 빨강-검정나무
자료구조에서의 연산은 크게 조회, 삭제, 삽입 등이 있다. 어떤 연산이 자주 일어나는 지에 따라 그에 맞는 자료구조들이 존재한다. 같은 특성을 보이는 자료구조일지라도 특화된 연산이 다르며, 알맞은 자료구조를 선택한다면 최적의 성능을 기대해볼 수 있다. 이번에 얘기할 주제는 Red-Black 트리이다. (줄여서) RB 트리는 이분 탐색을 자료구조화 시...
자료구조의 기본: 배열부터 해시 테이블까지
순서가 있는 여러개의 데이터를 저장할 때면 배열을 주로 이용한다. 또한 배열은 가장 기초적인 자료구조이기도 하며, 다른 자료구조의 기반이 되기도 한다. 이번에는 그러한 자료구조가 어떤 특징을 가지고 무슨 문제를 해결하기 위해 탄생했는지 알아보려 한다. 기본 자료구조 배열과 연결 리스트를 이해하면 다른 자료구조를 이해하고 구현하는데 도움이 된다....
프로그램 실행:데이터와 인스트럭션으로 하는 핑퐁
프로그램을 실행하면, 내가 의도한 동작을 진행할 것이다. GUI가 구성되어있다면, 의도한대로 화면이 출력되는 것을 확인하여 제대로 동작하는 것을 알 수 있다. 그러나 내부에서는 무슨 일이 일어나고 있는 지는 알 수가 없다. 도대체 내부는 어떻게 동작하고 있는 지, 하드웨어들이 무슨 일을 하고 있는 지 알아보자. 프로그램 실행 먼저 다음과 같은 아주 ...
디지털 입장권 JWT 인증 알아보기
NHN 아카데미 프로젝트 과정에서 음식 배달 플랫폼을 개발했었는데, 나는 여기서 회원 도메인과 인증을 맡아서 구현했었다. 회원, 주문, 결제 등이 있는 주요 백엔드 서버, 인증 서버, 배치 서버 등 여러 서비스가 나눠져서 구성된 MSA 형태를 가졌었는데, DB는 나누지 않아 완전한 MSA는 아니였다. 이러한 환경에서 인증을 맡아 구현하며 고민했던 내용...
[Java] class의 Inheritance는 상속이 아니다
개념 하나에 대한 여러 정보를 짧게 나열해보고 뒤에서 정리한다. 개념 객체(Object) 객체는 세가지 요소를 가진다. Identity(고유값) 한 객체는 다른 객체와 구별하는 특성을 가진다. Behavior(행위) 객체는 저마다 가지는 행위들이 있다. State(상태) 정의된 행위를 제공하도록 하는 객체 내부의 ...
[Java] Tic-Tac-Toe 구현부터 개선까지
이번에 Java공부를 다시 시작하게 되면서 Java에 익숙해지기위해 Tic-Tac-Toe 게임을 구현해보기로 하였다. 요구사항 * 게임 인원 : 2명 (사용자 2명 또는 사용자 1명 컴퓨터 1명) * 승리 조건 : 가로, 세로, 대각선 연속 3개 이어질 시 승리 * 게임 방식 : 한턴에 한번씩 표시하여 먼저 3개를 표시하는 사람이 이기는 방식....