Skip to content

jsungmin6/Lifoo-Server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 

Repository files navigation

Lifoo-Server

-[앱 개발 프로젝트] Lifoo-Server (2021.01.05 ~ 2020.04.03)

1. 소개

2. 기능

  • 게시판
    • 사진, 글 업로드 기능
    • 다양한 이모지 표시 기능(like 좋아요)
    • 게시물 필터 기능 (랭킹, 나의 게시물)
    • 신고 기능
  • 댓글
    • 신고 기능
    • 좋아요 기능
  • 회원
    • 카카오 로그인 (차후 클라 반영)
    • 랜덤 닉네임 생성 기능
    • 로컬 이메일 로그인
  • 알림
    • 내 게시물 관련 알림 기능 구현

3. 사용 기술

  • Spring boot, Spring MVC, Spring Data Jpa, Nginx, EC2, RDS, Native Query, Jpql, jwt

4. 학습

  • 패키지 구조

    • Service, Repository, Entity, Dto 패키지 구조에서 시간이 지남에따라 Entity별로 Service, Repository, Dto를 가지는 패키지 구조로 변경해 구조를 보다 알아보기 쉽도록 함.
  • 순수한 Entity 유지

    • Entity는 핵심 비지니스 로직과 매핑에만 신경 씀
    • API 맞춤 로직이 Entity에 영향을 끼치지 않도록 Dto를 만들어 대신 처리함.
    • Entity를 순수하게 가져가서 사이드 이펙트 방지
  • OSIV 종료 고려한 Service 계층에서 모든 비지니스 로직 처리

    • OSIV 전략은 트랜잭션 시작처럼 최초 데이터베이스 커넥션 시작 시점부터 API 응답이 끝날 때 까지 영속성 컨텍스트와 데이터베이스 커넥션을 유지 하지만 너무 오랜시간동안 데이터베이스 커넥션 리소스를 사용하기 때문에, 실시간 트래픽이 중요한 애플리케이션에서는 커넥션이 모자랄 수 있다
  • Controller, Service, Repository 역할 구분

    • Controller : Http 요청 받기, Http요청 반환, Validation, Service 로직 호출
    • Service : Transaction 안에서 비지니스 로직 처리, Repository 호출, Entity -> Dto 변환
    • Repository : Entity or Dto 반환, 생명주기가 다른 복잡한 쿼리 분리 처리
  • Spring MVC 패턴 이해와 사용

    • Spring MVC 프레임 워크 사용
    • 프론트 컨트롤러 패턴으로 공통 로직 처리
    • HttpMessageConverter 역할과 구조 이해
    • API 서버이기 때문에 http body에 바로 json을 넣어 반환하므로 ViewResolver은 사용하지 않음.
  • 서버 성능 최적화 고려

    • 지연로딩
      • 모든 toOne 관계를 지연로딩으로 설정. 쿼리 튜닝을 용이하게 함
      • 필요한 쿼리를 패치조인으로 처리해 1+N 쿼리 문제 해결
  • Dto 사용

    • Entity를 외부에 노출하면 Entity의 변화에 따라 API 스펙도 변하는 애로사항 발생
    • Entity를 모두 Dto로 바꿔 처리
  • 복잡한 쿼리 처리

    • From, Join 절의 Subquery사용시 Jpql의 한계 발생
    • Native Query 사용
  • 자바8 기능 연습

    • Optional
    • Stream (Entity -> Dto 변환)

5. UI

About

[MakeUS 6기] Lifoo-Server

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published