전체보기
[스프링] 커뮤니티 관리자 페이지
Spring farmework로 구현한 , 커뮤니티 IceWater의 마지막 기능이다. 이제 AWS를 이용해 배포를 하면 끝이다. 처음부터 관리자페이지는 회원관리 외의 기능을 생각하지 않고 구현해서 간단하다. 회원목록, 회원정지 (기간설정) , 포인트부여, 관리자 지정, 회원삭제, 공지사항 목록, 공지사항 등록 , 해제 기능이다. 따로 어려운 부분은 없고, 그냥 쿼리에 입력값을 받아서 처리하는 부분뿐이라 설명은 생략하겠다.. Mapper.xml update MP_MEMBER set MEMBER_RANK = 1 where MEMBER_ID = #{memberId} SYSDATE ]]> select MEMBER_SANCTIONTIME from MP_MEMBER where MEMBER_ID = #{member..
[스프링] 소셜로그인 구현 - 네이버
이번엔 소셜로그인을 구현했다. 이제 관리자 페이지만 만들면 커뮤니티 프로젝트가 마무리 된다. 마지막으로 AWS EC2로 배포를 하고, 프로필이미지나 첨부파일 기능을 위한 로컬위치 변경과 몇가지 설정을 해주면 끝이다. 네이버 개발자센터로 가서 API 이용설정 Service URL 설정 Callback URL설정 을 해준다. Service URL은 http://localhost:8080로 적어줬고, callback URL은 로그인 연결시 , 호출할 URL을 적어주자. 로그인이 연결되어 데이터가 넘어오면 URL로 컨트롤러에서 해당값을 받아서 DB에 insert하거나, select해서 이미 insert되있다면 세션값을 줘서 로그인 시키는 등의 방법으로 활용하면 되겠다. Pom.xml com.github.scri..
[스프링] 커뮤니티 알림목록
전 글의, 웹소켓을 이용한 실시간 푸시알림과 같이 구현한 기능이다. 웹소켓의 값을 이용해 db에 저장되게 하기엔 지금 프로젝트를 마무리 할 시간에 너무 촉박하고, 아직은 웹소켓 사용에 익숙해지지 않았기 때문에 , ajax를 이용해서 구현했다. 뷰 var memberId = ${login.memberId}; //알람목록 function alramList(){ console.log("alramList") var memberId = "${login.memberId}"; $.ajax({ url : '/board/alramList', type : 'get', data : {'memberId' : memberId }, dataType : "json", success : function(data){ var a='';..
[스프링] 커뮤니티 실시간 푸시알림 - 웹소켓
이번엔 커뮤니티 실시간 푸시알림을 구현했다. 일단 대략적인 기능 설명을 해보자면, 커뮤니티 전역에서 사용하는 Header include 부분에 웹소켓기능을 추가해서, 로그인하면 어느부분에서든 실시간으로 웹소켓이 연결이되고, 글작성자의 글에 댓글, 좋아요, 스크랩, 댓글작성자의 댓글에 좋아요,채택 등의 로직이 일어났을 때, 작성자에게 푸시알림이 가고, 알림들을 모아놓고 볼 수 있는 모달창에서 최대 6까지 알림을 볼 수 있고( 최신순 ) 모달창의 버튼에는 알림이 몇개 왔는지 개수가 보이고, 알림을 클릭해서 해당하는 게시글에 들어갈때, 같은 게시글의 알림들은 모두 한번에 없어진다. 푸시알림은 웹소켓을 이용해서 만들었으며, 알림확인 부분은 ajax를 이용해서 만들었다. 웹소켓에 전해지는 이벤트의 데이터를 이용해..
[스프링] 메인페이지,인기글 구현 (블라인드 참고)
이번엔 블라인드처럼 메인페이지를 꾸며보았다. 토픽베스트에는 내 프로젝트에 맞춰서 글작성 후 7일 미만의 게시물 중 , 가장 높은 추천수를 받은 게시글순으로 출력, 아래의 카테고리별 베스트는 2일미만의 게시물 중 추천수 순으로 출력한다. 기능상으로는 어느정도 비슷하게 구현이 됐지만, 디자인이..ㅜㅜ 눈물이다.. 원래 디자인은 생각을 많이 하지 않고 기능적인 구현을 우선한 프로젝트지만 , 결국 완성하고 나면 디자인이 이뻐야 같은 기능이라도 더 돋보이게 되는 것 같다. 다음 프로젝트는 무조건 좋은 템플릿을 선정해서 꾸며보려고 한다. 일단 토픽베스트이다. Mapper.xml SELECT a.BNO, a.TITLE, a.CONTENT, a.WRITER, a.REGDATE, a.HIT, a.REPLYHIT, a.B..
Uncaught ReferenceError: * is not defined 에러 : AJAX
AJAX 로 구현한 좋아요 , 채택 , 싫어요 기능이 새로 회원가입한 아이디로 클릭 시 Uncaught ReferenceError: * is not defined 에러가 발생하면서 버튼이 먹히질 않았다... 참 이상한건 이미 가입해놓았던 회원들은 기능이 정상작동 한다는 것... Controller에 파라미터 로그를 찍어보니 필요한 파라미터의 값들 중, ID (String) 값이 null이 찍혔다. 그래서 프론트에서 해당 파라미터를 화면에 출력되도록 했더니 , 값이 제대로 출력. 그렇다면 뷰에서 컨트롤러로 넘어갈때 , 뷰에서 제대로 파라미터를 전송하지 못한다는 것이다. 이것저것 두시간가량 만져본 결과 Id값이 Number 타입으로 찍히는 것 이였다..... 원래 가입해있던 아이디는 2222 , 3333 등..
Mybatis에서 null값 허용하기
기능 구현을 하다보면 , mybatis에서 insert나 update시 , 컬럼에 null값이 들어가게 해야 할 때도 있는데, 이때 그냥 쿼리문을 작성하면 NullPointException 에러가 뜬다. insert 문의 values 에 #{property , jdbcType=int } #{property , jdbcType=varchar2} 이런식으로 , 파라미터 뒤에 해당 컬럼의 데이터타입을 선언해준다 ! 대소문자 구분 주의 그럼 insert시 null값이 들어간다.
[스프링] 회원 프로필사진 수정 , 등록
이번에 구현할 것은 회원 프로필사진 등록, 및 수정이다. 미뤄왔던 회원 프로필 사진을 드디어 해결했다. 먼저 , 게시판에 사진 등 첨부파일을 등록할 때에는 파일테이블에 게시글PR 이나 파일의 오리지널 NAME 등, 몇가지의 컬럼이 들어가는데, 회원 프로필 사진은 회원테이블에 오직 로컬에 저장 된 파일명 (저장NAME) 만 저장하면 된다. 그래서 기존에 List> 으로 넣어주던 방식에서 String으로 리턴타입을 지정해 , 간단하게 구현했다. [스프링]게시판 첨부파일 업로드 구현 설명(insert) (1) :: 간편 웹프로그래밍 (tistory.com) [스프링]게시판 첨부파일 업로드 구현 설명(insert) (1) 오라클,스프링프레임워크 기준입니다. 먼저 파일추가에 필요한 테이블을 추가해준다. CREAT..
[스프링] 마이페이지 구현 - 회원 활동로그와 작성한 게시글,댓글,스크랩 목록
이번엔 마이페이지로 이동해서 , 그곳에서 회원 활동로그와 작성한 게시글,댓글,스크랩 목록을 볼 수 있도록 구현했다. OKKY 사이트처럼 다른사람도 그 정보를 닉네임을 클릭하는 등의 행위를 통해서 볼 수 있도록 만들었다. 다른 커뮤니티처럼 내 정보는 따로 검색을 하거나 등을 제외하면 나만 볼 수 있도록 할까... 생각을 했지만 IT커뮤니티이니 만큼 (?) 이상한 짓을 못하도록 그냥 모든 정보를 회원들이 서로 볼 수 있도록 만들었다. 실제로 나도 OKKY 커뮤니티를 사용하면서 다른 커뮤니티들과 다른 그런 정보공개?가 처음에는 낯설었지만 꽤나 괜찮다는 생각을 받기도 했다. 단, 너무 행동에 조심하게? 되는 부분에 대해 게시글과 댓글을 삭제하면 활동로그가 아예 삭제되도록 구현해서 해당 부분을 보완했다. 일단 해..
[스프링]게시판 스크랩기능 구현
이번엔 스크랩 기능을 구현했다. 먼저, 마이페이지에서 내 활동로그와 스크랩한 게시글을 볼 수 있도록 만들었는데 그 전에 스크랩 기능을 먼저 구현했다. 스크랩의 정보를 저장할 테이블을 생성하고 , 게시글PR , 회원PR과 DATE를 저장한다. create table MP_SCRAP ( SCRAPNO number not null, MEMBER_ID varchar2(50) not null, BNO number not null, SCRAPDATE date default sysdate, constraint scrap_pk PRIMARY key (SCRAPNO), constraint scrap_fk FOREIGN key (MEMBER_ID) references MP_MEMBER(MEMBER_ID) on delete..