Run-ing 10

[런닝 코스 공유 서비스] - 10. 공통 예외 처리

개발 요약에러 응답을 일관된 구조로 제공하기 위해 공통 예외 처리 구조 구현컨트롤러에서는 성공 응답만 책임지고, 에러 응답은 전역 예외 처리로 위임개발 내용1) BaseException모든 커스텀 예외의 부모 클래스RuntimeException 으로 언체크 예외ErrorCode 객체를 받아 예외를 구성/** * 모든 커스텀 예외의 부모 클래스 */public class BaseException extends RuntimeException { private final ErrorCode errorCode; public BaseException(ErrorCode errorCode) { super(errorCode.getMessage()); this.errorCode = errorCode; } public ..

[런닝 코스 공유 서비스] - 9. 공통 엔티티 - BaseEntity

개발 요약엔티티에서 반복적으로 사용되는 공통 필드들을 BaseEntity 로 만들어 각 엔티티가 이를 상속 받도록 구현했다.개발 내용1) BaseEntity엔티티 생성 시 중복되는 속성 id, uuid, createdAt, updatedAt 필드를 공통으로 관리하기 위해 생성했다.@Getter@MappedSuperclass // 해당 BaseEntity를 엔티티로 인식되지 않게 하며, 데이터베이스에 테이블이 생성되지 않게 한다.@EntityListeners(AuditingEntityListener.class) // Auditing 을 적용, Entity 의 변화를 감지하여 Entity 와 매핑된 테이블의 데이터 조작public abstract class BaseEntity { @Id @GeneratedV..

[런닝 코스 공유 서비스] - 8. 프로젝트 초기 설정

프로젝트 초기 설정Run-ing 프로젝트 초기 설정은 아래와 같다.개발 환경IDE: IntelliJ IDEAJDK: 17 (LTS)Vendor: Eclipse Temurin (AdoptOpenJDK HotSpot) 17.0.17OS: WindowsJDK 는 LTS(장기 지원 버전) 버전이고, Java 17 을 사용해 안정성과 실무 활용도를 고려했다.Spring Initializr 의존성Spring WebSpring SecuritySpring Data JPAPostgreSQL DriverH2 DatabaseLombokValidation초기 개발에서 필요한 최소한의 의존성만 추가했다. 기능을 구현하면서 필요한 의존성은 점진적으로 추가할 예정이다.Git Issue프로젝트는 GitHub Issue 를 기반으로 ..

[런닝 코스 공유 서비스] - 7. 1차 스프린트

1차 스프린트1차 스프린트 주요 내용은 아래와 같다.개발 속도에 따라서 내용이 변경될 수 있다.변경이 되면 업데이트 할 것이다.주요 개발 내용프로젝트 기본 세팅Spring Boot 프로젝트 초기 설정도메인 중심 패키지 구조공통 BaseEntity, 예외처리 구조GitHub Flow 기반 브랜치 전략회원 / 인증 기능회원가입 API로그인 APIJWT 기반 인증인증된 사용자 정보 조회 API게시판 기본 기능게시글 등록 API게시글 목록 조회 API게시글 단건 조회 API

[런닝 코스 공유 서비스] - 6. 개발 일정

개발 방식본 프로젝트는 애자일(Agile) 방식으로 개발을 진행한다. 애자일 방식은 고객의 변화하는 요구사항에 유연하고 신속하게 대응하기 위해, 프로젝트를 짧은 주기의 반복적인 단계(계획-설계-개발-테스트-피드백)로 나누어 진행하며 지속적인 협업과 개선을 강조하는 개발 및 프로젝트 관리 방법론이다.기능을 작은 단위로 나누어 빠르게 구현하고, 매 스프린트마다 회고를 통해 다음 개발에 반영하는 것을 목표로 한다.스프린트스프린트 운영스프린트 기간 : 1주 단위1차 스프린트 : 12.18 ~ 12.252차 스프린트 : 12.26 ~ 1.13차 스프린트 : 1.2 ~ 1.84차 스프린트 : 1.8 ~ 1.17스프린트 목표스프린트마다 명확히 목표를 설정한다.“작동하는 기능” 을 기준으로 완료 여부를 판단한다.매 스..

[런닝 코스 공유 서비스] - 5. API 명세서

API 란?Application Programming Interface 의 줄임말로 정의 및 프로토콜 집합을 사용하여 두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 메커니즘이다.API 문서에는 개발자가 요청과 응답을 구성하는 방법에 대한 정보가 들어있다.API 명세서참고자료https://velog.io/@director20844/API-명세-작성하기https://enjoyinjoanne.tistory.com/56https://cobinding.tistory.com/165

[런닝 코스 공유 서비스] - 4. 패키지 구조

패키지 구조이번 프로젝트에서는 패키지 구조 중 도메인형 구조(Domain-Driven Design) 을 사용할것이다. 도메인형 구조는 도메인에 초점을 맞추어 코드를 구성하는 방식이고, 관련된 기능들을 도메인 단위로 그룹화한다.선택 이유도메인 구조의 장점으로는 아래와 같다.특정 도메인의 코드를 한 곳에 모아두기 때문에 코드 탐색이 쉽다.도메인 단위로 개발하고 유지보수하기 용이하다.새로운 도메인 추가 시 다른 곳에 영향을 주지 않는다.따라서 도메인 구조를 선택하게 되었다.예시다음은 Run -ing 서비스의 패키지 구조 예시이다.추후 변경되면 업데이트 할 것이다.com.runing ├─ user │ ├─ controller │ ├─ service │ ├─ repository │ ├─ dto │ ..

[런닝 코스 공유 서비스] - 3. 컨벤션 & Git Branch 전략

프로젝트에서는 일관된 코드 품질 유지와 협업 흐름 및 협업 경험을 위해 코드 컨벤션과 Git 전략을 명확히 정의하고 이를 기반으로 개발을 진행할 것이다 코드 컨벤션은 가독성과 유지보수성을 높이고, Git 전략은 변경 이력을 명확히 하고 안정적인 개발 흐름을 유지하기 위해 사용한다. 이 글에서는 프로젝트 전반에서 적용할 코드 컨벤션, Git 브랜치 전략에 대해 설명한다.코드 컨벤션Google Java Style Guide 를 기본으로 사용한다.네이밍 컨벤션변수, 함수 : 카멜 케이스(camelCase)변수의 이름은 명사로 표기함수의 이름은 동사, 동사구문으로 표기 : 함수의 의미를 명확하게 알기 위해클래스, 인터페이스 : 파스칼 케이스(PascalCase)디렉토리, 패키지 : 스네이크 케이스(snake_c..

[런닝 코스 공유 서비스] - 2. ERD 설계

ERD 설계러닝 코스 공유와 커뮤니티 기능을 제공하는 Run -ing(가제) 의 요구사항을 분석한 뒤, 분석한 것을 기반으로 ERD를 설계했다.어떻게 설계했는지 ERD에 대한 설명을 해보려고 한다.공통PK : 주키 - BIGINT, 보조키 - UUID모든 테이블의 기본키를 auto increment 기반 BIGINT 로 통일했다.외부 API 및 URL 노출되는 식별자는 예측이 어렵기 때문에 보조키로 UUID 설계했다.테이블 간 관계는 조인,인덱싱 효율을 위해 BIGINT 로 연결했다.INT 대신 BIGINT 사용 이유INT 타입은 최대 약 21 억 개의 식별자 생성 가능하다.BIGINT 타입은 약 922 경으로 엄청 크다.데이터가 빠르게 증가하는 서비스(게시글, 댓글 등) 에서는 INT 가 한계에 도달할..

[런닝 코스 공유 서비스] - 1. 프로젝트 기획 및 설계

요구사항 분석주제러닝 코스 공유 서비스 및 러닝 커뮤니티프로젝트 이름가제 : Run -ing기능회원가입 , 로그인회원 가입회원 타입 : 일반 유저 / 관리자회원가입 입력 내용이메일(필수)한 번 설정 후 변경 불가중복 불가능비밀번호(필수)BCrypt 암호화이름(필수)닉네임중복 불가능설정 안하면 (러너 1 … )자동 설정전화번호(필수)형식 : 010-0000-0000지역(시/구)(필수)프로필 이미지(선택)로그인입력 내용이메일 + 비밀번호JWT, 시큐리티 이용해 구현카카오/네이버/구글 OAuth (향후 확장)사용자 프로필사용자 정보 조회본인만 가능이메일비밀번호 (수정 가능)이름 (수정 가능)닉네임 (수정 가능)전화번호 (수정 가능)지역(시/구) (수정 가능)프로필 이미지 (수정 가능)러닝 성향(총 거리, 페이..