본문 바로가기

공부/TIL

(84)
24.02.21 오늘은 테이블과 객체 매핑, 컬럼 스키마 매핑에 대해 배워보자. 우선 테이블 객체 매핑이다. @Entity 어노테이션이 붙은 클래스만 JPA는 Entity로서 관리 하게 됨. 이 어노테이션이 붙지 않는 데이터는 JPA관리 밖. 이중 중요하게 다뤘던 매핑 전략에 대해 정리해보자. @Id @GeneratedValue Entity의 Primary Key값을 설정할 때 사용한다.이 어노테이션을 달아주면 코드단에서 Id값을 넣어주지 않으면 알아서 Id를 넣어준다. 이때 세가지 전략이 존재함 IDENTITY, SEQUENCE , TABLE [IDENTITY] 이 전략은 현재 연결된 DB의 ID 생성 전략을 따르는 것. MySQL은 AutoIncrement임. 따라서 자동으로 1씩 증가시켜줌 Oracle이나 H2는 ..
24.02.20 어제에 이어 JPA 강의를 들으면서 내가 생각했던 의문점이 풀림! JPA를 이해하려면 영속성에 대한 이해가 필요함. 영속성이란 자바 App과 DB를 연결시켜주는 통로 같은 것. 자바의 객체를 DB에 넣을 때 영속성 상태가 된 상태에서 넣어주는것! 자바의 Entity는 영속성 컨텍스트 안에 들어가지 않으면 아직 DB과 관계없는 그냥 순수한 객체임. 영속성 컨텍스트에 들어가게되면 이제 이 객체는 DB와 연관을 맺게 되는 것. 그럼 영속성은 어떻게 관리되는지? 바로 EntityManager의 persist()메서드를 이용해 객체를 영속성 컨텍스트에넣어준다. 또한 find를 해서 DB로부터 조회한 데이터도 영속성 컨텍스트 안에 들어가 영속 상태로 들어감! 이렇게 영속성이 되면 주는 이점은 다음과 같음 1. 1차..
24.02.19 JPA 강의 듣기 시작! 우선 JPA를 왜쓰는지에 대해 알아보자. 우리는 객체지향 언어를 다루고 있다. 그리고 그 객체를 저장하고 싶다. 하지만 RDB에는 객체지향의 핵심 가치인 상속을 반영하지 않는다. 물론 연관관계를 가지고 있지만 그렇다고 상속과 똑같이 작동하지 않는다. 예를 들어보자. 자바의 컬렉션에서 그래프 탐색을 할 때 그냥 탐색을 하면 된다. ex) member.getA().getB().getC(); 하지만 테이블은 이런식으로 조회할 때 어려움이 있다. JOIN문을 이용할 때 처음 실행하는 쿼리문에 따라 탐색 범위가 결정된다. JPA가 아닌 기존의 JDBC와 같은 방식을 이용해 객체를 찾아오면 같은 객체를 조회한다고 해도 SELECT를 이용해 가져올 때 각 객체를 다르게 가져오게 된다. Str..
24.02.15 프로그래머스 피로도 문제 풀다가 도저히 내 지식으로는 풀 수 없다... 이건 그냥 모든 경우의 수를 다 돌아보고? 그중 가장 좋은 케이스를 가져와야 하는데.... 이거 모든 케이스를 어떻게 돌려야 하지???? 한 한시간 들여다보다가 도저히 모르겠어서 답지 봄! [완전 탐색] 가능한 모든 경우의 수를 다 시도해 답을 찾는 방법 정확하고 확실하게 답을 찾을 수는 있지만, 시간이 오래 걸린다. 모든 경우의 수를 구하는 문제 같은 부분에서 많이 사용되는 알고리즘 조합, 중복 조합, 순열, 중복 순열 1부터 n까지의 수를 모두 더하기 난수에서 배열에서 특정한 수 찾기 등 기본적으로 스택과 큐로 구현을 하게 되는데, 이를 재귀 함수로 표현할 수 있음. class Solution { public int answer;..
24.02.13 조건 유저로 탑스터 조회시 쿼리 1. 탑스터 조회 from topster where user_id 2. 유저 조회 from user where user_id 3. 탑스터 앨범 조회 from topster_album where topster_id 유저 하나에 딸린 탑스터 갯수 28 탑스터에 딸린 앨범 갯수 9(앨범이 123으로 동일한게 3개씩 들어감) 총 쿼리 갯수 30 탑스터 1, 유저 1, 탑스터 앨범 조회 28 배치 사이즈 50 걸때 1. 탑스터 조회 from topster where user_id 2. 유저 조회 from user where user_id 3. 탑스터 앨범 조회 from topster_album where topster_id 유저 하나에 딸린 탑스터 갯수 28 총 쿼리 갯수 3 탑스..
24.02.05 난리났다. 발표 좀 만만하게 봤다가 진짜 큰코 다쳤다... 아니 나 중간발표때도 했었고, 뭔가 좀 진짜 방심했다. 발표데모를 찍었는데 진짜 그냥 개~~~절었다. 그냥 완전 정리가 하나도 안됐다. ㅠㅠㅠㅠ 진짜 두시까지 데모 찍어서 올려야 했는데 1시반까지 찍다가 계속 절어서 결국 그나마 11시 쯤에 찍었던걸 올렸는데... 이것도 사실 맘에 들진 않는다... 발표 대본을 좀 더 다듬고 다시 연습해보자. 원래 대본 잘 안만들었었는데, 이번엔 시간제한도 생각보다 너무 짧고, 다뤄야할 내용도 많다보니 뭔가 잘 정돈이 안되면 횡설수설하게 된다. 그리고 이제 다시 이력서를 쓰면서 다시 강의를 좀 듣고 싶은데 인프런에서 강의를 하나 살지 고민중!! 설날 특가 안뜨려나?? 설 특가 뜨면 바로 강의 하나 사서 들어야겠따..
24.02.02 요즘 하도 문서화 작업을 많이 하다보니까 TIL에 소홀했다. 이번총망라한 TIL을 작성해보자. 이번주 우리는 알림 기능을 완성했다. SSE를 이용해 클라이언트가 자신의 id로 구독을 하고, 이벤트가 발생하면, 관련된 id를 갖는 클라이언트는 해당 이벤트를 가져간다. 하지만 알림 기능은 프론트 작업이 추가적으로 필요해서 우선 운영서버에 도입되는건 중지했다. 그리고 우리가 했던 것은 쿼리 최적화. 탑스터 GET요청 한번에 너무 많은 쿼리가 발생한다. 따라서 부하 테스트시 서버가 못버티는 것을 확인했다. 우리의 분석은 탑스터는 매팽된 연관관계가 너무 많아 N+1 현상이 일어날것이다. 우리는 BATCH SIZE를 50으로 걸어서 N+1 현상을 막았다. 또한 페이지네이션을 도입해 한번에 너무 많은 데이터를 불러올..
24.01.26 튜터님 1:1 면담 기록 튜)지금 어디에 중점을 두고 있는지? 프로젝트? 개인 취업 준비? 나)지금은 우선 프로젝트를 우선순위에 두고있다. 우리 프로젝트가 아직 기능 구현이 안된 부분이 있다. 튜) 결국 지금 잘 프로젝트를 잘 가져가려면 이력서게 어떻게 적힐지를 생각해야함. 반대로 이력서에 어떻게 쓰일지 생각하고 기능을 구현하는것도 좋은 방법일 것. 알림은 어떻게 구현할지? 프론트에서? 알림 센터를 사용할거라면, 알림 메세지를 보관해야함. 알림 메세지 DB에 저장해라. 튜)알고리즘은 공부중? 나) 스터디중이다. 화수목 하고있다. 튜)파이썬 하는지? 나)초창기에 물어봤는데 우선 다른 언어 쓸 생각하지 말라고 배웠다. 튜) 그게 맞다. 그런데 이제 자바 익숙하지 않은지? 이제 파이썬 쓴다고 자바 헷갈리는 단..
24.01.24 테스트 코드에 대해서 아는대로 설명하고, 활용경험에 대해 테스트 코드는 소프트웨어의 기능을 검사하고, 결함을 찾아내고 수정하는데 사용됩니다. 테스트 코드는 개발자가 원하는 방식으로 소프트 웨어가 작동하는지 확인합니다. 저는 스프링 부트로 처음 테스트 코드를 처음 작성 했습니다. 제가 사용하던 노트북은 연산 속도가 굉장히 느려 스프링 부트를 모두 실행하는데 있어 평균적으로 12초 정도가 걸렸습니다. 또 테스트를 하기위해 포스트맨을 이용해 요청과 응답을 받았습니다. 이때 모두 생각을 하면 기능을 수정하고 테스트 하는데에만 15초정도를 썼습니다. 하지만 테스트 코드를 작성했을 때, 스프링 부트를 띄우지 않고, 단위테스트를 진행하니 기능이 변경되고, 테스트 하는데 2초가 걸리지 않았습니다. 테스트 코드를 활용해..
24.01.23 쿼리 최적화의 방법 1. SELECT를 사용할 때 원하는 컬럼만 가져와야 함 그렇지 않으면 DB에서 처리해야할 연산이 늘어나기 때문. 또한 네트워크 트래픽도 올라감 2. 조건 부여시 DB값에 연을 달지 않는 것이 좋음 DB값에 연산을 걸면 DB는 모든 값을 SCAN하고, 연산을 해야함. 하지만 그렇지 않을 경우 모든 값을 SCAN할 필요가 없다. 3. LIKE의 %활용시 앞에보단 뒤에 사용하는것이 좋다 String 앞에 사용 시 db는 모든 데이터를 확인하고, 그 다음 데이터를 확인해야 한다. 하지만 뒤에 사용하면, 앞에 나온 값들 만 탐색하므로 db 연산이 적어진다. 4. SELECT DISTINCT문은 가급적 피해야 한다. DISTINCT는 자체로 연산이 오래걸리기 때문에 피하는 것이 좋음. 이를 대..