분류 전체보기76 콘서트 예매 시스템 개발 회고 지난 3주간 시나리오 기반 서버 구축을 진행했다. https://github.com/mybloom/hh_concert_java대기열 관련 백엔드 시스템 설계를 진행하고 변경에 유연한 코드를 위해 아키텍처와 테스트코드 작성하는 것을 배웠다.그리고 운영을 위해 필요한 로깅과 동시성 처리도 진행했다.가장 긴 시간을 할애한 것은 설계와 비즈니스 로직 작성이었다. 그러면서 이 시간에 변경에 유연하고 유지보수를 고려한 코드 작성하는 법을 익히고 싶었다.그러기 위해서는 아키텍쳐 지식도 있어야 하고 좋은 코드를 많이 보면서 지식을 어떻게 코드화하는지도 익혀야했다.1시간 남짓 설명을 통해 무엇을 공부해야하는지 파악하고 실제로 더 필요한 지식들은 스스로 익혀야 했었다.나는 만들면서 배우는 아키텍처라는 책이 도움이 많이 .. 2025. 1. 17. Java 비동기 프로그래밍 Thread를 구현하는 2가지 방법멀티스레딩 프로그래밍에서 사용되는 인터페이스1. Runnable 인터페이스 구현2. Callable 인터페이스 구현- Runnable은 return value가 없기 때문에 ExecutorService에서 비동기로 처리해도 문제가 없었다.- 하지만 Callable은 return value가 있고, Exception도 발생할 수 있으므로 ExecutorService에서 submit()을 할 때 해당 task가 완료될 때까지 기다리지 않으므로 ExecutorService는 결과를 직접 반환할 수 없다. 그래서 Future라는 특수한 result type을 반환하고, Future를 통해서 나중에 실제 실행 결과를 검색할 수 있다. Runnable & Callable Inte.. 2025. 1. 15. git rebase -i git rebase -i를 이용해 여러 커밋을 하나로 합치기 git rebase -i느 기본적으로는 커밋 순서 변경, 메시지 수정, 커밋 제거 등을 제공하는 기능입니다.여러 커밋을 하나로 합치려면, 합쳐지는 커밋에 squash를 지정해야 합니다. 🎯 예제: 최근 3개의 커밋을 하나로 합치기 (squash 사용)현재 커밋 로그:a1b2c3 Commit 5 - Fix bugd4e5f6 Commit 4 - Add feature Bg7h8i9 Commit 3 - Update READMEj1k2l3 Commit 2 - Refactor codem4n5o6 Commit 1 - Initial commit git rebase -i HEAD~3 실행 후 편집기 열림:pick a1b2c3 Commit 5 .. 2025. 1. 13. Java record record는 Java 14에서 도입된 기능으로, 불변 객체를 더 간편하게 정의record는 기본적으로 final 필드와 생성자, getter, toString, equals, hashCode 메서드를 자동으로 생성public record SuccessResponse(int status, T data) { } , SuccessResponse는 불변 객체로 T 타입에 대해 타입 안전성을 제공합니다. 생성자는 record에서 자동으로 제공됩니다 2025. 1. 7. 시퀀스 다이어그램 시퀀스 다이어그램이란 시퀀스 다이어그램은 특정 행동이 어떠한 순서로 어떤 객체와 어떻게 상호작용을 하는지 표현하는 행위 다이어그램 시퀀스 다이어그램 그릴 때 유념할 것백엔드 개발자로서 API의 시퀀스 다이어그램을 그릴 때 유념할 점을 정리해보면 아래와 같다. 다른 개발자도 비즈니스 로직의 설계와 흐름을 파악할 수 있도록 그리기도메인별 책임이 잘 드러나도록 도메인 중심으로 그리며, 추상적으로 그린다. (추상적: 구현 레벨이 표현되지 않아도 된다는 것)API 요청의 시작점이 사용자의 액션(curl) 일 때는, Actor로 사용자를 둔다.USER 측 뿐 아니라 SYSTEM (내부 스케줄러) 도 표현한다.동시성 제어가 필요한 리소스에 트랜잭션, 락 등의 표현을 추가해주어도 좋다.도메인별 책임이 잘 드러나도록 .. 2025. 1. 6. 항해플러스 백엔드 회고 1주차요일마다 해야 할 일을 주간 일정을 세워두고 진행해야 일정에 맞춰 과제를 해낼 수 있겠다. 2주차더 중요한 것에 시간을 투자하자2주차 수업은 아키텍처였으나 해결 과제는 선착순 신청개발과 통합테스트 작성이었다. 그리고 동일 유저가 여러 번 동일 강의를 여러 번 수강요청 하였을 경우 1번만 성공하는 것을 개발/검증하는 것을 하는 것이 과제였다. 그 과제를 처리하는 것이 주 임무였다. 월/화요일에 아키텍처 책을 사보면서 시간을 많이 잡아먹었는데, 아키텍처는 하루 아침에 알기도 어렵고 그냥 이렇구나 하면서 베스트프렉티스를 따라 패키지 구조를 잡고 나중에 이유를 공부하는 편이 좋았겠다. 요구사항 분석, TC작성이 1주차보다 나아졌다.이 부분은 항해에서 공부할 때, 꾸준히 발전시켜서 빠르고 정확하게 하는 연.. 2024. 12. 30. 테스트주도개발(TDD) 시작하기 테스트 코드의 필요성복잡한 요구사항들이 나열되어 있는 코드와 부족한 문서의 환경에서 일하면서 아래 고민을 하였다. 도메인지식을 잘 정리해 놓는다는 것은 무엇일까?현업에서 복잡한 요구사항을 정리하고 이를 제대로 구현했는지 테스트하는 과정에서 테스트 코드의 중요성을 다시 한번 깨닫게 되었다.포스트맨에서 여러 케이스에 대해 다양한 파라미터를 설정해 응답을 확인하면서, 테스트코드가 도메인 지식을 정리하는 수단이 되는지 물어본다면, "그렇다"라고 말할 수 있다.테스트 코드는 이런 상황에서 훌륭한 문서 역할을 할 수 있을까?테스트 코드가 중요한 내용을 빠뜨리지 않도록 돕는 역할을 한다고 생각한다.개발 범위를 놓치지 않기 위해 테스트 코드를 작성하면, 그 자체로 비즈니스를 완성하는 데 기여할 수 있다.도메인 지식을 .. 2024. 12. 22. JMeter GET, POST 요청 설정 부하테스트 도구 사용법 JMeter를 처음 사용해보면서 사용법 자체에 대한 검색도 많이 하게 되었습니다. JMeter 공식문서가 있으나 예시가 자세하지 않은 부분이 있어 방법을 찾고 적용하고 실행해보는데 시간이 꽤 걸렸습니다. 검색, 적용에 시간이 많이 걸렸던 부분 위주로 JMeter 사용법을 소개하려고 합니다. JSON 형식의 POST 메서드 API를 테스트할 때, 각 요청마다 다른 requestBody를 설정하는 방법에 초점을 맞추어 JMeter 사용법을 작성했습니다. 목차 부하테스트 공통 개념 JMeter GET 요청 JMeter POST 요청(json type) JMeter CLI모드로 서버에서 실행 JMeter 결과 확인 (Listener) 부하테스트 공통 개념 시나리오, 클라이언트 동시 가동수.. 2024. 2. 27. 암호화 개념 - 비대칭,대칭,SEED 외부 API와 통신할 때는 개인 정보를 보호하기 위해 암호화가 필요합니다. 진행한 프로젝트는 개인 정보 암호화를 위해 SEED 암호화를 사용하기로 했습니다. "SEED"는 블록 암호화를 지원하는 대칭 암호화 알고리즘 중 하나입니다. 이 알고리즘은 암복호화에 동일한 비밀키를 사용하므로, 양 측 간에 비밀키를 안전하게 전달하는 방법이 필요합니다. 이에 비밀키를 전달하는 방법으로 API통신을 통한 비대칭 암호화를 활용하기로 했습니다. API 요청에는 공개키를 전송하고, 상대측은 전달 받은 공개키로 SEED 공유키를 암호화하여 API 응답값으로 전달합니다. 이렇게 전달받은 암호화된 공유키를 공개키/비밀키 쌍의 비밀키로 복호화하여 최종적으로 공유하고자 하는 SEED 공유키(비밀키)를 얻어 개인정보 암호화에 사용합.. 2024. 2. 26. 웹 서버 성능테스트 - 병목 해결을 위한 단계별 테스트 회사 프로젝트 오픈 전 얼마만큼의 사용자를 처리할 수 있는지 확인하고 사업 목표 TPS를 달성하기 위해 성능테스트를 진행하였습니다. 성능테스트를 진행하기 전 시나리오를 작성하고 API를 최적화한 작업과, 테스트를 진행하며 병목 포인트를 찾아간 방법과 해결한 과정들을 적어 보았습니다. 웹 서버 성능테스트 과정 목차 어떤 시나리오를 선택 했는지 시나리오 내 API 최적화 작업 사항 부하테스트 도구 사용법 : 개념, 설정방법, 결과 확인 병목 포인트 발견 방법과 해결 과정 1 읽기용 시나리오 작성과 API 최적화 작업 시나리오는 읽기용과 쓰기용으로 나눠서 작성 1-1 시나리오 선정 예약하기 전 사용자가 상품을 둘러보기 전에 가장 많이 접근하는 3개의 페이지를 선정했다. 각 페이지는 여러 API로 이루어져 있다.. 2024. 1. 9. [Docker] Oracle 21c 버젼 설치 보호되어 있는 글 입니다. 2023. 5. 11. SQL 쿡북 스터디 회고 SQL을 좀 더 정확히 짜고 싶어서 최근 SQL쿡북이라는 책으로 스터디를 했다. 요즘은 데이터분석이라는 조직에서 관련 업무를 해서 백엔드가 쿼리를 많이 짤 일은 없는 추세인 것 같기도하다. 근데 이 공부는 계속해서 필요를 느꼈고 하고 싶었던 주제여서 시작하게 되었다. 이번 스터디를 하면서 느낀 것은 개발 공부는 이론 정리와 실습이 항상 함께 가야하는데 이론 공부로는 어떤 영감?을 얻는 단계인 것 같다. '막연히 쿼리를 더 잘 짜고 싶다, 결과 보장하는 쿼리를 짜고 싶다'는 마음으로는 더 잘되지가 않는다. 종종 개발 커뮤니티를 보면 해당 질문이 가끔 올라오고 답변으로 실무를 추천하는데 바로 투입되야하는 상황에서 실력을 바로 늘릴 수는 없다. 그러려면 때로는 지루하고 진득하게 이론을 볼 필요가 있는데 이번 .. 2023. 4. 19. 이전 1 2 3 4 ··· 7 다음