본문 바로가기

전체 글

(730)
[JPA] JPA 기초 개념공부 JPA 는 개발자가 SQL을 쓰지 않고, 개발을 할수 있게 해준다. 즉, 객체에 SET,GET을 하는 것으로 SELECT, INSERT 작업을 할수 있게해준다. JPA는, Learning curve가 심해서, 자세히 모르고, 실무에 도입하게 되면 망한당 우선 SQL중심적인 개발이, 현재 중요한 키워드이다. CRUD를 짜고, SQL을 짜고.... 애플리케이션 개발이... 객체 지향인데 SQL에 목을 메게된다. SQL 개발의 문제는..? 1. 필드추가할때 한개의 필드가 추가되면, 전체 SQL이 도는 곳에 전체 필드를 추가해줘야한다. 즉 SQL 의존적 개발을 하게된다. 2. 패러다임의 불일치 객체 지향 프로그래밍은 추상화, 캡슐화, 정보은닉, 상속, 다형성등 많은 걸 지원해준다. 객체와 관계형 데이터 베이스의..
잡다하지만 필요한 기술지식 5 DTO, DAO , VO 차이 VO란, Value Object 이며, 비즈니스 값을 가져올때 사용하며, 보통 값을 수정할 수 없는 것으로 간주한다. DTO와 혼용해서 쓰기도 한다. DTO란, Data Transfer Object 줄임말로, VO와 같이 값을 갖고있는 객체이다. Vo와 차이점은 DB로 치면 하나의 인스턴스로, 데이터 핸들링에 사용되는 객체이다. DTO를 통해, 데이터를 전달 할 수 있다. DAO란, Data Access Object 의 줄임말로, 실제 Db에 접속하는 객체이다. Service 와 DB사이에서 가져온 데이터를 엔티티로 변환시켜 가져온다. 대부분은 CRUD API를 제공 자바 데이터 타입 1) Primitive type 기본형 변수에 값 자체를 저장, boolean,char,i..
잡다하지만 필요한 기술지식 4 1. 자바 컴파일 과정 개발자가 자바 소스코드를 작성하고, 자바 컴파일러가 자바소스파일을 컴파일한다. 컴파일을 하게 되면, class파일이 생성되어, 아직 JVM만 이해할수 있는 코드가 된다. 컴파일된 바이크 코드를 JVM의 ClassLoader에게 전달을한다. ClassLoader는 동적 로딩을 통해 필요한 클래스들을 로딩 및 링크하여,JVM 메모리에 올린다. ClassLoader 세부 동작. 1. 로드 : 클래스 파일을 가져와서 JVM 메모리에 로드한다. 2. 검증 : 자바 언어 명세 및 JVM 명세에 명시된 대로 구성되어있는지 검사 3. 준비 : 클래스가 필요로하는 메모리를 할당한다. 4. 분석 : 클래스의 상수 풀 내 모든 심볼릭 레퍼런스를 다이렉트 레퍼런스로 변경한다. 5. 초기화 : 클래스 변..
Java Garbage Collection 이란? 자바 가비지 컬렉션의 동작및 개념에 대해서 알아본다. 우선 가비지 컬렉션이란? 프로그램을 개발하다가, 유효하지 않은 메모리인 가비지가 발생하게되고 C나 다른 언어는 free를 통해, 직접 메모리를 해제해주어야 하지만, java 는 가바지컬렉터가 불필요한 메모리를 알아서 정리해준다. Java 에서는 객체는 대부분 일회성이며, 메모리에 오랫동안 남아있는 경우는 드물다는 전제로 설계되었다. 객체의 생존 기간에 따라 물리적인 heap영역을 나누게 되었고, 이에 따라 Young Old, 총 2가지 영역으로 설계되었다. 1. Young 영역 (Young Generation) 새롭게 생성된 객체가 할당되는 지역이다. 대부분으니 객체가 금방 Unreachable(1회성 상태) 가 되기 때문에 많은 객체가 Young영역..
잡다하지만 필요한 기술지식 3 1. 스프링 MVC 웹 요청 처리과정 - 클라이언트가 서버에 어떤 요청을 하면, DispathcherServlet이라는 클래스가 요청을 가로챈다. - 가로챈 DispathcherServlet 은 매핑값을 찾아, Controller에 요청을 처리할 메소드에 도달한다. - Controller에서 서비스에 보내고, DB접근이 필요하면 DAO에게 위임한다. - DAO는 DB접근 및 VO값으로 return받아, 서비스로 돌려준다. - 모든 로직을 끝낸 서비스는 컨트롤러에 넘기고 컨트롤러는 Model에 넣어 어떤 View로 넣어줄지 담아, DispathcherServlet 에 보낸다. - DispathcerServlet은 응답 View를 찾고, 로직처리를한다. 2. call by value, call by refe..
3. 알고리즘 정리 [이분탐색] 이진탐색에 대한 공부를 시작한다. 이진탐색을 왜쓸까? 일단 이것부터 파악을 해야한다. 사실 순차 탐색 = 이진탐색 값을 구하는 건 동일하다. 결국 둘다 탐색을 해서 답을 도출해내는 건 동일하게 성공적으로 실행된다. 근데, 탐색해야되는 량이 엄청 많다면? 그때는 이진탐색을 실행한다. 우선 이진탐색에 대한 기초적인 구현을 시작한다. 아주 간단하게, 5개의 숫자를 입력받고, 그중에 target인 15를 찾는것이다. mid를 시작과 끝점을 합한 /2 를 하고, 만약의 mid index가 타겟보다 크면, 최고를 mid -1 로 이동 반대라면 low를 mid +1로하게된다. 물론 이 것은 입력값이 순차적은 정렬 형태를 띈다는 가정이다. 이렇게 되면 순차 탐색 보다 훨씩 빠른 탐색을 할수있다. 탐색 대상이 많은 경우..
2. 알고리즘 정리 [DFS,BFS] DFS 깊이 우선 탐색이다. 어떤 노드나 행렬이 주어지면, 해당 노으나 행렬에 대한 값을 최대로 깊이 탐색하고, 그다음 노드로가는방법이다. 나는 그림으로 이해하는게 편해서 그림으로 남겨놓으려고한다. 그림이 좀 웃기지만 뭔가 이렇게 이해하는게 편하다 코드를 짤때 생각해야하는 구조로 다시 그려보자 우선 각 노드별로, ArrayList로 각 노드들이 가지는 인접한 것들을 구한다. 역시나 개떡같지만 ㅋ 이 걸 가지고 생각해보는 그림은 처음에 1부터 시작을 하면, 2로가고 2가 3으로가고 3에서 2로가려고하지만, 기존에 2에서 check를 해놨기 때문에 1로, 1도 체크해놨기 떄문에 4로 4는 모든걸 다 check가 되어있기 때문에 out이된다라고 생각하면 된다. 자 공부는 여기까지하고 예제 부터 풀어보자 htt..
1. 알고리즘 정리 (브루트 포스) 우선 개념에 대해서 숙지 및 관련 유형 문제를 풀이한다. (문제는 , 백준 기준 - https://www.acmicpc.net/step 기준) 1. 브루트포스 완전 탐색 알고리즘, 가능한 모든 경우를 탐색 , 조건에 맞는 결과만 가져온다. 무식하게 탐색하는 방법, 100% 정답을 찾는다. * 블랙잭 문제 https://www.acmicpc.net/problem/2798 2798번: 블랙잭 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장 www.acmicpc.net 전형적인, 완전 탐색문제이다. 배열을 3중 for문을 사용해서..