본문 바로가기

우아한테크코스

(25)
2023 woowacon(우아콘)을 다녀왔습니다 2023 우아콘을 참석했습니다. 컨퍼런스는 몇번 가봤지만 서비스 개발 회사에서 진행하는 컨퍼런스에 참석하는 것은 처음이었습니다. 우테코를 진행하면서 유투브에 올라와있는 우형 개발자분들의 세미나를 여럿 본지라 발표에 대한 기대감이 있었습니다. 총 7개의 세션에 참여했습니다. 대규모 트랜잭션을 처리하는 배민 주문시스템 규모에 따른 진화 프론트엔드 모킹 환경에 감칠맛 더하기 어제보다 오늘을 조금 더 똑똑하고 편하게! 수기 업무 플로 자동화의 3가지 사례 우아한 FinOps: 클라우드 비용과 성능 사이 낯선 서드파티와의 동행: 믿을 만한 배민커넥트 서버 구축하기 우형의 새로운 백엔드 개발 표준 ElastiCache 운영을 위한 우아한 가이드: 초고속 메모리 분석 툴 개발기와 레디스 운영 노하우 소개 발표 제목과..
기술 스택 선정의 절망편 - 젠킨스 (jenkins) 프로젝트를 시작하면서 초반에 기술 스택을 선정하는 회의를 가졌다. 다들 접해본 기술이 우테코 레벨 1, 2 를 진행하면서 사용했던 것들이 다라서 크게 고민했던 것도 없고 오래 걸리지도 않았다. 사실 이유를 솔직하게 적어보자면 기술 스택을 선정한 이유 중 가장 많았던 이유는 '이거밖에 안써봐서' , '써보고 싶어서' 였다. CI/CD 툴로 젠킨스와 깃허브 액션을 두고 고민하다 젠킨스를 선택하고 겪었던 어려운 점을 정리해보았다. 젠킨스를 선택했던 이유 젠킨스를 사용한 이유에 대해서 이렇게 정리를 했었다. 물론 이런 이유들도 있었지만 제일 큰 이유는 깃허브 액션은 전에 진행했던 미션에서 사용한 경험이 있기에 젠킨스를 사용해보고 싶어서였다. 젠킨스를 선택하고 힘들었어요 설치부터 힘들었던 기억 우리 서비스는 Ja..
최종 데모데이 회고 개발 공부를 시작하고 첫 프로젝트이자 기획부터 영업, 홍보, 런칭 및 운영까지 경험하며 정말 큰 애정을 가졌던 스탬프크러쉬를 마무리하면서 쓰는 회고이다. 실제 사용되는 서비스 최종 데모데이까지 가장 주요하게 해야 했던 일은 5차 데모데이 기간때 영업한 카페에 실제로 서비스를 런칭하는 것이었다. 최종 데모 스프린트의 첫 날인 9월 25일 팀원들과 함께 성수동 카페 파일론을 방문했다. 그리고 사장님과 점장님을 만나 서비스에 대해 설명드리고 피드백을 받는 시간을 가졌다. 실제 사장님의 피드백은 우리가 기획했을 때 고려했었던 부분도, 아예 생각지도 못했던 부분도 있었다. 많은 피드백을 받았고 그 중 가장 와닿았던 항목들을 정리해보았다. 사장 모드 일반 로그인 방식으로 변경 우리는 무조건 로그인은 소셜 로그인이 ..
시간은 금이다! 효율적으로 회의 준비하기 팀프로젝트 초기에 회고를 진행했을 때 다들 가장 힘들었던 것으로 꼽았던 건 늘어지는 회의시간과 회의 진행 방식이었다. 의미없는 회의시간이 10분이 된다면 팀원들이 7명이니 전체적으로는 총 70분의 시간이 낭비된다. 좀 더 효율적으로 회의를 진행할 수 있는 방식은 없을까? 나는 팀의 전체적인 흐름에 관심이 많은 편이다. 새로 생성되는 PR 이나 이슈를 다 들어가서 읽다보니 프론트엔드의 진행상황이나 고민하고 있는 점도 함께 파악이 가능했다. 그래서 스프린트마다 진행 상황 관리를 자연스럽게 맡게 되었다. (코드리뷰가 다 되어있는데 머지가 안되있는 PR 에 대해 머지를 해준다거나 완료되었는데 Close 가 안되어있는 이슈를 닫아주기도 자주 하였다!) 팀의 전체적인 흐름 파악이 되다 보니 우리 팀에서 스프린트 기..
Jenkins 와 Docker 를 사용해서 SpringBoot Application 무중단 배포하기 🔥 무중단 배포 도입 전 ✔️ 스탬프크러쉬의 인프라 상황 한 대의 클라우드 서버에서 운영 서버를 가지고 있으며, 외부의 한 대의 또다른 클라우드 서버를 배포 관련 서버로 사용중이다. 해당 서버에서는 젠킨스를 통해서 배포를 자동화하고 있다. ✔️ 배포 방식 현재 스탬프크러쉬는 jenkins 서버에서 아래의 4가지 단계로 배포를 자동화하고 있다. 우리가 트래킹하는 브랜치(main, develop)에 push가 되면, 젠킨스는 깃허브로부터 최신 코드를 가져온다. 최신 코드를 빌드해 .jar 파일을 만든다. .jar 파일을 운영서버로 전달한다. 운영서버의 run.sh 스크립트 파일 실행한다. 해당 스크립트 파일에는 spring boot application 을 실행하는 내용이 있다. ✔️ 배포 스크립트 아래는 ..
Docker 컨테이너에서 실행 중인 MySQL 데이터베이스 자동 백업하기 스탬프크러쉬가 실 사용자에게 서비스 되면서 DB 관리에 대한 중요성이 매우 실감되었다! 불가피한 이유로 DB 가 날아간다면 그야말로 재앙이 될 거라는게 예상이 되었다. 그래서 DB 를 자동 백업할 수 있도록 스크립트를 작성하고 스케줄러를 설정해두었다. 아래 방법은 데이터베이스 서버에서 진행해주었고 현재 데이터베이스 서버에서 docker container 를 띄워두고 해당 container 에서 mysql 서버가 실행되는 중이다. 1. 백업 파일을 저장할 폴더를 생성 mkdir /db_backup 2. 생성된 백업 폴더의 권한을 수정 chmod 755 /db_backup 3. 백업을 수행할 스크립트 파일 생성 vi /db_backup/backup.sh 4. 생성된 스크립트 파일의 내용 입력 # /bin/b..
스탬프크러쉬 테이블 구조 개선기 레벨 3 때 우리 팀은 테이블 구조를 바탕으로 엔티티를 만들기 위해 테이블 설계부터 먼저 진행했다. 구현할 기능이 많았고 다들 프로젝트가 처음이었기에 여러 의견을 나누면서 테이블을 설계했었다. 그렇게 총 20개의 테이블이 나오게 되었다. 더보기 그리고 기능을 구현하면서 테이블 구조를 변경할 필요성을 느끼게 되었다. 구조 상 큰 변경이 있던 두가지 경우에 대해서 이전의 테이블 구조가 나오게 된 배경과 왜 바꾸게 되었는지의 내용을 정리해보았다. Customer 테이블 상속 구조 제거 우리 서비스는 고객의 편리한 적립을 위해 전화번호만으로 임시 회원으로 가입이 되어 스탬프 적립이 가능한 기능을 제공하기 때문에 Customer 테이블을 Register 와 Temporary 로 나눌 필요성이 있었다. 그때 한창 ..
롬복(lombok) 의 @EqualsAndHashCode 는 필드로 비교할까 getter 로 비교할까 팀 프로젝트에서 롬복을 사용하기로 하면서 @Getter, @RequiredArgsConstructor, @NoArgsConstructor 등의 어노테이션을 많은 엔티티에 붙이게 되었다. 롬복은 Equals, HashCode 를 재정의해주는 @EqualsAndHashCode 도 지원해주기에 별다른 생각 없이 해당 메서드들의 재정의가 필요한 엔티티에 어노테이션을 붙이게 되었다. 그리고 코드 리뷰를 받았는데 롬복에서 제공해주는 @EqualsAndHashCode 는 값을 필드로 비교하는지 getter 로 비교하는지를 묻는 리뷰였다. 왜냐면 JPA 를 사용하게 되면서 지연 로딩과 프록시 객체의 개념을 학습하게 되었는데, 지연 로딩을 하면 연관 객체를 실제로 사용하는 시점(get() 을 해오는 시점) 에 데이터베이..