본문 바로가기

분류 전체보기

(142)
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는 ..
[프로그래머스] 뒤에있는 큰 수 찾기 //100만개의 원소를 for문을 돌면서 탐색하는건 무조건 시간초과임 //sort도 못함 각 인자의 순서로 해야함. //최악의 경우가 맨 마지막에 가장 큰수가 있을 경우 100만개의 행을 다 비교하면서 돌아야됨 //적합한 자료구조가 있나..? 큐? //어떻게 쓸건데? 큐는 못씀 중간에 껴있는 값들을 비교해야 하는데 그걸 못하니까 //완전 탐색? 그건 필요 없을거 같은데 for문과 다르지 않잖아 //스택 : 원소들을 쌓고 새로 들어온 값이 마지막 원소보다 커? 팝(새로운 원소값으로) 다시 비교해서 커? 팝 //새로운 원소는 다시 스택에 넣고 //그럼 이걸 인덱스 관리를 어떻게 할건데?? 팝할 때 그 인덱스는 어떻게 알지?? //아 인덱스를 넣어준다? 스택에다가??? //스택에 인덱스를 넣어줘 //비교할 땐..
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..
프로그래머스 주차요금 우선 내 풀이 이 풀이는 동시성문제로 오류가 났다. 문제는 map.remove()는 keySet()과 같이 쓸 경우 동시성 문제로 concurrentmodificationexception 예외를 던진다. import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Iterator; import java.util.*; class Solution { public int[] solution(int[] fees, String[] records) { int baseTime = fees[0] ,baseFee = fees[1] ,unitTime = fees[2] ,unitFee = fees[3] ,fee=0 ,t..
24.02.16 오늘 알고리즘 문제는 주차 요금 계산 import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Iterator; class Solution { public int[] solution(int[] fees, String[] records) { int baseTime = fees[0] ,baseFee = fees[1] ,unitTime = fees[2] ,unitFee = fees[3] ,fee=0 ,totalTime; String car ="", time=""; String[] subString = new String[3]; Map parkTime = new HashMap(); Map carFee =..
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 탑스..
프로젝트 회고 마지막으로 면접 준비 이전에 도움이 될만한 질문 몇가지 리스트 정리하여 공유드려 봅니다. 답변은 글자 제한이 없이 아주 길어도 무방하니 상세하게 부탁드립니다! 1. 최종 프로젝트 팀에서 어려운 점과 잘했다고 생각하는 점이 있다면 각각 어떤 점들이 있을까요? A. 최종 프로젝트를 하면서 어려웠던 점은 적극적인 피드백을 하지 않았던 점입니다. 깃 전략을 세울 때 풀리퀘스트가 올라오면 코드를 리뷰하기로 했었습니다. 하지만 이부분이 잘 적용되지 않았습니다. 제가 생각했던 문제점은 다음과 같습니다. 1. 커밋과 풀리퀘스트가 잘게 쪼개지지 않아 한번에 올라오는 코드의 양이 많았습니다. 깃 전략상 커밋과 풀리퀘스트를 잘게 쪼개서 하자고 했었으나, 잘 지켜지지 않아 한번에 봐야할 코드가 너무 길어졌습니다. 이렇게 길어..
아키텍쳐 고민 최종 프로젝트는 3레이어드 아키택쳐를 이용한 프로젝트를 진행했다 발단(순환 참조를 해결하자) Controller, Service, Repository 계층을 이용했다. 이때 우리는 다른 도메인의 Entity를 찾아와야할 때 해당 도메인의 Service에서 예외처리까지 마쳐서 Entity를 얻는 메서드를 public으로 열어두도록 컨벤션을 정했다. 여기에는 장/단점이 존재한다. 장점은 - 코드 중복을 줄일 수 있다. Repository에서 Optional로 Entity를 가져올 때 예외처리를 해줘야 한다. 이를 각 도메인에서 만들어서 public으로 열어두면 다른 도메인의 서비스에서 사용할 수 있어 코드중복을 피할 수 있다. 단점은 - Service끼리 참조를 하기 때문에 순환 참조에 걸릴 수 있다. 우리..