Javascript와 같은 동적 타이핑 언어와는 다르게

Java는 변수 선언 시 타입 명시해줘야 함

lombok에서 제공하는 키워드 val var

 

val

// final List<String> strs = new ArrayList<>();
val strs = new ArrayList<>();

 

var

val에서 final 제거된 것

PK 타입을 생각해보자

 

int (4바이트)  vs  bigint (8바이트)

  • id 값이 약 43억이 넘어가는 아주 큰 DB -> bigint형 사용
  • 약 43억 이하의 DB -> int형이 효율적
    • int형은 bigint형에 비해 약 10% 이상의 디스크 용량 절약 가능
  • 향후 규모가 커질 경우? bigint형 사용
    • 대량의 데이터를 int형에서 bigint형으로 바꾸는데 많은 시간이 걸림

 

auto increment  vs  UUID(Universally unique id)

  • auto increment는 키를 예측하기 쉬움
    • SQL Injection과 같은 공격에 취약
  • 여러 DB가 있는 분산환경
    • 동기화가 되어있지 않다면 duplicate key 발생 확률이 높음
  • UUID를 사용하자
    • UUID 생성으로 인해 insert 할 때 시간이 더 많이 걸림
    • 128비트 데이터로 충동 가능성이 굉장히 낮음
    • 자바 5 부터 지원

1 회원 가입 / 로그인

1.1 랜딩페이지

  • 비로그인 시 랜딩페이지
  • 시작하기 버튼을 누르면 회원가입 페이지로 넘어감

1.2 회원가입 화면

  • 동네선택, 휴대폰 번호 인증, 닉네임, 프로필 사진 입력 후 가입
    • 휴대폰 번호 unique
    • 닉네임 필수
    • 프로필 사진 선택, 미등록 시 기본 이미지 제공
  • 회원가입 시 USER 권한 부여
  • 가입완료 시 메인 화면으로 넘어감
  • 추가 기능: SNS 가입 (Not started)
  • 추가 기능: 가입 시 이메일 인증 과정 (Not started)

1.3 로그인 화면

  • 로그인은 토큰 기반 인증 - JWT 활용
  • 휴대폰 번호 인증, 시작하기 버튼을 누르면 메인 화면으로 넘어감
  • 휴대폰 번호 변경 시 이메일 인증과정
  • 추가 기능: SNS 로그인 (Not started)

 

2 상품

2.1 상품 목록 조회

  • 로그인 시 보이는 메인 화면
  • 상품 목록 조회 - 무한 스크롤

2.2 상품 등록

  • 메인 화면에서 + 버튼을 누르면 상품 등록 화면으로 넘어감
  • 사진 업로드, 제목, 카테고리, 거래 방식, 가격, 설명, 거래 희망 장소 입력
    • 제목, 카테고리, 설명 필수
    • 사진 크기 20MB 이하
    • 사진 편집 기능 제공 - 자르기, 회전, 그리기
  • 거래방식 - 판매하기, 나눔 하기
    • 추가 기능: 바로 구매 (Not started)
  • 추가 기능: 상품 등록 시 브랜드 입력 (Not started)

2.3 상품 상세 조회

  • 보이는 정보
    • 상품 - 사진, 제목, 카테고리, 게시 시간, 설명, 거래 희망 장소, 채팅 수, 관심 수, 조회 수
    • 유저 - 프로필 사진, 닉네임, 동네, 매너온도
  • 게시 시간
    • 표기 방식 - n초 전, n분 전, n시간 전, n일 전, n달 전, n년 전
    • 끌올 시 끌올 + 게시 시간으로 표기
  • 상품 상태
    • 판매중, 예약중, 거래완료
    • 예약중, 거래완료 상태일 경우 재목 앞에 문구 표시
  • 동일한 판매자의 다른 상품 목록 보여줌
    • 닉네임 + 님의 판매 상품 버튼
    • 버튼 클릭 시 판매자의 상품 목록 조회 화면으로 넘어감
  • 관심 목록 추가 삭제 가능
  • 가격 제안하기 버튼을 누르면 가격 제안하기 화면으로 넘어감
  • 채팅하기 버튼
  • 추가 기능: 장바구니 담기 (Not started)

2.4 판매자의 다른 상품 목록

2.5 관심 목록 추가 삭제 기능

 

3 마이

3.1 마이 페이지

  • 메인 화면에서 나의 당근을 누르면 보이는 페이지
  • 프로필 보기, 거래 내역 조회, 관심목록, 설정으로 랜딩 가능

3.2 프로필 상세

  • 마이 페이지에서 프로필 보기 버튼을 누르면 보이는 화면
  • 프로필 수정 기능 제공 - 사진, 닉네임 변경 가능
  • 매너온도 표기
  • 판매 내역 보기 버튼

3.3 나의 판매내역

  • 판매중, 거래완료, 숨김 상품 목록 조회 가능
  • 끌어올리기 버튼을 누르면 상품 게시 시간 수정
  • ... 버튼을 누르면 상품 상태 변경, 게시글 수정, 숨기기, 삭제 가능
  • 상품을 누르면 상품 상세 페이지로 이동

 

4 검색

4.1 상품 검색 기능

  • 키워드 입력 후 검색
  • 상품 노출 로직 고민 (Not started)
  • 검색 결과 화면에서 필터 기능 추가: 카테고리 제한, 가격 범위, 동네, 정렬
  • 정렬 기준: 정확도순, 최신순, 고액순, 저액순, 등

 

5 알람 기능

5.1 알림

  • 푸시 메시지 발송
  • 활동 알림
    • 관심 목록에 있는 상품의 가격 변동이 있을 경우 알림
    • 관리자 수동 알림
  • 키워드 알림
    • 알림 키워드 설정
    • 키워드가 포함된 상품이 등록된 경우 알림
  • 채팅 알림
  • 추가 기능: 배송 알림 (Not started)
    • 구매자가 장바구니 상품 결제 완료 시 판매자에게 알림 
    • 판매자가 상품 배송 보낸 경우 구매자에게 알림

 

6 배지

6.1 활동 배지

  •  이벤트 수행 완료 후 활동 배지 지급

 

7 매너온도

7.1 평가

  • 거래 완료 후 서로 매너 평가
  • 매너온도 로직 고민

 

8 채팅

8.1 채팅

  • 1:1 채팅 기능

 

9 추가 기능: 결제 (Not started)

9.1 결제

  • 장바구니 상품 결제
  • 결제 시스템 필요
  • 결제 완료 후 판매자에게 배송 요청
    • 판매자에게 1:1 채팅으로 결제 정보 전달

 

10 추가 기능: 배송 (Not started)

10.1 배송

  • 바로 구매 상품 주문이 결제된 경우 판매자는 상품 배송을 해야 함
  • 택배 배송 시스템 연동을 통해 택배 조회 기능 제공

독립적으로 실행 가능한 애플리케이션을 “서비스”라고 부른다.

1개 이상의 “서비스”와 “공유 인프라”가 모여 하나의 “시스템”을 구성한다.

 

주문요청 API

  1. 요청값 검증 (애플리케이션)
  2. 주문 요청 (애플리케이션)
    • 주문 데이터 생성 (도메인)
    • 주문 데이터 검증 (도메인)
    • 주문 데이터 저장 (도메인)
  3. 주문 결과 처리 (애플리케이션)
  4. 응답 (애플리케이션)

서비스에 대한 플로우나 흐름을 제어하면 애플리케이션 비즈니스
도메인 단위에서 생성/변경/소멸의 라이프 사이클을 가지면 도메인 비즈니스

 

'Web Programming > SPRINGBOOT' 카테고리의 다른 글

아키텍쳐  (0) 2023.08.18
[Kotlin] kapt(kotlin annotation processing tool)  (0) 2023.08.18
장애 탐지 및 알람  (0) 2022.11.24
Spring Elk 연동  (0) 2022.11.17
ELK 설치  (0) 2022.11.16

1. 모노리스

가장 단순한 단일 프로젝트

의존성 관리 힘듦

하나의 컴포넌트에 오류 발생시 관련 서비스들 모두 장애

 

2. 멀티 모듈을 layer 별로 구성(core, service, api 등) -> 모노리스(하나의 jvm)

패키지 의존성 관리에 신경써야함

도메인 간 분리가 어려울 수 있다. 해당 layer 의 도메인이 다른 layer 의 도메인과 어떻게 이어지는 지 모를 수 있다.

 

3. 멀티 모듈을 도메인 별로 구성하지만 -> 모노리스(하나의 jvm)

프로젝트가 서비스 단위로 나뉨

새로운 서비스 추가시 모듈 새로 생성해서 작업 분리된 환경에서 개발 가능

 

4. 멀티 모듈을 도메인 별로 구성 -> msa(여러 jvm)

서비스 간 의존도 가장 낮음

서비스 scale up 하기 용이함

서비스 간 통신에 신경써야함

 

 

 

'Web Programming > SPRINGBOOT' 카테고리의 다른 글

멀티 모듈  (0) 2023.08.18
[Kotlin] kapt(kotlin annotation processing tool)  (0) 2023.08.18
장애 탐지 및 알람  (0) 2022.11.24
Spring Elk 연동  (0) 2022.11.17
ELK 설치  (0) 2022.11.16

https://tech.kakaopay.com/post/mock-test-code/

Kotlin에서 Annotation처리를 위해서 KAPT(Kotlin Annotation Processing Tool)을 제공

Kotlin은 kotlinc로 컴파일되기 때문에 기존에 Java로 작성된 Annotation Process로는 Kotlin의 Annotation이 제대로 처리되지 않음

kapt 사용 시 호환성에 주의🚨

사용하는 library가 kapt를 지원하는지 확인해야함

 

plugins {
    val kotlinVersion = "1.8.21"
    kotlin("kapt") version kotlinVersion
}

val queryDslVersion = "5.0.0"

dependencies {
    //annotationProcessor -> kapt
    //annotationProcessor("com.querydsl:querydsl-apt:${queryDslVersion}:jakarta")
    kapt("com.querydsl:querydsl-apt:${queryDslVersion}:jpa")
}

 

'Web Programming > SPRINGBOOT' 카테고리의 다른 글

멀티 모듈  (0) 2023.08.18
아키텍쳐  (0) 2023.08.18
장애 탐지 및 알람  (0) 2022.11.24
Spring Elk 연동  (0) 2022.11.17
ELK 설치  (0) 2022.11.16

+ Recent posts