코드 훔쳐보는 변태 코더
춤 좋아하는 백엔드 개발자(였으면 좋겠다)
분류 전체보기 (95)
23-01-13 TIL

오늘 진행한 것들 🤔

  • 토이프로젝트 진행
    • 게시글 출력/검색 관련 쿼리문 수정
    • 게시판 뷰 수정
    • 게시글 작성 뷰 구현
      • 토스트 UI 에디터 사용
      • 이미지 첨부 가능
      • 이미지 첨부 후 삭제 가능
      • 이미지 첨부 후 글에 같이 포함시키지 않을 시에 서버상 남은 잔여 파일 삭제 기능 구현
    • 게시글 조회 뷰 구현

게시판 _최종_최종_최최종_최2종_최종2_최종3___최최종종
토스트 UI 에디터를 적용시켰다.

 

토스트 UI 에디터의 훅 옵션을 이용하여 이미지 등록처리를 구현했다.

오늘 겪었던 문제 🤔

  • 생성자를 롬복으로 선언하지 않고, 따로 선언해 식별자 아이디를 생성자에 포함시키지 않고 dto를 엔티티 객체로 변환할 때 식별하지 못해 새로 엔티티객체를 생성하는 문제
    • 빌더패턴과 AllArgsConstructor 과 NoArgs를 롬복으로 선언해 주었을 때에는 생기지 않았으나 구조상 더 꼼꼼하게 변경하기 위해 생성자는 롬복사용을 피했더니 문제가 발생했다.
      • 프로젝트를 끝내고 객체지향에 관해서 한번 더 공부해봐야겠다. 

오늘 해결한 오류 🤔

  • 게시글을 검색할때 대소문자를 무시하지 않는 오류 -> lower()를 사용하여 해결 완료

오늘의 배운점🤔

  • 뷰를 좀더 꼼꼼하게 수정했습니다..
    • 크롬의 검사 탭을 활용하여 css를 정교하게 수정해서 이제 저도 딱히 뭔가 불편하지 않은 뷰를 구현할 수 있었습니다.
  • 게시판 외부 에디터를 적용시켰습니다.
    • 다행히 직전 프로젝트에서 이미 실행해 본 바 있었기에, 그대로 적용시켜 보았습니다.
    • 나름 직전에도 나쁘지 않게 적용시켰었는지, 그대로 긁어왔는데 오류 하나 없이 완벽하게 적용시킬 수 있었습니다.
    • 조금 걸리는 건 뷰어에서의 글씨 크기가 좀 불편합니다. 더키 우고 싶은데 제이쿼리로는 한계인 것 같습니다... 
    • 이전에는 게시글에 등록한 파일을 따로 제3의 중간연결 엔티티 객체를 생성해 연결했었는데, 이번엔 게시글에 직접 연결시켜 보았습니다. 이 방법이 훨씬 가독성도 좋고 나쁘지 않은 것 같습니다. ㅎㅎ
    • 게시글에 본인이 등록한 캐릭터를 등록시켜서 참고가 가능하게 하는 법도 구현해 봐야겠습니다.

내일도 파이팅!

'TIL' 카테고리의 다른 글

23-01-15 TIL  (2) 2023.01.16
23-01-14 TIL  (0) 2023.01.15
23-01-12 TIL  (0) 2023.01.12
23-01-10 TIL  (0) 2023.01.10
23-01-09 TIL  (0) 2023.01.09
  Comments,     Trackbacks
23-01-12 TIL

오늘 진행한 것들 🤔

  •  토이프로젝트
    • 스프링부트 버전 변경과 그에따른 그래들 빌드 내용 수정
    • 캐릭터 , 유저 계정 관련 테스트 코드 작성
    • 게시판, 댓글 도메인 설계
    • 게시판 핵심 비즈니스 로직 설계 및 테스트 실행
    • 더 세세한 검색과 출력을 위한 쿼리문 작성
    • 게시판 리스트 뷰 구현
    •  

처음으로 jpa를 사용하면서 쿼리문을 직접 작성해보았다.
기본적인 뷰를 구현했다.
나쁘지않게 연관관계를 맺은것 같다.

오늘 겪었던 문제 🤔

  • 딱히?

오늘 해결한 오류 🤔

  • 흠..딱히..?

오늘의 배운점🤔

  • 오늘은 전체적으로 별 일 없이 흘러갔습니다.
    • 전보다 엔티티 설계에 대한 이해도가 조금 더 늘은것 같습니다.
    • 오늘의 설계는 확실히 전보다 빨랐고, 알찼습니다 :)
    • 처음으로 jpa를 이용하면서 쿼리문을 작성했습니다.
      • 기존에 막무가내로 메소드 이름만 무작정 지어서 이용했을땐 디테일한 결과를 가져오기도 힘들었고, 2차 가공이 필요했던 반면, 직접 쿼리를 짜서 활용하니 훨씬 편리했습니다. 

 

내일도 화이팅! 

'TIL' 카테고리의 다른 글

23-01-14 TIL  (0) 2023.01.15
23-01-13 TIL  (0) 2023.01.14
23-01-10 TIL  (0) 2023.01.10
23-01-09 TIL  (0) 2023.01.09
23-01-07 TIL  (0) 2023.01.08
  Comments,     Trackbacks
23-01-10 TIL

오늘 진행한 것들 🤔

  • 토이프로젝트 진행
    • 캐릭터 검색 뷰 수정/ 캐릭터 검색시에 모험단 이름, 모험가 명성까지 조회가능
    • 여러 계정에 한 캐릭터 등록 가능하도록 구조 변경
    • 비동기식으로 데이터 처리하도록 수정 (중요!)

오늘 겪었던 문제 🤔

  • 페이지네이션
    • 페이징을 할 때 sublist로 내보내다 보니 인덱스가 맞지 않을따 발생하는 예외를 생각하지 못했다.
    • 프런트에서는 disable 추가, 백에서는 예외처리 추가 예정
  • 프런트 이미지 출력 문제
  • 대표 캐릭터 등록 설정 -> 한 계정당 하나  (이미 등록 시에 등록 더 이상 못함)
  • 수정 중 -> DTO response로 내보내기 (캐릭터에 유저정보 포함되어 있음)

깔끔하게 변경한모습

오늘 해결한 오류 🤔

  • 오류라기보다는 문제였던 점
    • 100개의 데이터를 한 번에 가져올 때 어떻게 해야지 검색결과에 각 캐릭터의 주요 능력치까지 가져와버리면 한 번의 클릭에 총 101번의 작업을 진행해야 해서 속도가 느렸다.
      • 문제는 스프링은 기본적으로 한 요청을 완료하고 그다음 요청을 진행하기 때문에 속도가 느렸던 것이었다..!
      • 방법은 비동기 처리로 해결완료
      • 하지만 이렇게 처리해버리니 API별 허용된 호출 횟수에 오류가 발생했다.
      • 동시접속자가 100명 이상이라면? 1초에 허용되는 적절한 호출 횟수를 찾아야 했다.
      • 캐릭터 목록 100개를 조회 후 통계를 위해 저장하고, 각각의 세부데이터를 호출해 저장하면 한번 검색에 최대 101번을 호출하는 것이다.
        • 따라서 조건을 주고, 처음에 10개를 출력하는 페이지별로 조회해 11번의 호출을 하도록 했다.
          • 하지만 해당 방법도 사실 유령 캐릭터가 많기 때문에 불필요한 호출이 많아질 수도?
          • 따라서 페이지별로 캐릭터 레벨이 만렙에서 가까울 때 조회를 하도록 했다. (최근에 플레이하고 있을 확률이 높다.)
        • 매번 검색할 때마다 저장하지 않고, 조건에 맞춰서 호출을 추가로 더 진행하고, 캐릭터 상세 정보를 조회 시에 (스펙을 확인하기 위해) 따로 한번 더 호출하도록 해서 통계를 위해 저장하면 될 것 같았다.
          • 실제로도 타 사이트에서 해당 방법으로 데이터를 저장하는 것 같았다. (최근에 플레이하지 않거나 캐릭터를 검색해본 적이 없으면 스펙 랭킹에서는 제외되는 방식)
    • 캐릭터와 계정간 매핑 문제
      • 생각을 해보니 단순히 한캐릭터당 계정 하나를 등록할 수 있게 설계를 했던 것이었다.
        • 따라서 중간 연관관계용 테이블을 만들고, ManyToMany 를 지양한 설계를 진행하고 코드를 작성했다.
        • 여러 계정이 동시에 같은 캐릭터를 등록할 수 있도록 변경되었다. 굿!
    • 고쳐야 할점이나 추가해야할것
      • 계정 생성시 Validation 을 프론트에서만 진행하는 문제
      • 계정 대표캐릭터 생성 로직 설계 (어떻게 대표캐릭터를 설정하도록 할것인지? 어떠한 조건?)
      • 캐릭터 모험단 검색 (어떻게 검색을 구현해야할까? 모험단은 캐릭터 상세 스텟에서만 조회가 가능하다.)
        • 구현 완료! 외부 api를 이용하는 것이기 때문에, 검색할때마다 갱신을 하는 방법으로 저장을 해줘야 한다.

오늘의 배운 점🤔

  • 설계에 대한 고민을 했습니다.
    • 따라하고자 하는 시스템이 어떠한 구조로 돌아가고 있는지, 어떻게 처리속도를 빠르게 적용시켰을지, 어떻게 데이터를 저장할지에 대해서 고민을 해보았습니다.
    • 비동기 처리를 가능하게 해주는 Async 어노테이션을 사용해보았습니다.
      • 단순히 어노테이션만 붙이고 사용하는게 아닌, 제약 조건이 많았습니다. 그중에서는 어떠한 행동을 최소한으로 쪼개서 멀티스레드에서 동작시킬지를 고민하는것이었습니다.
        • 해당 문제는 따로 상세 정보를 가져와 저장할 일이 있을때 사용하도록 구현해보았습니다.
    • 뷰를 더 이쁘게 수정해보았습니다.
      • 가장 아쉬운건 반응형 사이트를 만들지 못한다는것입니다. 지금 상황에서 프론트까지 챙겨가기엔 너무 시간이 오래걸립니다. 타임리프로 만족해야겠습니다 ㅠㅠ.

 

'TIL' 카테고리의 다른 글

23-01-13 TIL  (0) 2023.01.14
23-01-12 TIL  (0) 2023.01.12
23-01-09 TIL  (0) 2023.01.09
23-01-07 TIL  (0) 2023.01.08
23-01-06 TIL  (0) 2023.01.07
  Comments,     Trackbacks
23-01-09 TIL

오늘 진행한 것들 🤔

  • 토이프로젝트 진행
    • 계정 수정, 중복 검증 기능 구현 및 뷰 구현
    • 캐릭터 검색 후 계정에 연결 기능 구현

 

오늘 겪었던 문제 🤔

  • 캐릭터 검색 결과를 어디까지 db에 저장해두어야 할까.
    • 따로 엔티티 객체를 생성하고 맵핑하지 않고 문자열 json을 통으로 db에 저장하기로 타협 (칼럼명이 일정하지 않은 캐릭터 스텟에 대한 정보를 json형태로 통으로 저장했다.)
    • 통계를 위해서 검색할때마다 100개씩 db에 저장하고 일일이 스텟을 저장하니 시간이 꽤 걸리는 것 같았다. 흠 ㅠㅠ 이 부분에 대해서 더 고민해보아야 할 것 같다.
    • 다른 정보 조회 사이트에서는 정보 조회 시에 캐릭터 명성까지 출력해 주지만, 명성을 조회하려면 디테일한 스텟까지 조회해야 한다. 하지만 단체 결과 조회 시에는 스탯까지 출력해주지 않기 때문에... 어떻게 해야 될지 고민을 좀 해봐야 할 것 같다.

 

 

오늘 해결한 오류 🤔

  • Embedded 어노테이션 사용 오류
    • Json 자체를 db에 저장할 때 따로 엔티티를 생성해서 저장해야 하나 고민을 하던 도중 엔티티 객체를 생성해 저장하고 Embbeded 어노테이션을 사용해서 따로 참조를 하지 않고 테이블 자체에 값을 함께 저장하는 걸로 생각을 했었는데, 그럴 필요 없이 단순 json 타입으로 dto 자체를 저장하면 됐었다.
      • 해당 문제로 인해 따로 Id를 생성하지 않거나 Id가 두 개라서 발생하는 오류를 겪었다. (Id값을 설정할 수 없음 오류, Id 프로퍼티를 찾지 못함 오류)
      •  

이렇게 필드에 JSON 자체를 저장하도록 변경했다.
JSON schema 에 해당 어노테이션을 붙여주면 끝

  • The property Class in Json Type Descriptor is null 오류 발생 -> Json을 객체에 맵핑하여 저장하는 것은 오류가 없지만, 다시 saveAll 할 때, 기존 객체와의 비교를 위해 json 객체를 꺼낼 때 다시 맵핑해줄 객체를 찾지 못할 때 발생하는 오류라고 한다.
    • 이 부분은 검색해도 나오지 않아서 일단 보류 
      • TypeDef 어노테이션을 사용하지 않고 따로 Mapper로 컨버터 어노테이션을 사용해서 칼럼에 값을 넣어주어야 하나.. 고민이 된다. ㅠㅠ.

오늘의 배운 점🤔

  • 오늘은 json을 db에 통째로 넣는 방법을 배웠습니다.
    • 하지만 객체를 맵핑하는 데에 이상이 생긴 것 같습니다.. 더 고민을 해봐야 할 것 같습니다.
  • 그 외에는 다행히 막힌 부분 없이 오늘도 잘 보낸 것 같습니다 ㅎㅎ 

'TIL' 카테고리의 다른 글

23-01-12 TIL  (0) 2023.01.12
23-01-10 TIL  (0) 2023.01.10
23-01-07 TIL  (0) 2023.01.08
23-01-06 TIL  (0) 2023.01.07
23-01-05 TIL  (0) 2023.01.05
  Comments,     Trackbacks
23-01-07 TIL

오늘 진행한 것들 🤔

  • 토이프로젝트 진행
    • 캐릭터 랭킹 구현 설계
    • 마이페이지 뷰 수정 
    • 프로필 아이콘 변경 기능 구현 
    • 검색 페이지 기존 사이트와 똑같이 뷰 수정

캐릭터 검색 페이지 (데미지 조회는 불가능)

 

(마이페이지)

 

(프로필 아이콘 변경 모달창)
프로필 아이콘 변경 가능

 

오늘의 배운 점 🤔

  • 뷰를 좀더 원본 사이트와 비슷하게 수정했습니다.
  • 크롬의 검사 탭에서 css에 어떤 속성을 추가했는지까지 조회가 가능했습니다.. 조금 도움이 되었습니다.
  • 아이콘 변경 기능을 구현했습니다.
    • 기존에 파일 입출력을 구현해봤어서 별로 어렵지 않았습니다.
  • 캐릭터 랭킹 기능 구현에 대해서 어느정도 설계를 했습니다.
    • 캐릭터가 조회될때마다 조회된 정보중 통계를 낼 수 있는 캐릭터 스텟 수치를 가진 캐릭터를 db에 저장하고, 해당 정보를 토대로 데미지 공식을 계산해 통계를 낼 수 있을것 같다는 생각이 들었습니다.
    • 레디스나 몽고디비 같은 no sql 을 따로 사용해야 하나 생각을 했었는데, 어차피 그렇게 해봤자 객체 맵핑이 안되있는데 들쑥날쑥한 데이터로 통계를 내는것 또한 어려울거라고 느껴졌습니다.
    • 따라서 주변 지인에게 도움을 얻어본 결과, 스프링 배치를 사용해보는것이 어떻겠냐는 답변을 얻었습니다.
    • 생각을 해보니 스프링배치까지 사용할 필요가 있나 싶지만, 일단 전체적인 틀은 머릿속으로 그려지는 느낌입니다.
    • 허나 지금 당장 구현이 필요한건 이런것보다 캐릭터를 조회하고 계정 엔티티에 묶는 것과, 커뮤니티를 먼저 구현하고 마지막에 랭킹을 구현하는게 맞겠다 싶어서 우선순위를 뒤로 미뤄놨습니다. (커뮤니티가 훨씬 시간이 적게 걸릴것 같은..)
    • 후에 랭킹을 구현한다면 전 프로젝트처럼 기능을 점점 추가하면 재밌을거같다는 생각이 듭니다.

다음주도 화이팅!

'TIL' 카테고리의 다른 글

23-01-10 TIL  (0) 2023.01.10
23-01-09 TIL  (0) 2023.01.09
23-01-06 TIL  (0) 2023.01.07
23-01-05 TIL  (0) 2023.01.05
23-01-04 TIL  (0) 2023.01.05
  Comments,     Trackbacks
23-01-06 TIL

오늘 진행한 것들 🤔

  • 토이프로젝트 진행
    • 파싱 한 데이터 객체 맵핑
    • 검색 기능, 결과 페이지네이션 구현
    • 마이페이지 뷰 구현

 

 

 

오늘의 배운 점 🤔

  • 데이터를 파싱하고 결과물을 출력하는 것까지 성공했습니다.
    • 고민이 정말 많이 되었던 구현이었습니다.
    • 데이터를 DB에 저장하지 않고 단순히 객체를 맵핑해서 프런트로 내보내야겠다는 생각이 들었습니다.
    • 어제 거의 반나절동안 작업한걸 모두 삭제했습니다 ㅠ.ㅠ
    • 겪었던 오류는 왜 캐릭터마다 없는 스탯이 존재하는지를 모르겠습니다.. 그래서 객체 맵핑에 어려움을 겪었고 NullPointerException을 자주 던져주었습니다.
    • 고민했던 부분은 원본 사이트에는 해당 캐릭터의 능력치와 장비 스킬까지 참고하여 대미지 계산 공식을 세웠는데, 그러면 한번 캐릭터를 조회할 때 어느 데이터까지 파싱해와야 할지가 많이 고민이 되었습니다..
    • 일단은 캐릭터 결과에 캐릭터의 이름, 모험단 이름, 모험가 명성이 출력되는 형태였기 때문에 한번의 목록을 불러올 때 전체 조회 1번, 각 캐릭터별로 능력치 조회 1번씩 진행해서 성능을 조금이라도 더 챙겼습니다. (중복되는 부분들은 최대한 빼려고 노력했습니다.)
  • 페이지 네이션도 구현했습니다.
    • 기존에 페이지네이션은 JPA repository 에서 받아온 정보를 Page 타입으로 묶어서 프런트에 내보냈기 때문에 스프링에서 자체적으로 지원해주는 기능으로 구현했지만, 이건 따로 db에 저장하지 않고 파싱해온 데이터를 페이지로 내보내야 했기 때문에 많이 까다로웠습니다.
    • 타임리프로 페이지네이션을 구현했는데, 거의 알고리즘 문제를 푸는것 같았습니다...
  • 마이페이지의 뷰를 구현했습니다.
    • 원래 오늘의 목표는 마이페이지의 정보수정 뷰 구현과 캐릭터 검색 후 등록이 목표였는데, 캐릭터 검색만 하루종일 구현했습니다.
    • 아쉽지만 뷰 구현으로 마무리했습니다. 
    • 껍데기 이기 때문에 제대로 동작하는건 닉네임 출력밖에 없지만 다른 부분들은 생각보다 머리로 잘 그려지는 부분들이라 오래 걸리지 않을 것 같습니다.

 

5일 동안 코딩과 공부만 약 50시간 이상 한 것 같습니다... 재밌네요!

'TIL' 카테고리의 다른 글

23-01-09 TIL  (0) 2023.01.09
23-01-07 TIL  (0) 2023.01.08
23-01-05 TIL  (0) 2023.01.05
23-01-04 TIL  (0) 2023.01.05
23-01-02 TIL  (0) 2023.01.02
  Comments,     Trackbacks
23-01-05 TIL

오늘 진행한 것들 🤔

  • 토이프로젝트 진행
    • 캐릭터 데이터 파싱 및 페이지네이션
    • 파일업로드, 조회 기능 추가

 

오늘의 배운 점 🤔

  • 배운점이 있을까요? 정신없이 하다보니까 뭔가를 계속 하긴 했습니다.

죽겠습니다.

 

꼴까닥

!

 

  • 오늘 발생한 오류중 대부분은 접근 제어자를 실수로 깜빡했다거나.. 하는 오류가 대부분이었습니다.
  • 페이징 기능을 오랜만에 구현해봤는데 이 부분에서 헤맸습니다.
  • 전 프로젝트를 진행할때는 queryDsl 까지 사용해서 검색기능을 구현했던것 같았는데 이번엔 단순히 Data JPA 를 활용해서 구현이 되었습니다. (?)
    • 쿼리 dsl 은 대용량 데이터를 가공할때 사용해야하나.. 하는 의문점이 들었습니다.
  • 제대로 클론코딩을 하고싶은데 핵심 기능을 어떻게 구현해야할지 모르겠는 경우가 많습니다. 이 부분을 제작자에게 직접 문의를 해보면 어떨까.. 라는 염치없는 생각이 듭니다.

 

이제 사이트에 로그인 회원가입도 가능하고, 프로필에 아이콘도 등록이 가능하며 닉네임또한 출력이 됩니다.

첫 프로젝트를 생각하면 장족의 발전이라는 생각이 드네요...

내일도 화이팅!

 

 

'TIL' 카테고리의 다른 글

23-01-07 TIL  (0) 2023.01.08
23-01-06 TIL  (0) 2023.01.07
23-01-04 TIL  (0) 2023.01.05
23-01-02 TIL  (0) 2023.01.02
22-12-29 TIL  (0) 2022.12.29
  Comments,     Trackbacks
23-01-04 TIL

오늘 진행한 것들 🤔

  • 토이프로젝트
    • json 데이터 파싱 후 db에 저장
    • 로그인/회원가입 뷰 및 검증 & 핵심 로직 구현

 

오늘의 배운 점 🤔

  • 토이프로젝트를 진행하고있습니다.
    • 로그인과 회원가입 로직, 그리고 뷰를 구현하였습니다.
      • 스프링 시큐리티를 사용하여 구현하니 훨씬 쉽습니다.
      • 정말 프로젝트는 하면 할수록 재밌고 새롭고 짜릿한것같습니다.

 

  • 크진 않지만 이게 다 내가 구현한거라니.. (물론 부트스트랩의 도움을 받았지만..) 정말 뿌듯합니다 :)
  • 데이터 파싱을 해보았습니다.
    • 오늘 겪었던 오류는 GSON을 이용하여 전달받은 json 을 객체로 맵핑하려는데 자꾸 오류가 떴었습니다.
    • 이유는 바로 RestTemplate 을 이용하여 json을 전달받을때 String class 타입으로 전달받지 않아서 따옴표가 다 떨어져서 와서 였습니다....
    • https://www.jsonschema2pojo.org/ 라는 사이트를 이용하여 파싱용 dto를 생성하여 진행해보았습니다.
      • 처음에는 replaceAll 로 덕지덕지 붙어있던걸 다 떼고 알고리즘 문제 풀듯이 맵핑했었는데, 이제 그렇게 안해도 된다고 하네요......... 세상 참 좋아졌습니다.

이러한 데이터를 Gson 라이브러리를 통해 객체에 맵핑하면

하드코딩이긴 하지만 파싱한 데이터에 따라서 이렇게 영속화를 시킬수 있답니다.

전달받은 데이터를 db에 저장할 수 있습니다.

 

  • 생각해보니 전처럼 일일히 손으로 replaceall 해주면.. 곧 다가올 장비 라던가.. 어마어마한 데이터를 맵핑할수 없었을거라는 생각이 듭니다.
    • 역시 사람은 신기술을 잘 활용할 줄 알아야합니다 후후.

 

'TIL' 카테고리의 다른 글

23-01-06 TIL  (0) 2023.01.07
23-01-05 TIL  (0) 2023.01.05
23-01-02 TIL  (0) 2023.01.02
22-12-29 TIL  (0) 2022.12.29
22-12-28 TIL  (0) 2022.12.28
  Comments,     Trackbacks