Profile
Name | 안예성 (YeSeong Ahn)
HighSchool | 부산소프트웨어마이스터고등학교 (2023.03 ~ , 재학중)
Phone | 010-4262-4755
코드의 품질과 효율성을 높이기 위해 끊임없이 개선합니다
팀원들의 아이디어를 이끌어내어 최적의 해결책을 도출합니다
기초를 단단히 쌓아 복잡한 문제도 단계적으로 해결합니다
빠르게 배우고 성장하며, 새로운 도전에 적극적으로 임합니다
Social
E-mail | [email protected]
Github | https://github.com/anys34
Tistory | https://anys34.tistory.com
LinkedIn | https://www.linkedin.com/in/anys34
Skills
- Java, Kotlin
- Spring Boot, JPA, QueryDSL
- Socket, Docker, MySQL, Redis
- EC2, S3, RDS, Grafana, Prometheus
Main Project
실시간 알고리즘 경쟁 서비스
IOJ (Insert Online Judge)
서비스 링크 - https://insert-ioj.com 깃허브 - https://github.com/Team-INSERT/IOJ_SERVER
2024.03. ~ 2024.11. (개발기간 - 24주)
프론트엔드 3명 디자이너 1명
백엔드 1명(참여)
실시간으로 아이템을 사용해 경쟁할 수 있는 온라인 저지 서비스입니다.
알고리즘 대회라는 경쟁 요소와 더불어, 상대방에게 영향을 미칠 수 있는 ‘아이템’ 기능을 추가하여 재미와 몰입도를 높이고 진입장벽을 낮추었습니다
🧑💻 역할 및 사용 기술
- 백엔드 - 100% 기여
- 자바 기반의 **Spring Boot(JPA, SecuGrity)**와 MySQL & Redis & Jwt 사용
- QueryDsl을 사용하여서 기존 비지니스 로직을 간소화
- 코드를 실행 및 컴파일을 샌드박스 환경으로 제공하기 위하여 Docker를 사용
- 안정적인 서버 환경 및 자동화된 배포를 위해 Jenkins & DockerHub & SpringCloudConfig를 사용하여 CI/CD 구축
- 실시간으로 유저들이 아이템을 주고받기 위해 Socket을 사용
- 컴파일을 해야 하는 서비스 특성상 서버의 리소스가 많이 사용되어 ELB를 사용하여 각각의 인스턴스(EC2)로 트래픽을 분산
- 대회를 진행하거나 트래픽 테스트(Jmeter)를 진행할 때 서버의 리소스를 확인하기 위해서 Prometheus & Grafana를 사용
- 프로젝트 리더
- 원활한 의사소통과 정보 공유를 위한 위클리 미팅 문화 정착
- 각 분야 팀 간 원활한 협업을 위해 의견을 조율하며 일정을 관리
- 계획 및 중간발표를 위해 PPT를 구성하고, 진행 상황과 목표를 효과적으로 발표
⚒️ 주요 작업
아키텍처

ERD

- AWS 비용 절감을 위해 dev와 prod로 환경과 서버를 분리
- 원활한 infra를 위해 Spring Cloud Config를 사용해서 properties를 관리
- 인스턴스 1개로 관리하고, 리소스가 많이 요구될 것 같은 경우 4개로 직접 확장하여 사용하고 있음. 추후 이점을 보완하기 위해서 AWS AutoScaling을 사용하여 개선 예정
문제 제출
컴파일 로직

- 사진과 같은 컴파일 로직을 사용하여 다양한 언어의 제출을 구현
- docker
- 샌드박스 환경을 만들어 보안을 강화
- 다양한 언어를 유연하게 제공
- 컴파일 라이브러리를 사용하지 않고 코드 컴파일을 직접 개발
- docker를 사용해 서버에서 컴파일 값을 도출할 수 있는 온라인 저지 도메인에 관심이 많아 직접 개발을 진행
- 추후에는 현재 개발된 것을 토대로 언어 실행 라이브러리를 만들 계획
언어 실행
- 다양한 언어를 실행하기 위하여 추상화를 사용
- Execution 추상 class를 만들고 각 언어의 자식들을 상속
- 여러 언어의 확장성을 가지게 됨
- 언어의 종류를 구별하지 않고 다형성을 사용하여 코드의 가독성을 향상
- ExecutionFactory를 만들어 각 언어의 객체 생성을 편리하게 함
- LanguageConfig를 이용하여 각 언어의 생성자를 registerExecution에 등록 후 ExecutionFactory를 사용하여 생성하는 객체의 Language를 확인 후 객체 생성

<Execution 다이어그램>
IOJ 대회 운영

<대회 운영 장면>
- IOJ 서비스를 사용하여 24.10.16에 **40+**명 규모의 교내 대회를 운영
- 교내 1, 2학년을 대상으로 6문제를 제출하여 50분 동안 대회를 끝마침
- 대회 만족도 조사 결과 **69.2%**가 만족을 표시하며 성공적으로 마무리
- 대회를 진행하면서 많은 개선사항과 오류 발생
- 대회가 종료된 후 팀원끼리 회고를 하였고 UI/UX 불편, 반복 제출, 순위 계산 등 다음과 같은 결과를 토대로 에러 픽스하여 개선