25년 1월을 돌아보며

Published
January 31, 2025
Last updated
Last updated March 29, 2025
Tistory
Category

Week 1(1230-0105)

250101(Wed)

 

250102(Thu)

 
 

250103(Fri)

     

    250104(Sat)

    • 솔리드 커넥션 앱 개발
      • App Store Connect 앱 등록
      • Bundle id 등록
      • 앱 빌드 업로드후 TestFlight 테스트
    • 솔리드 커넥션 웹 개발
      • 신규 성적 제출화면 제작중…
     

    250105(Sun)

    • 솔리드 커넥션 서버 개발
      • Flyway 로컬 디비로 테스트해서 baseline 설정 시 V1 무시되는 것 확인
      • 운영 디비와 동일 디비 덤프해서 마이그레이션 테스트
        • 방법은 Dbeaver에서 dump sql을 따고 그냥 직접 빈 MySQL 디비에 sql 실행해주는 방식
        • 테스트중 FK 문제되는 레코드 발견해 수정. 로컬 디비에서 문제없이 실행되는 것 확인
    • 솔리드 커넥션 웹 개발
      • 신규 성적 제출화면 개발 완료
    • 솔리드 커넥션 앱 개발
      • 앱 아이콘 추가
      • ios: ios/Runner/Assets.xcassets
      • 안드로이드: android/app/src/main/res
    • ICT 인턴십 보고서 작성

    Week 2

    250106(Mon)

    • 솔리드 커넥션 개발
      • 신규 API 403 문제
      • 로컬에서 카카오 로그인을 위해
      • 이후 로컬에서 로그 보면서 디버깅
      • 걍 알고보니 URI가 바뀐거였음… 없는 endpoint면 403을 반환하게 되어 있다
        • 이걸 로컬에서 직접 돌려서 로그까지 본 이후에 내부에서는 404 뜨는거 보고 알았다…
      • 서버에서 로그 확인이 용이 했더라면…? 한시간 버렸다… 해결했으니 ok 입니다.
       

      250107(Tue)

       

      250108(Wed)

       

      250109(Thu)

       
       

      250110(Fri)

       
       

      250111(Sat)

       

      250112(Sun)

       
       

      Week 3

      250113(Mon)

      250114(Tue)

      250115(Wed)

       

      250116(Thu)

       

      250117(Fri)

       

      250118(Sat)

       

      250119(Sun)

      Week 4

      250120(Mon)

      250121(Tue)

      • 솔리드 커넥션 앱 개발
        • 앱 아이콘 추가
        • 앱 버저닝 표준화
        • 배포를 위한 앱 정보 준비: 부제, 연령 등급 설정, 키워드

      250126(Sun)

      • 솔리드 커넥션 웹 개발
        • 지원서 제출 페이지 화면 개발
        • position: fixed의 위치 설정 방식에 대한 깨달음…
       

      Week 5

      250127(Mon)

      • 솔리드 커넥션 웹 개발

      250128(Tue)

      • 솔리드 커넥션 웹 개발

      250129(Wed)

      • 솔리드 커넥션 서버 코드 리뷰

      250130(Thu)

      • 자바 ORM 표준 JPA 프로그래밍 - 기본편 학습
        • 영속성 컨텍스트
          • 장점: 1차 캐시(성능, REPEATABLE READ → 동일성), 쓰기 지연, 변경 감지, 지연 로딩…
          • flush: em.flush(), transaction commit, JQPL query execution 시 작동. 컨텍스트를 비우지 않고 DB와 동기화
          • detached(준영속 상태): em detach(), clear(), close()시 준영속 상태가 되어 컨텍스트에서 분리
          • 영속성 컨텍스트의 시작 끝과 트랜잭션 시작 끝을 맞추려고 하는편인 것 같다
          • 엔티티 매핑
        • 연관관계 매핑 기초
          • 양방향 연관관계와 연관관게의 주인
        • 다양한 연관관계 매핑
          • N:1, 1:N, 1:1, N:N
        • 고급 매핑
          • 재밌던 부분. 상속관계 매핑 전략 3가지
            • 조인 전략: 각각 테이블로 변환(완전한 정규화)
            • 단일 테이블 전략: Nullable로 다른 필드 해두기
            • 구현 클래스별 테이블화 전략(비권장)
            • @Inheritance(stratege=InheritanceType.XXX)
              • JOINED: 조인 전략
              • SINGLE_TABLE: 단일 테이블 전략
              • TABLE_PER_CLASS: 구현 클래스별 테이블화 전략
            • @DiscriminatorColumn(name="DTYPE")
            • @DiscriminatorValue("XXX")
            • 나중에 찾아보기 → @Embed랑 차이
          • Mapped Superclass: 날짜 정보등 관리할때의 추상클래스, 팁)추상 클래스로 정의

      250130(Fri)

      • 자바 ORM 표준 JPA 프로그래밍 - 기본편 학습
        • 프록시와 연관관계 정리
          • 프록시
            • em.find()가 DB에서 실제 엔티티를 조회한다면 em.getReference()는 DB조회를 미루는 프록시 엔티티 조회
            • 프록시 객체 원본 엔티티를 상속받는다.
            • 그리고 처음 사용시에 한번만 초기화 된다. emf.getPersistenceUnitUtil().isLoaded(Object refEntity) 로 초기화 여부 확인 가능.
            • 프록시 객체는 영속성 컨텍스트가 끝나고 준영속 상태일 때 초기화 하려면 예외가 던져진다.
            • 프록시 객체를 보통 직접 사용하지는 않으나 Lazy Load 이해에 필수.
          • 즉시 로딩과 지연 로딩
            • 연관관계가 있는데 함께 사용할일이 적으면 지연 로딩 전략이 효율적
            • 연관 관계 객체는 프록시로 가져오고, 실제 사용할 때 이를 초기화(DB 조회)하는 것
            • 실무에서는 즉시로딩을 사용하면 상상하지 못하는 쿼리가 나가기에 즉시로딩을 사용하면 안된다고 한다… 흠
            • 최대한 모든 연관관계에 지연 로딩을 사용하고, JPQL fetch 조인이나 엔티티 크래프 기능을 사용하는 것을 권장한다
            • 즉시로딩은 JPQL에서 N+1문제를 야기하기 때문
          • CASCADE(영속성 전이)와 고아 객체
            • CASCADE는 연관관계 세팅과는 상관없고 영속성과 관련됨
              • 소유자가 하나라면 괜찮지만, 다른 엔티티와도 연관관계가 있다면 CASCADE 사용을 지양해야 한다.
            • 고아 객체: 참조가 제거된 엔티티, 즉 다른 곳에서 참조가 되지 않는 메모리 가비지 같은 것
              • 게시판의 첨부파일 처럼 참조하는 곳이 하나일 때 사용해야 함
            • CASCADE와 고아 객체 개념을 모두 사용하면 부모 엔티티를 통해 자식의 생명주기 관리 가능
              • 관리하는 엔티티를 스스로 em.persist()로 영속화해주고 em.remove()로 제거해주기
              • DDD의 aggregate root 개념을 구현 가능하다

          250201(Sat)

           

          250202(Sun)