분류 전체보기 193

📑 Spring_AOP_국비_Day87

[ AOP의 개요 ] 서비스 개요 객체지향 프로그래밍(Object Oriented Programming)을 보완하는 개념으로 어플리케이션을 객체지향적으로 모듈화 하여 작성하더라도 다수의 객체들에 분산되어 중복적으로 존재하는 공통 관심사가 여전히 존재한다. AOP는 이를 횡단관심으로 분리하여 핵심관심과 엮어서 처리할 수 있는 방법을 제공한다. 로깅, 보안, 트랜잭션 등의 공통적인 기능의 활용을 기존의 비즈니스 로직에 영향을 주지 않고 모듈화 처리를 지원하는 프로그래밍 기법 OOP의 단점 : 예를 들어 로깅처리를 위해 특정 메서드의 수행 시간을 측정하려고 할 때, 객체 지향 프로그래밍은 객체를 기반으로 프로그래밍 하기 때문에 같은 결과를 도출하는 중복된 코드를 모든 클래스에 작성해야 한다. 이는 이후에 수행..

📑 Spring_국비_Day86

이후에 스프링 부트를 사용하게 되면 모든 의존성 주입이 자동으로 이루어지게 된다. 하지만 처음으로 스프링을 학습할 때는 이 xml파일을 통해 무슨 객체가 생성이 되고, 의존성이 어떻게 주입되는지 이해를 하고 사용하기 위해서 적응이 되기 전까지는 수동으로 생성해서 직접 의존성을 주입해준다. 기본적으로 생성자 주입과 세터 주입방법이 있다. 이론상으로는 생성자 주입이 속도적인 면에서 조금 더 빠르고 효율적이라고 한다. 쉽게 생각해보자. 객체를 생성할 때 가장 먼저 실행되는 것이 무엇인가? 맞다 생성자가 먼저 실행되고, 그 내부에 있는 멤버변수에 접근하기 위해 세터메서드를 실행한다. 하지만 생각해보면 스프링에서 생성하는 객체는 소스코드가 드러나진 않지만, 싱글톤의 구조를 가지고 있다. 가장 처음 프로젝트를 실행..

📑 BFS_5547_일루미네이션_육각행렬

최근에 네이버 공채를 지원해보고, 코딩테스트를 보았다. 나름 준수하게 푼 것 같긴 한데, 생각보다 애먹었던 내용과 비슷했던 문제를 다시 풀어보고자 한다. 너비우선탐색을 진행하는데, 실제탐색은 2차원 배열로 진행하지만, 각 요소가 익숙했던 정사각형이 아닌 정육각형으로 이질감이 있게 생겼다. 물론 이에 따라서 이동가능한 경우의 수도 (상, 하, 좌, 우) 4가지에서 (좌, 좌상, 좌하, 우, 우상, 우하)6가지로 바뀌었다는 점, 더불어 현재 행이 짝수인지, 홀수인지에 따라서 이동하는 위치가 다르다는 것이다. 말로만 설명하면 어려우니 간단한 예시를 보자. 문제에서 예시로 주어진 그림을 보면 척 봐도 모든게 복잡하다. 일단 그림부터도 불편하긴 한데, 행과 열이 거꾸로 되어 있기까지 하다니,,, 하지만 이는 모양..

📑 SpringFileUpload_국비_Day86

오늘은 스프링 레거시 프로젝트에서 파일 업로드 기능을 사용하는 방법을 배웠다. 모델2에서 학습한 실습 예제를 스프링 레거시 프로젝트로 변경하는 작업을 진행하고 있는데, 생각보다 어려웠는데 오늘 배움으로써 말끔히 해결되었다. 알다시피 파일 업로드를 사용하기 위해서는 파일 업로드를 처리해주는 전용 객체(MultipartRequest)를 사용해야 한다. 이를 스프링이 사용할 수 있도록 객체를 만들어 주어야 하는데 기본적인 스프링 DB환경설정을 마친 상태에서 DispatcherServlet이 참고하는 파일에 아래의 소스코드를 추가하도록 하자. 더보기 1 2 3 4 5 6 Colored by Color Scripter cs 위의 소스코드를 추가했다면, pom.xml에 CommonsMultipartResolver를..

📑 SpringMVC_DB_국비Day84

[ Spring MyBatis환경설정 ] ★ spring이 contextLoaderListener객체를 생성하면, contextLoaderListener이 객체가 ds, factoryBean, sqlSession 빈을 생성하고 의존성 주입까지 해준다. 1. src/main/resources 폴더에 config.spring.context 패키지를 추가한다. spring에서 DB를 사용하기 위해서는 DI를 위해 여러가지 환경설정 xml파일이 필요하다. 이를 하나의 root-context.xml 파일에 모든 DB 환경설정 정보를 만들면 후에 일일히 찾아서 유지보수가 어렵기 때문에 따로 패키지를 만들어서 분류한다. 물론 새로운 환경 설정을 만들것이기 때문에 root-context.xml파일은 삭제할 것이다. s..

📑 BFS_16236_아기상어

https://www.acmicpc.net/problem/16236 16236번: 아기 상어 N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가 www.acmicpc.net 문제를 풀기 위한 조건이 많기도 하지만 조건을 맞추기가 굉장히 까다로웠다. 충족해야 하는 조건을 크게 잡아보면 아래와 같다. 최단거리 탐색 방법 최단거리하면 떠오르는 알고리즘은 단연 다익스트라가 먼저일 것이다. 하지만 모든 간선의 가중치가 1인 경우에는 더 효율적인 BFS가 있기 때문에, BFS를 활용해서 풀이해보도록 하자. 거리가 같은 경우 우선순위가 높은 물고기를 잡으러 가는 방법 가장..

📑 SpringMVC_Parameter_국비_Day83

* 일반적인 다이나믹 웹 프로젝트는 contextPath가 프로젝트 이름이 되지만, spring legacy프로젝트는 초기에 프로젝트를 생성하는 경우 설정한 최상위 패키지가 com.ict.myapp이라고 한다면, myapp이 contextPath가 된다. [ Spring MVC Request LifrCycle ] 사용자의 요청 -> Filter -> DispatcherServlet(Main Controller) -> 전처리(파일에 대한 전처리) -> HandlerMapping (요청에 담긴 URL을 보고 작업을 분류한다.) -> HandlerInterceptor(실제 작업 처리를 진행하기 전에 보안 처리, 로그인 여부 확인 등) -> Handler(action controller), buisnesslog..

📑 SpringCollection_국비Day82

[ 스프링으로 Collection을 만들어서 주입해보기 ] 생성자 주입 방법을 사용한다면, 기본 생성자와 오버로드 생성자를 그리고 클래스내의 멤버 변수가 하나라도 있다면 게터/세터 메서드는 반드시 생성해야 한다. 세터 주입방법을 이용한다면 게터/세터메서드를 반드시 생성해야 한다. 필자는 세터 주입 방법을 사용하여 ArrayList를 생성해 주입하는 예시를 보여주겠다. [ ArrayList ] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 ..

📑 BFS_16234_인구이동

https://www.acmicpc.net/problem/16234 16234번: 인구 이동 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모 www.acmicpc.net 오늘부터는 본격적으로 코딩테스트를 준비하기 위해서 그래프 탐색문제를 집중적으로 풀이해보려 한다. 오늘 풀이해볼 문제는 골드5문제로 너비우선 탐색을 이용해서 구현을 하는 문제이다. 문제만 보면 조금 복잡해 보일 수 있지만, 예시에 친절하게 나와있기 때문에, 인구이동이 일어나는 날에 필요한 작업을 해주고, 최종적으로 인구이동이 일어난 날을 반환하는 것이다. 천천히 단계적으로 풀이를 해보..

📑 Spring학습_Day4_AOP

AOP(Aspect Oriented Programming) 관점지향 프로그래밍 Aspect: 어플리케이션의 핵심 기능은 아니지만 어플리케이션을 구성하는 중요 한 요소이고, 부가적인 기능을 담당하는 요소 쇼핑몰에서 물건을 구매하고, 장바구니에 담는 기능은 핵심 기능이라고 할 수 있다. 특정 사용자가 무슨 물건을 사고, 언제 구매를 했고, 낮 시간에는 어떤 연령대가 많이 접속하는지에 대한 정보는 핵심 기능이 아닌 부가적인 기능이다. 굳이 쇼핑몰이 아니더라도 다른 어플리케이션에서도 사용할 만한 정보 즉, 부가적인 기능은 스프링에서 만들어줄테니 핵심적인 기능만을 집중해서 만들도록 지원해주는 것이다. 어플리케이션의 핵심적인 기능에서 부가적인 기능을 분리해서 Aspect 모듈로 만들어서 설계하고 개발하는 방법 OO..

📑 Spring_국비Day81

프레임워크는 기본 틀을 만들어 놓은 상태에서 이 틀과 나의 코드를 조립하여 완성하는 것이다. 따라서 나의 코드를 Spring에서 준비해준 기본 틀과 알맞게 조립하기 위해서는 기본 틀을 이해할 필요가 있다. [ 스프링의 개요 ] Spring 프레임워크는 JavaEE 기반의 어플리케이션 개발을 쉽게 해주는 오픈소스 어플리케이션 프레임워크로, 간단한 자바 객체(POJO : Plain Old Java Object) 를 Spring의 경량(Lightweight) 컨테이너를 통해 생성 및 관리하는 빈(Bean) 으로 처리해준다. Spring이라는 이름의 기원은 전통적인 J2EE를 “겨울”에 빗대어 “겨울” 후의 “봄”으로 새로운 시작을 의미함 Rod Johnson이 창시한 개발프레임워크 EJB가 제공했던 대부분의 ..

📑 DispatcherServlet

src/main/java에 annotation, controller, filter폴더를 복사 WEB-INF에 web.xml복사 메인 컨트롤러는 DisPatcherServlet(사용자 요청을 최초로 받고, 이를 분석해서 적당한 컨트롤러에게 작업을 지시)이다. 이 컨트롤러가 작업을 지시할 컨트롤러(실제로 일을 하는 컨트롤러)를 초기에 메인 컨트롤러가 생성될 때 함께 생성한다. 이를 자동으로 하게 만드려고 web.xml파일에 init-param을 지정하는 것이다. 원리를 아는 것도 중요하지만 사용방법을 익혀라! 프레임워크 초기 실행 (혹은 restart) DispatcherServlet 생성 DispatcherServlet init() web.xml에 있는 태그에 정의된 값을 읽어옴 DispatcherServ..