목록분류 전체보기 (167)
코디잉
🧐 4주차 과제 1. 예약/결제 기능 : 레이어드 아키텍처 ➡ 클린 아키텍처로 전환하기2. 테스트 컨테이너로 테스트 가능하도록 구성 3. 기능별 통합테스트 작성 ✅ Keep (잘한 점 / 유지할 점)- 클린 아키텍처의 구조를 이해하고, 레이어드 아키텍처로 구현했던 패키지를 클린 아키텍처로 전환함- 대기열 토큰 로직을 설계하면서 예매 흐름(조회 ➡ 예약 ➡ 결제)의 전반적인 흐름을 제어하는 구조를 구성해봄 - 상태 기반의 접근 방식(READY / EXPIRED 등)을 적용하고, 클린 아키텍처 구조 내에서도 Validator 컴포넌트를 활용해 공통 검증 로직을 분리함 ❗️ Problem (문제점)- DB 제약조건(UNIQUE) 설정으로 인해 이미 EXPIRED 된 토큰이 있음에도 발급이 막히는 문제가 발생..
🧐 3주차 과제 : 비즈니스 로직 개발 및 단위 테스트 작성 1. 콘서트 조회 : 레이어드 아키텍처 2. 포인트 충전 기능 : 레이어드 아키텍처3. 예약/결제 기능 : 클린 아키텍처 ✅ Keep (잘한 점 / 유지할 점)- DDD구조로 콘서트, 포인트, 예약/결제 기능을 도메인별로 나누어 구현하면서, 레이어드 아키텍처 구조에 익숙해졌다. (기존에 항상 구현하던 방식이 레이어드여서 이미 익숙했지만..ㅎㅎ)- 예약과 결제를 하나의 흐름으로 구성하고, 단위 테스트도 서비스 레벨에서 꼼꼼히 작성해보며 테스트 작성 능력이 조금 더 익숙해졌다.- 스프링 스케줄러를 이용한 좌석 상태 변경 로직(EXPIRED → HOLD → AVAILABLE)을 설계·구현하고, 테스트해보며 시간 기반 로직도 경험할 수 있었다.-..
🧐 2주차 과제 : 선택한 시나리오 분석1. 시나리오 선택 및 github 프로젝트 Milestone 작성: 콘서트 예약 서비스 2. 분석 문서 작성 ◾ 요구사항 정의서 ◾ 시퀀스 다이어그램 ◾ 클래스 다이어그램 ◾ ERD ◾ 상태 다이어그램 ◾ 인프라 구성도 ✅ Keep (잘한 점 / 유지할 점)- 콘서트 예약 서비스를 선택하고, 시나리오를 구체화하여 요구분석을 작성하며 도메인 흐름을 명확히 잡으려고 했다.- 실제 구현을 생각하며, ERD, 상태/시퀀스/클래스 다이어그램을 정리했다. ❗️ Problem (문제점)- 상태/시퀀스/클래스 다이어그램을 작성하는게 막막해서 흐름을 잡는데 시간이 오래걸렸다.- 좌석의 상태 변화에 대해 고민이 많아 설계가 반복적으로 바뀌었다. (좌석 임..
🧐 1주차 과제 : TDD 기반 포인트 서비스 구현1. TDD기반으로 controller 및 필요한 코드 작성2. 각 기능에 대한 단위 테스트 작성3. 동시성 제어에 대한 통합 테스트 작성✅ Keep (잘한 점 / 유지할 점)- 테스트를 먼저 작성하고 실제 구현을 진행하는 TDD 흐름을 최대한 따르며 개발을 진행했다. (Red - Green -Refactor 사이클 기반)- 단위 테스트에서는 Mock 객체를 활용해 빠르고 명확한 단위 검증을 수행했고, 통합 테스트에서는 실제 구현체로 전체 흐름을 검증했다. - 예외 상황을 정의해보고, 동시에 여러 요청이 들어오더라도 순서대로 제어될 수 있도록 리팩토링했다. ❗️ Problem (문제점)- TDD 흐름을 처음 적용하다보니, 테스트 코드를 작성하는 것이 더..
해결 방법: 서비스에서 MariaDB 서비스 중지 후, MySQL80 서비스 실행해주면 된다. 이전에 MariaDB를 설치할 때, 3306포트를 사용하기 위해 MySQL 서비스를 중지했었다. 2023.10.24 - [DB/MariaDB] - MariaDB 설치 시 MySQL과 Port 충돌: The TCP Port you selected is already in use. 그리고 다시 MySQL 사용하려고 MySQL Workbench에서 password 입력했더니 Cannot Connect to Database Server 에러가 발생했다. 또는 이미 Database Server에 들어가있던 상태였다면, 아래와 같이 No connection established라고 나올수도 있다. (Unhandled ex..
https://school.programmers.co.kr/learn/courses/30/lessons/42889 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제) 실패율 = 스테이지에 도달했으나 아직 클리어하지 못한 플레이어 수 / 스테이지 도달한 플레이어 수 전체 스테이지 개수 N개, 현재 유저들의 멈춰있는 스테이지 번호가 담긴 stages 배열이 주어질 때, 실패율이 높은 스테이지부터 내림차순으로 스테이지 번호 담은 배열을 return 해라 접근방식) 1. 각 유저별로 멈춰있는 스테이지 번호가 담긴 stages 배열을 돌면서, 스테이지에 도달했으..
https://school.programmers.co.kr/learn/courses/30/lessons/133499 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근방식) 1. "aya", "ye", "woo", "ma" 연속해서 있으면 발음하지 못하므로, 문자열 중 ayaaya 처럼 연속된게 있으면 다음 걸로 넘어간다.(continue) 2. 해당 문자열에서 발음할 수 있는 단어가 있다면 replaceAll()을 사용하여 공백으로 바꿔준다. 3. 그 문자열의 공백들을 없애준다. (→ replaceAll(" ", "")) 4. 위의 처리를 끝낸 해당 문..
https://school.programmers.co.kr/learn/courses/30/lessons/17681 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근방식) 1. 배열의 길이 n만큼 반복문을 수행한다. 2. 정수 배열 2개의 각 숫자를 이진수로 바꾼다. 배열의 길이 n만큼 이진수의 길이를 맞춰줘야 하므로, n만큼 앞부분에 0을 채워준다. 3. n만큼 반복문을 수행하면서, 이진수의 각 자릿수를 비교하여 StringBuilder에 벽과 공백을 추가해주면 된다. 둘 중에 하나라도 1이면 벽이므로 #를 추가해주고, 둘 다 0이라면, 공백을 추가해준..
https://school.programmers.co.kr/learn/courses/30/lessons/138477 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제) 매일 1명의 가수가 추가되며, 그 가수에게 점수가 부여된다. 그 추가되는 가수가 지금까지 출연 가수들의 점수 중 상위 k번째 이내이면, 명예의 전당에 올라간다. 매일 1명씩 추가되는 것이므로 → 처음부터 k일까지는 모든 출연 가수의 점수가 명예의 전당에 오르고, k일 다음부터는 추가되는 가수가 기존 명예의 전당에 있는 가수보다 점수 높으면, 현재 가수가 명예의 전당에 올라가고, 그로 인해..
https://school.programmers.co.kr/learn/courses/30/lessons/142086 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제) 문자열 s에서, 각 문자 c에서 자신보다 앞에 나오는 문자 중 가장 가까운 자기와 같은 글자와의 거리차이 구하기 앞에 자신과 같은 문자가 없다면 -1 접근 방식) 1. 문자와 그 문자의 위치를 저장할 HashMap, 정답배열 int[] answer 생성 2. 문자열 s만큼 반복문 돌면서, 해당 문자가 → map에 없으면, answer배열에 -1 저장 → map에 있으면, 현재 위치 - m..