inblog logo
|
LifeLog, DevLog
    TIL

    TIL 20260109~10

    일정관리 API 구현 V2
    KYJTHEYJ's avatar
    KYJTHEYJ
    Jan 09, 2026
    TIL 20260109~10
    Contents
    일정관리 API 구현 V2

    일정관리 API 구현 V2

    20250108~09

    기존에 과제와 결은 비슷하나,

    • 검증과 예외처리의 구현
      (Validation 사용 및 스프링 예외처리 본격 활용) (V1도 하긴 했었다)

    • 세션 사용 및 기본적인 암호화 (JWT 와 시큐리티 사용은 추후)

    • 페이징 조회 추가해보기

    이 세 요소가 추가적으로 제공 되었다

    그냥 만들기 싫어서 나름 알고는 있는데 안 써본 개념을 사용해본다고
    이것저것 가져다 붙였는데 생각보다 시간을 많이 쓰고 있다

    중간에 간과한 사항이 하나 있는데, MVC 의 실행 순서다
    세션 사용을 하니 나름의 미허용 접근을 차단하려고
    (미 로그인에서 CRUD 일부 API가 동작하는 등)

    세션 체킹을 Aspect 로 도입했는데 아무리해도 원하는 처리가 안되었다
    그저 명시된 세션을 못찾는다는 에러만
    커스텀 익셉션 핸들러의 마지막 Exception.class 처리에 걸려서 나오고 있었다

    서비스단에서 세션을 갖고와서 처리하는 건 코드를 너무 길어지게 하고
    아예 원치 않기도 해서 (7계층 적으로 전혀 무관한 단에서 처리하는 게 맞나..?)
    컨트롤러에서 제어를 원했는데 왜 안되는건지 보니.. MVC 실행 순서가 문제였다

    Spring MVC

    현재 세션을 파라미터로 바인딩 해서 사용하는데 Aspect 가 실행 순서상 뒤였다
    인터셉터를 활용해서 커스텀 어노테이션을 붙였을 때만 작동하도록 고쳤다

    인터셉터는 스프링 프레임워크 사용 경험에서
    몇번 써봤었는데 기억이 잘 안나서 11일에 다시 포스팅 해야겠다


    20250110

    확실히 양방향이건 단방향이건 간에..
    둘 다 사용해서 처리해보아도 맘에 안들어졌다
    결과를 쿼리 메서드를 사용해서 꺼내오는 과정에서
    주인이 아닌 테이블에서의 N+1 조회 문제는 생각보다 자주 발생하는 것 같다

    JPQL로 직접 조인 매핑해줬다, 점점 JPA가 생각보다 괘씸해진다
    또 프로젝션 하기 위해 별도의 DTO 인터페이스가 생기는 점이
    싫은데 처음부터 응답 DTO를 프로젝션 하지 않는 한 방법이 없는 것 같다
    코드의 통일성을 나름 지키기 위해 그냥 인터페이스 DTO 프로젝션으로 처리했다

    페이징 처리는 생각보다는 간단했는데, 이거 하나로 다 되는건가 싶다
    예전에 비슷한 처리를 할 때 뭔가 했던 방식이 간단하지 않았던 건지
    기억이 날듯말듯 해서 우선 JPA 페이징 처리부터 되짚어 정리해야겠다

    여하튼 자꾸 핫픽스로 고쳐야 되는 버그들도.. 적당히 마무리 된 것 같다

    설계를 못하는 탓인건지 되짚어 보면 의도하지 않게 버그가 많이 나오는데
    이 부분은 충분히 처음부터 생각을 좀 하고 코드를 만드는 버릇을 들여야 할 것 같다

    아무 생각없이 로그인에 사용하는 이메일을 수정시엔
    중복값으로 처리되게 아무 장치 없이 해놓지 않는 등.. 좀 서두른 코드가 많이 나왔다

    일정관리 API V2


    Share article
    Contents
    일정관리 API 구현 V2

    LifeLog, DevLog - https://github.com/KYJTHEYJ

    RSS·Powered by Inblog