CHEONG EUN SEOK

Java Backend Developer

About Me

앱 서비스 백앤드 개발 경험이 있고, 객체 지향적인 사고와 소프트 스킬 역량을 기르기 위해 노력하고 있습니다.
Spring Framework JPA Docker MariaDb Nginx Git React Native 등을 사용하여 프로덕션 서비스를 만들어본 경험이 있습니다.

새로운 것에 대해 적극적이고 빠르게 받아드립니다
최근 진행한 프로젝트에서도 많은 새로운 기술들을 빠르게 소화하고, JPA N+1 문제를 해결해 성능 개선을 한 경험이 있습니다. 최근엔 DDD Spring Security 메시징 큐(Kafka) 에 관심이 생겨 학습중에 있습니다.

유지 보수하기 좋은 유연한 코드를 만듭니다
객체의 책임을 분리하는 연습과 디자인패턴을 실제 코드 레벨에 적용하는 연습을 통해 유연한 코드를 만들고 있습니다. 더 나아가, 응집성을 높이고 결합력을 낮추기 위해 Layered Architecture에서의 DIP에 대해 이해하고, 풍부한 도메인을 만들기 위해 DDD의 전술적 패턴을 프로젝트에 적용하였습니다. BDD기반의 애플리케이션을 개발하면서 지속적인 리펙터링과 객체지향 생활체조 9가지 규칙을 지키며 클린 코드를 작성하고 있습니다.

소프트 스킬 역량을 향상시키기 위해 노력합니다
개발은 대부분 협업을 통해 이루어지기 때문에, 소프트웨어 분야의 전문성과 역량을 키우기 위해 소프트 스킬 역량도 중요하다고 생각했습니다. 따라서 1년 간 페어 프로그래밍을 지속적으로 진행하면서 소프트 스킬 역량을 개선하고 향상시켰습니다. 또, 협업하면서 나누었던 대화와 토론을 통해 평소에 보지 못했던 더 넓은 시야와 인사이트를 얻은 경험이 많습니다. 이와 같은 경험으로 개발자들과 이야기를 많이 나누려고 노력하고 있습니다.

꾸준함, 팀워크를 가장 중요한 가치관으로 생각합니다
꾸준함, 끈기는 성장에 좋은 밑거름이라고 생각합니다. 꾸준함을 유지하기 위해 notion에 학습한 내용을 정리하며 기억에 남은 포스팅을 따로 북마크 해두어 관리하고 있고, 개발 외적으로 6년 넘게 헬스를 하고 있습니다. 더 나아가, 개발 프로젝트 이외에도 국토 종주, 춤 동아리와 같은 다양한 팀 활동을 통해 팀에 대한 중요성을 잘 인지하고 있습니다. 좋은 팀워크로 하나의 목표를 갖는 팀은 좋은 결과물을 낼 수 있다는 것을 많이 느꼈습니다.

이러한 점을 바탕으로 항상 성장하는 개발자가 되기 위해 노력하고 학습하고, 경험하고 있습니다.

동료로서의 저의 매력과 팀원들의 피드백과 회고를 보실 수 있습니다⬇️

https://www.notion.so/joseph415/89a231c328d748b1a03fcbc5fed7cf63

Skill

Languages

  • Java, Kotlin

Frameworks / Libraries

  • Spring Boot, Spring Security, Spring MVC, Spring Data JPA, Spring Kafka
  • Junit5

Databases / ORM

  • Mysql, JPA

Web Server, devOps

  • Docker, Nginx

Projects

직고래

July.04 2020 - November.06 2020

직고래는 학교, 회사, 동호회 등 내가 속한 조직 내에서 구성원들과 중고거래를 할 수 있는 플랫폼입니다. 사용자가 조직을 생성해서 조직 코드를 통해 구성원을 초대하고, 구성원들끼리 거래합니다. 덕분에 사기 걱정 없이 거래할 수 있고, 따로 시간을 내지 않아도, 어딜 가지 않아도 본인의 행동반경 내에서 거래할 수 있습니다. 또한, 사용자의 시나리오를 분석했을 때 킬링타임 용도로 사용하는 사람의 비율도 높았습니다. 이런 니즈를 충족시키기 위해 SNS의 피드 형식으로 게시글을 제공했습니다.
거래를 수월하게 할 수 있도록 1:1 채팅 기능과 알림 기능을 제공하고, 구성원끼리 유대감을 형성할 수 있도록 전체 채팅 기능을 제공합니다.

Github

https://github.com/woowacourse-teams/2020-seller-lee-company

기술 적용기

https://github.com/joseph415/JIKGORAE-project-records

담당 업무 및 기여한 부분

  • 게시글 전체 조회 시 JPA 연관 관계에 의해 나타나는 N+1문제를 발견해 성능 개선
    • 100개의 게시글 전체 조회 시(findAll) 201번의 쿼리를 만들었던 애플리케이션을 3번의 쿼리로 줄이는 성능 개선을 함
  • 게시글 상세조회와 판매내역에 관한 HTTP API를 개발
  • 회원가입/로그인 개발(Spring Security, Kakao OAuth)
    • Form 형식의 로그인을 OAuth로 변경
    • Spring Interceptor 기반이었던 JWT 인증 로직을 Filter로 변경
  • 애플리케이션의 보안 취약점을 파악하고 보완함
    • XSS의 가능성을 발견해, Spring Security와 Nginx를 이용해 Response Security Header 를 추가함
      • 더 나아가, CSRF Token와 다양한 SSL 설정을 추가
      • Nginx를 이용해 Https 를 적용
    • 다른 팀 서비스와 다르게, SSL server 등급을 측정할 수 있는 사이트에서 가장 좋은 스코어 획득
  • docker 컨테이너와 Nginx를 이용해 무중단 서버 배포 구현
    • Blue-Green 방식의 배포전략을 사용해 무중단 배포 스크립트 작성
    • Nginx 리버스 프록시 이용
  • React-Native(TypeScript)를 이용해 모바일 애플리케이션의 컴포넌트와 스크린을 개발
    • 닉네임 수정, 게시글 상세 조회, 태그, 판매상태 등 컴포넌트, 스크린 개발
  • Skill Keyword

    Spring Boot Spring MVC Spring Security Spring Data JPA MariaDB Docker Nginx HTTPS React Native TypeScript

Experience

네이버웹툰 Internship

Kr Tech, server develop Internship

July 2021 - August 2021

네이버웹툰(한국웹툰) 서버개발 인턴십을 8주간 진행하여 수료하였습니다.

인턴십 업무

  • 동기식 API를 kafka를 이용해 비동기 메시징 모델로 변경
    • kafka 설계
      • broker, producer, consumer, message 설계
    • producer, consumer 성능 테스트
    • 빌드/배포 시나리오 작성(docker, helm chart 이용)
  • kafka 적용을 통해 분산 환경에서 생겨날 수 있는 문제 해결
    • 여러 partition 환경에서 나타나는 messaging 순서 문제
    • Transaction 관리(즉시 rollback vs 사후 처리)

인턴십을 통해 느낀 것

  • 항상 명확한 기준과 타당한 근거를 찾을 것
  • kafka를 적용할 때, 분산 환경에서 주의할 점

좋아보이는 것을 무작정 적용하기보단, 현재 상황에서 타당한 것인가? 에 대한 고민이 우선적이여야 함을 알게해준 기간이였고, 평소 DDD에 관심이 있어 MSA같은 분산 서비스에 관심이 있었는데, kafka를 적용하면서 분산환경에서 생길 수 있는 문제점들(partition 환경에서 나타나는 메시지 순서, Transaction 문제) 에 대해 깊게 고민해볼 수 있는 기회가 될 수 있어 개발자로서 좋은 성장을 할 수 있었습니다.

우아한테크코스

Java Web Backend Course

February 2020 - November 2020

미션 기반(작은 프로젝트)의 코드리뷰 중심, 소통과 협업 위주 학습, 현장 중심 교육을 바탕으로 미션 기반의 자기주도 학습을 진행합니다. 페어 프로그래밍과 팀 프로젝트를 통해 협업 역량을 강화하고, 현직자의 코드리뷰를 통해 클린 코드 역량을 향상시킴으로써 현장형 인재로서의 성장을 도모하는 교육입니다.

우아한테크코스 Learning 저장소

https://github.com/joseph415/woowacourse-learns

우아한테크코스를 진행하면서 다음과 같은 역량을 키웠습니다.

Java

  • 자바 프로그래밍 언어에 대한 기본 문법을 익히는 연습을 함
  • 객체의 책임분리에 집중하며 프로그래밍을 함
  • 디자인 패턴을 적용해 유지보수에 좋은 코드를 작성할 수 있도록 연습하고, 읽기 좋은 코드의 중요성을 파악하고 클린 코드를 작성하도록 노력함
  • 자신이 구현한 코드에 대해 단위 테스트와 리팩터링하는 경험을 함
    • BDD방식을 이용해 비즈니스 요구사항을 잘 파악할 수 있도록 작성하는 연습을 꾸준하게 함

Web Programming

  • Spring Framework 기반으로 애플리케이션을 개발하는 경험을 통해 Spring에 대한 지식을 습득하고, JPA에 대한 이해를 높임
    • Spring과 Spring Boot 가 추구하는 목표와 차이를 파악하고, Spring 모듈(MVC, Security)의 아키텍처를 학습하고 코드레벨에서의 동작 과정을 이해
  • REST 에 대한 이해도를 높임
  • BDD 방식을 이용해 TDD, ATDD 기반의 애플리케이션을 개발하면서 TDD의 장점을 직접 느껴봄

Team Project

  • 응집성을 높이고, 결합력을 낮추기 위해 Layered Architecture에서의 DIP에 대해 이해하고 적용함
  • 풍부한 도메인을 만들기 위해 DDD의 전술적 패턴을 프로젝트에 적용함
  • 프로젝트 관리, 배포 자동화 등의 경험을 함
  • 팀원간의 소통, 협업, 회고하는 경험을 통해 소프트스킬의 중요성을 느낌
  • 일반 사용자가 사용할 수 있는 성격의 프로젝트를 만듬

Was & Refactoring

  • 팀 프로젝트에서 구현한 서비스를 운영하고 유지보수하는 경험을 함
  • 간단한 웹 서버를 만들어 보는 경험을 통해 HTTP에 대한 이해도를 높이고, 레거시 코드를 리팩터링하는 경험을 함

📹 Tecotalk : 크루들에게 지식을 공유하는 방법

발표 주제 : ARP Protocol

ARP Protocol : https://www.youtube.com/watch?v=KMEPEdsK71I&t=0s

우아한테크코스를 통해 느낀 것


이론 중심의 학습을 주로 했던 학교 수업과는 다르게, 우아한테크코스에서 현장에서의 필요한 문제해결 능력을 기를 수 있었습니다.
여러 기술을 학습하며 적용해보고, 애플리케이션의 성능개선을 했을 때의 기쁨은 개발자로서의 얻을 수 있는 즐거움이 무엇인지 알게 해주었고, 팀 프로젝트에서 함께 문제를 해결해 나가는 과정을 통해 대화와 토론으로부터 많은 인사이트가 도출된다는 것을 알았습니다. 이런 경험은 제게 소프트 스킬의 중요성을 알게 해주었습니다.

본 교육과정을 진행하면서, 프로그래밍에만 몰두하는 시간을 통해 좋은 개발자로 성장할 수 있었습니다.

Education

홍익대학교

컴퓨터공학

March 2015 - Present

자료구조, 알고리즘, 운영체제, 데이터베이스, 네트워크 등 다양한 computer science 에 대해 학습하였습니다.