전체 글 274

JPA 정의와 사용

JPA를 알기전에 우선 ORM과 영속성을 알아야 한다. ORM 이란? Object-relational mapping 객체 관계 매핑 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것 객체는 객체대로 설계 RDB(관계형 데이터베이스)는 RDB대로 설계 객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터 베이스는 테이블을 사용한다. ORM 장단점 장점 객체 지향적인 코드로 인해 더 직관적이고 비즈니스 로직에 더 집중 할 수 있게 도와준다. ORM을 이용하면 SQL Query가 아닌 직관적인 코드로 데이터를 조작 할 수 있어 개발자가 객체 모델로 프로그래밍하는 데 집중 할 수 있도록 도와 준다. 선언문, 할당, 종료 같은 부수적인 코드가 없거나 급격히 줄어든다. 각종 객체에 대한 코드를..

Study/Java&Spring 2021.12.30

Spring MVC

Spring MVC 특징 Spring MVC 프레임 워크는 Model, View, Controller라는 모듈의 분리를 가능하게하고 애플리케이션 통합을 원할하게 처리하게 해줌 장점 코드의 가독성, 확장성, 유지보수성을 늘릴 수 있고 코드의 중복을 최소화할 수 있다. 단점 설계 시간이 오래걸리고 숙련된 개발자가 필요하며, model과 view의 완벽한 분리가 어렵다. 구조 동작 순서 핸들러 조회: 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러(컨트롤러)를 조회함 핸들러 어댑터 조회: 핸들러를 실행할 수 있는 핸들러 어댑터를 조회함 핸들러 어댑터 실행: 핸들러 어댑터를 실행함 핸들러 실행: 핸들러 어댑터가 실제 핸들러를 실행함 ModelAndView 반환: 핸들러 어댑터는 핸들러가 반환하는 정보를 Mode..

Study/Java&Spring 2021.12.26

Adapter 패턴(Adapter Pattern) - 디자인패턴

Adapter 패턴 정의 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로, 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함꼐 작동하도록 해준다. Adapter의 다른의미로 Wrapper 라는 말을 사용함 방식 클래스 어댑터 객체 어댑터 클래스 어댑터 vs 객체어댑터 차이점 클래스 어댑터는 상속을 사용함 객체 어댑터는 합성을 사용함 위 그림을 보면 Adapter 가 operation()을 사용할 때 specificOperation 메서드를 호출하는데 이것이 내부 객체로 오는지 상속을 통해서 오는지의 차이가 있을뿐 동일한 형태다. 객체 어댑터 장점 상속이 아닌 구성(Composition)을 사용하기 때문에 더 유연하다. 단점 Adapter 객체를 만들어야 사용가..

Study 2021.12.24

FrontController 패턴 - 디자인 패턴

FrontController 패턴 특징 프론트 컨트롤러 서블릿 하나로 클라이언트의 요청을 받음 프론트 컨트롤러가 요청에 맞는 컨트롤러를 찾아서 호출 MVC패턴에서 입구를 하나로 만든 형태 공통 처리가 가능함 프론트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도 됨 뷰에서 들어오는 모든 요청을 담당하여 웹 애플리케이션을 실행하는 모든 요청을 일괄적으로 처리할 수 있음 스프링 웹 MVC에서 프론트 컨트롤러 - 스프링 웹 MVC의 DispatcherServlet이 FrontController 패턴으로 구현되어 있다. - FrontController를 하나의 인터페이스 뿐만이 아니라 여러가지 인터페이스 호환을 위해 어댑터패턴을 적용한다. https://conpulake.tistory.com/254..

Study 2021.12.24

MVC 패턴 - 디자인 패턴

MVC 패턴(Model View Controller) 등장 배경 너무많은 역할 비즈니스 로직은 서블릿처럼 다른 곳에서 처리하고, HTML은 화면(View)을 그리는 일에 집중하기 위해 만들었다. 서블릿으로 개발할 때, 뷰(View)화면을 위한 HTML을 만드는 작업이 자바 코드에 섞여서 지저분하고 복잡해진다. 비즈니스 로직을 호출하는 부분에 변경이 발생해도 해당 코드를 손대야하고, UI를 변경할 일이 있어도 비즈니스 로직이 함께 있는 해당 파일을 수정해야한다. 변경의 라이프 사이클 비즈니스 로직과 UI 사이에 변경의 라이프 사이클이 다르다. 대부분의 경우 서로에게 영향을 주지 않는다. 변경의 라이프 사이클이 다른 부분을 하나의 코드로 관리하는 것은 유지보수에 좋지 않다. 기능 특화 특히 JSP 같은 뷰 ..

Study 2021.12.22

멀티 쓰레드

Thread 애플리케이션 코드를 하나하나 순차적으로 실행하는 것 쓰레드 한번에 하나의 코드라인만 수행 동시 처리가 필요하면 쓰레드를 추가로 생성해야 함 단일 요청(쓰레드 하나 사용) 하나의 쓰레드를 할당하여 서블릿(Servlet)에 요청을 보내 응답을 받는 구조 다중 요청이 들어올 경우 기존의 연결 된 요청과 새로운 요청 모두 안될 수 있음 멀티 쓰레드 요청마다 쓰레드 생성 장점 동시 요청을 처리할 수 있다. 리소스(CPU, 메모리)가 허용할 때 까지 처리가능 하나의 쓰레드가 지연 되어도, 나머지 쓰레드는 정상 동작한다. 단점 쓰레드는 생성 비용은 매우 비싸다.(요청이 들어올 때 마다 쓰레드를 생성하면, 응답속도가 느려진다.) 쓰레드는 컨텍스트 스위칭 비용이 발생한다. 쓰레드 생성에 제한이 없다.( 너무..

Study 2021.12.20

[백준] 10830 행렬 제곱 <Java>

문제 크기가 N*N인 행렬 A가 주어진다. 이때, A의 B제곱을 구하는 프로그램을 작성하시오. 수가 매우 커질 수 있으니, A^B의 각 원소를 1,000으로 나눈 나머지를 출력한다. 풀이 분할정복을 통해서 풀이를 하면 되는 문제다. 시간을 줄이기 위해서 A^4 = A * A * A * A 로 푸는 것이 아니라 A^4 = A^2 * A^2 의 방식으로 문제를 풀었다. 이때 문제가 되는것은 지수가 홀 수 일 경우다. A^5 = A^4 * A 와 같이 짝수의 거듭제곱에 기존의 A를 한번더 곱해주는 방식으로 구현을 하였다. 분할정복의 풀이에 맞게 재귀로 나눠주면서 가장 마지막에 도착했을 때 값을 곱해서 나아가는 방식으로 풀면된다. 기존의 합병정렬의 방식을 생각하면 편하다. 우선 위의 방식의 코드를 보여주면 st..

[백준] 1766 문제집 <Java>

문제 민오는 1번부터 N번까지 총 N개의 문제로 되어 있는 문제집을 풀려고 한다. 문제는 난이도 순서로 출제되어 있다. 즉 1번 문제가 가장 쉬운 문제이고 N번 문제가 가장 어려운 문제가 된다. 어떤 문제부터 풀까 고민하면서 문제를 훑어보던 민오는, 몇몇 문제들 사이에는 '먼저 푸는 것이 좋은 문제'가 있다는 것을 알게 되었다. 예를 들어 1번 문제를 풀고 나면 4번 문제가 쉽게 풀린다거나 하는 식이다. 민오는 다음의 세 가지 조건에 따라 문제를 풀 순서를 정하기로 하였다. N개의 문제는 모두 풀어야 한다. 먼저 푸는 것이 좋은 문제가 있는 문제는, 먼저 푸는 것이 좋은 문제를 반드시 먼저 풀어야 한다. 가능하면 쉬운 문제부터 풀어야 한다. 예를 들어서 네 개의 문제가 있다고 하자. 4번 문제는 2번 문..

[리트코드] 42. Trapping Rain Water <Java>

문제 https://leetcode.com/problems/trapping-rain-water/ Trapping Rain Water - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 풀이 내 풀이 : 왼쪽에서 부터 오른쪽으로 가장 최근에 높았던 높이에서 더 높은 높이를 만나면 그 사이의 값들의 높이차를 더해주었다. 위의 행동을 반대방향으로 한번 더 했다. 이 때, 주의할점은 같은 것을 두번 더하지 않기 위해 HashSet을 이용하여 문제를 풀었다. class S..