분류 전체보기 189

📑 SpringMVC_게시판_기능정리_국비

[ 조회수 증가 ] 생각보다 간단하게 구현할 수 있는 조회수 증가는 고려해야 할 오점이 하나 있다. 게시글을 클릭하기 했을 때마다 update로 조회수를 1씩 증가시키면 특정 게시물을 한 번만 보더라도 해당 게시물에서 새로고침을 할 때마다 무의미하게 조회수가 계속 올라간다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 @RequestMapping("view.do") public String view(Model model, int b_idx) { //b_idx에 해당되는 게시물 정보를 얻어온다 BoardVo vo = board_dao.selectOne(b_idx); //이 게시물을 안봤으면.. 증가시켜라 if(session.getAttribut..

📑 SpringLegacyProject(MVC)_이메일인증_ID/PWD찾기

지난 시간에 적용한 네아로를 이어서 이번에는 메일보내기 Api를 사용해보고자 한다. 원래는 휴대폰 인증을 하고 싶었지만,, 유료서비스이기 때문에 메일 보내기로 대체해서 사용자 인증을 진행해보고자 한다. 필자의 프로젝트 내에서 이메일이 유니크이기 때문에 이메일을 가지고 아이디를 찾고, 찾은 아이디와 이메일이 동일한 사용자로 매핑되는 경우 메일로 인증번호를 보내고 비밀번호를 찾고 변경할 수 있도록 구현하고자 한다. 이메일 인증은 생각보다 간단하니 바로 진행해보자. 1. 환경설정(pom.xml) 두 개의 라이브러리를 pom.xml파일에 추가해야 한다. 이때 중요한 것은 spring-context-support의 버전은 독자가 사용하고 있는 springframework버전과 반드시 동일하게 해야 한다. [ ro..

📑 SpringLegacyProject(MVC) Naver Login

국비지원 학원도 수료가 3주정도 남았다,, 굉장히 길다고 생각했던 6개월이 어느 순간에 휙하고 지나간 기분이다. 그래도 마지막까지 열심히하기 위해 오늘은 필자가 진행중인 최종프로젝트에 Naver 소셜 로그인을 진행한 부분을 소개하려고 한다. 가장 먼저 네아로 API를 사용하기 위해 어플리케이션을 등록해야 하기 때문에 천천히 진행해보자. 1. 어플리케이션 등록 https://developers.naver.com/main/ NAVER Developers 네이버 오픈 API들을 활용해 개발자들이 다양한 애플리케이션을 개발할 수 있도록 API 가이드와 SDK를 제공합니다. 제공중인 오픈 API에는 네이버 로그인, 검색, 단축URL, 캡차를 비롯 기계번역, 음 developers.naver.com 네이버 아이디로..

📑 SpringLegacyProject_SpringSecurity적용하기

오늘은 Spring Legacy Project에서 Spring Security를 적용해보기 위해 환경설정부터 간단한 실습을 진행해보도록 하겠다. 기본적으로 oracle, eclipse, tomcat, spring sts가 설치되어있다는 가정 하에 진행하겠다. 먼저 Spring MVC 프로젝트를 생성해보자 . 패키지 네이밍 룰에 맞춰서 자유롭게 작성하도록 하자. 생성한 프로젝트를 우클릭하여 Run as -> Run on server를 클릭해서 등록한 톰캣으로 실행을 해주자. 실행을 하면 home.jsp가 실행되는데 아래의 코드를 추가하면 인코딩이 맞게 되어 한글이 깨지지 않는 결과가 나온다. 아래의 이미지를 보았다면 기본적인 프로젝트 셋팅은 완료되었다. server.xml에서 path를 수정하자. 이제 S..

📑 국비_Day90

XML데이터 파싱하기 [ drink.xml ] 1 2 3 4 5 6 7 8 9 흰우유 바나나우유 딸기우유 초코우유 메론우유 cs [ test_drink.html ] 데이터타입을 xml로 읽어오면 위의 xml파일을 읽어서 배열로 반환되어 data에 담기게 된다. 21-22행의 주석을 참고하여 파싱하는 방법을 익혀보자 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 Insert title here function result(){ $("#result").empty(); $.ajax({ url : 'drink.xml', dataType:'xml'..

📑 Spring기초_Day6_웹 개발 모델

[ 모델 1 ] 크롬이나 익스플로어같은 브라우저를 사용하여 네이버에게 Request(요청)을 하면 JSP파일안에서 DB와 연동하여 데이터를 가공하고 사용자에게 Response(응답)한다. JSP에서 비즈니스 로직(로그인 요청을 했을때, 입력한 아이디와 비밀번호가 DB에 있는지 확인하는 작업 등), View 모두 처리(로그인 이후에 보여지는 화면) 구조가 단순하여 익히기 쉬움 구현이 익숙하고, 작은 단위의 어플리케이션에 적합 출력을 위한 뷰와 로직 처리를 위한 자바 코드가 섞여 있기 때문에 JSP 코드의 복잡성이 증가 -> 스파게티 코드 업무 분업이 어려움 JSP가 모든 일을 담당한다. [ 모델 2 ] JSP에서 모든 것을 담당하던 모델1 방식과 달리 뷰를 담당하는 JSP페이지와 비즈니스 로직을 위한 서블..

📑 Spring_Day5_SpringLifeCycle

Life Cycle = 생명주기, 생애주기 = 시작부터 끝까지 스프링 컨테이너의 생명주기 스프링 컨테이너 생성 스프링 컨테이너 설정 스프링 컨테이너 사용 스프링 컨테이너 종료 Bean Life Cycle 관리방법 인터페이스를 통한 구현(지정된 메서드명을 사용해야 한다. 스프링에서만 사용가능하다.) Bean 정의 시 메소드 지정(내가 원하는 메서드명을 사용할 수 있다. 스프링에서만 사용가능하다.) 어노테이션 지정(스프링이 아닌 컨테이너에서도 사용가능하다.) 세 가지의 경우의 수를 하나의 클래스에서 사용하지는 않겠지만 만약 그렇다면 어노테이션 -> 인터페이스 -> 메소드 지정 순서로 실행된다. 어플리케이션 설계와 프로젝트 특성에 맞게 사용 [ AOP가 적용된 어플리케이션 구현 방식 ] [ AOP 용어 ] A..

📑 Spring_Transaction_국비_Day89

더보기 감시 지점을 지정하는 것 - PointCut, 지점의 정보를 가지고 있는 것 - JoinPoint [ Spring Transaction ] DML명령중에서 Select문을 제외한 나머지만 명령이 실행되고, 바로 DB에 저장되는 것이 아니고, Transaction Log에 저장되었다가, 커밋 또는 롤백이 된다. 이는 DML명령이 실행되다가 중간에 에러가 나서 앞에 실행한 명령은 수행되고, 에러 이후에 명령은 수행되지 않는 결과를 방지하기 위함이다. 이러한 성질을 All or Nothing 즉, 모든 DML이 커밋되거나, 하나라도 잘못되면 모두 취소하거나(roll back)이라고 한다. 가장 간단한 예를 들면 결제에서의 트랜잭션을 생각해볼 수 있다. 간단한 결제의 과정을 보면 사용자가 단가가 5000..

📑 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를..