Portfolio

로우 레벨 시뮬레이션 애호가

그래픽스가 좋아요.
뭔가를 바닥부터 구현하는 데 익숙해요.
그래픽스와 보안, 게임 개발에 관심이 많고, 알고리즘 풀이와 CTF도 좋아해요.
뭐든 빠르게 배우고 적응하고 응용해요.


Stacks

  • C / C++
    레스터라이저, 레이트레이서 등 렌더링 엔진, 소켓 및 비동기 네트워크 프로그래밍, Unix pthread와 세마포어를 사용한 멀티스레드 프로그램 구현 경험, OOP 기반 클래스 설계와 RAII, 스마트 포인터 등을 이해하고 구현해본 경험이 있고, 가장 자신있는 언어입니다.
  • Docker Compose
    DB, Webserver, Redis cache등 각각의 Dockerfile 스크립트 작성 및 MSA 구축과 이미지 빌드, 배포가 가능합니다.
  • Unix Administration
    Daemon, Service에 관한 지식을 갖고 있고, Cron을 활용한 Job Scheduling, 서버 구축 등 다양한 활용이 가능합니다.
  • CD / CI
    테스트를 위한 bash/ sh 스크립트 작성과 활용에 능하고, Github Actions 스크립트를 작성하고 활용할 수 있습니다.
  • Graphics
    Vulkan, DirectX11, SFML API 사용 경험이 있습니다.
    기초적인 선형대수학 지식을 갖고 있으며, 간단한 셰이더 작성이 가능합니다.
  • others
    입문자 수준의 Python, Javascript, Java, C# 프로그래밍이 가능합니다.
    REST API를 이해하고, 요청과 작성이 가능합니다.
    심리학과에 다녔던 경험 덕에 여러 커뮤니케이션과 기초적인 통계학에 자신이 있습니다.
    포토샵, 동영상 편집, 영번역 경험이 있습니다.
    글쓰기에 자신이 있고, 오피스 툴 사용에 매우 익숙합니다.
Other others

인문학 전반과 영화, 애니메이션, 음악을 좋아하고, 이야기 나누는 것 또한 좋아합니다.
타투스티커 모델 촬영(피사체) 경험이 있습니다.
게임 좋아하고 잘 합니다.
디자인도 조금 합니다.
맞춤법의 달인입니다.

Projects

Galaxy Pong

3D Pong Webapp

2인 프로젝트입니다.

  • Docker compose를 활용해 Redis, DB, nginx, Django로 구성된 MSA를 설계/구축했습니다.
  • Github Actions script를 활용해 CD / CI 환경을 구축했습니다.
  • Bootstrap을 활용한 반응형 프론트엔드를 전체 웹사이트에 구현했습니다.
  • Three.js로 Pong Game의 당시 스펙과 로직을 그대로 구현했습니다.
  • 뒤의 배경 셰이더를 Three.js로 포팅했고, 최적화 후 별의 개수와 레이어 등을 재작업했습니다.
  • 유저와 매치 결과 등의 DB 테이블을 설계했습니다.
  • 게임 결과와 서버간 DB연동을 작업했습니다.

    처음 쥐어보는 스택과 기술에 큰 어려움을 겪었었지만 결국 모든 답은 커뮤니케이션, 공식문서와 검색에 있었습니다. 큰 성공 경험을 얻고 내외로 많이 성장했다고 생각합니다.

    link : https://github.com:haelime/GalaxyPong

IRC server

C++로 바닥부터 구현한 IRC server.

3인 프로젝트입니다.

  • github Actions와 Shell script를 활용한 CD/CI 워크플로우를 설계하고 구현했습니다.
  • RFC의 IRC 프로토콜을 분석 후 클라이언트 메시지 파서와 서버를 구현했습니다.
  • 효율적인 디버그를 위한 Logger 클래스와, KQueue를 활용한 비동기 네트워크 처리 로직을 구현했습니다.

    KQueue에 대한 자료가 별로 없었고, 이벤트기반 비동기 처리에 대한 이해에 어려움이 있었습니다. 직접 epoll, select, KQueue 순서대로 함수 예제를 작성하고 전공책을 사 읽는 등 컴퓨터공학 기반 지식을 살펴본 후에야 완전히 이해할 수 있었습니다.

    link : https://github.com/haelime/IRCPP

Raytracer in C

Simle Raytracer Engine.

2인 프로젝트입니다.

  • 직접 만든 Vector, Math, String 라이브러리를 사용해 Ray 투사와 반사 등 핵심 로직을 구현했습니다.
  • 원기둥, 평면, 삼각형의 충돌 지점 계산, 시점과 윈도우 컨트롤 로직 등을 담당했습니다.

    벡터 연산을 접해볼 기회가 없었기 때문에 dot product, cross product를 도대체 왜 하는지! 이해하기 어려웠습니다. 제대로 된 설명을 찾기 위해 오랜 시간을 소비했고, 영상의 Phong Shading을 구현하기 위해 논문을 직접 찾아보며 상당한 시간과 정성을 쏟았습니다.
    link : https://github.com/haelime/miniRT

Cubestrom

같은 알고리즘을 사용한 다른 셰이더입니다.

Graphics Library Shader Language (GLSL)로 구현한 Raymarch Algorithm 응용 셰이더.

fract 함수와 컬러팔레트를 이용해 적은 비용으로 아름다운 셰이더를 작성할 수 있었습니다.

많은 튜토리얼 영상들을 참고히며 그래픽스의 기초 지식과 구현 방법, 상당한 수학적 지식을 습득할 수 있었습니다.

링크 : https://www.shadertoy.com/view/lffGRj


SFML Particle simulation

GPU 가속을 이용해 300만 개 이상의 입자들에 유사 중력을 적용하는 시뮬레이션.

우연히 발견한 시뮬레이션 영상이 너무 예뻐서
이렇게 하면 똑같이 되지 않을까? 상상해가며 완전히 같은 시뮬레이션을 구현했습니다.

void update_physics(GravitySource& s)
{
	for (int i = 0; i < m_particles.size(); i++)
	{
		Particle& p = m_particles[i];

		float distance_x = s.getPos().x - p.pos.x;
		float distance_y = s.getPos().y - p.pos.y;

		float distance = sqrt(distance_x * distance_x + 
		distance_y * distance_y);

		float inverse_distance = 1.0f / distance;

		float normalized_x = distance_x * inverse_distance;
		float normalized_y = distance_y * inverse_distance;

		float inverse_square_dropoff = inverse_distance * 
		inverse_distance;

		float acceleration_x = normalized_x * s.getStrength() * 
		inverse_distance / 3;
		float acceleration_y = normalized_y * s.getStrength() * 
		inverse_distance / 3;

		p.vel.x += acceleration_x;
		p.vel.y += acceleration_y;
		p.vel.x -= p.vel.x * 0.01f;
		p.vel.y -= p.vel.y * 0.01f;

		p.pos.x += p.vel.x;
		p.pos.y += p.vel.y;

		va[i].position = p.pos;
	}
}

클릭한 곳으로 끌어당기는 기능을 구현한 함수입니다.

RGB중 B값을 255로 고정하고 겹칠 시 알파값을 높이도록 조정해, 푸르고 아름다운 색감을 유지하도록 구현했습니다.

C++와 SFML API를 이용했습니다.

링크 : https://github.com/haelime/SFML-Gravity-simulation


Others

지금 읽고 계신 이 웹사이트

제 발 밑에 있는 라즈베리 파이로 구축했습니다.
프로그래밍을 처음 시작할 적, 유닉스/리눅스 시스템 관리와 CLI환경을 능숙하게 사용하는 데 정말 큰 도움이 되었습니다.

홈서버로 기능하면서 모든 플랫폼에서의 개발환경 구축, 디바이스와 자료의 백업에도 중요한 역할을 하고 있습니다.

Discord Bots


간단하고도 귀여운 세 봇들이 지금 이 순간에도 열심히 활동 중입니다.
각각의 기능은 다음과 같습니다.

  • 질문을 입력하면 엄중하고도 절대적인 답변을 내려주시는 쳇봇.
  • YouTube, Soundcloud 등의 링크만 입력하면 통화방에서 같이 들을 수 있는 24/7 음악봇.
  • 통화 중 깜빡 잠드는 친구들을 위해 예약된 시간 후 추방해주는 암살봇.

    친구들과 지인들이 함께 사용하며 즐거워하는 서비스를 만들어 낸 특별한 경험이
    아직까지도 제게 큰 동기와 열정이 되고 있습니다.

Work in Process

  • Vulkan API를 사용한 Rasterizer Engine을 제작하고 있습니다.
  • 1인 인디게임 개발에 도전해보고 있습니다.
    아트, 음악, 프로그래밍, 시나리오, 기획 모두 약간의 경험이 있음에도 꽤나 도전적인 일이 될 것 같습니다.