[현장실습] 1주차 기록

오영선·2024년 1월 18일

실습

목록 보기
1/12


1,2일차: 2024 01 15-16 월, 화

Figma로 관리자 페이지 UI 디자인

수행이슈

[feat : 부트스트랩 적용]

  • 부트스트랩 적용했으나, 페이지 연결이 어려워 부트스트랩 제거. 이후 백엔드 및 기본 html작성을 완료 한 후 부트스트랩 적용 고민하기로 함
    [fix : 부트스트랩 제거 후 원상복귀]
    [feat :view 분리]
    17 kiosk upload
  • 파일 업로드시에 type선택하고 업로드 하는식으로 변경
  • 파일 업로드시에 info List DB까지 반영되도록 하기

22 kiosk update
23 confilct resolve
4 business serch

  • 사업자번호/타입으로 serch 기능 만들기
    5 info update
    docs : todo 반영
    타입 추가 api 작성 #32

3일차: 2024 01 17 수요일

6 upload type
32 kiosk info create
39 kioskinfo detail
file 덮어쓰기 기능 추가

4일차: 2024 01 18 목요일

상세

  • 10시 ~ 12시 반 : 디렉토리 version 이슈
  • 1시 ~ 2시(점심시간) : 사업단 과제, 이메일 업무 정리
  • 2시 ~ 3시반 : DB version 이슈
  • 4시반 ~ 5시반 : 문서화
  • 5시반 ~ 7시 : 제품 비교 보고서 작성

수행 이슈

  • [성능비교] 폴더 구조 읽어와 version 목록 표시

    ☑️ 자바 - 특정 디렉토리 경로의 파일 목록 가져오기
    url(File).list : String[ ] 테스트 사용해보기
    - [기존문제] 폴더가 없으면 apk업로드 되지 않는 이슈 해결
    ☑️ Controller에서 List로 반환
    ☑️ Postman으로 성능 측정
    ☑️ dummy용 폴더 1천~1만개 만들기

  • [성능비교] KioskVersion DB table 생성 후, 목록 불러옴

    ☑️ KioskInfo Entity, Repository 만들기
    ☑️ version 목록 불러오는 Api 작성하기
    ☑️ Postman으로 성능 측정
    ☑️ dummy용 데이터(행) 1천~1만개 만들기

결과(1만개 version 목록 읽어오기)

목록이 3개일때, 1000개일때, 10000개일때 성능을 측정함.
(10만개 부터는 데이터 insert가 너무 오래걸려 생략)

폴더 이름 읽어오기 :


25ms 동안 수행

DB에서 "findAllBy(KioskId)" 쿼리 날려 가져오기


140ms 소요됨

디렉터리 읽기 > DB인 이유

  • 자바에서 제공되는 io.File을 통한 목록 불러오기는 local에서 바로 수행이 가능하다.

    특히 자바의 FileFileSystem의 list를 사용한다. (정확히는 WinNTFileSystem)
    list()함수의 구조 및 성능을 확인하기 위해 위로 거슬러가보니, native라는 키워드를 사용하고 있었다.

    (*native는 자바가 아닌 언어(보통 C나 C++)로 구현한 후 자바에서 사용하려고 할 때 이용하는 키워드이다. 자바로 구현하기 까다로운 것을 다른 언어로 구현해서, 자바에서 사용하기 위한 방법이다. 구현할때 JNI(Java Native Interface)를 사용한다)
    출처: https://fors.tistory.com/80
    추측이지만, C언어로 파일 목록을 읽어오는 함수를 사용하는 듯 하다.

  • DB를 외부DB로 올리게 되는 경우 네트워크를 통해 불러오는 비용이 추가로 발생한다. (이렇게 되면 서버의 폴더 목록을 읽어오는 것이 확실히 더 빠를 것이다.)

  • version을 위한 DB를 추가로 관리하게 되어 삽입, 조회등의 유지 보수 비용이 올라간다.

  • 매번 version폴더를 만들때마다 version Table에 해당 정보를 insert를 추가로 수행하는 비용이 발생한다.

  • 주DB로 사용한 Mysql은 대용량 데이터를 가져올때 속도가 점차 느려지는 것을 확인했다. 이를 보완하기 위해서는 페이징, 인덱싱이 필요하다.

    그럼에도 DB에 올렸을 때 이점은?

  • 향후 서버를 분산 서버로 확장하는 경우 폴더 구조를 일치시키는 작업 등이 유용할 것 같다.

  • 파일 IO보다 DB IO 코드가 더 익숙하다

추가 회의 내용

apk 다운로드(Update)시 version 링크로 다운받도록 변경

버전을 다운그레이드 하는 경우, 또는 이전 버전으로 되돌아가는 방법에 대한 논의

현재

  1. old_version app.apk를 서버에서 다운받음
  2. old_version 이름으로 app.apk 업로드
  3. Kiosk_Info DB에 old_version으로 Update완료
    장점 :
    apk를 업로드할때마다 이름이 같은 폴더를 삭제 후 새로 생성하기 때문에 디렉토리 경로를 확실하게 저장
    단점 :
    version업로드시 함께 기입하는 releaseNote 항목을 매번 다시 기입해야함

대안

  1. app.apk 업로드시 releaseNote.txt를 함께 저장
  2. version 다운그레이드 시 KioskInfo에서 version 목록 중 다운그레이드 할 버전을 선택
  3. Kiosk_Info DB에 update(수정) API를 날림
  4. old_version으로 새로운 app.apk를 업로드 하지 않고, 기존에 남아있던 old_version/app.apk 및 releaseNote.txt 불러와 Update 완료

장점 : 앞에서 말한 문제를 해결
단점 : releaseNote.txt를 추가적으로 관리해야함

Spring ThreadPool, Thread Local, authetication

로그인 후 받은 JsessionId는 이후 다른 인증이 필요한 api를 날릴때 헤더에 넣어 보내는데, 이때 받은 세션id는 어디에 저장되어 있고 언제 쓰이는가? 또, 세션 아이디의 생명 주기는 어떻게 되지?

  • 설명을 하다보니 명확하게 답변하지 못하는 부분이 있어 추가로 공부가 필요하다.
  • HttpSession에서 관리하는 세션과, SecurityContext에서 관리하는 authentication 정보에는 어떤 차이가 있는가?
  • 스프링의 스레드 풀 크기, 스레드 주기에 대해서도 개념 공부가 필요함.
  • 스프링의 싱글톤이 저장되는 서블릿 컨텍스트는 어디에 저장되는가 -> 스레드의 heap에
    https://dev-monkey-dugi.tistory.com/126

5일차: 2024 01 19 금요일

상세

☑️ 실습 일지 작성
- Git Issue 바탕으로 작성 완료

☑️사업단 과제 완료하기

제품 비교 보고서 완성하기

☑️ [KioskInfo] - 메인 버전 변경 api 작성 (완료)

  • Kiosk Info Detail 페이지 작성 완료
  • 안드로이드 어플의 APP UPDATE 경로 version 상세 추가
  • version변경 시 릴리즈 노트.txt읽어와 페이지 및 kioskInfo DB에 반영

[공부할 것] Spring ThreadPool, Thread Local, authetication

[공부할 것] RESTFULL REST LESS 구분하기

☑️ [KioskInfo] - [(릴리즈노트) 수정하기][버전 번경하기] 분리 (완료)

  • 프론트에 [메인 버전 변경하기] 버튼 만들기
  • 프론트와 백엔드 연결하기
  • info/type 상세 페이지 apk 다운로드 링크 작성하기

수행 이슈


[메인으로] 버튼 만드는데 한세월 ㅜㅜ..

새로운 문제 상황 :
<a> 태그를사용해 다운받기를 만들었는데, 상대경로로 html파일보다 상위에 있는 파일은 다운로드가 안되는 문제와 직면함

추가 회의 내용

  • KioskInfo 에서 버전을 변경하게 두면 releaseNote 변경이 불가능 함
    -> 결국 Kiosk Info Update는 릴리즈 노트 변경용으로 두어야 함
    -> Java Script로 <select>태그 내에서 버전 선택시 release Note불러오도록 해야함

    [KioskInfo] - [(릴리즈노트) 수정하기][버전 번경하기] 분리

[공부할 것] WAS와 WS, Ngix

0개의 댓글