Week 1(1230-0105)250101(Wed)250102(Thu)250103(Fri)250104(Sat)250105(Sun)Week 2250106(Mon)250107(Tue)250108(Wed)250109(Thu)250110(Fri)250111(Sat)250112(Sun)Week 3250113(Mon)250114(Tue)250115(Wed)250116(Thu)250117(Fri)250118(Sat)250119(Sun)Week 4250120(Mon)250121(Tue)250126(Sun)Week 5250127(Mon)250128(Tue)250129(Wed)250130(Thu)250130(Fri)
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 문제
- 로컬에서 카카오 로그인을 위해
https://kauth.kakao.com/oauth/authorize?client_id=~
&redirect_uri=http://localhost:8080/auth/kakao&response_type=code
로 수동접속해 OAuth code 받고, 코드만 따서 프론트 개발 환경에서 로그인- 이후 로컬에서 로그 보면서 디버깅
- 걍 알고보니 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 개념을 구현 가능하다