Giter Site home page Giter Site logo

akkin-be's Introduction

서비스 소개

main

최근 인스타그램 등 SNS를 통해 무지출 챌린지에 참여하는 MZ 세대들이 증가하고 있습니다.

무지출 챌린지 유행 전에도 "거지방" 이라는 카카오톡 오픈채팅방을 통해 다양하고 재미있는 돈 절약 방법들이 공유됐습니다.

우리 스르륵 팀은 이 둘의 특성을 합친다면 사람들이 더 창의적이고 재미있는 방법으로 무지출 챌린지에 참여할 수 있다고 생각해 아낀거지 서비스를 개발하게 됐습니다.

1차 피드백

주간, 월간 통계는 서비스의 목적에 맞지 않음

사실 기반의 가계부 서비스가 아닌, 허구 기반으로 절약 방법을 공유하는 서비스라 통계를 적용하긴 적합하지 않음

통계 기능을 제거하고 더 다양한 카테고리를 적용하는 방향으로 결정 출시 후, 통계에 대한 요구가 있다면 그때 적용하기로 결정

issue & 트러블슈팅

apple oauth 가 동작하지 않는 이슈

apple 계정과 oauth 연동을 진행하면서 백엔드 직렬화 라이브러리인 ObjectMapper와 호환이 되지 않는 이슈 발생

원인을 분석하니, 매핑에 사용되는 id_token 정보를 한 번 더 base64로 인코딩 하면서 발생한 문제 IOS에서 id_token 을 원문으로 보냄으로써 해결

구두를 통한 커뮤니케이션 과정에서 혼동이 생겼기 때문에. 로그인 과정을 시퀀스 다이어그램으로 재정리

akkin-be's People

Contributors

brorica avatar

Watchers

 avatar

akkin-be's Issues

1차 피드백

1. build.gradle

[1] OpenFeign

implementation 'org.springframework.cloud:spring-cloud-starter-openfeign

이거는 HttpURLConnection, RestTemplate, OpenFeign, WebClient가 있는데 이중에 OpenFeign을 사용한 이유가 무엇인가요?


[2] JWT

implementation 'io.jsonwebtoken:jjwt-jackson:0.11.5'

이거는 jjwt의 gradle 항목을 보면 3개의 의존성이 추가하라는데, 이거 하나만 사용하는 이유가 있나요?


[3] Jackson

implementation 'com.fasterxml.jackson.core:jackson-databind:2.14.2'

이거도 추가한 이유가 있나요?


[4] MySQL, H2

implementation 'mysql:mysql-connector-java:8.0.33'
runtimeOnly 'com.h2database:h2'

이거는 implementation, runtimeOnly, testImplementation, testRuntimeOnly에 대해 검색해보고, 다시 적용해보면 좋을 것 같아요~


[5] 들여쓰기

	implementation 'mysql:mysql-connector-java:8.0.33'

    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testCompileOnly 'org.projectlombok:lombok'
    testAnnotationProcessor 'org.projectlombok:lombok'

	runtimeOnly 'com.h2database:h2'

이거 확인점요





2. 코드

[1] Create, Read, Update, Delete 각각으로 나누어진 컨트롤러들

현재 상태에서 굳이 나눌 필요가 있을까요??

[2] 전체 컨트롤러

컨트롤러 코드들을 다 확인해보니까 더 좋은 방법이 있을텐데, HttpServletRequest를 파라미터로 받는 이유가 있나요?

[3] 어노테이션 컨벤션

따로 지정된게 있나요? 순서가 서로 달라서 안정했으면 정하는게 좋아보입니다.

GulbiUpdateController

@RequiredArgsConstructor
@RequestMapping("/api/gulbis")
@RestController

LoginController

@RequiredArgsConstructor
@RestController
@RequestMapping("/api")

MemberService

@RequiredArgsConstructor
@Transactional(readOnly = true)
@Service

GulbiUpdateService

@RequiredArgsConstructor
@Service

GulbiCreateService

@RequiredArgsConstructor
@Transactional
@Service

[4] API 응답

지금 모든 요청에 대한 성공 응답이 200 OK로 보내질 것 같은데 맞나요?

그리고 이것도 응답 부분 코드 컨벤션이 중구난방이라 확인점요

[5] @Transactional

GulbiCreateService에 클래스 위에 @Transactional가 붙여있고, 메서드에서도 @Transactional이 붙어있네요

[6] 접근 제어자

Service에 있는 접근 제어자들 제대로 된건지 확인 요청이요

한 곳에서 private가 되어야 하는데, public으로 되어 있어서 다른 곳도 전부 확인해보면 좋아보입니다

[7] @Query

이거 쿼리문 보기 힘든데, SELECT - FROM - WHERE 이렇게 줄바꿈으로 해서 나눠주세요.
AND도 줄바꿈해서 구분하면 더 읽기 편할 것 같아요

[8] @EntityListeners(AuditingEntityListener.class)

제가 알기론 이걸 적용하면 Application.java에 어노테이션 하나 추가해야 동작하는 걸로 아는데 확인점요

redis 캐시를 ConcurrentHashMap 으로 변경

싱글 인스턴스, 싱글 WAS를 사용하기 때문에 리모트 캐시가 아닌 로컬 캐시인 HashMap을 적용할 것입니다.

인증에 사용되는 캐시이기 때문에 여러 사용자가 한 키에 접근할 일이 없어 HashMap을 사용해도 되지만, resize 과정에서 기존 액세스 토큰이 없는 것으로 처리될 수 있는 문제가 있기 때문에 ConcurrentHashMap 을 사용할 것입니다.

통계 기능 제거

  • 장난치는 것이 앱의 목적인데 통계 기능은 목적과 맞지 않단 피드백을 받음
  • 회의 결과 통계 기능은 제외하는 것이 서비스의 취지에 맞다 결정
  • 빈 공간은 다른 사람과 공유할 수 있는 피드같은 기능으로 대체할 예정

삭제 및 서버 시간 오류 해결

  • 삭제 시 500 response 발생
  • 서버 시간과 실제 시간이 다른 문제 발생

2024.01.08
마지막에 생성된 아낀 날짜가 과거라면, 해당 정보를 최신 정보로 보는 문제 발생

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.