Skip to content

doorcs/apptive-devlog

 
 

Repository files navigation

About

  • 2025년 1학기 앱티브 백엔드 스터디
    • 무엇을 만들어 볼 것인가 -> 기술 블로그(플랫폼)
    • 프론트엔드 없이, 백엔드 API만 구현
      • 하지만 프론트엔드가 있다고 생각하면서 구현!
    • 2주에 한 번씩 모여서:
      • 각자 구현해 온 코드 리뷰
      • 다음 모임까지 구현해 볼 기능 정하기
      • 구현해 볼 기능에 필요한 최소한의 요구사항 정하기

Devlog

  • 기술 블로그 플랫폼을 위한 Spring Boot 기반의 REST API 서버
    • Spring Boot 3.4.4
      • Spring Web
      • Spring Security
      • Spring Data JPA
    • MySQL 9.2.0

좋았던 점

  • 백엔드 서버의 역할에 대해 고민해볼 수 있었음
    • DB의 중요성 (좋은 DB 설계)
      • 달리는 차의 바퀴를 바꿀 수 있는가? 처음부터 좋은 설계를 가져가는 것이 중요하다
      • PK 유추 가능성을 배제하기 위해선 Randomness 필요
        • Auto Increment(e.g. @GeneratedValue)는 실무에서 안 쓴다고 함
    • 예외 처리, 로깅
      • 사용자에게 예외 발생 이유를 너무 정확히 알려주는건 위험할 수도.. (그렇다고 아무런 정보도 안 주면 안 된다!)
      • 서버 단에서는 정확한 로그를 남기되, 사용자에게는 일반화된 정보를 제공
      • 왜 필요한지, 어떻게 하는 것이 좋을지를 느낌. -> 공부
    • Layer의 분리, Layered Architecture
      • Controller - Service - Repository
        • 상위 계층은 하위 계층에 대해 알아도 되지만, 하위 계층이 상위 계층에 대해 알면 안 된다!
        • 추상화, 추상화..
          • A 주소로 이런 정보들을 담은 요청을 보내면, 이런 정보들을 담아서 응답해주겠다
          • B 서비스로 이런 요청을 보내면, 이런 응답을 주겠다
      • 도메인 정보를 노출시키지 않도록 DTO를 사용해야 함!
  • Spring, Spring Boot Framework의 완성도에 놀람
    • 싱글톤 패턴 적용, 객체 생명주기 관리 및 의존성 주입, HTTP 요청/응답, 상태 코드, 트랜잭션, 비동기 지원, ...
  • 학습 동기부여가 됨
    • Spring Boot에서의 Best Practice가 뭘까?
    • 더 잘하고 싶다. 내가 봐도 코드가 너무 지저분하고 불편하다.

아쉬웠던 점

  • API 문서화 부족
    • ASCIIDOC, SWAGGER 같은 문서화 도구 사용법을 공부해보기
  • 테스트 코드의 부재
    • 아직 테스트코드를 어떻게 짜는지 모른다..
    • 추후에 개인적으로 공부해서 보충해보기
  • 데이터 검증 로직의 부재
    • @Valid를 통해 검증할 수 있을 것 같은데, 공부해보기
  • Java 언어 자체에 대한 이해도 부족
    • 예외가 어디서 터지는지, 어떤 예외를 던지는지, 어떻게 처리해줘야 하는지 잘 몰랐음
    • @RestControllerAdvice 어노테이션을 통한 예외 처리 배워서 적용해보기
    • Optional<> 객체를 전혀 활용하지 못하고 있다
    • 다음번에는 orElseThrow()를 적극적으로 활용해보기
    • 람다, 스트림 활용법도 공부하기
  • DB 지식 부족
    • DB 설계가 엉망임
      • 어떤 필드가 필요한지, 어떤 방식을 사용해야 할 지, ...
      • 연관관계? 단방향 | 양방향 | 연관관계 없이?
        • 실무에서는 연관관계 매핑을 잘 사용하지 않는다고 한다 (확장성 문제가 있음)
      • 어떤걸 Primary Key로 사용해야 할까?
        • UUID? ULID? Snowflake ID? TSID?
    • JPA 인터페이스에 대해 잘 몰랐음
      • save(), find*(), ...
      • 페이지네이션
        • Pageable 객체를 파라미터로 넘겨주면, 알아서 잘 최적화된 페이지네이션을 수행해준다고 함
      • 공부를 하자

Epilogue

  • 아직도 정말 부족하지만, 스프링 프레임워크에 대해 조금은 감을 잡은 것 같다
  • 다시 짜면 훨씬 잘할 수 있을 것 같다. DB 설계, DTO 설계부터 차근차근 다시 해 보고 싶다
  • 꼭 처음부터 다시 짜 보기!
    • 회원가입, 회원정보 수정, 탈퇴
    • 글 쓰기, 글 수정하기, 글 삭제하기
    • 댓글 달기, 대댓글 달기 (Depth는 1까지만)
      • 대댓글이 달렸는데, 원래 댓글이 삭제될 경우?

About

스프링 스터디

Resources

Stars

Watchers

Forks

Languages

  • Java 100.0%